update sqlalchemy storage for values et settings
[tiramisu.git] / tiramisu / storage / sqlalchemy / storage.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2013 Team tiramisu (see AUTHORS for all contributors)
3 #
4 # This program is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Lesser General Public License as published by the
6 # Free Software Foundation, either version 3 of the License, or (at your
7 # option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
12 # details.
13 #
14 # You should have received a copy of the GNU Lesser General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 # ____________________________________________________________
17 from tiramisu.i18n import _
18 from ..util import SerializeObject
19 from .util import SqlAlchemyBase
20 import util
21 from sqlalchemy import Column, Integer, String
22
23
24 class Setting(SerializeObject):
25     """:param extension: database file extension (by default: db)
26     :param dir_database: root database directory (by default: /tmp)
27     """
28     #FIXME
29     extension = 'db'
30     dir_database = '/tmp'
31
32
33 storage_setting = Setting()
34
35
36 class Session(SqlAlchemyBase):
37     __tablename__ = 'session'
38     id = Column(Integer, primary_key=True)
39     session = Column(String, index=True)
40
41     def __init__(self, session_id):
42         self.session = session_id
43
44
45 def list_sessions():  # pragma: optional cover
46     session = util.Session()
47     ret = []
48     for val in session.query(Session).all():
49         ret.append(val.session)
50     del(session)
51     return ret
52
53
54 def delete_session(session_id, session):  # pragma: optional cover
55     session.delete(session.query(Session).filter_by(session=session_id).first())
56     session.commit()
57
58
59 def getsession():
60     return util.Session()
61
62
63 class Storage(object):
64     __slots__ = ('session_id', 'persistent')
65     storage = 'sqlalchemy'
66     #if object could be serializable
67     serializable = True
68
69     def __init__(self, session_id, persistent, test=False):
70         session = getsession()
71         self.session_id = session_id
72         self.persistent = persistent
73         if not session.query(Session).filter_by(session=session_id).first():  # pragma: optional cover
74             session.add(Session(session_id))
75             session.commit()
76         del(session)
77
78     def __del__(self):
79         if not self.persistent:
80             session = getsession()
81             delete_session(self.session_id, session)
82             del(session)