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 []
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')
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)
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)
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)
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))
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)
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
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()
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)
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)
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()
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)
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)
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
def main(request): exc = session.query(Exception).order_by(Exception.date.desc()).all() return display_plain_template('admin/exceptions', exc=exc)
def main(request): cats = session.query(Category).all() return display_plain_template('admin/categories', cats=cats)
def compute_main(): news = session.query(News).order_by(News.timestamp.desc()).all() return render_template('news', news=news)
def main(request): fof = session.query(FouroFour).order_by(FouroFour.date.desc()).all() return display_plain_template('admin/404', fof=fof)
def compute_sitemap(): series = session.query(ArticleSeries).order_by(ArticleSeries.name).all() return render_template('sitemap', pages=PAGES, series=series)