import os
import gws
import gws.tools.os2
import gws.tools.sqlite
import gws.tools.date
DB_PATH = gws.MISC_DIR + '/sessions6.sqlite'
[docs]class SessionStore:
@property
def _connection(self):
return gws.tools.sqlite.connect(DB_PATH)
[docs] def init(self):
with self._connection as conn:
conn.execute('''CREATE TABLE IF NOT EXISTS sess(
uid TEXT PRIMARY KEY,
method_type TEXT,
session_type TEXT,
provider_uid TEXT,
user_uid TEXT,
str_user TEXT,
str_data TEXT,
created INTEGER,
updated INTEGER
) WITHOUT ROWID''')
[docs] def count(self):
with self._connection as conn:
return conn.execute('SELECT COUNT(*) FROM sess').fetchone(self)[0]
[docs] def cleanup(self, lifetime):
with self._connection as conn:
conn.execute('DELETE FROM sess WHERE updated < ?', [gws.tools.date.timestamp() - lifetime])
[docs] def find(self, uid):
with self._connection as conn:
for r in conn.execute('SELECT * FROM sess WHERE uid=?', [uid]):
return dict(r)
[docs] def create(self, method_type, session_type, provider_uid, user_uid, str_user, str_data=''):
uid = gws.random_string(64)
with self._connection as conn:
conn.execute('''INSERT
INTO sess(
uid,
method_type,
session_type,
provider_uid,
user_uid,
str_user,
str_data,
created,
updated
)
VALUES(?,?,?,?,?,?,?,?,?)
''', [
uid,
method_type,
session_type,
provider_uid,
user_uid,
str_user,
str_data,
gws.tools.date.timestamp(),
gws.tools.date.timestamp()
])
gws.log.debug('session: created:', uid)
return uid
[docs] def update(self, uid, str_data):
with self._connection as conn:
conn.execute(
'UPDATE sess SET str_data=?, updated=? WHERE uid=?',
[str_data, gws.tools.date.timestamp(), uid])
[docs] def touch(self, uid):
with self._connection as conn:
conn.execute(
'UPDATE sess SET updated=? WHERE uid=?',
[gws.tools.date.timestamp(), uid])
[docs] def delete(self, uid):
with self._connection as conn:
conn.execute('DELETE FROM sess WHERE uid = ?', [uid])
[docs] def delete_all(self):
gws.tools.os2.unlink(DB_PATH)
self.init()
[docs] def get_all(self):
rs = []
with self._connection as conn:
for r in conn.execute('SELECT * FROM sess ORDER BY updated'):
rs.append(dict(r))
return rs