Exemplo n.º 1
0
    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
Exemplo n.º 3
0
 
    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()
Exemplo n.º 5
0
    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,
        })
Exemplo n.º 6
0
    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"],
                                        },
            })