diff options
author | François Schmidts <francois.schmidts@gmail.com> | 2015-01-17 16:50:38 +0100 |
---|---|---|
committer | François Schmidts <francois.schmidts@gmail.com> | 2015-03-03 22:22:14 +0100 |
commit | 2849c82255b4b889c7342a0a8fa8a4aecfbe599d (patch) | |
tree | 3ad31fd3a0e84bc3f40367cf4963cf8db8c65d06 /pyaggr3g470r/controllers/abstract.py | |
parent | adding news fields and migrations scripts (diff) | |
download | newspipe-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.py | 47 |
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 |