def test_modified_url_encoding():
····class ModifiedRequest(wrappers.Request):
········url_charset = 'euc-kr'
····req = ModifiedRequest.from_values(u'/?foo=
····strict_eq(req.args['foo'], u'
Как правило, чтение тестов позволяет более подробно ознакомиться с возможностями библиотеки. Теперь понятно, для чего нужна библиотека Werkzeug, поэтому можно двигаться дальше.
Tox (https://tox.readthedocs.io/) — инструмент командной строки, который использует виртуальные среды для запуска тестов. Вы можете запускать их на своем компьютере (tox в командной строке), если установлены интерпретаторы Python. Интегрирован с GitHub, поэтому, если у вас есть файл tox.ini на высшем уровне репозитория, как у Werkzeug, он автоматически будет запускать тесты при каждом коммите.
Рассмотрим конфигурационный файл Werkzeug tox.ini целиком:
[tox]
envlist = py{26,27,py,33,34,35}-normal, py{26,27,33,34,35}-uwsgi
·
[testenv]
passenv = LANG
deps=
# General
····pyopenssl
····greenlet
····pytest
····pytest-xprocess
····redis
····requests
····watchdog
····uwsgi: uwsgi
·
# Python 2
····py26: python-memcached
····py27: python-memcached
····pypy: python-memcached
·
# Python 3
····py33: python3-memcached
····py34: python3-memcached
····py35: python3-memcached
·
whitelist_externals=
····redis-server
····memcached
····uwsgi
commands=
····normal: py.test []
····uwsgi: uwsgi
···········-pyrun {envbindir}/py.test
···········-pyargv — kUWSGI — cache2=name=werkzeugtest,items=20 — master
Примеры стиля из Werkzeug
В главе 4 мы уже рассмотрели большую часть принятых соглашений по стилю. Первый пример стиля в этом разделе демонстрирует элегантный способ угадать типы на основе строки, второй показывает, что вы можете использовать параметр VERBOSE при определении длинных регулярных выражений, поэтому другие пользователи смогут понять, что делает выражение, не затратив на это много времени.
Вам, скорее всего, приходилось анализировать текстовые файлы и преобразовывать содержимое к разным типам. Это решение выглядит особенно питонским, поэтому мы включили его в книгу.
Если вы используете в своем коде длинные регулярные выражения, не забывайте про параметр re.VERBOSE[69] — сделайте их более понятными для других людей. Пример регулярных выражений показан во фрагменте файла werkzeug/routing.py:
import re
····_rule_re = re.compile(r'''
····(?P
····<
····(?: