def __init__(self, schema: Schema, request: Request, *args, **kwargs) -> None: # Domain depends on request, so it must be created here domains = { 'colander': Domain(request=request, dirname=COLANDER_TRANSLATION_DIR, domain='colander'), 'deform': Domain(request=request, dirname=DEFORM_TRANSLATION_DIR, domain='deform'), 'messages': Domain(request=request, dirname=EKKLESIA_PORTAL_TRANSLATION_DIR, domain='messages') } def translator(term): domain = domains.get(term.domain) if domain is None: return term return domain.gettext(term) renderer = deform.ZPTRendererFactory(DEFORM_TEMPLATE_DIRS, translator=translator) super().__init__(schema, *args, renderer=renderer, **kwargs)
def __init__(self, schema: Schema, request: morepath.Request, *args, **kwargs) -> None: # Domain depends on request, so it must be created here domains = { 'colander': Domain(request=request, dirname=COLANDER_TRANSLATION_DIR, domain='colander'), 'deform': Domain(request=request, dirname=DEFORM_TRANSLATION_DIR, domain='deform'), 'messages': Domain(request=request, dirname=request.app.translation_dir, domain='messages') } def translator(term): domain = domains.get(term.domain) if domain is None: return term.interpolate() else: translated = domain.gettext(term) return term.interpolate(translated) return domain.gettext(term) renderer = deform.ZPTRendererFactory( self.__class__.deform_template_dirs, translator=translator) super().__init__(schema, *args, renderer=renderer, **kwargs)
def includeme(config): """ Initialize the model for a Pyramid library. Activate this setup using ``config.include('garasu_i18n')``. """ settings = config.get_settings() config.add_subscriber('.add_renderer_globals', 'pyramid.events.BeforeRender') config.add_subscriber('.add_localizer', 'pyramid.events.NewRequest') config.set_locale_negotiator(custom_locale_negotiator) # combine deform if asbool(settings.get('garasu_i18n.deform', False)): deform_template_dir = resource_filename('deform', 'templates/') zpt_renderer = deform.ZPTRendererFactory( [deform_template_dir], translator=translate) deform.Form.set_default_renderer(zpt_renderer) config.add_translation_dirs('deform:locale/') config.add_translation_dirs('colander:locale/') config.add_route('locale', '/locale/{language}') translation_dirs = settings.get('garasu_i18n.translation_dirs') config.add_translation_dirs(translation_dirs) config.scan(__name__)
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) config.include('pyramid_jinja2') config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') config.add_route('multiweek', '/multiweek/{amountWeeks}', pregenerator=pregen) config.add_route('multiweekPost', '/multiweekPost') config.add_route('multiweekForm', '/multiweekForm') config.add_route('multiweekDelete', '/multiweekDelete') config.add_static_view('static2', 'deform:static') config.scan('.views') config.add_translation_dirs( 'colander:locale', 'deform:locale', ) def translator(term): return get_localizer(get_current_request()).translate(term) deform_template_dir = resource_filename('deform', 'templates/') zpt_renderer = deform.ZPTRendererFactory( [deform_template_dir], translator=translator, ) deform.Form.set_default_renderer(zpt_renderer) return config.make_wsgi_app()
def configure_zpt_renderer(search_path=()): default_paths = deform.form.Form.default_renderer.loader.search_path paths = [] for path in search_path: pkg, resource_name = path.split(':') paths.append(resource_filename(pkg, resource_name)) deform.form.Form.default_renderer = deform.ZPTRendererFactory( tuple(paths) + default_paths, translator=translator)
def configure_zpt_renderer(search_path=()): """Initialize ZPT widget rendering for Deform forms. See https://github.com/Pylons/pyramid_deform/blob/master/pyramid_deform/__init__.py#L437 """ default_paths = deform.form.Form.default_renderer.loader.search_path paths = [] for path in search_path: pkg, resource_name = path.split(':') paths.append(resource_filename(pkg, resource_name)) deform.form.Form.default_renderer = deform.ZPTRendererFactory( tuple(paths) + default_paths)
def includeme(config): config.add_translation_dirs( 'colander:locale', 'deform:locale', ) def translator(term): return get_localizer(get_current_request()).translate(term) deform_template_dir = resource_filename('deform', 'templates/') zpt_renderer = deform.ZPTRendererFactory([deform_template_dir], translator=translator) deform.Form.set_default_renderer(zpt_renderer) config.add_static_view('sacrud_deform_static', 'sacrud_deform:static')
def login_view(request): deform_static.need() search_path = ('myShop/templates/deform/', ) renderer = deform.ZPTRendererFactory(search_path) schema = LoginFormSchema(validator=password_validator) form = deform.Form(schema, buttons=('submit', ), renderer=renderer) if 'submit' in request.POST: try: appstruct = form.validate(request.POST.items()) except deform.ValidationFailure, e: return {'title': 'login', 'form': e.render()} user = appstruct['login'] headers = remember(request, user.id) return HTTPFound(location='/', headers=headers)
def configure_zpt_renderer(search_path=(), translator=None): """Initialize ZPT widget rendering for Deform forms. Include given package asset paths in the paths Deform uses to look up widgets. Example: .. code-block:: python from pyramid.threadlocal import get_current_request # # Set up Chameleon templates (ZTP) rendering paths # def translator(term): # i18n localizing function return get_localizer(get_current_request()).translate(term) # Configure renderer configure_zpt_renderer(("deformdemo:custom_widgets",), translator) :param search_path: List of additional search paths for widget templates. :param translator: Translator function to localizing i18n strings """ # Don't let the user to slip in a string assert type(search_path) in (tuple, list) # Add more paths to besides the default one default_paths = deform.form.Form.default_renderer.loader.search_path paths = [] for path in search_path: pkg, resource_name = path.split(':') paths.append(resource_filename(pkg, resource_name)) deform.form.Form.default_renderer = deform.ZPTRendererFactory( tuple(paths) + default_paths, translator=translator)
def configure_zpt_renderer(search_path=()): """Initialize ZPT widget rendering for Deform forms. Include given package asset paths in the paths Deform uses to look up widgets. Example: .. code-block:: python configure_zpt_renderer() :param search_path: List of additional search paths for widget templates. """ default_paths = deform.form.Form.default_renderer.loader.search_path paths = [] for path in search_path: pkg, resource_name = path.split(':') paths.append(resource_filename(pkg, resource_name)) deform.form.Form.default_renderer = deform.ZPTRendererFactory(tuple(paths) + default_paths)
my_search_path = (deform_templates, c3smembership_templates) _ = TranslationStringFactory('c3sadoportal') def translator(term): return get_localizer(get_current_request()).translate(term) my_template_dir = resource_filename('c3sadoportal', 'templates/') deform_template_dir = resource_filename('deform', 'templates/') zpt_renderer = deform.ZPTRendererFactory( [ my_template_dir, deform_template_dir, ], translator=translator, ) # the zpt_renderer above is referred to within the demo.ini file by dotted name DEBUG = False LOGGING = True if LOGGING: # pragma: no cover import logging log = logging.getLogger(__name__) @view_config(renderer='../templates/login.pt', route_name='login') def login_view(request):
factory for deform forms. """ from translationstring import TranslationStringFactory from pyramid.i18n import ( get_localizer, ) from pyramid.threadlocal import get_current_request from pkg_resources import resource_filename import deform _ = TranslationStringFactory('c3smembership') def translator(term): """ Template translator. """ return get_localizer(get_current_request()).translate(term) MY_TEMPLATE_DIR = resource_filename('c3smembership', 'templates') DEFORM_TEMPLATE_DIR = resource_filename('deform', 'templates') ZPT_RENDERER = deform.ZPTRendererFactory( [ MY_TEMPLATE_DIR, DEFORM_TEMPLATE_DIR, ], translator=translator, )
def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ passwords_config_path = helpers.get_passwords_config_path( global_config['__file__']) if os.path.isfile(passwords_config_path): passwords_settings = helpers.load_config(passwords_config_path) settings = helpers.dicts_merge(passwords_settings.get('app:main', {}), settings) sql_engine = engine_from_config(settings, 'sqlalchemy.') authentication_secret = settings.get('authentication_secret') if authentication_secret is None: raise Exception( 'authentication_secret must be set at [conf_type]_passwords.ini!') # see http://docs.pylonsproject.org/projects/pyramid//en/latest/tutorials/wiki2/authorization.html authn_policy = AuthTktAuthenticationPolicy(secret=authentication_secret, hashalg='sha512', callback=User.get_groups) authz_policy = ACLAuthorizationPolicy() # DBSession.configure(bind=engine)p Base.metadata.bind = sql_engine session_factory = session_factory_from_settings(settings) config = Configurator(settings=settings, root_factory='pyragrid.db.RootFactory') config.set_authentication_policy(authn_policy) config.set_authorization_policy(authz_policy) config.include('pyramid_chameleon') config.add_translation_dirs('colander:locale', 'deform:locale', 'pyragrid:locale') def translator(term): # return get_localizer(get_current_request()).translate(term) return get_current_request().localizer.translate(term) deform_template_dir = resource_filename('deform', 'templates/') zpt_renderer = deform.ZPTRendererFactory([deform_template_dir], translator=translator) deform.Form.set_default_renderer(zpt_renderer) payment_systems.load_by_config(config) static_cache_max_age = 3600 # TODO hacky. maybe better copy resources with gulp task? config.add_static_view( 'static/fonts/bootstrap', '../bower_components/bootstrap-sass-official/assets/fonts/bootstrap', cache_max_age=static_cache_max_age) config.add_static_view('static/bower_components', '../bower_components', cache_max_age=static_cache_max_age) # config.add_static_view('static/dist', '../static/dist', cache_max_age=static_cache_max_age) config.add_static_view('static', 'static', cache_max_age=static_cache_max_age) config.add_static_view('resources', 'resources', cache_max_age=static_cache_max_age) config.add_static_view('static_deform', 'deform:static') config.add_route('index', '/') config.add_route('profile_edit', '/profile/edit') config.add_route('vk_iframe_auth', '/vkIframeAuth') config.add_route('test', '/t') # TODO delete: config.add_route('add_user', '/users/add') config.add_route('delete_user', '/users/delete/{any_data}') config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('register', '/register') config.add_route('register_success', '/register_success') config.add_route('email_check_code', '/checkEmail/{code}') config.add_route('article', '/article/{article_system_name}') config.add_route('article_revision', '/article/{article_system_name}') config.add_route('admin_index', '/admin') config.add_route('admin_test', '/test') config.add_route('admin_users', '/admin/users') config.add_route('admin_users_grid', '/admin/users/grid') config.add_route('admin_user_enable', '/admin/users/enable/{user_id}') config.add_route('admin_user_disable', '/admin/users/disable/{user_id}') config.add_route('admin_user_edit', '/admin/users/edit/{user_id}') config.add_route('admin_article_edit', '/admin/article/{article_id}/edit') config.add_route('admin_article_enable', '/admin/article/{article_id}/enable') config.add_route('admin_article_disable', '/admin/article/{article_id}/disable') config.add_route('admin_article_revisions', '/admin/article/{article_id}/revisions') config.add_route( 'admin_article_revision', '/admin/article/{article_id}/revision/{article_revision_id}') config.add_route( 'admin_article_revision_activate', '/admin/article/{article_id}/revision/{article_revision_id}/activate') config.add_route('admin_article_new', '/admin/new/article') config.add_route('admin_articles', '/admin/articles') config.add_route('admin_articles_grid', '/admin/articles/grid') config.add_route('admin_article_revisions_grid', '/admin/article/{article_id}/revisions/grid') config.add_route('admin_goods', '/admin/goods') config.add_route('admin_goods_grid', '/admin/goods/grid') config.add_route('admin_good_new', '/admin/new/good') config.add_route('admin_good_edit', '/admin/good/{id}/edit') config.add_route('admin_good_enable', '/admin/good/{id}/enable') config.add_route('admin_good_disable', '/admin/good/{id}/disable') config.add_route('test_mail', '/test/mail') config.add_route('test_render', '/test/render') config.add_route('test_notify', '/test/notify') config.add_route('test_view_notify', '/test/view_notify') config.add_route('test_url', '/test/url') config.add_route('test_ajax', '/test/ajax') config.add_route('test_redirect', '/test/redirect') config.add_route('test_bootgrid_edit', '/test/bootgrid') config.add_route('test_script_inclusion', '/test/script_inclusion') config.add_route('test_db_enum', '/test/db_enum') config.add_route('test_filetree', '/test/filetree') config.add_route('test_ajax_filetree', '/test/ajax_filetree') config.add_route('test_filedialog', '/test/filedialog') config.add_route('test_droparea', '/test/droparea') config.add_route('test_jquery_file_upload', '/test/jquery_file_upload') config.add_route('test_blocks', '/test/blocks') config.add_route('test_nunjucks', '/test/nunjucks') config.add_route('test_jac', '/test/jac') config.add_route('test_mobx', '/test/mobx') config.add_route('test_mobx_fetch', '/test/mobx_fetch') # urlList: '/uploads/list' # urlInfo: '/uploads/info' # urlOperations: '/uploads/manage' config.add_route('uploads_list', '/uploads/list') config.add_route('uploads_info', '/uploads/info') config.add_route('uploads_manage', '/uploads/manage') config.add_route('uploads_handle_droparea', '/uploads/handleDropArea') config.add_route('uploads_handle_jquery_file_upload', '/uploads/handleJqueryFileUpload') config.add_route('order_status', '/order/{id}/status') config.add_route('good_one_click_buy', '/goods/{id}/one_click_buy') config.add_notfound_view(views_articles.view_custom_not_found, append_slash=True) config.set_session_factory(session_factory) config.add_subscriber(add_renderer_globals, pyramid.events.BeforeRender) # config.registry['mailer'] = Mailer.from_settings(settings) # fix vk init: if pyramid.threadlocal.get_current_registry().settings is None: pyramid.threadlocal.get_current_registry().settings = settings config.scan(ignore=['pyragrid.payment_systems']) # TODO убрать настройку jinja2 env в конфиг app = config.make_wsgi_app() jinja2_env = pyramid_jinja2.get_jinja2_environment(config) jac_output_dir_path = os.path.join(os.path.dirname(__file__), 'static', 'dist') #jinja2_env.compressor_output_dir = './pyragrid/static/dist' jinja2_env.compressor_output_dir = jac_output_dir_path jinja2_env.compressor_debug = True # BabelCompressor.binary = './node_modules/.bin/babel' BabelCompressor.binary = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', 'node_modules', '.bin', 'babel')) BabelCompressor.cwd_for_presets_search = os.path.abspath( os.path.join(os.path.dirname(__file__), '..')) BabelCompressor.presets = [ 'es2015', 'stage-0', 'react', 'es2016', 'es2017' ] # wtf? adds lines like `require("babel-runtime/core-js/object/get-prototype-of")` to the code # TODO https://babeljs.io/docs/plugins/transform-runtime/ # BabelCompressor.plugins = ['transform-runtime'] jac_default_config = JacDefaultConfig() jinja2_env.compressor_classes = jac_default_config.get( 'compressor_classes') jinja2_env.compressor_classes['text/babel'] = BabelCompressor return app
def main(global_config, **settings): """ Esta função retorna uma aplicação WSGI Pyramid """ session_factory = session_factory_from_settings(settings) config = Configurator( root_factory=RootFactory, settings=settings, session_factory=session_factory, ) config.include('pyramid_mako') config.add_plim_renderer('.slim', mako_settings_prefix='mako.') #configuração de autenticação para sessões authn_policy = AuthTktAuthenticationPolicy( secret='2398ry289$#T$#Tnykki4jh3t4t34239ryh9', callback=groupfinder, include_ip=True, hashalg='sha512', timeout=21600, ) authz_policy = ACLAuthorizationPolicy() config.set_authentication_policy(authn_policy) config.set_authorization_policy(authz_policy) config.add_translation_dirs( 'colander:locale', 'deform:locale', ) def translator(term): return get_localizer(get_current_request()).translate(term) deform_dir = resource_filename('deform', 'templates/') deform_dir2 = resource_filename('deform_bootstrap', 'templates/') deform_dir3 = resource_filename('projeto', 'templates/') zpt_renderer = deform.ZPTRendererFactory( [deform_dir3, deform_dir2, deform_dir], translator=translator) deform.Form.set_default_renderer(zpt_renderer) config.add_static_view('static', 'projeto:static', cache_max_age=3600) config.add_static_view('deform_static', 'deform:static') config.add_static_view('deform_bootstrap', 'deform_bootstrap:static') #camminho das páginas config.add_route('inicial', '/') config.add_route('listaUsr', '/listarUsr') config.add_route('listaAtv', '/listarAtv') config.add_route('cadastro', '/cadastrar') config.add_route('configuracao', '/configurar') config.add_route('contato', '/contato') config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('sobre', '/sobre') config.add_route('perfilUsr', '/usuario/{id}') config.add_route('usuario', '/usuario') config.add_route('mapa', '/mapa') config.add_route('orcamento', '/orcamento') config.add_route('orcamentoId', '/orcamento/{id}') config.add_route('inserir_ponto', '/inserir_ponto') config.add_route('privacidade', '/privacidade') config.add_route('termos', '/termos') config.add_route('r_senha', '/r_senha') config.add_route('rcad_senha', '/rcad_senha') config.add_route('loginTwitter', '/loginTwitter') config.add_route('authTwitter', '/authTwitter') config.add_route('authTwitterAcc', '/authTwitterAcc') config.add_route('loginTwitterAuth', '/loginTwitterAuth') config.add_route('loginFacebook', '/loginFacebook') config.add_route('authFacebook', '/authFacebook') config.add_route('loginAuthFace', '/loginAuthFace') config.add_route('denuncia', '/orcamento/{id}/{tmidia}/{idM}') config.scan() return config.make_wsgi_app()
import os import colander import deform from jinja2 import Environment, FileSystemLoader from pkg_resources import resource_filename env = Environment(loader=FileSystemLoader('templates')) deform_path = os.path.abspath('templates/deform') deform_templates = resource_filename('deform', 'templates') print(deform_templates) print(deform_path) search_path = (deform_path, deform_templates) renderer = deform.ZPTRendererFactory(search_path) class Contact(colander.MappingSchema): email = colander.SchemaNode(colander.String(), validator=colander.Email()) name = colander.SchemaNode(colander.String()) message = colander.SchemaNode(colander.String(), widget=deform.widget.TextAreaWidget()) def custom_template_form(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) from webob import Request request = Request(environ) form = deform.Form(Contact(), buttons=('submit', ), renderer=renderer) template = env.get_template('simple_with_css.html')