From 4db3882f73218ae06cca0b8a0ec1fd9fdd52685c Mon Sep 17 00:00:00 2001 From: Choi Bochul Date: Thu, 16 Oct 2014 15:54:22 +0900 Subject: [PATCH 01/32] Prepare not using Cursor --- earthreader/web/__init__.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/earthreader/web/__init__.py b/earthreader/web/__init__.py index 5bdc7e3..9ee4909 100644 --- a/earthreader/web/__init__.py +++ b/earthreader/web/__init__.py @@ -89,6 +89,30 @@ def join_id(self, append): return '-' + append +def get_category(category_id): + with stage: + category = (stage.subscriptions if stage.subscriptions + else SubscriptionList()) + if category_id: + path = get_category_path(category_id) + for key in path: + try: + category = category.categories[key] + except KeyError: + raise InvalidCategoryID('The given category ID is not valid') + return category + + +def get_category_path(category_id): + return [key[1:] for key in category_id.split('/')] + + +def join_category_id(base, append): + if base: + return base + '/-' + append + return '-' + append + + def add_urls(data, keys, category_id, feed_id=None, entry_id=None): APIS = { 'entries_url': 'category_entries', From 4cab41c5339bea63d3623ed10be8728d23b6bed5 Mon Sep 17 00:00:00 2001 From: Choi Bochul Date: Thu, 16 Oct 2014 15:55:58 +0900 Subject: [PATCH 02/32] Use Category, not Cursor in feeds API --- earthreader/web/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/earthreader/web/__init__.py b/earthreader/web/__init__.py index 9ee4909..6fe2290 100644 --- a/earthreader/web/__init__.py +++ b/earthreader/web/__init__.py @@ -165,7 +165,7 @@ def index(): @app.route('/feeds/', defaults={'category_id': ''}) @app.route('//feeds/') def feeds(category_id): - cursor = Cursor(category_id) + cursor = get_category(category_id) feeds = [] categories = [] for child in cursor: From 1d9b750550c02e9ceb1b1ba8773126721742439b Mon Sep 17 00:00:00 2001 From: Choi Bochul Date: Thu, 16 Oct 2014 15:56:39 +0900 Subject: [PATCH 03/32] Extract functions in feeds API --- earthreader/web/__init__.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/earthreader/web/__init__.py b/earthreader/web/__init__.py index 6fe2290..472f61a 100644 --- a/earthreader/web/__init__.py +++ b/earthreader/web/__init__.py @@ -169,21 +169,31 @@ def feeds(category_id): feeds = [] categories = [] for child in cursor: - data = {'title': child.label} if isinstance(child, Subscription): - url_keys = ['entries_url', 'remove_feed_url'] - add_urls(data, url_keys, cursor.category_id, child.feed_id) - add_path_data(data, cursor.category_id, child.feed_id) - feeds.append(data) + feeds.append(get_feed_data(category_id, child)) elif isinstance(child, Category): - url_keys = ['feeds_url', 'entries_url', 'add_feed_url', - 'add_category_url', 'remove_category_url', 'move_url'] - add_urls(data, url_keys, cursor.join_id(child.label)) - add_path_data(data, cursor.join_id(child.label)) - categories.append(data) + categories.append(get_category_data(category_id, child)) return jsonify(feeds=feeds, categories=categories) +def get_feed_data(base_category_id, subscription): + feed_data = {'title': subscription.label} + url_keys = ['entries_url', 'remove_feed_url'] + add_urls(feed_data, url_keys, base_category_id, subscription.feed_id) + add_path_data(feed_data, base_category_id, subscription.feed_id) + return feed_data + + +def get_category_data(base_category_id, category): + label = category.label + category_data = {'title': label} + url_keys = ['feeds_url', 'entries_url', 'add_feed_url', + 'add_category_url', 'remove_category_url', 'move_url'] + add_urls(category_data, url_keys, join_category_id(base_category_id, label)) + add_path_data(category_data, join_category_id(base_category_id, label)) + return category_data + + @app.route('/feeds/', methods=['POST'], defaults={'category_id': ''}) @app.route('//feeds/', methods=['POST']) def add_feed(category_id): From 940caf34313420e42cf21dab8b007d124cfe2b88 Mon Sep 17 00:00:00 2001 From: Choi Bochul Date: Thu, 16 Oct 2014 16:00:41 +0900 Subject: [PATCH 04/32] Rename API function name. feeds -> list_in_category --- earthreader/web/__init__.py | 14 +++++++------- earthreader/web/templates/index.html | 2 +- tests/web_test.py | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/earthreader/web/__init__.py b/earthreader/web/__init__.py index 472f61a..2f1f7d3 100644 --- a/earthreader/web/__init__.py +++ b/earthreader/web/__init__.py @@ -116,7 +116,7 @@ def join_category_id(base, append): def add_urls(data, keys, category_id, feed_id=None, entry_id=None): APIS = { 'entries_url': 'category_entries', - 'feeds_url': 'feeds', + 'feeds_url': 'list_in_category', 'add_feed_url': 'add_feed', 'add_category_url': 'add_category', 'remove_category_url': 'delete_category', @@ -164,7 +164,7 @@ def index(): @app.route('/feeds/', defaults={'category_id': ''}) @app.route('//feeds/') -def feeds(category_id): +def list_in_category(category_id): cursor = get_category(category_id) feeds = [] categories = [] @@ -225,7 +225,7 @@ def add_feed(category_id): sub = cursor.subscribe(feed) stage.subscriptions = cursor.subscriptionlist stage.feeds[sub.feed_id] = feed - return feeds(category_id) + return list_in_category(category_id) @app.route('/', methods=['POST'], defaults={'category_id': ''}) @@ -237,7 +237,7 @@ def add_category(category_id): cursor.add(outline) with stage: stage.subscriptions = cursor.subscriptionlist - return feeds(category_id) + return list_in_category(category_id) @app.route('//', methods=['DELETE']) @@ -248,9 +248,9 @@ def delete_category(category_id): stage.subscriptions = cursor.subscriptionlist index = category_id.rfind('/') if index == -1: - return feeds('') + return list_in_category('') else: - return feeds(category_id[:index]) + return list_in_category(category_id[:index]) @app.route('/feeds//', methods=['DELETE'], @@ -274,7 +274,7 @@ def delete_feed(category_id, feed_id): return r with stage: stage.subscriptions = cursor.subscriptionlist - return feeds(category_id) + return list_in_category(category_id) @app.route('//feeds/', methods=['PUT']) diff --git a/earthreader/web/templates/index.html b/earthreader/web/templates/index.html index e5e97bd..e271b8c 100644 --- a/earthreader/web/templates/index.html +++ b/earthreader/web/templates/index.html @@ -7,7 +7,7 @@ href="{{ url_for('static', filename='img/favicon_32.ico')}}"/>