added CSS variables and exporting pages
This commit is contained in:
parent
eef7f001d5
commit
9e8e6e0eec
8 changed files with 167 additions and 55 deletions
71
app.py
71
app.py
|
|
@ -15,7 +15,7 @@ Application is kept compact, with all its core in a single file.
|
|||
from flask import (
|
||||
Flask, Markup, abort, flash, g, jsonify, make_response, redirect, request,
|
||||
render_template, send_from_directory)
|
||||
from flask_login import LoginManager, login_user, logout_user
|
||||
from flask_login import LoginManager, login_user, logout_user, current_user
|
||||
from flask_wtf import CSRFProtect
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.routing import BaseConverter
|
||||
|
|
@ -767,8 +767,8 @@ def stats():
|
|||
return render_template('stats.html',
|
||||
notes_count=Page.select().count(),
|
||||
notes_with_url=Page.select().where(Page.url != None).count(),
|
||||
#upload_count=Upload.select().count(),
|
||||
revision_count=PageRevision.select().count()
|
||||
revision_count=PageRevision.select().count(),
|
||||
users_count = User.select().count()
|
||||
)
|
||||
|
||||
## account management ##
|
||||
|
|
@ -852,6 +852,71 @@ def easter_y(y=None):
|
|||
else:
|
||||
return render_template('easter.html')
|
||||
|
||||
## import / export ##
|
||||
|
||||
class Exporter(object):
|
||||
def __init__(self):
|
||||
self.root = {'pages': [], 'users': {}}
|
||||
def add_page(self, p, include_history=True, include_users=False):
|
||||
pobj = {}
|
||||
pobj['title'] = p.title
|
||||
pobj['url'] = p.url
|
||||
pobj['tags'] = [tag.name for tag in p.tags]
|
||||
hist = []
|
||||
for rev in (p.revisions if include_history else [p.latest]):
|
||||
revobj = {}
|
||||
revobj['text'] = rev.text
|
||||
revobj['timestamp'] = rev.pub_date.timestamp()
|
||||
if include_users:
|
||||
revobj['user'] = rev.user_id
|
||||
if rev.user_id not in self.root['users']:
|
||||
self.root['users'][rev.user_id] = rev.user_info()
|
||||
else:
|
||||
revobj['user'] = None
|
||||
revobj['comment'] = rev.comment
|
||||
revobj['length'] = rev.length
|
||||
hist.append(revobj)
|
||||
pobj['history'] = hist
|
||||
self.root['pages'].append(pobj)
|
||||
def add_page_list(self, pl, include_history=True, include_users=False):
|
||||
for p in pl:
|
||||
self.add_page(p, include_history=include_history, include_users=include_users)
|
||||
def export(self):
|
||||
return json.dumps(self.root)
|
||||
|
||||
@app.route('/manage/export/', methods=['GET', 'POST'])
|
||||
def exportpages():
|
||||
if request.method == 'POST':
|
||||
raw_list = request.form['export-list']
|
||||
q_list = []
|
||||
for item in raw_list.split('\n'):
|
||||
item = item.strip()
|
||||
if len(item) < 2:
|
||||
continue
|
||||
if item.startswith('+'):
|
||||
q_list.append(Page.select().where(Page.id == item[1:]))
|
||||
elif item.startswith('#'):
|
||||
q_list.append(Page.select().join(PageTag, on=PageTag.page).where(PageTag.name == item[1:]))
|
||||
elif item.startswith('/'):
|
||||
q_list.append(Page.select().where(Page.url == item[1:].rstrip('/')))
|
||||
else:
|
||||
q_list.append(Page.select().where(Page.title == item))
|
||||
if not q_list:
|
||||
flash('Failed to export pages: The list is empty!')
|
||||
return render_template('exportpages.html')
|
||||
query = q_list.pop(0)
|
||||
while q_list:
|
||||
query |= q_list.pop(0)
|
||||
e = Exporter()
|
||||
e.add_page_list(query)
|
||||
return e.export(), {'Content-Type': 'application/json', 'Content-Disposition': 'attachment; ' +
|
||||
'filename=export-{}.json'.format(datetime.datetime.now().strftime('%Y%m%d-%H%M%S'))}
|
||||
return render_template('exportpages.html')
|
||||
|
||||
@app.route('/manage/import/', methods=['GET', 'POST'])
|
||||
def importpages():
|
||||
return render_template('importpages.html')
|
||||
|
||||
#### EXTENSIONS ####
|
||||
|
||||
active_extensions = []
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue