diff --git a/CHANGELOG b/CHANGELOG index 6f6b399..3f8dcb0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,12 @@ +Buku v3.X +Unreleased + +What's in? +- Several dependencies is now required on installation +- Bukuserver will use Flask-Admin + +------------------------------------------------------------------------------- + Buku v3.8 2018-05-24 diff --git a/bukuserver/README.md b/bukuserver/README.md index 71ea0a6..fed8533 100644 --- a/bukuserver/README.md +++ b/bukuserver/README.md @@ -71,36 +71,42 @@ ENV BUKUSERVER_PER_PAGE=100


-home page +home page

home page



-index page +index page

bookmark stats



-index page +index page

-

bookmark page (1)

+

bookmark page



-index page +index page

-

bookmark page (2)

+

create bookmark



-index page +index page

-

bookmark edit page

+

edit bookmark



-index page +index page +

+

view bookmark details

+ +



+

+index page

tag page

diff --git a/bukuserver/server.py b/bukuserver/server.py index 61481ec..5f0bfcb 100644 --- a/bukuserver/server.py +++ b/bukuserver/server.py @@ -3,7 +3,6 @@ """Server module.""" import os import sys -from collections import Counter from urllib.parse import urlparse from buku import BukuDb, __version__, network_handler @@ -13,7 +12,6 @@ from flask_api import exceptions, FlaskAPI, status from flask_bootstrap import Bootstrap from flask_paginate import Pagination, get_page_parameter, get_per_page_parameter from markupsafe import Markup -import arrow import click import flask from flask import ( @@ -466,93 +464,6 @@ def search_bookmarks(): return res -def view_statistic(): - bukudb = getattr(flask.g, 'bukudb', BukuDb()) - global STATISTIC_DATA - statistic_data = STATISTIC_DATA - if not statistic_data or request.method == 'POST': - all_bookmarks = bukudb.get_rec_all() - netloc = [urlparse(x[1]).netloc for x in all_bookmarks] - tag_set = [x[3] for x in all_bookmarks] - tag_items = [] - for tags in tag_set: - tag_items.extend([x.strip() for x in tags.split(',') if x.strip()]) - tag_counter = Counter(tag_items) - title_items = [x[2] for x in all_bookmarks] - title_counter = Counter(title_items) - statistic_datetime = arrow.now() - STATISTIC_DATA = { - 'datetime': statistic_datetime, - 'netloc': netloc, - 'tag_counter': tag_counter, - 'title_counter': title_counter, - } - else: - netloc = statistic_data['netloc'] - statistic_datetime = statistic_data['datetime'] - tag_counter = statistic_data['tag_counter'] - title_counter = statistic_data['title_counter'] - - netloc_counter = Counter(netloc) - unique_netloc_len = len(set(netloc)) - colors = [ - "#F7464A", "#46BFBD", "#FDB45C", "#FEDCBA", - "#ABCDEF", "#DDDDDD", "#ABCABC", "#4169E1", - "#C71585", "#FF4500", "#FEDCBA", "#46BFBD"] - show_netloc_table = False - if unique_netloc_len > len(colors): - max_netloc_item = len(colors) - netloc_colors = colors - show_netloc_table = True - else: - netloc_colors = colors[:unique_netloc_len] - max_netloc_item = unique_netloc_len - most_common_netlocs = netloc_counter.most_common(max_netloc_item) - most_common_netlocs = [ - [val[0], val[1], netloc_colors[idx]] for idx, val in enumerate(most_common_netlocs)] - - unique_tag_len = len(tag_counter) - show_tag_rank_table = False - if unique_tag_len > len(colors): - max_tag_item = len(colors) - tag_colors = colors - show_tag_rank_table = True - else: - tag_colors = colors[:unique_tag_len] - max_tag_item = unique_tag_len - most_common_tags = tag_counter.most_common(max_tag_item) - most_common_tags = [ - [val[0], val[1], tag_colors[idx]] for idx, val in enumerate(most_common_tags)] - - unique_title_len = len(title_counter) - show_title_rank_table = False - if unique_title_len > len(colors): - max_title_item = len(colors) - title_colors = colors - show_title_rank_table = True - else: - title_colors = colors[:unique_title_len] - max_title_item = unique_title_len - most_common_titles = title_counter.most_common(max_title_item) - most_common_titles = [ - [val[0], val[1], title_colors[idx]] for idx, val in enumerate(most_common_titles)] - - return render_template( - 'bukuserver/statistic.html', - most_common_netlocs=most_common_netlocs, - netloc_counter=netloc_counter, - show_netloc_table=show_netloc_table, - most_common_tags=most_common_tags, - tag_counter=tag_counter, - show_tag_rank_table=show_tag_rank_table, - most_common_titles=most_common_titles, - title_counter=title_counter, - show_title_rank_table=show_title_rank_table, - datetime=statistic_datetime, - datetime_text=statistic_datetime.humanize(arrow.now(), granularity='second'), - ) - - def create_app(config_filename=None): """create app.""" app = FlaskAPI(__name__) diff --git a/bukuserver/views.py b/bukuserver/views.py index 3298442..7173929 100644 --- a/bukuserver/views.py +++ b/bukuserver/views.py @@ -81,10 +81,11 @@ class BookmarkModelView(BaseModelView): netloc, scheme = parsed_url.netloc, parsed_url.scheme is_scheme_valid = scheme in ('http', 'https') tag_text = [] - tag_tmpl = '{0}' + tag_tmpl = '{0}' for tag in model.tags.split(','): if tag: - tag_text.append(tag_tmpl.format(tag)) + tag_text.append(tag_tmpl.format(tag, url_for( + 'bookmark.index_view', flt2_tags_contain=tag))) if not netloc: return Markup("""\ {0.title}
{2}
{1}{0.description} @@ -100,13 +101,21 @@ class BookmarkModelView(BaseModelView): else: res += title if self.url_render_mode == 'netloc': - res += ' ({})'.format(netloc) + res += ' ({0})'.format( + netloc, + url_for('bookmark.index_view', flt2_url_netloc_match=netloc) + ) res += '
' if not is_scheme_valid: res += model.url elif self.url_render_mode is None or self.url_render_mode == 'full': res += '{0.url}'.format(model) res += '
' + if self.url_render_mode != 'netloc': + res += tag_tmpl.format( + 'netloc:{}'.format(netloc), + url_for('bookmark.index_view', flt2_url_netloc_match=netloc) + ) res += ''.join(tag_text) description = model.description if description: @@ -469,7 +478,7 @@ class TagModelView(BaseModelView): class StatisticView(BaseView): # pylint: disable=too-few-public-methods - @expose('/') + @expose('/', methods=('GET', 'POST')) def index(self): bukudb = BukuDb() global STATISTIC_DATA