This repository has been archived by the owner on Apr 27, 2019. It is now read-only.
/
handler.py
82 lines (66 loc) · 2.17 KB
/
handler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from multiprocessing import Pool
from sqlalchemy import desc
from base import Base
from schema import Session, Feed, Post
from datetime import datetime as dt
from datetime import timedelta
from config import max_post_age
from parser import parse_one
class Index(Base):
def get(self):
posts = Session.query(Post).filter_by(read=False).order_by(
desc(Post.published))
return self.render('index.html', posts=posts)
class FeedDelete(Base):
# TODO: rewrite to post or better: delete (if that is possible?)
def get(self, id):
# sqlite won't cascade-delete the posts
Session.query(Post).filter_by(feed_id=id).delete()
Session.query(Feed).filter_by(id=id).delete()
Session.commit()
Session.close()
return self.redirect('/')
class FeedEdit(Base):
def get(self, id):
feed = Session.query(Feed).filter_by(id=id).one()
return self.render('feed_edit.html', feed=feed)
def post(self, id):
feed = Session.query(Feed).filter_by(id=id).one()
feed.title = self.get_argument('name')
feed.url = self.get_argument('url')
Session.commit()
Session.close()
return self.redirect('/')
class FeedAdd(Base):
def get(self):
return self.render('feed_add.html')
def post(self):
name = self.get_argument('name')
url = self.get_argument('url')
feed = Feed()
feed.title = name
feed.url = url
Session.add(feed)
Session.commit()
return self.render('index.html')
class MarkAsRead(Base):
def get(self):
for post in Session.query(Post).filter_by(read=False):
post.read = True
Session.commit()
Session.close()
return self.redirect('/')
class Refresh(Base):
def get(self):
Session.query(Post).filter(
Post.updated <= dt.now() - timedelta(days=max_post_age)).delete()
feeds = Session.query(Feed.id).all()
Session.close()
p = Pool(10)
p.map_async(parse_one, (f.id for f in feeds))
p.close()
p.join()
self.redirect('/')
return