Skip to content

Commit 1e0ca1f

Browse files
Update examples.
1 parent 9b60ead commit 1e0ca1f

File tree

7 files changed

+49
-41
lines changed

7 files changed

+49
-41
lines changed

example/.python-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.9.1
1+
3.9.7

example/example/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import models
2+
from .main import run

example/example/example.py renamed to example/example/main.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""An example of how to use Client & Model together."""
1+
"""An example of how to use AsyncClient & AsyncModel together."""
22

33
import asyncio
44
import json
@@ -7,9 +7,13 @@
77
from uuid import uuid4, UUID
88
from typing import Any, List
99

10-
from db_wrapper import ConnectionParameters, Client, Model
10+
from db_wrapper import ConnectionParameters, AsyncClient, AsyncModel
1111

12-
from models import AModel, ExtendedModel, ExtendedModelData
12+
from example.models import (
13+
AModel,
14+
ExtendedModel,
15+
ExtendedModelData,
16+
)
1317

1418
logging.basicConfig(level=logging.INFO)
1519

@@ -33,17 +37,17 @@ def default(self, obj: Any) -> Any:
3337
user=os.getenv('DB_USER', 'test'),
3438
password=os.getenv('DB_PASS', 'pass'),
3539
database=os.getenv('DB_NAME', 'dev'))
36-
client = Client(conn_params)
40+
client = AsyncClient(conn_params)
3741

38-
a_model = Model[AModel](client, 'a_model')
42+
a_model = AsyncModel[AModel](client, 'a_model', AModel)
3943
extended_model = ExtendedModel(client)
4044

4145

4246
async def create_a_model_record() -> UUID:
4347
"""
44-
Show how to use a simple Model instance.
48+
Show how to use a simple AsyncModel instance.
4549
46-
Create a new record using the default Model.create.one method.
50+
Create a new record using the default AsyncModel.create.one method.
4751
"""
4852
new_record = AModel(**{
4953
'id': uuid4(),
@@ -59,13 +63,13 @@ async def create_a_model_record() -> UUID:
5963

6064
async def read_a_model(id_value: UUID) -> AModel:
6165
"""Show how to read a record with a given id value."""
62-
# read.one_by_id expects a string, so UUID values need
63-
# converted using str()
64-
return await a_model.read.one_by_id(str(id_value))
66+
return await a_model.read.one_by_id(id_value)
6567

6668

6769
async def create_extended_models() -> None:
68-
"""Show how using an extended Model can be the same as the defaults."""
70+
"""
71+
Show how using an extended AsyncModel can be the same as the defaults.
72+
"""
6973
dicts = [{
7074
'id': uuid4(),
7175
'string': 'something',
@@ -101,7 +105,7 @@ async def read_extended_models() -> List[ExtendedModelData]:
101105
"""Show how to use an extended Model's new methods."""
102106
# We defined read.all in ./models/extended_model.py's ExtendedRead class,
103107
# then replaced ExtendedModel's read property with ExtendedRead.
104-
# As a result, we can call it just like any other method on Model.read.
108+
# As a result, we can call it just like any other method on AsyncModel.read
105109
return await extended_model.read.all()
106110

107111

@@ -119,13 +123,15 @@ async def run() -> None:
119123
new_id = await create_a_model_record()
120124
created_a_model = await read_a_model(new_id)
121125
await create_extended_models()
122-
extended_models = await read_extended_models()
126+
created_extended_models = await read_extended_models()
123127
finally:
124128
await client.disconnect()
125129

126130
# Print results to stdout
127-
print(json.dumps(created_a_model, cls=UUIDJsonEncoder))
128-
print(json.dumps(extended_models, cls=UUIDJsonEncoder))
131+
print(json.dumps(created_a_model.dict(), cls=UUIDJsonEncoder))
132+
print(json.dumps([model.dict()
133+
for model in created_extended_models],
134+
cls=UUIDJsonEncoder))
129135

130136
if __name__ == '__main__':
131137
# A simple app can be run using asyncio's run method.

example/example/models/extended_model.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55

66
from psycopg2 import sql
77
from psycopg2.extensions import register_adapter
8-
from psycopg2.extras import Json
8+
from psycopg2.extras import Json # type: ignore
99

