annotate wikked/api/history.py @ 459:6c8f90e47338

core: Use new import syntax for Flask plugins.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 30 Sep 2018 21:38:44 -0700
parents 6cd51ea6dfcf
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 from flask import request, abort, jsonify
459
6c8f90e47338 core: Use new import syntax for Flask plugins.
Ludovic Chabant <ludovic@chabant.com>
parents: 451
diff changeset
2 from flask_login import current_user
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 from wikked.web import app, get_wiki
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 from wikked.webimpl import url_from_viewarg
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
5 from wikked.webimpl.decorators import requires_permission
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 from wikked.webimpl.history import (
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 get_site_history, get_page_history,
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 read_page_rev, diff_page_revs)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 @app.route('/api/site-history')
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
12 @requires_permission('wikihistory')
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 def api_site_history():
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 user = current_user.get_id()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 after_rev = request.args.get('rev')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 result = get_site_history(wiki, user, after_rev=after_rev)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 return jsonify(result)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 @app.route('/api/history/')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 def api_main_page_history():
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 return api_page_history(wiki.main_page_url.lstrip('/'))
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 @app.route('/api/history/<path:url>')
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
28 @requires_permission('history')
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 def api_page_history(url):
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 user = current_user.get_id()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 url = url_from_viewarg(url)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 result = get_page_history(wiki, user, url)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 return jsonify(result)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 @app.route('/api/revision/<path:url>')
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
38 @requires_permission('history')
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 def api_read_page_rev(url):
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 user = current_user.get_id()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 url = url_from_viewarg(url)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 rev = request.args.get('rev')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 if rev is None:
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 abort(400)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 result = read_page_rev(wiki, user, url, rev=rev)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 return jsonify(result)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 @app.route('/api/diff/<path:url>')
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
51 @requires_permission('history')
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 def api_diff_page(url):
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 user = current_user.get_id()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 url = url_from_viewarg(url)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 rev1 = request.args.get('rev1')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 rev2 = request.args.get('rev2')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 raw = request.args.get('raw')
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 if rev1 is None:
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 abort(400)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 result = diff_page_revs(wiki, user, url,
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 rev1=rev1, rev2=rev2, raw=raw)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 return jsonify(result)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 @app.route('/api/revert/<path:url>', methods=['POST'])
451
6cd51ea6dfcf auth: Rewrite permission system and improve support for it.
Ludovic Chabant <ludovic@chabant.com>
parents: 341
diff changeset
67 @requires_permission('revert')
341
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 def api_revert_page(url):
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 # TODO: only users with write access can revert.
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 if 'rev' not in request.form:
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 abort(400)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 rev = request.form['rev']
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 author = request.remote_addr
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 if 'author' in request.form and len(request.form['author']) > 0:
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 author = request.form['author']
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 message = 'Reverted %s to revision %s' % (url, rev)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 if 'message' in request.form and len(request.form['message']) > 0:
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 message = request.form['message']
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 url = url_from_viewarg(url)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 page_fields = {
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 'rev': rev,
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 'author': author,
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 'message': message
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 }
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 wiki = get_wiki()
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 wiki.revertPage(url, page_fields)
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 result = {'reverted': 1}
37f426e067c4 Big refactor to get rid of this whole single page app crap.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 return jsonify(result)