URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 90455
[ Назад ]

Исходное сообщение
"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3.3"

Отправлено opennews , 16-Июн-13 09:06 
Армин Ронахер (Armin Ronacher), один из основателей Pocoo Team (http://www.pocoo.org/) и автор известного шаблонизатора для языка Python  Jinja2 (http://jinja.pocoo.org/), в своём блоге сообщил (http://lucumr.pocoo.org/2013/6/13/werkzeug-and-flask-releases/) о выходе новых версий библиотеки для работы с WSGI Werkzeug 0.9 (http://werkzeug.pocoo.org/) и легковесного веб-фреймворка Flask 0.10 (http://flask.pocoo.org/). Данные версии вышли после значительного перерыва (около года), но в дальнейшем автор предполагает выпускать релизы более часто. Длительная разработка объясняется существенными изменениями в коде, связанными с поддержкой Python версии 3 (точнее, Python 3.3, использование версий Python 3.0-3.2 настоятельно не рекомендуется), и с некоторыми изменениями в API (http://werkzeug.pocoo.org/docs/changes/#api-changes).


Примерно спустя сутки после анонса новых выпусков Werkzeug 0.9 и Flask 0.10, через свой twitter (https://twitter.com/mitsuhiko) автор сообщил о выходе корректирующих версий, с исправлением обнаруженных по горячим следам проблем) - Werkzeug 0.9.1 и Flask 0.10.1. Кроме того, для корректирующих выпусков Werkzeug (https://pypi.python.org/pypi/Werkzeug) и Flask (https://pypi.python.org/pypi/Flask) в репозитории готовых пакетов PYPI (https://pypi.python.org/) была присвоена метка "Programming Language :: Python :: 3". По информации регулярно обновляемого реестра (https://python3wos.appspot.com/), с наглядным представлением статуса поддержки Python 3 для 200 популярных пакетов, 10 июня 2013 года с третьей веткой Python готовы работать 122 пакета.


Ниже следует перевод объявления о новом выпуске:

<blockquote>

Что было "сломано" по сравнению с предыдущими версиями

Начнём с неприятных вещей. Вероятно, ваш код, написанный с использованием предыдущих версий Werkzeug будет (слегка) поломан. Это было необходимо, так как часть функций не полностью обеспечивают выполнение обновлённой спецификации PEP 3333 (http://www.python.org/dev/peps/pep-3333/). Данные нарушения обратной совместимости большей частью ограничены модулем werkzeug.urls, а также структурами данных Headers и EnvironHeaders. Теперь вы заметите, что заголовки всегда возвращаются в Unicode, декодированными из latin1, а модуль URLs прозрачно объединяет в себе обе разновидности представления URL-адресов - URI (http://ru.wikipedia.org/wiki/URI) и IRI (http://ru.wikipedia.org/wiki/IRI).


Кроме того, объект Headers теперь не может по-старому, через метод класса linked, на месте изменять заголовки WSGI. Это было необходима для того, чтобы избежать слишком сложной реализации, и чтобы не менять логику PEP 3333, при этом добившись приемлемой производительности.


Flask "поломан" в меньшей степени, но кое-что всё равно следует учесть. Были произведена чистка внутренних частей кода, в первую очередь вы заметите другую сериализацию JSON фильтра |tojson и другие правила безопасности HTML. Если у вас есть тесты, полагающиеся на старое поведение, вам придётся их поправить.

До свидания, Python 2.5


Плохие новости для тех, у кого Python версии 2.5: ваша версия более не поддерживается. Это пришлось сделать, чтобы продвинуться в сторону версии с поддержкой Python 3. Так как Python 2.5 был выпущен около 7 лет назад, самое время двигаться дальше.

Привет, Python 3


Есть и положительная сторона - поддержка Python 3. Точнее, Python 3.3 и выше. Для приложений Werkzeug портирование на Pyhton 3 может стать не совсем тривиальным, зато приложения Flask должны заработать "из коробки", при условии, если расширения Flask также уже портированы. Например, все примеры из документации Flask работают из коробки, без необходимости изменения кода - как под 2.x, так и под 3.x (за исключением тестов моделей).

Заметные изменения


Кроме уже указанных изменений, есть и такие, от которых вы, как надеется автор, получите истинное удовольствие:

-  
Werkzeug:


-  Теперь Werkzeug сохраняет уведомления о причинах возникновения ошибок (traceback) в приватных разделах GitHub (gists).-  Некоторые небольшие улучшения, связанные с улучшением использования классов исключений HTTP в Werkzeug. Теперь они несут некоторую полезную нагрузку, избегая аварийного завершения работы при возникновении исключений.-  Модуль URL значительно улучшил поддержку IRI, теперь он может корректно обрабатывать и присоединять URL-адреса. На текущий момент, эта поддержка преднамеренно реализована с нарушением RFC, в целях лучшего покрытия случаев из реальной жизни и для поддержки разбора неизвестных схем.
В результате можно без лишних сюрпризов разобрать такие случаи, как sqlite:///foo.db.-  Werkzeug получил много полезных функций, обеспечивающих преодоление различий между PEP 333/PEP 3333 и WSGI версий 2.x и 3.x, включая доступ к потокам и URL-адресам.-  Внутренний парсер форм значительно улучшен и позволяет иметь доступ к потоку во всех случаях. Он также больше не полагается на длину контента, что наконец-то сделало возможным иметь дело с группами тел разбитых на части (chunked) запросов (http://en.wikipedia.org/wiki/Chunked_transfer_encoding).-&nb...Для большей гибкости при работе с формами, в качестве будущей замены для старых дескрипторов .data для запросов и ответов, введёны методы get_data. Это обеспечит большую гибкость при работе с данными форм.
В будущем, когда доступ к атрибутам объектов запроса и ответа будет работать в значительной мере без побочных эффектов, поддержка .data будет удалена.

-  
Flask:


-   Flask обзавёлся модулем json, который унифицирует поддержку JSON для Python 2.x и 3.x, а также расширяет её полезными помощниками (helpers). Он обеспечивает безопасные методы для получения дампов JSON в блогах скриптов в HTML, а также автоматически сериализует некоторые общие типы, такие, как UUID-ы и объекты "дата-время".-  Была проделана дальнейшая работа, чтобы сделать контекст приложения более заметным. Отображение шаблонов теперь может происходить только из контекста приложения, flask.g теперь также привязан к контексту приложения.
Это изменение может показаться крошечным, но на самом деле оно упрощает работу с Flask вне веб-среды. Например, теперь стало проще поддерживать соединения с БД, которые не привязаны к времени жизни запроса HTTP.
Для описания этого нового режима работы начато внесение изменений в документацию.-  Улучшена обработка внутренних ошибок Flask, с целью получения в случае их возникновения более логичной реакции. Также, у обработки ошибок появилось дополнительное преимущество - наконец, надёжно реализовано "при успехе - совершить, при ошибке - откатить".-  Исходя из необходимости обеспечения соответствия новому методу get_data в Werkzeug, введён метод get_json. Это подразумевает наличие в дальнейших планах одновременное удаление дескриптора .json.-  Добавлено несколько настроек конфигурации для изменения умолчаний при сериализации JSON. Сюда входят красивое форматирование и изменение порядка ключей. Теперь объекты JSON по умолчанию упорядочены по ключам, для решения проблемы с недействительными HTTP-кэшами из-за нового начального числа для генерации случайных хэшей.


Изменения в процессе разработки

В будущем, ход выпуска релизов будет изменён. Цель - вместо больших, формировать намного более частые релизы. В настоящее время Werkzeug, так как его API стал более стабильным, достиг точки, когда возможны частые выпуски новых версий без поломки пользовательского кода (в связи с появлением поддержки Python 3, этот релиз здесь является заметным исключением).

Благодарности

Наконец, Armin благодарит сообщество и особенно отдельных участников (http://lucumr.pocoo.org/2013/6/13/werkzeug-and-flask-release... за то, что оно сделало возможными эти новые выпуски. Огромное количество работы для этих выпусков было выполнено в рамках специально запланированных онлайн-мероприятий в течение майских выходных.
В данных выпусках количество коммитов "взлетело до небес". Хотя не все изменения из общего журнала могут выглядеть впечатляющими, основополагающие улучшения и чистка кода всё же существенна.
</blockquote>

URL: http://lucumr.pocoo.org/2013/6/13/werkzeug-and-flask-releases/
Новость: http://www.opennet.me/opennews/art.shtml?num=37186


Содержание

Сообщения в этом обсуждении
"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 09:06 
Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Фигов , 16-Июн-13 09:13 
Хороший повод не издеваться над трупом змеи.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 09:14 
> Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.

Ну, во-первых,  bottle.py уже давно поддерживает python 3.

А что касается смысла - сам над этим думаю, но пока причин не вижу. На python 3 раньше 2014 года тоже переходить не буду. Пусть 2014 год будет годом окончательного linux на десктопах и питона 3 в питонницах.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 09:27 
>> Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.
> Ну, во-первых,  bottle.py уже давно поддерживает python 3.

Точнее я уже использую Python 3.3, а не собираюсь на него переходить.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Xasd , 16-Июн-13 10:09 
мне кажется Flask хорош тем что он является запасным вариантом на случай если Bottle вдруг погибнет :) .

а если нужно что-то по-навороченее чем Bottle/Flask -- то есть Piramyd . и оно тоже работает на Python-3.X ..

...хотя Piramyd занимает в 2~4 раза больше оперативной памяти чем Bottle, в случае простейших HelloWorld-alike-страничках (и имеет дофига звисимостей.. что иногда не очень приятно)..


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 10:27 
По моему мнению, не претендующему ни на что, при всём богатстве и многообразии вебпаев один и два (если не брать узкопрофильные на мой взгляд вещи, как торнадо, твистед плюс черипай и и иже), есть только четыре достойных фреймворка чисто для веба на python:

bottle, flask, pyramid, django(-nonrel).

будем спорить? :)


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 12:32 
> bottle, flask, pyramid, django(-nonrel).

ИЧСХ, ни на одном из них не замечено ни единого сильного продукта.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 12:33 
> ИЧСХ, ни на одном из них не замечено ни единого сильного продукта.

"это не песня, это мантра"



"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 15:46 
Тебе, как специалисту по мантрам, виднее.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Xasd , 16-Июн-13 13:23 
> ни на одном из них не замечено ни единого сильного продукта.

в как его заметить? неужто кто-то подпишет "я сделал это на Bottle!"? :-)


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 13:42 
>> ни на одном из них не замечено ни единого сильного продукта.
> в как его заметить? неужто кто-то подпишет "я сделал это на Bottle!"? :-)

