diff options
Diffstat (limited to 'app.py')
-rwxr-xr-x | app.py | 36 |
1 files changed, 19 insertions, 17 deletions
@@ -8,6 +8,7 @@ from collections import defaultdict | |||
8 | 8 | ||
9 | from flask import Flask, render_template, jsonify, request, make_response | 9 | from flask import Flask, render_template, jsonify, request, make_response |
10 | 10 | ||
11 | DB_PATH = "/home/mcrute/.newsbeuter/cache.db" | ||
11 | app = Flask(__name__) | 12 | app = Flask(__name__) |
12 | 13 | ||
13 | 14 | ||
@@ -95,15 +96,14 @@ class DBReader(object): | |||
95 | ''' | 96 | ''' |
96 | 97 | ||
97 | def __init__(self, db_path): | 98 | def __init__(self, db_path): |
98 | self.db_path = db_path | 99 | self.con = sqlite3.connect(db_path) |
100 | self.con.row_factory = RSSItem.from_db_row | ||
99 | 101 | ||
100 | def _get_connection(self): | 102 | def close(self): |
101 | conn = sqlite3.connect(self.db_path) | 103 | return self.con.close() |
102 | conn.row_factory = RSSItem.from_db_row | ||
103 | return conn | ||
104 | 104 | ||
105 | def _fetch(self, where=None, params=()): | 105 | def _fetch(self, where=None, params=()): |
106 | with self._get_connection() as con: | 106 | with self.con as con: |
107 | curs = con.cursor() | 107 | curs = con.cursor() |
108 | args = { 'where': '', 'where_cond': '' } | 108 | args = { 'where': '', 'where_cond': '' } |
109 | 109 | ||
@@ -114,7 +114,7 @@ class DBReader(object): | |||
114 | return curs.fetchall() | 114 | return curs.fetchall() |
115 | 115 | ||
116 | def update_unread(self, id, unread=True): | 116 | def update_unread(self, id, unread=True): |
117 | with self._get_connection() as con: | 117 | with self.con as con: |
118 | con.execute( | 118 | con.execute( |
119 | 'UPDATE rss_item SET unread = ? WHERE id = ?', | 119 | 'UPDATE rss_item SET unread = ? WHERE id = ?', |
120 | [1 if unread else 0, id]) | 120 | [1 if unread else 0, id]) |
@@ -139,14 +139,14 @@ class DBReader(object): | |||
139 | return self._fetch("i.feedurl = ?", [RSSFeed.parse_token(token)]) | 139 | return self._fetch("i.feedurl = ?", [RSSFeed.parse_token(token)]) |
140 | 140 | ||
141 | def get_feeds(self): | 141 | def get_feeds(self): |
142 | with self._get_connection() as con: | 142 | with self.con as con: |
143 | con.row_factory = RSSFeed.from_db_row | 143 | con.row_factory = RSSFeed.from_db_row |
144 | curs = con.cursor() | 144 | curs = con.cursor() |
145 | curs.execute('SELECT rssurl, url, title FROM rss_feed') | 145 | curs.execute('SELECT rssurl, url, title FROM rss_feed') |
146 | return curs.fetchall() | 146 | return curs.fetchall() |
147 | 147 | ||
148 | def get_feed(self, token): | 148 | def get_feed(self, token): |
149 | with self._get_connection() as con: | 149 | with self.con as con: |
150 | con.row_factory = RSSFeed.from_db_row | 150 | con.row_factory = RSSFeed.from_db_row |
151 | curs = con.cursor() | 151 | curs = con.cursor() |
152 | curs.execute('SELECT rssurl, url, title FROM rss_feed WHERE rssurl = ?', [RSSFeed.parse_token(token)]) | 152 | curs.execute('SELECT rssurl, url, title FROM rss_feed WHERE rssurl = ?', [RSSFeed.parse_token(token)]) |
@@ -159,38 +159,40 @@ def json_list(data): | |||
159 | 159 | ||
160 | @app.route('/') | 160 | @app.route('/') |
161 | def index(): | 161 | def index(): |
162 | reader = DBReader('../../cache.db') | 162 | reader = DBReader(DB_PATH) |
163 | return render_template('items.html', items=reader.get_unread()) | 163 | return render_template('items.html', items=reader.get_unread()) |
164 | 164 | ||
165 | 165 | ||
166 | @app.route('/feed/') | 166 | @app.route('/feed/') |
167 | def feed_list(): | 167 | def feed_list(): |
168 | reader = DBReader('../../cache.db') | 168 | reader = DBReader(DB_PATH) |
169 | return jsonify({ 'feeds': json_list(reader.get_feeds()) }) | 169 | return jsonify({ 'feeds': json_list(reader.get_feeds()) }) |
170 | 170 | ||
171 | 171 | ||
172 | @app.route('/feed/<token>') | 172 | @app.route('/feed/<token>') |
173 | def feed(token): | 173 | def feed(token): |
174 | reader = DBReader('../../cache.db') | 174 | reader = DBReader(DB_PATH) |
175 | return jsonify(reader.get_feed(token).to_json()) | 175 | return jsonify(reader.get_feed(token).to_json()) |
176 | 176 | ||
177 | 177 | ||
178 | @app.route('/feed/<token>/items') | 178 | @app.route('/feed/<token>/items') |
179 | def feed_items(token): | 179 | def feed_items(token): |
180 | reader = DBReader('../../cache.db') | 180 | reader = DBReader(DB_PATH) |
181 | return jsonify({ 'items': json_list(reader.get_unread_for_feed(token)) }) | 181 | unread = reader.get_unread_for_feed(token) |
182 | return jsonify({ 'items': json_list(unread), "count": len(unread) }) | ||
182 | 183 | ||
183 | 184 | ||
184 | @app.route('/feed/<token>/items/unread') | 185 | @app.route('/feed/<token>/items/unread') |
185 | def unread_feed_items(token): | 186 | def unread_feed_items(token): |
186 | reader = DBReader('../../cache.db') | 187 | reader = DBReader(DB_PATH) |
187 | return jsonify({ 'items': json_list(reader.get_unread_for_feed(token, True)) }) | 188 | unread = reader.get_unread_for_feed(token, True) |
189 | return jsonify({ 'items': json_list(unread), "count": len(unread) }) | ||
188 | 190 | ||
189 | 191 | ||
190 | @app.route("/item/<int:entry_id>", methods=["GET", "POST"]) | 192 | @app.route("/item/<int:entry_id>", methods=["GET", "POST"]) |
191 | def item(entry_id): | 193 | def item(entry_id): |
192 | #post read=1 | 194 | #post read=1 |
193 | reader = DBReader('../../cache.db') | 195 | reader = DBReader(DB_PATH) |
194 | 196 | ||
195 | if request.method == 'POST': | 197 | if request.method == 'POST': |
196 | try: | 198 | try: |