-
Notifications
You must be signed in to change notification settings - Fork 1
/
remarque.py
74 lines (56 loc) · 1.91 KB
/
remarque.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
from flask import Flask
from flask_peewee.db import Database
from flask_peewee.auth import Auth, BaseUser
from flask_peewee.admin import Admin, ModelAdmin
from flask_peewee.rest import RestAPI, RestResource, RestrictOwnerResource, UserAuthentication, AdminAuthentication
from peewee import CharField, TextField, DateTimeField, BooleanField, ForeignKeyField
import times
app = Flask(__name__)
app.config.from_pyfile("config.cfg")
db = Database(app)
class User(db.Model, BaseUser):
username = CharField()
password = CharField()
email = CharField()
join_date = DateTimeField(default=times.now)
active = BooleanField(default=True)
admin = BooleanField(default=False)
def __unicode__(self):
return self.username
class Note(db.Model):
user = ForeignKeyField(User)
title = CharField()
content = TextField()
created = DateTimeField(default=times.now)
def __unicode__(self):
return "{} from {}".format(self.title, self.user.username)
class NoteAdmin(ModelAdmin):
columns = ('user', 'title', 'content', 'created',)
class UserAdmin(ModelAdmin):
columns = ('username', 'email', 'admin', )
class CustomAuth(Auth):
def get_user_model(self):
return User
def get_model_admin(self, model_admin=None):
return UserAdmin
auth = CustomAuth(app, db)
admin = Admin(app, auth)
admin.register(Note, NoteAdmin)
admin.register(User, UserAdmin)
auth.register_admin(admin)
admin.setup()
class UserResource(RestResource):
exclude = ('password', 'email',)
class NoteResource(RestrictOwnerResource):
owner_field = 'user'
user_auth = UserAuthentication(auth)
admin_auth = AdminAuthentication(auth)
api = RestAPI(app, default_auth=user_auth)
api.register(User, UserResource, auth=admin_auth)
api.register(Note, NoteResource)
api.setup()
@app.route("/version")
def version():
return "2.1"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=app.config["PORT"])