55
66from psycopg2 import sql
77from psycopg2 .extensions import register_adapter
8- from psycopg2 .extras import Json
8+ from psycopg2 .extras import Json # type: ignore
99
1010from db_wrapper import SyncClient
11- from db_wrapper .model import ModelData , SyncModel , SyncRead , SyncCreate
11+ from db_wrapper .model import (
12+ ModelData ,
13+ RealDictRow ,
14+ SyncModel ,
15+ SyncRead ,
16+ SyncCreate
17+ )
1218
1319# tell psycopg2 to adapt all dictionaries to json instead of
1420# the default hstore
@@ -51,10 +57,12 @@ def one(self, item: ExtendedModelData) -> ExtendedModelData:
5157 values = sql .SQL (',' ).join (values ),
5258 )
5359
54- result : List [ExtendedModelData ] = \
60+ query_result : List [RealDictRow ] = \
5561 self ._client .execute_and_return (query )
5662
57- return result [0 ]
63+ result = self ._return_constructor (** query_result [0 ])
64+
65+ return result
5866
5967
6068class ExtendedReader (SyncRead [ExtendedModelData ]):
@@ -81,8 +89,10 @@ def all(self) -> List[ExtendedModelData]:
8189 query = sql .SQL ('SELECT * FROM {table}' ).format (
8290 table = self ._table )
8391
84- result : List [ExtendedModelData ] = self \
85- ._client .execute_and_return (query )
92+ query_result : List [RealDictRow ] = \
93+ self ._client .execute_and_return (query )
94+
95+ result = [self ._return_constructor (** item ) for item in query_result ]
8696
8797 return result
8898
@@ -94,6 +104,14 @@ class ExtendedModel(SyncModel[ExtendedModelData]):
94104 create : ExtendedCreator
95105
96106 def __init__ (self , client : SyncClient ) -> None :
97- super ().__init__ (client , 'extended_model' )
98- self .read = ExtendedReader (self .client , self .table )
99- self .create = ExtendedCreator (self .client , self .table )
107+ super ().__init__ (client , 'extended_model' , ExtendedModelData )
108+ self .read = ExtendedReader (
109+ self .client ,
110+ self .table ,
111+ ExtendedModelData
112+ )
113+ self .create = ExtendedCreator (
114+ self .client ,
115+ self .table ,
116+ ExtendedModelData
117+ )
0 commit comments