Exemplo n.º 1
0
def related_posts(post, n=10):
    posts_tags = get_posts_tags()
    this_post_tags = set(posts_tags[post.page_id])
    similarity = []
    for page_id in posts_tags:
        if page_id == post.page_id:
            continue
        score = jaccard_metric(this_post_tags, set(posts_tags[page_id]))
        similarity.append([page_id, score])
    top = sorted(similarity, key=lambda (page_id, score): score, reverse=True)
    for_in = []
    found = 0
    for page_id, score in top:
        if score == 0: break
        if session.query(BlogPage).filter_by(page_id=page_id).count() == 0:
            continue
        for_in.append(page_id)
        found = found + 1
        if found == n:
            break
    ret = []
    if for_in:
        pages = session.query(Page).join(BlogPage).filter(Page.page_id.in_(for_in)).all()
        d = dict([p.page_id, p] for p in pages)
        return [d[id] for id in for_in]
    return []
Exemplo n.º 2
0
def delete_comment(request):
    number = re.compile("^[0-9]+$");
    id = request.args.get('id');
    if number.match(id):
        session.query(Comment).filter_by(comment_id=int(id)).delete()

    return Response('foo', mimetype='text/plain')
Exemplo n.º 3
0
def main(request, page_id):
    if request.method == "GET":
        page = session.query(Page).filter_by(page_id=page_id).first()
        cats = session.query(Category).all()
        return display_plain_template('admin/edit_page', page=page, cats=cats)

    if 'submit' in request.form:
        return edit_page_submit(request, page_id)
    elif 'publish' in request.form:
        return publish_page(request, page_id)
    elif 'preview' in request.form:
        return edit_page_preview(request, page_id)
Exemplo n.º 4
0
def publish_page(request, page_id):
    page = session.query(Page).filter_by(page_id=page_id).first()
    status = request.form['status']

    if status == 'page':
        page.status = 'page'
        page.save()
    elif status == 'post':
        page.category.count = Category.count + 1
        page.status = 'post'
        publish_date = datetime.strptime(request.form['publish_date'], '%Y-%m-%d %H:%M:%S')
        Rss(page, publish_date).save()
        BlogPage(page, publish_date).save()
        page.save()

    if status == 'page' or status == 'post':
        if config.use_cache:
            cache_del('individual_page_%s' % page.request_path)
            cache_del('page_list')
            cache_del('index_page_1')
            cache_del('posts_tags')
            if status == 'post':
                cache_del('atom_feed')
            # TODO: optimize cache invalidation method, and invalidate tags and categories

        draft_tags = page.get_meta('draft_tags')
        if draft_tags:
            tags = tag_list(draft_tags)
            for tag in tags:
                seo_name = tag.replace(' ', '-')
                page.add_tag(Tag(tag, seo_name))
        page.delete_meta('draft_tags')

    return redirect('/admin/edit_page/%d' % page.page_id)
Exemplo n.º 5
0
def main(request):
    if request.method == "GET":
        cats = session.query(Category).all()
        return display_plain_template('admin/new_page', cats=cats)
    if 'submit' in request.form:
        page = new_page(request)
        return redirect('/admin/edit_page/%d' % page.page_id)
Exemplo n.º 6
0
def edit_page_preview(request, page_id):
    session.autoflush = False

    page = session.query(Page).filter_by(page_id=page_id).first()
    page_cat = session.query(Category).filter_by(category_id=request.form['cat_id']).first()

    page.title = request.form['title']
    page.content = request.form['content']
    page.excerpt = request.form['excerpt']
    page.category = page_cat

    map = MakoDict({
            'page':         page,
            'request_path': page.request_path
    })
    return display_page(default_page_template_data(request, map))
Exemplo n.º 7
0
def main(request):
    query = session.query(Comment).order_by(Comment.comment_id.desc());

    if (request.args.get('page')):
        query = query.slice(int(request.args.get('page'))*100, (int(request.args.get('page'))+1)*100)
        all_comments = query
    else:
        all_comments = query.limit(100)
    return display_plain_template('admin/comments', comments=all_comments)
Exemplo n.º 8
0
def payment_already_completed(payment):
    payments = session.query(PayPalPayments) \
        .filter_by(transaction_id=payment.transaction_id) \
        .all()

    for existing_payment in payments:
        if existing_payment.transaction_id == payment.transaction_id:
            if existing_payment.status == 'completed':
                return True
    return False
Exemplo n.º 9
0
def handle_free_payments():
    new_payments = session.query(PayPalPayments) \
        .filter_by(status='free') \
        .order_by(PayPalPayments.payment_id) \
        .all()

    for payment in new_payments:
        now = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
        print "[%s] Processing free payment (id: %s, trx_id: %s) for %s from %s." % (now, payment.payment_id, payment.transaction_id, payment.product_type, payment.payer_email)
        Products[payment.product_type]['handler'](payment)
        payment.status = 'completed_free'
        session.commit()
Exemplo n.º 10
0
def main(request):
    query = session.query(Page)

    if request.args.get('unpublished') is not None:
        query = query.filter_by(status='draft')
    elif request.args.get('posts') is not None:
        query = query.filter_by(status='post')
    elif request.args.get('pages') is not None:
        query = query.filter_by(status='page')

    all_pages = query.order_by(Page.page_id).all()
    return display_plain_template('admin/pages', pages=all_pages)