Кстати, а какая разница, кто чего сколько сделал? Главное - какие это возможности даёт. Я, например, вот этот твитер http://bug.51t.ru , когда мне понадобился, написал за 2 часа, от задумки до реализации, включая "дезаен". 125 строк: http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py понятный код, который я даже через 2 года разберу, всё приложение, кроме шаблонов - в одном файле. Что ещё нужно для счастья?

кстати, товарищи, мож кто подскажет, а то что-то сообразить не могу, как вот это счастье:

# http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l23
[uflt(k) for k in out]

# http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l116
def uflt(o):
   n = mydict()
   for k,v in o.items():
      if k != 'ip': n[k]=v
   return n

в одну строку завернуть? а то страшновато смотрится.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 13:51 
> # http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l23
> [uflt(k) for k in out]
> # http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l116
> def uflt(o):
>    n = mydict()
>    for k,v in o.items():
>       if k != 'ip': n[k]=v
>    return n
> в одну строку завернуть? а то страшновато смотрится.

можно сделать [k.update(ip='hidden') for k in out], но это будет влиять на out, насколько я понимаю.

хотя не, это вообще не работает, k.update возвращает null :(


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено letitbee , 16-Июн-13 15:48 
>[оверквотинг удален]
> вот это счастье:
> # http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l23
> [uflt(k) for k in out]
> # http://hg.51t.ru/twi-json/file/b7aefc8f4ce5/run.py#l116
> def uflt(o):
>    n = mydict()
>    for k,v in o.items():
>       if k != 'ip': n[k]=v
>    return n
> в одну строку завернуть? а то страшновато смотрится.

n = mydict(o); n.pop('ip', None)
или
n = mydict({k: v for k, v in o.iteritems() if k!='ip'})


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 15:59 
> n = mydict(o); n.pop('ip', None)
> или
> n = mydict({k: v for k, v in o.iteritems() if k!='ip'})

Это не совсем то. Вот структура:

[
    {
        "msg": "я пришёл на работу работать, а не на глупые вопросы отвечать, почему я пьяный здесь сплю",
        "num": 41,
        "ip": "1.2.3.4",
        "typ": "act",
        "ts": 1371184587
    },
    {
        "msg": "девочки довольны!",
        "num": 40,
        "ip": "1.2.3.4",
        "typ": "act",
        "ts": 1371123121
    },
    {
        "msg": "#6 (gui: кроссплатформенный клиент на pyqt): решено",
        "num": 39,
        "ip": "1.2.3.4",
        "typ": "bug",
        "tracker": "ready",
        "ts": 1371123108
    },
    {
        "msg": "#8 (gui: всплывающие иконки): решено",
        "num": 38,
        "ip": "1.2.3.4",
        "typ": "bug",
        "tracker": "ready",
        "ts": 1371123105
    }
]

я сейчас сделал вот так (сократил размер до 120 строк), но в 2 строки и с заменой out [я НЕЧИСТ :(].

[k.pop('ip') for k in out]
return json.dumps(out,indent=4, separators=(',', ': '), ensure_ascii=False)


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 16:16 
116 строк. 3636 байт. отлично. борьба за 100 строк должна стать нормой жизни.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено gegMOPO3 , 16-Июн-13 19:26 
> [k.pop('ip') for k in out]

Пора в отпуск.

for k in out:
    del k['ip']


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено ws , 16-Июн-13 21:25 
Если нужно вычистить поле ip не изменив входные данные:
[{k:v for k,v in o.items() if k != 'ip'} for o in out]

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 17-Июн-13 06:46 
> Если нужно вычистить поле ip не изменив входные данные:
> [{k:v for k,v in o.items() if k != 'ip'} for o in
> out]

наверное, [mydict((k,v) for k,v in o.items() if k != 'ip') for o in out]

спасибо, что-то подобное в голове крутилось, но руки боялись :)


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 15:47 
> в как его заметить? неужто кто-то подпишет "я сделал это на Bottle!"? :-)

