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)
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)
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'Очередь публикации', ))
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