def execute_admin_new(self, request, type): c = ContentItem() c.type = type c.type_key = str(int(time.time())) c.created_at = datetime.now() c.permissions = ContentItem.permissions_NOT_READY c.data = self.types[c.type]["type"].get_editor().new_db() db.add(c) db.flush() return redirect("/admin/content/edit/%d/" % c.id)
def block(request, feed, item): next = db.query(ContentItem).filter(ContentItem.type.in_(get_content_feeds()[feed]["types"]), ContentItem.permissions_for(request.user), ContentItem.created_at > item["created_at"]).order_by(ContentItem.created_at).first() prev = db.query(ContentItem).filter(ContentItem.type.in_(get_content_feeds()[feed]["types"]), ContentItem.permissions_for(request.user), ContentItem.created_at < item["created_at"]).order_by(ContentItem.created_at.desc()).first() if next or prev: return { "next" : process_content_item(next) if next else None, "prev" : process_content_item(prev) if prev else None, } else: return None
for type in feeds["timeline"]["types"]: provider = content_types[type]["type"].get_provider() if provider is None: continue if not provider.available(): continue item_ids = [] for item in provider.provide(): id = str(item.id) item_ids.append(id) content_item = db.query(ContentItem).filter_by(type=type, type_key=id).first() if content_item is None: content_item = ContentItem() content_item.type = type content_item.type_key = id content_item.started_at = item.started_at content_item.created_at = item.created_at content_item.permissions = content_types[type].get("permissions", 0) content_item.data = item.data for kv_directory in item.kv: kv = item.kv[kv_directory] for k, v in kv() if callable(kv) else kv: if k not in kv_storage[kv_directory]: kv_storage[kv_directory][k] = v() if callable(v) else v db.add(content_item) db.flush()
for f in report_items: item = f() if item: report += u"<li>" + item + u"</li>\n" report += u"</ul>\n" if sys.argv[2] == "post": title = ucfirst(pytils.dt.ru_strftime(u"%B %Y", date=start)) now_playing = all_social_services["last.fm"].network.get_user(all_social_services["last.fm"].username).get_now_playing() if now_playing: music = u"%s – %s" % (now_playing.get_artist().get_name(), now_playing.get_title()) else: music = "" post = ContentItem() post.type = "blog_post" post.type_key = pytils.translit.slugify(title) post.created_at = datetime.now() post.permissions = ContentItem.permissions_PUBLIC post.data = { "title" : title, "title_html" : "", "music" : music, "text" : report, "ipaddress" : "127.0.0.1", "useragent" : "Monthly report generator", } db.add(post) db.flush()
def execute_view(self, request, **kwargs): url = kwargs["url"] type = kwargs["type"] content_item = db.query(ContentItem).filter(ContentItem.type == type, ContentItem.type_key == url, ContentItem.permissions_for(request.user)).first() if content_item is None: raise NotFound() item_dict = self._item_dict(content_item) return self.render_to_response(request, [ "content/type/%s/view.html" % (item_dict["type"],), "content/type/%s/view.html" % (item_dict["base_type"],), ], **{ "meta_properties" : { "og_description" : item_dict["description"], "og_image" : item_dict["image"], }, "breadcrumbs" : [item_dict["title"]], "body_class" : "view " + item_dict["base_type"] + " " + item_dict["type"], "item" : item_dict, })
def execute_feed(self, request, **kwargs): feed = self.feeds[kwargs["feed"]] format = kwargs.get("format", "html") f = self.feeds[kwargs["feed"]]["url"] q = db.query(ContentItem).filter(ContentItem.parent_id == None, ContentItem.type.in_(feed["types"]), ContentItem.permissions_for(request.user)).options(subqueryload("children"), subqueryload("comments"), subqueryload("tags")) t = [] if "tag" in kwargs: tag = db.query(Tag).filter(Tag.url == kwargs["tag"]).first() if tag is None: raise NotFound() f += "/tag/" + kwargs["tag"] q = q.filter(ContentItem.id.in_([content_item.id for content_item in tag.content_items])) t.append(tag.title) if feed["rss_allow"]: rss_url = config.url + "/" + feed["url"] + "/rss/" if feed["url"] != "" else config.url + "/rss/" rss_title = config.build_title(feed["title"]) if format == "rss": items = q.order_by(ContentItem.created_at.desc())[:feed["rss_items"]] rss = PyRSS2Gen.RSS2( title = rss_title, link = rss_url, description = "", lastBuildDate = datetime.now(), items = [ PyRSS2Gen.RSSItem( title = item_dict["title"], link = item_dict["url"], description = item_dict["description"], guid = PyRSS2Gen.Guid(item_dict["url"]), pubDate = item.created_at ) for item_dict in [self._item_dict(item) for item in items] ] ) rss_string = StringIO.StringIO() rss.write_xml(rss_string, "utf-8") return Response(rss_string.getvalue(), mimetype="application/rss+xml") else: rss_url = None rss_title = None if format == "json": count = int(request.args.get("count", "100")) if "before" in request.args: q = q.filter(ContentItem.created_at < dateutil.parser.parse(request.args["before"])).order_by(ContentItem.created_at.desc()) elif "after" in request.args: q = q.filter(ContentItem.created_at > dateutil.parser.parse(request.args["after"])).order_by(ContentItem.created_at) else: q = q.order_by(ContentItem.created_at.desc()) items = q[:count] else: title = [feed["title"]] + t if "page" in kwargs: page = kwargs["page"] items = list(reversed(q.order_by(ContentItem.created_at)[(page - 1) * feed["per_page"] : page * feed["per_page"]])) if len(items) == 0: raise NotFound() items_skipped = q.filter(ContentItem.created_at > items[0].created_at).count() else: page = None items = q.order_by(ContentItem.created_at.desc())[:feed["per_page"]] items_skipped = 0 dates = [created_at for (created_at,) in q.order_by(ContentItem.created_at).values(ContentItem.created_at)] pages = list(reversed([ ( page, dates[page * feed["per_page"]], dates[min((page + 1) * feed["per_page"], len(dates)) - 1] ) for page in xrange(0, int(ceil(float(len(dates)) / feed["per_page"]))) ])) seasons = [] month2season = { 1 : "winter", 2 : "winter", 3 : "spring", 4 : "spring", 5 : "spring", 6 : "summer", 7 : "summer", 8 : "summer", 9 : "autumn", 10 : "autumn", 11 : "autumn", 12 : "winter" } for date in dates: if len(seasons) == 0 or seasons[-1][0] != month2season[date.month]: seasons.append((month2season[date.month], 1)) else: seasons[-1] = (seasons[-1][0], seasons[-1][1] + 1) seasons = list(reversed(seasons)) items_formatted = [self._render_item_preview(request, kwargs["feed"], "DESC", item) for item in items] if format == "json": return Response(simplejson.dumps(items_formatted), mimetype="application/json") else: return self.render_to_response(request, [ "content/feed/%s/feed.html" % (kwargs["feed"],), "content/feed/feed.html", ], **{ "breadcrumbs" : title, "rss_url" : rss_url, "rss_title" : rss_title, "body_class" : "feed " + kwargs["feed"], "feed" : kwargs["feed"], "feed_url" : f.lstrip("/"), "items" : "".join(items_formatted), "items_skipped" : items_skipped, "pagination" : { "page" : page, "pages" : pages, "seasons" : seasons, "url" : re.sub("/page/([0-9]+)/", "/", request.path), "per_page" : feed["per_page"], }, })