Для начала покажи хоть 1 приличный продукт "на питоне". Только не надо в гуглы всякие тыкать - с их ресурсами можно для себя в 1 экземпляре что угодно хоть на брейнфаке написать.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Xasd , 16-Июн-13 21:02 
> Для начала покажи хоть 1 приличный продукт "на питоне".

блин, что за такие анонимы пошли...

..ды ты хоть знаешь как отличить сайт на Python от сайта на ,например, PHP ??

неужто ты наивно полагаешь там будут URL оканчиваться на *.py ??? :-)


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено ws , 16-Июн-13 21:31 
Из последних нашумевших - http://instagram.com

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено jbo , 17-Июн-13 13:03 
disqus, bitbucket.org из рунета yandex, mail.ru полюбили django для второстепенных проэтов

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 10:30 
Кстати, пацаны-бутыльщики, давайте кодами меняться, если у кого есть что для дома для души.

Я всё, за что не стыдно, выкладываю на http://hg.51t.ru (правда, многое уже удалил, потому что было стыдно, и есть желание переписать).

ps. Я пишу на 2.7.


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 12:27 
> ps. Я пишу на 2.7.

Т.е. заведомо на мусорный бак...


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено quux , 17-Июн-13 15:15 
А может это и к лучшему.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 17-Июн-13 15:24 
> А может это и к лучшему.

"я не пишу для пианистов, я пишу музыку, для публики"


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 17-Июн-13 17:12 
Ну да, как минрософт.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено Аноним , 16-Июн-13 14:08 
Ну вот и самые "верные тормоза python2" перешли на python3.
Теперь все крупные и популярные проекты с полной поддержкой python3.

"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено бедный буратино , 16-Июн-13 14:14 
> Ну вот и самые "верные тормоза python2" перешли на python3.
> Теперь все крупные и популярные проекты с полной поддержкой python3.

122 из top200. при том, что некоторые прямо говорят "знать не знаем никакого python3"


"Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3..."
Отправлено kurokaze , 16-Июн-13 20:01 
>поддержка Python 3. Точнее, Python 3.3 и выше

Последнее удивляет, неужели наконец Гвидо пообещал больше не ломать совместимость?