1010
from db_wrapper import AsyncClient, AsyncModel, ModelData
11-
from db_wrapper.model import AsyncRead, AsyncCreate
11+
from db_wrapper.model import AsyncRead, AsyncCreate, RealDictRow
1212

1313
# tell psycopg2 to adapt all dictionaries to json instead of
1414
# the default hstore
@@ -55,10 +55,11 @@ async def one(self, item: ExtendedModelData) -> ExtendedModelData:
5555
values=sql.SQL(',').join(values),
5656
)
5757

58-
result: List[ExtendedModelData] = \
58+
query_result: List[RealDictRow] = \
5959
await self._client.execute_and_return(query)
60+
result = self._return_constructor(**query_result[0])
6061

61-
return result[0]
62+
return result
6263

6364

6465
class ExtendedReader(AsyncRead[ExtendedModelData]):
@@ -75,8 +76,10 @@ async def all_by_string(self, string: str) -> List[ExtendedModelData]:
7576
string=sql.Identifier(string)
7677
)
7778

78-
result: List[ExtendedModelData] = await self \
79-
._client.execute_and_return(query)
79+
query_result: List[RealDictRow] = \
80+
await self._client.execute_and_return(query)
81+
result = [self._return_constructor(**row)
82+
for row in query_result]
8083

8184
return result
8285

@@ -85,8 +88,10 @@ async def all(self) -> List[ExtendedModelData]:
8588
query = sql.SQL('SELECT * FROM {table}').format(
8689
table=self._table)
8790

88-
result: List[ExtendedModelData] = await self \
89-
._client.execute_and_return(query)
91+
query_result: List[RealDictRow] = \
92+
await self._client.execute_and_return(query)
93+
result = [self._return_constructor(**row)
94+
for row in query_result]
9095

9196
return result
9297

@@ -98,6 +103,8 @@ class ExtendedModel(AsyncModel[ExtendedModelData]):
98103
create: ExtendedCreator
99104

100105
def __init__(self, client: AsyncClient) -> None:
101-
super().__init__(client, 'extended_model')
102-
self.read = ExtendedReader(self.client, self.table)
103-
self.create = ExtendedCreator(self.client, self.table)
106+
super().__init__(client, 'extended_model', ExtendedModelData)
107+
self.read = ExtendedReader(
108+
self.client, self.table, ExtendedModelData)
109+
self.create = ExtendedCreator(
110+
self.client, self.table, ExtendedModelData)

example_sync/example/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
from . import models
2-
from .example import run
2+
from .main import run

example_sync/example/example.py renamed to example_sync/example/main.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,7 @@ def create_a_model_record() -> UUID:
6363

6464
def read_a_model(id_value: UUID) -> AModel:
6565
"""Show how to read a record with a given id value."""
66-
# read.one_by_id expects a string, so UUID values need
67-
# converted using str()
68-
return a_model.read.one_by_id(str(id_value))
66+
return a_model.read.one_by_id(id_value)
6967

7068

7169
def create_extended_models() -> None:
@@ -128,8 +126,9 @@ def run() -> None:
128126

129127
# Print results to stdout
130128
print(json.dumps(created_a_model.dict(), cls=UUIDJsonEncoder))
131-
print(json.dumps([item.dict()
132-
for item in created_extended_models], cls=UUIDJsonEncoder))
129+
print(json.dumps([model.dict()
130+
for model in created_extended_models],
131+
cls=UUIDJsonEncoder))
133132

134133

135134
if __name__ == '__main__':

example_sync/example/models/extended_model.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,8 @@
77
from psycopg2.extensions import register_adapter
88
from psycopg2.extras import Json # type: ignore
99

10-
from db_wrapper import SyncClient
11-
from db_wrapper.model import (
12-
ModelData,
13-
RealDictRow,
14-
SyncModel,
15-
SyncRead,
16-
SyncCreate
17-
)
10+
from db_wrapper import SyncClient, SyncModel, ModelData
11+
from db_wrapper.model import RealDictRow, SyncRead, SyncCreate
1812

1913
# tell psycopg2 to adapt all dictionaries to json instead of
2014
# the default hstore

0 commit comments

Comments
 (0)