コード例 #1
0
def expand_stream(env, obj):
    stream_name, params = decode_stream_uid(obj.stream_name)

    stream_env = VersionedStorage()
    stream_env._storage._parent_storage = env

    if 'lang' in params:
        stream_env.models = getattr(env.models, params['lang'])
        stream_env.lang = params['lang']
    if stream_name not in env.streams:
        # Deleted or renamed stream
        raise NotImplementedError
    stream = env.streams[stream_name]
    item = stream.item_query(stream_env)\
                 .filter_by(id=obj.object_id).first()
    if item is not None:
        stream_title = stream.title
        if 'lang' in params:
            stream_title = I18nLabel(stream_title, params['lang'])
        url = stream.url_for(stream_env, 'item', 
                             item=obj.object_id, **params)
    return (url, stream_title, stream, obj, item)
コード例 #2
0
def expand_stream(env, obj):
    stream_name, params = decode_stream_uid(obj.stream_name)

    stream_env = VersionedStorage()
    stream_env._storage._parent_storage = env

    if 'lang' in params:
        stream_env.models = getattr(env.models, params['lang'])
        stream_env.lang = params['lang']
    if stream_name not in env.streams:
        # Deleted or renamed stream
        raise NotImplementedError
    stream = env.streams[stream_name]
    item = stream.item_query(stream_env)\
                 .filter_by(id=obj.object_id).first()
    if item is not None:
        stream_title = stream.title
        if 'lang' in params:
            stream_title = I18nLabel(stream_title, params['lang'])
        url = stream.url_for(stream_env, 'item',
                             item=obj.object_id, **params)
        return (url, stream_title, stream, obj, item)
コード例 #3
0
    def command_generate(self):
        from front.environment import FrontEnvironment, environment
        from front.urls import app
        env = VersionedStorage(FrontEnvironment,
                               Request.blank('/'),
                               Reverse.from_handler(app))
        for lang in self.langs:
            env.lang = Lang(env, lang)
            env.models = getattr(models.front, lang)
            for error in self.errors:
                handler = environment | (
                        lambda env, data: env.render_to_string('errors/' + error, {}))
                tmpl = handler(env, VersionedStorage()).encode('utf-8')
                out = os.path.join(env.cfg.STATIC, lang, error+'.html')

                if os.path.isfile(out):
                    with open(out, 'r') as f:
                        existing = f.read()
                        if existing == tmpl:
                            continue

                with open(out, 'w') as f:
                    f.write(tmpl)
                logger.info("Rendered %s/%s.html", lang, error)
コード例 #4
0
    def publish_queue(self, env, data):
        #insure_is_xhr(env)

        changed = []
        for stream in self.streams.values():
            if isinstance(stream, I18nPublishStream):
                for lang, lang_name in stream.langs:
                    subenv = VersionedStorage()
                    subenv._parent_storage = env
                    subenv.models = getattr(env.models.admin, lang)
                    subenv.version = 'admin'
                    subenv.lang = lang

                    items = stream.item_query(subenv)\
                                  .filter_by(has_unpublished_changes=True)
                    if hasattr(stream.config.Model, 'state'):
                        items = items.filter_by(state=stream.config.Model.PUBLIC)
                    items = items.all()
                    changed += [(stream, subenv, item) for item in items]
            elif isinstance(stream, PublishStream):
                subenv = VersionedStorage()
                subenv._parent_storage = env
                subenv.models = env.models.admin
                subenv.version = 'admin'
                items = stream.item_query(subenv)\
                              .filter_by(has_unpublished_changes=True)
                if hasattr(stream.config.Model, 'state'):
                    items = items.filter_by(state=stream.config.Model.PUBLIC)
                items = items.all()
                changed += [(stream, subenv, item) for item in items]
        changed.sort(key=lambda x: x[2].updated_dt)
        return env.render_to_response('publish_queue', dict(
            changed = changed,
            menu = env.current_location,
            title = u'Очередь публикации',
        ))
コード例 #5
0
def call_with_front_env(env, data, nxt):

    request = Request.blank(env._route_state.path+'?'+env.request.query_string,
                            charset='utf-8')
    front_env = VersionedStorage(wsgi_app.env_class, request, wsgi_app.root)
    # env.root is created in wsgi_app, we do not wrap front app in one,
    # so we have to create env.root manually
    front_env.root = env.root.front(version=env.version, lang=env.lang)\
                             .bind_to_env(front_env)
    front_env.models = env.models
    # we wave set language explicitly here, because language detection is based
    # on subdomains, and we do not have ones in admin
    front_env.langs = [Lang(front_env, n) for n in ['en', 'ru']]
    front_env.lang = [x for x in front_env.langs if x == env.lang][0]
    front_env.matched_domain = ''
    front_env.db = env.db
    front_data = VersionedStorage()
    front_env.data = front_data

    # XXX hack to make cfg configurable
    _cfg = front_env.cfg
    front_env.cfg = VersionedStorage()
    front_env.cfg._storage._parent_storage = _cfg
    _cfg._parent_storage = None

    front_env.cfg.STATIC_URL = env.cfg.FRONT_STATIC_URL
    front_env.cfg.PREVIEW = True
    front_env.cfg.DOMAINS = [env.request.host.split(':', 1)[0]]
    old_query = front_env.db._query_cls
    try:
        query_cls = AdminPublicQuery# if env.version == 'admin' else PublicQuery
        # XXX hack!
        front_env.db._query_cls = query_cls
        return nxt(front_env, front_data)
    finally:
        front_env.db._query_cls = old_query