diff options
Diffstat (limited to 'leafymiracle/resources.py')
-rw-r--r-- | leafymiracle/resources.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/leafymiracle/resources.py b/leafymiracle/resources.py new file mode 100644 index 0000000..8185f9f --- /dev/null +++ b/leafymiracle/resources.py @@ -0,0 +1,59 @@ +# Copyright (C) 2011 Luke Macken <lmacken@redhat.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from sqlalchemy.orm.exc import NoResultFound +from models import DBSession, Root, initialize_sql + +class MyApp(object): + __name__ = None + __parent__ = None + + def __getitem__(self, key): + session = DBSession() + try: + id = int(key) + except (ValueError, TypeError): + raise KeyError(key) + + query = session.query(Root).filter_by(id=id) + + try: + item = query.one() + item.__parent__ = self + item.__name__ = key + return item + except NoResultFound: + raise KeyError(key) + + def get(self, key, default=None): + try: + item = self.__getitem__(key) + except KeyError: + item = default + return item + + def __iter__(self): + session= DBSession() + query = session.query(Root) + return iter(query) + +root = MyApp() + +def default_get_root(request): + return root + +def appmaker(engine): + initialize_sql(engine) + return default_get_root |