-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.py
executable file
·105 lines (90 loc) · 3.58 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from flask import render_template, request, Flask
from flask.views import MethodView
from config import *
import datetime
from mongoengine import connect
from models import Revision, Entry
#configure the app
app = Flask(__name__)
app.config.from_object(__name__)
connect(DATABASE,
host=MONGODB_HOST,
port=MONGODB_PORT,
username=USERNAME,
password=PASSWORD)
@app.route('/', methods=['GET'])
def show_entries():
#return all entries by this user sorted by date
return render_template('entry.html', entries=list(Entry.objects))
@app.route('/login/', methods=['GET', 'POST'])
def login():
pass
def update_entry(entry_id=None):
'''Update an existing entry at /update/entry_id/ or make a new one at /update/.
Returns the entry_id of the new or updated entry.'''
entry = Entry()
if entry_id != None:
entry = Entry.objects(id=entry_id)[0]
revision = Revision(content=request.form['content'], rows=request.form['rows'])
entry.add_revision(revision)
entry.save()
return str(entry.id)
app.add_url_rule('/entry/', defaults={'entry_id': None}, view_func=update_entry, methods=['POST'])
app.add_url_rule('/entry/<entry_id>/', view_func=update_entry, methods=['POST'])
@app.route('/remove/', methods=['POST'])
def remove_entry():
entry = db.entries.Entry.one({'_id': pymongo.objectid.ObjectId(request.form['id'])})
entry.visible = False
entry.save()
return str(entry._id)
@app.route('/template/entry/', methods=['GET'])
def get_entry_template():
tmp = Entry()
tmp.revisions.append(Revision(content='', rows=0))
return render_template('entry.html',
#create a fake single entry so the template renders a single entry div
entries=[tmp],
standalone=True) #prevent jinja2 from rendering the parent template
@app.route('/revisions/', methods=['POST'])
def get_revisions():
entry = db.entries.Entry.one({'_id': pymongo.objectid.ObjectId(request.form['id'])})
return render_template('revisions.html', entry=entry, num_entries=enumerate(entry.content))
@app.route('/version/', methods=['POST'])
def change_current_revision():
entry = db.entries.Entry.one({'_id': pymongo.objectid.ObjectId(request.form['id'])})
entry.content.append(entry.content.pop(int(request.form['version'])))
entry.date.pop(int(request.form['version']))
entry.date.append(datetime.datetime.now())
entry.save()
return str(entry._id)
@app.route('/post/<entry_id>/', methods=['GET'])
def get_public_entry(entry_id):
entry = db.entries.Entry.one({'_id': pymongo.objectid.ObjectId(entry_id)})
if entry.public:
return entry.content[-1]
else: return "yeah, right"
@app.route('/publicize/', methods=['POST'])
def publicize_entry():
entry = db.entries.Entry.one({'_id': pymongo.objectid.ObjectId(request.form['id'])})
entry.public = True
entry.save()
#return the markup for a Public URL for JS to add to the page
return "<li><a href='/post/{0}/'>Public URL</a></li>".format(str(entry._id))
@app.route('/signup/', methods=['POST'])
def add_user():
name = request.form['name']
#make sure the user name isn't taken
if name in [user.name for user in list(users.User.fetch())]:
return 'bad'
else:
user = users.User() #add a new user
user.name = name
import random
user.salt = unicode(''.join(random.choice("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") for i in range(16)))
import hashlib
user.password = unicode(hashlib.md5(user.salt + request.form['pw']).hexdigest())
user.save()
print [user.name for user in list(users.User.fetch())]
return str(user._id)
if __name__ == '__main__':
app.run(debug=True)