aboutsummaryrefslogtreecommitdiff
path: root/pyaggr3g470r/controllers/abstract.py
diff options
context:
space:
mode:
authorFrançois Schmidts <francois.schmidts@gmail.com>2015-01-17 16:50:38 +0100
committerFrançois Schmidts <francois.schmidts@gmail.com>2015-03-03 22:22:14 +0100
commit2849c82255b4b889c7342a0a8fa8a4aecfbe599d (patch)
tree3ad31fd3a0e84bc3f40367cf4963cf8db8c65d06 /pyaggr3g470r/controllers/abstract.py
parentadding news fields and migrations scripts (diff)
downloadnewspipe-2849c82255b4b889c7342a0a8fa8a4aecfbe599d.tar.gz
newspipe-2849c82255b4b889c7342a0a8fa8a4aecfbe599d.tar.bz2
newspipe-2849c82255b4b889c7342a0a8fa8a4aecfbe599d.zip
a first big refacto of the existing arch
Diffstat (limited to 'pyaggr3g470r/controllers/abstract.py')
-rw-r--r--pyaggr3g470r/controllers/abstract.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/pyaggr3g470r/controllers/abstract.py b/pyaggr3g470r/controllers/abstract.py
new file mode 100644
index 00000000..fe437b09
--- /dev/null
+++ b/pyaggr3g470r/controllers/abstract.py
@@ -0,0 +1,47 @@
+from flask import g
+from pyaggr3g470r.lib.exceptions import Forbidden, NotFound
+
+
+class AbstractController(object):
+ _db_cls = None
+
+ def __init__(self, user_id):
+ self.user_id = user_id
+
+ def _get(self, **filters):
+ if self.user_id:
+ filters['user_id'] = self.user_id
+ db_filters = [getattr(self._db_cls, key) == value
+ for key, value in filters.iteritems()]
+ return self._db_cls.query.filter(*db_filters).first()
+
+ def get(self, **filters):
+ obj = self._get(**filters).first()
+ if not obj:
+ raise NotFound({'message': 'No %r (%r)'
+ % (self._db_cls.__class__.__name__, filters)})
+ if obj.user_id != self.user_id:
+ raise Forbidden({'message': 'No authorized to access %r (%r)'
+ % (self._db_cls.__class__.__name__, filters)})
+ return obj
+
+ def create(self, **attrs):
+ obj = self._db_cls(**attrs)
+ g.db.session.commit()
+ return obj
+
+ def read(self, **filters):
+ return self._get(**filters)
+
+ def update(self, obj_id, **attrs):
+ obj = self.get(id=obj_id)
+ for key, values in attrs.iteritems():
+ setattr(obj, key, values)
+ g.db.session.commit()
+ return obj
+
+ def delete(self, obj_id):
+ obj = self.get(id=obj_id)
+ g.db.session.delete(obj)
+ g.db.session.commit()
+ return obj
bgstack15