mirror of
https://github.com/YunoHost-Apps/ihatemoney_ynh.git
synced 2024-09-03 19:26:15 +02:00
Add a serialization mechanism
This commit is contained in:
parent
ef3d761fc7
commit
d2e2260e52
3 changed files with 37 additions and 1 deletions
|
@ -50,7 +50,7 @@ class MemberHandler(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def list(self, project):
|
def list(self, project):
|
||||||
pass
|
return project.members
|
||||||
|
|
||||||
def add(self, project):
|
def add(self, project):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -7,6 +7,10 @@ db = SQLAlchemy()
|
||||||
|
|
||||||
# define models
|
# define models
|
||||||
class Project(db.Model):
|
class Project(db.Model):
|
||||||
|
|
||||||
|
_to_serialize = ("id", "name", "password", "contact_email",
|
||||||
|
"members", "active_members")
|
||||||
|
|
||||||
id = db.Column(db.String, primary_key=True)
|
id = db.Column(db.String, primary_key=True)
|
||||||
|
|
||||||
name = db.Column(db.UnicodeText)
|
name = db.Column(db.UnicodeText)
|
||||||
|
@ -68,6 +72,9 @@ class Project(db.Model):
|
||||||
|
|
||||||
|
|
||||||
class Person(db.Model):
|
class Person(db.Model):
|
||||||
|
|
||||||
|
_to_serialize = ("id", "name", "activated")
|
||||||
|
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
project_id = db.Column(db.Integer, db.ForeignKey("project.id"))
|
project_id = db.Column(db.Integer, db.ForeignKey("project.id"))
|
||||||
bills = db.relationship("Bill", backref="payer")
|
bills = db.relationship("Bill", backref="payer")
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import json
|
||||||
|
|
||||||
class RESTResource(object):
|
class RESTResource(object):
|
||||||
"""Represents a REST resource, with the different HTTP verbs"""
|
"""Represents a REST resource, with the different HTTP verbs"""
|
||||||
_NEED_ID = ["get", "update", "delete"]
|
_NEED_ID = ["get", "update", "delete"]
|
||||||
|
@ -70,6 +72,9 @@ class RESTResource(object):
|
||||||
method = need_auth(self._authentifier,
|
method = need_auth(self._authentifier,
|
||||||
self._inject_name or self._name)(method)
|
self._inject_name or self._name)(method)
|
||||||
|
|
||||||
|
# regarding the format, transform the response
|
||||||
|
method = serialize("json")(method) #FIXME handle headers
|
||||||
|
|
||||||
app.add_url_rule(
|
app.add_url_rule(
|
||||||
self._get_route_for(action),
|
self._get_route_for(action),
|
||||||
"%s_%s" % (self._name, action),
|
"%s_%s" % (self._name, action),
|
||||||
|
@ -111,3 +116,27 @@ def need_auth(authentifier, name=None, remove_attr=True):
|
||||||
raise werkzeug.exceptions.Forbidden()
|
raise werkzeug.exceptions.Forbidden()
|
||||||
return wrapped
|
return wrapped
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
# serializers
|
||||||
|
|
||||||
|
def serialize(format):
|
||||||
|
def wrapper(func):
|
||||||
|
def wrapped(*args, **kwargs):
|
||||||
|
return SERIALIZERS[format].encode(func(*args, **kwargs))
|
||||||
|
return wrapped
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
class JSONEncoder(json.JSONEncoder):
|
||||||
|
def default(self, o):
|
||||||
|
if hasattr(o, "_to_serialize"):
|
||||||
|
# build up the object
|
||||||
|
data = {}
|
||||||
|
for attr in o._to_serialize:
|
||||||
|
data[attr] = getattr(o, attr)
|
||||||
|
return data
|
||||||
|
else:
|
||||||
|
return json.JSONEncoder.default(self, o)
|
||||||
|
|
||||||
|
SERIALIZERS = {"json": JSONEncoder()}
|
||||||
|
|
Loading…
Add table
Reference in a new issue