NEW(server) add db path option

add environment variable to configure alternative
db-file path for bukuserver
This commit is contained in:
Chris Drexler 2018-12-13 12:25:52 +01:00
parent 35f4620f55
commit ba79c13ef1
3 changed files with 23 additions and 15 deletions

View File

@ -55,6 +55,7 @@ Following are available os env config available for bukuserver.
| PER_PAGE | bookmarks per page | positive integer [default: 10] |
| SECRET_KEY | server secret key | string [default: os.urandom(24)] |
| URL_RENDER_MODE | url render mode | `full` or `netloc` [default: `full`] |
| DB | full path to db file | path string [default: standard path for buku] |
Note: `BUKUSERVER_` is the common prefix.

View File

@ -37,7 +37,7 @@ STATISTIC_DATA = None
def get_tags():
"""get tags."""
tags = getattr(flask.g, 'bukudb', BukuDb()).get_tag_all()
tags = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).get_tag_all()
result = {
'tags': tags[0]
}
@ -62,13 +62,13 @@ def network_handle_detail():
def tag_list():
tags = BukuDb().get_tag_all()
tags = BukuDb(current_app.config.get('BUKUSERVER_DB')).get_tag_all()
result = {'tags': tags[0]}
return result
def tag_detail(tag):
bukudb = BukuDb()
bukudb = BukuDb(current_app.config.get('BUKUSERVER_DB'))
if request.method == 'GET':
tags = bukudb.get_tag_all()
if tag not in tags[1]:
@ -92,7 +92,7 @@ def update_tag(tag):
res = None
if request.method in ('PUT', 'POST'):
new_tags = request.form.getlist('tags')
result_flag = getattr(flask.g, 'bukudb', BukuDb()).replace_tag(tag, new_tags)
result_flag = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).replace_tag(tag, new_tags)
op_text = 'replace tag [{}] with [{}]'.format(tag, ', '.join(new_tags))
if request.method == 'PUT' and result_flag and request.path.startswith('/api/'):
res = jsonify(response.response_template['success']), status.HTTP_200_OK, {'ContentType': 'application/json'}
@ -112,7 +112,7 @@ def update_tag(tag):
def bookmarks():
"""Bookmarks."""
res = None
bukudb = getattr(flask.g, 'bukudb', BukuDb())
bukudb = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB')))
page = request.args.get(get_page_parameter(), type=int, default=1)
per_page = request.args.get(
get_per_page_parameter(),
@ -208,7 +208,7 @@ def refresh_bookmarks():
if request.method == 'POST':
print(request.form['index'])
print(request.form['threads'])
result_flag = getattr(flask.g, 'bukudb', BukuDb()).refreshdb(request.form['index'], request.form['threads'])
result_flag = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).refreshdb(request.form['index'], request.form['threads'])
if result_flag:
res = jsonify(response.response_template['success']), status.HTTP_200_OK, {'ContentType': 'application/json'}
else:
@ -223,7 +223,7 @@ def bookmark_api(id):
except ValueError:
return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \
{'ContentType': 'application/json'}
bukudb = getattr(flask.g, 'bukudb', BukuDb())
bukudb = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB')))
bookmark_form = forms.BookmarkForm()
is_html_post_request = request.method == 'POST' and not request.path.startswith('/api/')
if request.method == 'GET':
@ -286,7 +286,7 @@ def refresh_bookmark(id):
{'ContentType': 'application/json'}
res = None
if request.method == 'POST':
result_flag = getattr(flask.g, 'bukudb', BukuDb()).refreshdb(id, request.form['threads'])
result_flag = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).refreshdb(id, request.form['threads'])
if result_flag:
res = jsonify(response.response_template['success']), status.HTTP_200_OK, {'ContentType': 'application/json'}
else:
@ -302,7 +302,7 @@ def get_tiny_url(id):
{'ContentType': 'application/json'}
res = None
if request.method == 'GET':
shortened_url = getattr(flask.g, 'bukudb', BukuDb()).tnyfy_url(id)
shortened_url = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).tnyfy_url(id)
if shortened_url is not None:
result = {
'url': shortened_url
@ -322,7 +322,7 @@ def get_long_url(id):
res = None
if request.method == 'GET':
bookmark = getattr(flask.g, 'bukudb', BukuDb()).get_rec_by_id(id)
bookmark = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB'))).get_rec_by_id(id)
if bookmark is not None:
result = {
'url': bookmark[1],
@ -342,7 +342,7 @@ def bookmark_range_operations(starting_id, ending_id):
return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \
{'ContentType': 'application/json'}
res = None
bukudb = getattr(flask.g, 'bukudb', BukuDb())
bukudb = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB')))
max_id = bukudb.get_max_id()
if starting_id > max_id or ending_id > max_id:
return jsonify(response.response_template['failure']), status.HTTP_400_BAD_REQUEST, \
@ -408,7 +408,7 @@ def search_bookmarks():
regex = search_bookmarks_form.regex.data
result = {'bookmarks': []}
bukudb = getattr(flask.g, 'bukudb', BukuDb())
bukudb = getattr(flask.g, 'bukudb', BukuDb(current_app.config.get('BUKUSERVER_DB')))
found_bookmarks = bukudb.searchdb(keywords, all_keywords, deep, regex)
found_bookmarks = [] if found_bookmarks is None else found_bookmarks
page = request.args.get(get_page_parameter(), type=int, default=1)
@ -475,7 +475,8 @@ def create_app(config_filename=None):
url_render_mode = views.DEFAULT_URL_RENDER_MODE
app.config['BUKUSERVER_URL_RENDER_MODE'] = url_render_mode
app.config['SECRET_KEY'] = os.getenv('BUKUSERVER_SECRET_KEY') or os.urandom(24)
bukudb = BukuDb()
app.config['BUKUSERVER_DB'] = os.getenv('BUKUSERVER_DB')
bukudb = BukuDb(dbfile=app.config['BUKUSERVER_DB'])
app.app_context().push()
setattr(flask.g, 'bukudb', bukudb)
@ -513,7 +514,8 @@ def create_app(config_filename=None):
bukudb, 'Bookmarks', page_size=per_page, url_render_mode=url_render_mode))
admin.add_view(views.TagModelView(
bukudb, 'Tags', page_size=per_page))
admin.add_view(views.StatisticView('Statistic', endpoint='statistic'))
admin.add_view(views.StatisticView(
bukudb, 'Statistic', endpoint='statistic'))
return app

View File

@ -482,9 +482,14 @@ class TagModelView(BaseModelView):
class StatisticView(BaseView): # pylint: disable=too-few-public-methods
def __init__(self, *args, **kwargs):
self.bukudb = args[0]
args = list(args[1:])
super().__init__(*args, **kwargs)
@expose('/', methods=('GET', 'POST'))
def index(self):
bukudb = BukuDb()
bukudb = self.bukudb
global STATISTIC_DATA
statistic_data = STATISTIC_DATA
if not statistic_data or request.method == 'POST':