Skip to content

Commit fedc288

Browse files
authored
Merge pull request #2 from flask-pro/improve-crud-methods
improve CRUD-methods.
2 parents ccd2f7d + 3b00a1f commit fedc288

16 files changed

+529
-504
lines changed

CHANGES.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## Version 2.1.0
2+
3+
* `PaginateMixin` removed, this functional moved to `ReadMixin`.
4+
* Add parameter `deserialize` to `CreateMixin`, `ReadMixin` and `UpdateMixine`.
5+
* Improved docstrings.
6+
7+
18
## Version 2.0.0
29

310
* Refactoring of the module has been carried out. Improved class and method interfaces.

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ from db_first import BaseCRUD
4141
from db_first.base_model import ModelMixin
4242
from db_first.mixins import CreateMixin
4343
from db_first.mixins import DeleteMixin
44-
from db_first.mixins import PaginationMixin
4544
from db_first.mixins import ReadMixin
4645
from db_first.mixins import UpdateMixin
4746
from marshmallow import fields
@@ -73,17 +72,22 @@ class InputSchemaOfUpdate(InputSchemaOfCreate):
7372
id = fields.UUID()
7473

7574

75+
class InputSchemaOfRead(Schema):
76+
id = fields.UUID()
77+
78+
7679
class OutputSchema(InputSchemaOfUpdate):
7780
created_at = fields.DateTime()
7881

7982

80-
class ItemController(CreateMixin, ReadMixin, UpdateMixin, DeleteMixin, PaginationMixin, BaseCRUD):
83+
class ItemController(CreateMixin, ReadMixin, UpdateMixin, DeleteMixin, BaseCRUD):
8184
class Meta:
8285
session = session
8386
model = Items
8487
input_schema_of_create = InputSchemaOfCreate
8588
input_schema_of_update = InputSchemaOfUpdate
8689
output_schema_of_create = OutputSchema
90+
input_schema_of_read = InputSchemaOfRead
8791
output_schema_of_read = OutputSchema
8892
output_schema_of_update = OutputSchema
8993
schema_of_paginate = OutputSchema
@@ -93,14 +97,14 @@ class ItemController(CreateMixin, ReadMixin, UpdateMixin, DeleteMixin, Paginatio
9397
if __name__ == '__main__':
9498
item = ItemController()
9599

96-
first_new_item = item.create(data={'data': 'first'})
100+
first_new_item = item.create(deserialize=True, data='first')
97101
print('Item as object:', first_new_item)
98-
second_new_item = item.create(data={'data': 'second'}, serialize=True)
102+
second_new_item = item.create(deserialize=True, data='second', serialize=True)
99103
print('Item as dict:', second_new_item)
100104

101-
first_item = item.read(first_new_item.id)
105+
first_item = item.read(id=first_new_item.id)
102106
print('Item as object:', first_item)
103-
first_item = item.read(first_new_item.id, serialize=True)
107+
first_item = item.read(id=first_new_item.id)
104108
print('Item as dict:', first_item)
105109

106110
updated_first_item = item.update(data={'id': first_new_item.id, 'data': 'updated_first'})
@@ -110,8 +114,9 @@ if __name__ == '__main__':
110114
)
111115
print('Item as dict:', updated_second_item)
112116

