Форум сайта python.su
Вот ZZZ посоветовал оформить в виде пакета, что я и сделал
pip install Flask-YAMLConfig
from flaskext.yamlconfig import install_yaml_config
install_yaml_config(app)
app.config.from_yaml(app, "main.yaml")
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")
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)
Офлайн
zheromoКак-то совсем не flask-like…
app.config.from_yaml(app, “main.yaml”)
yaml_config = YAMLConfig(app)
app.config.from_yaml('config.yaml') # Передавать тут app не нужно
yaml_config = YAMLConfig(app, 'config.yaml')
Офлайн
1. согласен - выглядит не очень
просто хотелось сделать использование аналогичным
app.config.from_pyfile("settings.conf")
yaml_config = YAMLConfig(app, 'config.yaml')
modules:
admin: - имя модуля (которое name)
views:
тут как прежде ...
import_name:
url_prefix:
subdomain:
static_path:
from flask import Module
admin = Module(__name__)
Офлайн
Пункты 1 и 3 учел
теперь выглядит так
from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
Офлайн
Создай реп на гитхабе. Я всё-таки попробую помочь.
zheromoИ снова не flask-like. Посмотри, как сделан Flask-Markdown, например. Там кода фиг да ни фига, зато очень просто и красиво.from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
zheromoСовсем плохо. Это, конечно, в стиле zope (как мне кажется), но никак не flask.
хочу вещи типаделать автоматом (чтобы писать меньше)from flask import Module
admin = Module(__name__)
module = Module(__name__)
def __init__(state):
app = state.app
# тут можно много чего полезного добавить
# выполнится при инициализации модуля приложением
module._record(__init__)
module = Module(__name__)
urls = YAMLConfigModule(module, "urls.yaml")
Офлайн
Еще один релиз :)
http://pypi.python.org/pypi/Flask-YAMLConfig/0.0.3
ZZZLaunchpad не подойдет?
Создай реп на гитхабе. Я всё-таки попробую помочь.
ZZZПросто было сделано для того если придется конфигурировать из нескольких файловzheromoИ снова не flask-like. Посмотри, как сделан Flask-Markdown, например. Там кода фиг да ни фига, зато очень просто и красиво.from flaskext.yamlconfig import install_yaml_config
yaml_config = install_yaml_config(app)
yaml_config("main.yaml")
Как раз-таки 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Совсем плохо. Это, конечно, в стиле zope (как мне кажется), но никак не flask.
хочу вещи типаделать автоматом (чтобы писать меньше)from flask import Module
admin = Module(__name__)
Здесь, создавая модуль, можно передать ему параметры, например… Иначе это совсем сложно и громоздко будет.
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:
кастомные настройки
class MyConfig(AppYAMLConfigure):
def configure_custom(self, content):
for item, value in content.items():
do_something(item, value)
Офлайн
Ну и можно регистрировать рендереры, например:
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)
Офлайн
zheromohttp://piranha.org.ua/blog/2011/01/24/bzr-hate-and-hate/ :-)
Launchpad не подойдет?
zheromoНу не знаю. Ты не можешь передать то, что из чего-то получил.
Параметры можно передавать в конфиге
Офлайн
Черт с ним с базаром, меня он вполне устраивает
В гите напрягает чисто никсовая ориентация (разрабатываю я в основном под виндой), типа виндовс наоборот что как бы намекает. В связи с этим исторически вышло так что остановился на Базаре - так как он первый попался :) и на питоне написан :) так что поставился быстро
Может сойдемся на mercuriаl? :)
http://code.google.com/p/flask-yamlconfig/
Офлайн
Ооо! Еще один.
Смысл статьи сродни:
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 - гуано! Он должен умереть! Каждый, кто его запустит - попадет в мою черную книгу злопамяти!
По завершению этого объективного и беспристрастного обзора разрешите откланяться.
Офлайн