Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit 917350c

Browse files
committed
Get AbstractStorageSQLAlchemy working.
1 parent 3b7d667 commit 917350c

File tree

1 file changed

+16
-37
lines changed

1 file changed

+16
-37
lines changed

src/oidcmsg/storage/absqlalchemy.py

Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44
import sqlalchemy as alchemy_db
55
from sqlalchemy.orm import sessionmaker
66

7-
from oidcmsg.storage.db_setup import Base
8-
7+
PlainDict = dict
98

109
class AbstractStorageSQLAlchemy:
1110
def __init__(self, conf_dict):
1211
self.engine = alchemy_db.create_engine(conf_dict['url'])
1312
self.connection = self.engine.connect()
14-
Base.metadata.create_all(self.engine)
1513
self.metadata = alchemy_db.MetaData()
1614
self.table = alchemy_db.Table(conf_dict['params']['table'],
1715
self.metadata, autoload=True,
@@ -20,59 +18,37 @@ def __init__(self, conf_dict):
2018
self.session = Session()
2119

2220
def get(self, k):
23-
entries = self.session.query(self.table).filter_by(owner=k).all()
24-
result = self._data_from_db(entries)
25-
return result
26-
27-
def _data_from_db(self, entries):
28-
result = []
29-
for entry in entries:
30-
try:
31-
data = json.loads(entry.data)
32-
if isinstance(data, list):
33-
result.extend(data)
34-
else:
35-
result.append(data)
36-
except:
37-
result.append(entry.data)
38-
return result
39-
40-
def _data_to_db(self, v):
41-
if isinstance(v, dict) or isinstance(v, list):
42-
value = json.dumps(v)
43-
else:
44-
value = v
45-
return value
21+
entry = self.session.query(self.table).filter_by(owner=k).first()
22+
if entry is None:
23+
return None
24+
return entry.data
4625

4726
def set(self, k, v):
48-
value = self._data_to_db(v)
27+
self.delete(k)
4928
ins = self.table.insert().values(owner=k,
50-
data=value)
29+
data=v)
5130
self.session.execute(ins)
5231
self.session.commit()
5332
return 1
5433

55-
def update(self, k, v, col_match='owner', col_value='data'):
34+
def update(self, k, v):
5635
"""
5736
k = value_to_match
5837
v = value_to_be_substituted
5938
"""
60-
value = self._data_to_db(v)
61-
table_column = getattr(self.table.c, col_match)
6239
upquery = self.table.update(). \
63-
where(table_column == k). \
64-
values(**{col_value: value})
40+
where(self.table.c.owner == k). \
41+
values(**{'data': v})
6542
self.session.execute(upquery)
6643
self.session.commit()
6744
return 1
6845

69-
def delete(self, v, k='owner'):
46+
def delete(self, v):
7047
"""
7148
return the count of deleted objects
7249
"""
73-
table_column = getattr(self.table.c, k)
74-
delquery = self.table.delete().where(table_column == v)
75-
n_entries = self.session.query(self.table).filter(table_column == v).count()
50+
delquery = self.table.delete().where(self.table.c.owner == v)
51+
n_entries = self.session.query(self.table).filter(self.table.c.owner == v).count()
7652
self.session.execute(delquery)
7753
return n_entries
7854

@@ -108,3 +84,6 @@ def flush(self):
10884
except:
10985
self.session.rollback()
11086
self.session.flush()
87+
88+
def __setitem__(self, k, v):
89+
return self.set(k, v)

0 commit comments

Comments
 (0)