The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новые релизы Werkzeug 0.9 и Flask 0.10 с поддержкой Python 3.3

16.06.2013 04:45

Армин Ронахер (Armin Ronacher), один из основателей Pocoo Team и автор известного шаблонизатора для языка Python Jinja2, в своём блоге сообщил о выходе новых версий библиотеки для работы с WSGI Werkzeug 0.9 и легковесного веб-фреймворка Flask 0.10. Данные версии вышли после значительного перерыва (около года), но в дальнейшем автор предполагает выпускать релизы более часто. Длительная разработка объясняется существенными изменениями в коде, связанными с поддержкой Python версии 3 (точнее, Python 3.3, использование версий Python 3.0-3.2 настоятельно не рекомендуется), и с некоторыми изменениями в API.

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

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

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

Начнём с неприятных вещей. Вероятно, ваш код, написанный с использованием предыдущих версий Werkzeug будет (слегка) поломан. Это было необходимо, так как часть функций не полностью обеспечивают выполнение обновлённой спецификации PEP 3333. Данные нарушения обратной совместимости большей частью ограничены модулем werkzeug.urls, а также структурами данных Headers и EnvironHeaders. Теперь вы заметите, что заголовки всегда возвращаются в Unicode, декодированными из latin1, а модуль URLs прозрачно объединяет в себе обе разновидности представления URL-адресов - URI и 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) запросов.
    • Для большей гибкости при работе с формами, в качестве будущей замены для старых дескрипторов .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 благодарит сообщество и особенно отдельных участников за то, что оно сделало возможными эти новые выпуски. Огромное количество работы для этих выпусков было выполнено в рамках специально запланированных онлайн-мероприятий в течение майских выходных. В данных выпусках количество коммитов "взлетело до небес". Хотя не все изменения из общего журнала могут выглядеть впечатляющими, основополагающие улучшения и чистка кода всё же существенна.



  1. Главная ссылка к новости (http://lucumr.pocoo.org/2013/6...)
Автор новости: ferm32
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/37186-python
Ключевые слова: python, wsgi, werkzeug, flask
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 09:06, 16/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.
     
     
  • 2.2, Фигов (?), 09:13, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Хороший повод не издеваться над трупом змеи.
     
  • 2.3, бедный буратино (ok), 09:14, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.

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

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

     
     
  • 3.4, Аноним (-), 09:27, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    >> Есть смысл с Bottle.py перейти на Flask? Для Python 3.3.
    > Ну, во-первых,  bottle.py уже давно поддерживает python 3.

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

     
     
  • 4.5, Xasd (ok), 10:09, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    мне кажется Flask хорош тем что он является запасным вариантом на случай если Bottle вдруг погибнет :) .

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

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

     
     
  • 5.7, бедный буратино (ok), 10:27, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    По моему мнению, не претендующему ни на что, при всём богатстве и многообразии вебпаев один и два (если не брать узкопрофильные на мой взгляд вещи, как торнадо, твистед плюс черипай и и иже), есть только четыре достойных фреймворка чисто для веба на python:

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

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

     
     
  • 6.11, Аноним (-), 12:32, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > bottle, flask, pyramid, django(-nonrel).

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

     
     
  • 7.12, бедный буратино (ok), 12:33, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ИЧСХ, ни на одном из них не замечено ни единого сильного продукта.

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


     
     
  • 8.18, Аноним (-), 15:46, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе, как специалисту по мантрам, виднее ... текст свёрнут, показать
     
  • 7.13, Xasd (ok), 13:23, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > ни на одном из них не замечено ни единого сильного продукта.

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

     
     
  • 8.14, бедный буратино (ok), 13:42, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати, а какая разница, кто чего сколько сделал Главное - какие это возможност... текст свёрнут, показать
     
     
  • 9.15, бедный буратино (ok), 13:51, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    можно сделать k update ip hidden for k in out , но это будет влиять на out, ... текст свёрнут, показать
     
  • 9.20, letitbee (?), 15:48, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален n mydict o n pop ip , None или n mydict k v fo... текст свёрнут, показать
     
     
  • 10.21, бедный буратино (ok), 15:59, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Это не совсем то Вот структура msg я пришёл на работу рабо... текст свёрнут, показать
     
     
  • 11.22, бедный буратино (ok), 16:16, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    116 строк 3636 байт отлично борьба за 100 строк должна стать нормой жизни ... текст свёрнут, показать
     
  • 11.25, gegMOPO3 (?), 19:26, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Пора в отпуск for k in out del k ip ... текст свёрнут, показать
     
  • 9.34, ws (ok), 21:25, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Если нужно вычистить поле ip не изменив входные данные k v for k,v in o items... текст свёрнут, показать
     
     
  • 10.37, бедный буратино (ok), 06:46, 17/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    наверное, mydict k,v for k,v in o items if k ip for o in out спасибо... текст свёрнут, показать
     
  • 8.19, Аноним (-), 15:47, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Для начала покажи хоть 1 приличный продукт на питоне Только не надо в гуглы в... текст свёрнут, показать
     
     
  • 9.32, Xasd (ok), 21:02, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    блин, что за такие анонимы пошли ды ты хоть знаешь как отличить сайт на Pyt... текст свёрнут, показать
     
  • 9.35, ws (ok), 21:31, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Из последних нашумевших - http instagram com ... текст свёрнут, показать
     
  • 7.38, jbo (??), 13:03, 17/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    disqus, bitbucket.org из рунета yandex, mail.ru полюбили django для второстепенных проэтов
     
  • 5.9, бедный буратино (ok), 10:30, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Кстати, пацаны-бутыльщики, давайте кодами меняться, если у кого есть что для дома для души.

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

    ps. Я пишу на 2.7.

     
     
  • 6.10, Аноним (-), 12:27, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > ps. Я пишу на 2.7.

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

     
     
  • 7.39, quux (??), 15:15, 17/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А может это и к лучшему.
     
     
  • 8.40, бедный буратино (ok), 15:24, 17/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    я не пишу для пианистов, я пишу музыку, для публики ... текст свёрнут, показать
     
     
  • 9.41, Аноним (-), 17:12, 17/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, как минрософт ... текст свёрнут, показать
     

  • 1.16, Аноним (-), 14:08, 16/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну вот и самые "верные тормоза python2" перешли на python3.
    Теперь все крупные и популярные проекты с полной поддержкой python3.
     
     
  • 2.17, бедный буратино (ok), 14:14, 16/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну вот и самые "верные тормоза python2" перешли на python3.
    > Теперь все крупные и популярные проекты с полной поддержкой python3.

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

     

  • 1.28, kurokaze (ok), 20:01, 16/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    >поддержка Python 3. Точнее, Python 3.3 и выше

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

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру