44import sqlalchemy as alchemy_db
55from sqlalchemy .orm import sessionmaker
66
7- from oidcmsg .storage .db_setup import Base
8-
7+ PlainDict = dict
98
109class 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