113-
items = item.paginate(sort_created_at='desc')
117+
items = item.read(sort_created_at='desc')
114118
print('Items as objects:', items)
115-
items = item.paginate(sort_created_at='desc', serialize=True)
119+
items = item.read(sort_created_at='desc', serialize=True)
116120
print('Items as dicts:', items)
121+
117122
```

examples/full_example.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from db_first.base_model import ModelMixin
55
from db_first.mixins import CreateMixin
66
from db_first.mixins import DeleteMixin
7-
from db_first.mixins import PaginationMixin
87
from db_first.mixins import ReadMixin
98
from db_first.mixins import UpdateMixin
109
from marshmallow import fields
@@ -36,17 +35,22 @@ class InputSchemaOfUpdate(InputSchemaOfCreate):
3635
id = fields.UUID()
3736

3837

38+
class InputSchemaOfRead(Schema):
39+
id = fields.UUID()
40+
41+
3942
class OutputSchema(InputSchemaOfUpdate):
4043
created_at = fields.DateTime()
4144

4245

43-
class ItemController(CreateMixin, ReadMixin, UpdateMixin, DeleteMixin, PaginationMixin, BaseCRUD):
46+
class ItemController(CreateMixin, ReadMixin, UpdateMixin, DeleteMixin, BaseCRUD):
4447
class Meta:
4548
session = session
4649
model = Items
4750
input_schema_of_create = InputSchemaOfCreate
4851
input_schema_of_update = InputSchemaOfUpdate
4952
output_schema_of_create = OutputSchema
53+
input_schema_of_read = InputSchemaOfRead
5054
output_schema_of_read = OutputSchema
5155
output_schema_of_update = OutputSchema
5256
schema_of_paginate = OutputSchema
@@ -56,14 +60,14 @@ class Meta:
5660
if __name__ == '__main__':
5761
item = ItemController()
5862

59-
first_new_item = item.create(data={'data': 'first'})
63+
first_new_item = item.create(deserialize=True, data='first')
6064
print('Item as object:', first_new_item)
61-
second_new_item = item.create(data={'data': 'second'}, serialize=True)
65+
second_new_item = item.create(deserialize=True, data='second', serialize=True)
6266
print('Item as dict:', second_new_item)
6367

64-
first_item = item.read(first_new_item.id)
68+
first_item = item.read(id=first_new_item.id)
6569
print('Item as object:', first_item)
66-
first_item = item.read(first_new_item.id, serialize=True)
70+
first_item = item.read(id=first_new_item.id)
6771
print('Item as dict:', first_item)
6872

6973
updated_first_item = item.update(data={'id': first_new_item.id, 'data': 'updated_first'})
@@ -73,7 +77,7 @@ class Meta:
7377
)
7478
print('Item as dict:', updated_second_item)
7579

76-
items = item.paginate(sort_created_at='desc')
80+
items = item.read(sort_created_at='desc')
7781
print('Items as objects:', items)
78-
items = item.paginate(sort_created_at='desc', serialize=True)
82+
items = item.read(sort_created_at='desc', serialize=True)
7983
print('Items as dicts:', items)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ license = {file = "LICENSE"}
2525
name = "DB-First"
2626
readme = "README.md"
2727
requires-python = ">=3.9"
28-
version = "2.0.0"
28+
version = "2.1.0"
2929

3030
[project.optional-dependencies]
3131
dev = [

src/db_first/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .base import BaseCRUD
22
from .base_model import ModelMixin
3-
from .query_maker import QueryMaker
3+
from .statement_maker import StatementMaker
44

5-
__all__ = ['QueryMaker', 'BaseCRUD', 'ModelMixin']
5+
__all__ = ['BaseCRUD', 'ModelMixin', 'StatementMaker']

src/db_first/base.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from typing import Any
2+
from typing import Optional
23

34
from sqlalchemy.engine import Result
45

@@ -8,7 +9,7 @@
89

910
class BaseCRUD:
1011
@classmethod
11-
def _get_option_from_meta(cls, name: str) -> Any:
12+
def _get_option_from_meta(cls, name: str, default: Optional[Any] = ...) -> Any:
1213
try:
1314
meta = cls.Meta
1415
except AttributeError:
@@ -17,7 +18,10 @@ def _get_option_from_meta(cls, name: str) -> Any:
1718
try:
1819
option = getattr(meta, name)
1920
except AttributeError:
20-
raise OptionNotFound(f'Option <{name}> not set in Meta class.')
21+
if default is Ellipsis:
22+
raise OptionNotFound(f'Option <{name}> not set in Meta class.')
23+
else:
24+
option = default
2125

2226
return option
2327

src/db_first/mixins/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22
from .crud import DeleteMixin
33
from .crud import ReadMixin
44
from .crud import UpdateMixin
5-
from .pagination import PaginationMixin
65

7-
__all__ = ['CreateMixin', 'ReadMixin', 'UpdateMixin', 'DeleteMixin', 'PaginationMixin']
6+
__all__ = ['CreateMixin', 'ReadMixin', 'UpdateMixin', 'DeleteMixin']

0 commit comments

Comments
 (0)