Exemplo n.º 11
0
def edit_page_submit(request, page_id):
    page = session.query(Page).filter_by(page_id=page_id).first()
    page_cat = session.query(Category).filter_by(category_id=request.form['cat_id']).first()

    page.title        = request.form['title']
    page.content      = request.form['content']
    page.excerpt      = request.form['excerpt']
    page.request_path = request.form['request_path']
    page.category     = page_cat
    page.last_update  = datetime.utcnow()

    if page.status == 'draft':
        page.set_meta('draft_tags', request.form['tags'])
    else:
        new_tags = set(tag_list(request.form['tags']))
        old_tags = set([t.name for t in page.tags])

        removed_tags = old_tags-new_tags
        if removed_tags:
            for tag in removed_tags:
                page.delete_tag(tag)

        new_tags = new_tags-old_tags
        if new_tags:
            for tag in new_tags:
                seo_name = tag.replace(' ', '-')
                page.add_tag(Tag(tag, seo_name))

    page.save()
    if config.use_cache:
        cache_del('posts_tags')
        if page.request_path:
            cache_del('individual_page_%s' % page.request_path)

    change_note = request.form['change_note'].strip()
    if change_note:
        Revision(page, change_note).save()

    cats = session.query(Category).all()
    return display_plain_template('admin/edit_page', page=page, cats=cats)
Exemplo n.º 12
0
def handle_new_payments():
    new_payments = session.query(PayPalPayments) \
        .filter_by(status='new') \
        .order_by(PayPalPayments.payment_id) \
        .all()

    for payment in new_payments:
        now = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
        print "[%s] Processing new payment (id: %s, trx_id: %s) for %s from %s." % (now, payment.payment_id, payment.transaction_id, payment.product_type, payment.payer_email)
        if payment_already_completed(payment):
            print "Payment (id: %s, trx_id: %s) has already been completed." % (payment.payment_id, payment.transaction_id)
            payment.status = 'already_completed'
            session.commit()
            continue

        if payment.product_type not in Products:
            print "Unknown product type %s for payment (id: %s, trx_id: %s)" % (payment.product_type, payment.payment_id, payment.transaction_id)
            payment.status = 'unknown_product'
            session.commit()
            continue

        if not valid_paypal_payment(payment):
            print "Payment (id: %s, trx_id: %s) is invalid." % (payment.payment_id, payment.transaction_id)
            payment.status = 'invalid'
            session.commit()
            continue

        if not completed_paypal_payment(payment):
            print "Payment (id: %s, trx_id: %s) has PayPal status %s (not 'Completed')." % (payment.payment_id, payment.transaction_id, payment.payment_status)
            payment.status = 'not_paypal_completed'
            session.commit()
            continue

        if not correct_price(payment):
            print "Payment (id: %s, trx_id: %s) has wrong price (has: %s, should be: %s)." % (payment.payment_id, payment.transaction_id, payment.mc_gross, Products[payment.product_type]['price'])
            payment.status = 'wrong_price'
            session.commit()
            continue

        Products[payment.product_type]['handler'](payment)
        payment.status = 'completed'
        session.commit()
Exemplo n.º 13
0
def main(request):
    query = session.query(Page)

    if request.args.get('type') == 'unpublished':
        query = query.filter_by(status='draft')
    elif request.args.get('type') == 'posts':
        query = query.filter_by(status='post')
    elif request.args.get('type') == 'pages':
        query = query.filter_by(status='page')

    if request.args.get('sort') == 'id_desc' or request.args.get('sort') is None:
        query = query.order_by(Page.page_id.desc())
    elif request.args.get('sort') == 'id_asc':
        query = query.order_by(Page.page_id.asc())
    elif request.args.get('sort') == 'created_asc':
        query = query.order_by(Page.created.asc())
    elif request.args.get('sort') == 'created_desc':
        query = query.order_by(Page.created.desc())

    all_pages = query.order_by(Page.page_id).all()
    return display_plain_template('admin/pages', pages=all_pages)
Exemplo n.º 14
0
def compute_single(seo_name):
    series = session.query(ArticleSeries).filter_by(seo_name=seo_name).first()
    if not series:
        # TODO: better not-found message
        raise NotFound
    return render_template('series', series=series, number_to_us=number_to_us)
Exemplo n.º 15
0
def get_posts_tags():
    posts_tags = session.query(page_tags_table).all()
    ret = defaultdict(list)
    for page_id, tag_id in posts_tags:
        ret[page_id].append(tag_id)
    return ret
Exemplo n.º 16
0
def main(request):
    exc = session.query(Exception).order_by(Exception.date.desc()).all()
    return display_plain_template('admin/exceptions', exc=exc)
Exemplo n.º 17
0
def main(request):
    cats = session.query(Category).all()
    return display_plain_template('admin/categories', cats=cats)
Exemplo n.º 18
0
def compute_main():
    news = session.query(News).order_by(News.timestamp.desc()).all()
    return render_template('news', news=news)
Exemplo n.º 19
0
def main(request):
    fof = session.query(FouroFour).order_by(FouroFour.date.desc()).all()
    return display_plain_template('admin/404', fof=fof)
Exemplo n.º 20
0
def compute_sitemap():
    series = session.query(ArticleSeries).order_by(ArticleSeries.name).all()
    return render_template('sitemap', pages=PAGES, series=series)