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

Commit bbfc9a8

Browse files
authored
Merge pull request #21 from davidkhess/develop
Get AbstractStorageSQLAlchemy storage working
2 parents a48c6f7 + a53bbc9 commit bbfc9a8

File tree

1 file changed

+18
-38
lines changed

1 file changed

+18
-38
lines changed

src/oidcmsg/storage/absqlalchemy.py

+18-38
Original file line numberDiff line numberDiff line change
@@ -2,77 +2,54 @@
22
import json
33

44
import sqlalchemy as alchemy_db
5+
from sqlalchemy.orm import scoped_session
56
from sqlalchemy.orm import sessionmaker
67

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

1010
class AbstractStorageSQLAlchemy:
1111
def __init__(self, conf_dict):
1212
self.engine = alchemy_db.create_engine(conf_dict['url'])
1313
self.connection = self.engine.connect()
14-
Base.metadata.create_all(self.engine)
1514
self.metadata = alchemy_db.MetaData()
1615
self.table = alchemy_db.Table(conf_dict['params']['table'],
1716
self.metadata, autoload=True,
1817
autoload_with=self.engine)
1918
Session = sessionmaker(bind=self.engine)
20-
self.session = Session()
19+
self.session = scoped_session(Session)
2120

2221
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
22+
entry = self.session.query(self.table).filter_by(owner=k).first()
23+
if entry is None:
24+
return None
25+
return entry.data
4626

4727
def set(self, k, v):
48-
value = self._data_to_db(v)
28+
self.delete(k)
4929
ins = self.table.insert().values(owner=k,
50-
data=value)
30+
data=v)
5131
self.session.execute(ins)
5232
self.session.commit()
5333
return 1
5434

55-
def update(self, k, v, col_match='owner', col_value='data'):
35+
def update(self, k, v):
5636
"""
5737
k = value_to_match
5838
v = value_to_be_substituted
5939
"""
60-
value = self._data_to_db(v)
61-
table_column = getattr(self.table.c, col_match)
6240
upquery = self.table.update(). \
63-
where(table_column == k). \
64-
values(**{col_value: value})
41+
where(self.table.c.owner == k). \
42+
values(**{'data': v})
6543
self.session.execute(upquery)
6644
self.session.commit()
6745
return 1
6846

69-
def delete(self, v, k='owner'):
47+
def delete(self, v):
7048
"""
7149
return the count of deleted objects
7250
"""
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()
51+
delquery = self.table.delete().where(self.table.c.owner == v)
52+
n_entries = self.session.query(self.table).filter(self.table.c.owner == v).count()
7653
self.session.execute(delquery)
7754
return n_entries
7855

@@ -108,3 +85,6 @@ def flush(self):
10885
except:
10986
self.session.rollback()
11087
self.session.flush()
88+
89+
def __setitem__(self, k, v):
90+
return self.set(k, v)

0 commit comments

Comments
 (0)