Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 27, 2011 16:03:09

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

Вот ZZZ посоветовал оформить в виде пакета, что я и сделал

pip install Flask-YAMLConfig
Usage:

    from flaskext.yamlconfig import install_yaml_config
install_yaml_config(app)
app.config.from_yaml(app, "main.yaml")
or

    from flaskext.yamlconfig import install_yaml_config
from flaskext.yamlconfig import AppYAMLConfigure

class MyConfig(AppYAMLConfigure):
def configure_mysection(self, content):
for item in content:
....

install_yaml_config(app, MyConfig)
app.config.from_yaml(app, "main.yaml")
Config file sample:

    blog_edit:
view: !!python/name:views.blog.edit_blog
url: /blog/edit/<blog_url>
renderer: actions/blog/edit.html
methods:
- GET
- POST
context:
w_group: empty

ajaxBlogJoin:
view: !!python/name:views.blog.ajax_blog_join
url: /ajax/blogjoin/<int:blog_id>
methods:
- POST
renderer: json



Отредактировано (Янв. 27, 2011 16:06:32)

Офлайн

#2 Янв. 27, 2011 18:16:25

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Конфигуратор для Flask на YAML

zheromo
app.config.from_yaml(app, “main.yaml”)
Как-то совсем не flask-like…

1. Сам install_yaml_config – зло. Поидее надо как-то так:
yaml_config = YAMLConfig(app)
app.config.from_yaml('config.yaml') # Передавать тут app не нужно
или так:
yaml_config = YAMLConfig(app, 'config.yaml')
2. Раз уж мы настраиваем вью, то нужна работа с модулями. Т.е. загрузка конфига модуля, иначе можно будет потеряться.
3. “!!python/name” портит вид и увеличивает сложность написания конфига.
4. …
5. PROFIT!

Есть время допилить, или давай я попробую?

P.S. Идея мне очень нравится.



Офлайн

#3 Янв. 27, 2011 19:35:26

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

1. согласен - выглядит не очень
просто хотелось сделать использование аналогичным

app.config.from_pyfile("settings.conf")
а так как нам нужен инстанс app приходится его передавать, т.к. сам config об этом ничего не знает

Вариант
yaml_config = YAMLConfig(app, 'config.yaml')
думаю самый нормальный
патчить flask.config.Config не придется
все эти извраты именно с похожестью на app.config.from_pyfile(“settings.conf”) и связаны

наверное так лучше так и сделать

2. согласен, просто руки не дошли
modules:
admin: - имя модуля (которое name)
views:
тут как прежде ...
import_name:
url_prefix:
subdomain:
static_path:
хочу вещи типа
from flask import Module
admin = Module(__name__)
делать автоматом (чтобы писать меньше), а методы модуля передавать вьюхе в контексте

и если указан import_name то указывать путь к вьюхам относительно модуля

3. !!python/name: использован так как он в самом PyYAML и есть, наверное буду использовать werkzeug.import_string

4. ….
регистрацию кастомных рендереров уже сделал
еще можно добавить например lazyloading и т.д.

5. хочу еще сделать traversal как в пирамиде :)
скорей всего путем скрещивания Flask и Ranvier http://furius.ca/ranvier/

6.

7. PROFIT

Время есть - надо допиливать пока желание не пропало



Офлайн

#4 Янв. 27, 2011 20:18:11

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

Пункты 1 и 3 учел

теперь выглядит так

    from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
и без !!python/name



Офлайн

#5 Янв. 27, 2011 23:10:26

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Конфигуратор для Flask на YAML

Создай реп на гитхабе. Я всё-таки попробую помочь.

zheromo
from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
И снова не flask-like. Посмотри, как сделан Flask-Markdown, например. Там кода фиг да ни фига, зато очень просто и красиво.
Как раз-таки app.config пропатчить можно и там ничего сверхсложного, но вот с модулями это сложно выйдет и тут есть определённые проблемы.

zheromo
хочу вещи типа
from flask import Module
admin = Module(__name__)
делать автоматом (чтобы писать меньше)
Совсем плохо. Это, конечно, в стиле zope (как мне кажется), но никак не flask.
Здесь, создавая модуль, можно передать ему параметры, например… Иначе это совсем сложно и громоздко будет.
Я вообще вот такую схему юзаю (module_name/module.py):
module = Module(__name__)

def __init__(state):
app = state.app
# тут можно много чего полезного добавить
# выполнится при инициализации модуля приложением

module._record(__init__)
Мне кажется, что нужно сделать пару видов конфигов. Конфиг приложения в общем и конфиг модуля (можно вообще что-то вроде “urls.yaml”).
Т.е. при создании модуля, подгружать конфиг конкретного модуля. Типа так:
module = Module(__name__)
urls = YAMLConfigModule(module, "urls.yaml")
Тут в urls можно хранить данные о том, что было в конфиге. Так, для красоты.



Офлайн

#6 Янв. 28, 2011 10:47:31

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

Еще один релиз :)
http://pypi.python.org/pypi/Flask-YAMLConfig/0.0.3

ZZZ
Создай реп на гитхабе. Я всё-таки попробую помочь.
Launchpad не подойдет?

https://code.launchpad.net/flask-yamlconfig

