mezzanine 4.2.2 から 4.2.3 にupdateした話


mezzanine が 2017/03/10 に4.2.3version upしたので、
当ブログのmezzanine4.2.2から4.2.3update してみました。

実施したことを備忘として残します。1
[1] ほぼ、文書体裁が前回update時と同じ..です。

0. 前提

以下の環境で実行しています。

  • OS
    CentOS release 6.7 (Final)

  • Python Version
    Python 2.7.8

  • Package (必要そうなものだけ抜粋)
    Django (1.10.5)
    Mezzanine (4.2.2)


1. UPGRADE

現状Versionの確認

  • UPGRADE 前の pip list
    [0.]の内容とも重複しますが、UPGRADE前の構成情報になります。
pip list
------------------------------------
beautifulsoup4 (4.5.3)
bleach (1.5.0)
chardet (2.3.0)
Django (1.10.5)
django-appconf (1.0.2)
django-braces (1.10.0)
django-compressor (2.0)
django-contrib-comments (1.7.3)
django-crontab (0.7.1)
django-filter (1.0.1)
django-grappelli (2.8.1)
django-htmlmin (0.9.1)
django-mobile (0.7.0)
django-oauth-toolkit (0.11.0)
django-request (1.5.1)
django-rest-swagger (0.3.10)
django-robots (2.0)
django-sites (0.9)
djangorestframework (3.5.3)
filebrowser-safe (0.4.6)
funcsigs (1.0.2)
future (0.16.0)
grappelli-safe (0.4.5)
html5lib (0.9999999)
importlib (1.0.3)
Markdown (2.6.7)
Mezzanine (4.2.2)
mezzanine-api (0.5.0)
mezzanine-pagedown (1.0)
mezzanine-pubsubhubbub-pub (0.0.3)
mock (2.0.0)
oauthlib (2.0.1)
olefile (0.44)
pbr (1.10.0)
Pillow (4.0.0)
pip (9.0.1)
psycopg2 (2.6.1)
Pygments (2.0.2)
python-dateutil (2.6.0)
pytz (2016.10)
PyYAML (3.12)
rcssmin (1.0.6)
requests (2.12.4)
requests-oauthlib (0.7.0)
rjsmin (1.0.12)
setuptools (32.3.1)
six (1.10.0)
tzlocal (1.3)
wheel (0.26.0)
------------------------------------

UPGRADE

pip install Mezzanine -U
------------------------------------
Successfully installed
Mezzanine-4.2.3
appdirs-1.4.3
bleach-2.0.0
django-1.10.6
django-contrib-comments-1.8.0
filebrowser-safe-0.4.7
grappelli-safe-0.4.6
html5lib-0.999999999
packaging-16.8
pyparsing-2.2.0
requests-2.13.0
requests-oauthlib-0.8.0
setuptools-34.3.2
webencodings-0.5
------------------------------------

2. check コマンドによる確認

python2.7 manage.py check
-----------------------------------
System check identified no issues (0 silenced).
-----------------------------------

特に問題なさそうなので、サーバーを再起動してみます。


3. サーバー 起動後の確認

service httpd restart

再起動後に、画面表示したところ以下のエラーが発生しました。

  File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 1044, in render
    output = self.filter_expression.resolve(context)
  File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 739, in resolve
    new_obj = func(obj, *arg_vals)
  File "/usr/local/lib/python2.7/site-packages/mezzanine/core/templatetags/mezzanine_tags.py", line 473, in richtext_filters
    content = filter_func(content)
  File "/usr/local/lib/python2.7/site-packages/mezzanine_pagedown/filters.py", line 42, in custom
    extensions=settings.PAGEDOWN_MARKDOWN_EXTENSIONS))
  File "/usr/local/lib/python2.7/site-packages/mezzanine_pagedown/filters.py", line 12, in _clean
    strip_comments=False, styles=styles)
  File "/usr/local/lib/python2.7/site-packages/bleach/__init__.py", line 77, in clean
    return cleaner.clean(text)
  File "/usr/local/lib/python2.7/site-packages/bleach/sanitizer.py", line 146, in clean
    allowed_svg_properties=[],
  File "/usr/local/lib/python2.7/site-packages/bleach/sanitizer.py", line 228, in __init__
    self.attr_filter = attribute_filter_factory(attributes)
  File "/usr/local/lib/python2.7/site-packages/bleach/sanitizer.py", line 194, in attribute_filter_factory
    raise ValueError('attributes needs to be a callable, a list or a dict')

プラグイン akhayyat / mezzanine-pagedown — Bitbucket のfilterの処理で、
エラーになっているようです。
bleach というライブラリが 1.5 から 2.0 へversion が上がっているからかと思い、
情報がないか捜したところ、以下の issue を見つけました。

以下のように、tuple からlist に変換する処理が実装されていたので、

    if isinstance(attrs, tuple):
        attrs = list(attrs)

mezzanine_pagedown/filters.py にも似た様な処理を組み込みました。

  • mezzanine_pagedown/filters.py
def _clean(html):
    tags = settings.RICHTEXT_ALLOWED_TAGS
    attrs = settings.RICHTEXT_ALLOWED_ATTRIBUTES
    styles = settings.RICHTEXT_ALLOWED_STYLES
    # -----------------------
    # bleach の version が 2.0 以上で、RICHTEXT_ALLOWED_ATTRIBUTES が tuple の場合、list に変換する
    # ---------------
    if LooseVersion('2.0') <= LooseVersion(bleach.__version__) and isinstance(attrs, tuple):
        attrs = list(attrs)

    return clean(html, tags=tags, attributes=attrs, strip=True,
                 strip_comments=False, styles=styles)

これで、画面が表示されるようになりました。
mezzanine に限った話ではないですが、
version up 時は サードパーティのplugin は動かなくなりますね。
以上です。

コメント