ZZZ
zheromo
from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
И снова не flask-like. Посмотри, как сделан Flask-Markdown, например. Там кода фиг да ни фига, зато очень просто и красиво.
Как раз-таки app.config пропатчить можно и там ничего сверхсложного, но вот с модулями это сложно выйдет и тут есть определённые проблемы.
Просто было сделано для того если придется конфигурировать из нескольких файлов

    from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
yaml_config("main1.yaml")
yaml_config("main2.yaml")
теперь

    from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app, "main.yaml")
yaml_config("main1.yaml")
yaml_config("main2.yaml")
или

    from flaskext.yamlconfig import AppYAMLConfig
AppYAMLConfig(app, "main.yaml")
ZZZ
zheromo
хочу вещи типа
from flask import Module
admin = Module(__name__)
делать автоматом (чтобы писать меньше)
Совсем плохо. Это, конечно, в стиле zope (как мне кажется), но никак не flask.
Здесь, создавая модуль, можно передать ему параметры, например… Иначе это совсем сложно и громоздко будет.
Параметры можно передавать в конфиге, например
modules:
mymodules.admin: # это import_name модуля
views:
index:
url: /
view: .index # c . - относительно корня import_name
page:
url: /<int:page>
view: app.submodule.etc.page_view # просто где-то
url_prefix: /admin
subdomain:
static_path:
вот как-то так

ZZZ
Мне кажется, что нужно сделать пару видов конфигов. Конфиг приложения в общем и конфиг модуля (можно вообще что-то вроде “urls.yaml”).
Т.е. при создании модуля, подгружать конфиг конкретного модуля. Типа так:
module = Module(__name__)
urls = YAMLConfigModule(module, "urls.yaml")
Это по факту уже есть так как используется
app.add_url_rule(rule, endpoint, view_func, **options)
что работает и для модуля


ZZZ
Тут в urls можно хранить данные о том, что было в конфиге. Так, для красоты.
Согласен
Пока общая структура конфига у меня выглядит так

applications:
PARAM1: 1
PARAM2: true
# эквивалентно вызову self.app.config.from_object где object - содержимое application

include:
- file1.yaml
- file2. yaml
# список файлов для инклуда

views:
сами вьюшки

custom:
кастомные настройки
custom обрабатывается путем расширения конфигуратора

class MyConfig(AppYAMLConfigure):
def configure_custom(self, content):
for item, value in content.items():
do_something(item, value)



Офлайн

#7 Янв. 28, 2011 10:52:00

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

Ну и можно регистрировать рендереры, например:

    from flask import current_app
from flaskext.yamlconfig import Renderer, register_renderer
from werkzeug.wrappers import BaseResponse

class JsonRenderer(Renderer):
def render(self, view_result):
return current_app.response_class(json.dumps(view_result,
indent=None if request.is_xhr else 2), mimetype='application/json')

register_renderer('json', JsonRenderer)



Офлайн

#8 Янв. 28, 2011 12:42:49

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Конфигуратор для Flask на YAML

zheromo
Launchpad не подойдет?
http://piranha.org.ua/blog/2011/01/24/bzr-hate-and-hate/ :-)

zheromo
Параметры можно передавать в конфиге
Ну не знаю. Ты не можешь передать то, что из чего-то получил.
Хотя надо попробовать…

Для меня это начинает напоминать обсуждение сферического коня в вакууме. Надо попробовать поюзать, а там что-нить и додумается. :-)



Офлайн

#9 Янв. 28, 2011 18:01:00

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Конфигуратор для Flask на YAML

Черт с ним с базаром, меня он вполне устраивает
В гите напрягает чисто никсовая ориентация (разрабатываю я в основном под виндой), типа виндовс наоборот что как бы намекает. В связи с этим исторически вышло так что остановился на Базаре - так как он первый попался :) и на питоне написан :) так что поставился быстро

Может сойдемся на mercuriаl? :)

http://code.google.com/p/flask-yamlconfig/



Офлайн

#10 Янв. 28, 2011 18:27:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Конфигуратор для Flask на YAML

Ооо! Еще один.

Смысл статьи сродни:

1. vim - гуано!
2. Потому что в отличие от предела совершенства - emacs у vim убогие сочетания клавиш!
3. Даже я, красивый и умный, к ним привыкал долго, плюясь и скрипя зубами!
4. Скриптовый язык в vim - полный отстой, на полвека отстающий от умного и понятного emacs lisp!
5. Поэтому для emacs есть плагины для чего удобно, а vim показывает болт - с ним просто невозможно работать!
6. В то время как emacs позволяет комфортно работать с питоновскими файлами “из коробки” vim не умеет делать этого вообще - тупой!
7. Кто там из зала подсказывает, что существует vim python mode и еще куча полезных приблуд? Ау, я вас не слышу, да и слышать не желаю!
8. Про работу с системами контроля версий и встроенный тетрис я вообще молчу!
9. Написано уже немало, дальше распространятся лень. Для закрепления эффекта закрыть глаза и тридцать три раза прокричать: “vim - гуано!”
10. Еще раз: vim - гуано! Он должен умереть! Каждый, кто его запустит - попадет в мою черную книгу злопамяти!

По завершению этого объективного и беспристрастного обзора разрешите откланяться.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version