Skip to content

Commit 3fbfa02

Browse files
committed
fixes thnee#1
1 parent b599968 commit 3fbfa02

File tree

3 files changed

+80
-78
lines changed

3 files changed

+80
-78
lines changed

examples/complete_db/blueprints/api_v1/views.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class AuthorsIndex(af.List, af.Create):
1818
Same body schema for List and Create.
1919
"""
2020

21-
body_schema = AuthorSchema()
21+
body_schema_cls = AuthorSchema
2222

2323
def get_instances(self):
2424
return Author.query.all()
@@ -29,8 +29,8 @@ class AuthorsBooksList(af.List):
2929
List all books for a specific author defined by a view arg.
3030
"""
3131

32-
kwargs_schema = AuthorsBooksListKwargsSchema()
33-
body_schema = BookListSchema()
32+
kwargs_schema_cls = AuthorsBooksListKwargsSchema
33+
body_schema_cls = BookListSchema
3434

3535
def get_instances(self):
3636
q = Book.query
@@ -45,8 +45,8 @@ class BooksIndex(af.List, af.Create):
4545
Different body schemas for List and Create.
4646
"""
4747

48-
list_body_schema = BookListSchema()
49-
create_body_schema = BookCreateSchema()
48+
list_body_schema_cls = BookListSchema
49+
create_body_schema_cls = BookCreateSchema
5050

5151
def get_instances(self):
5252
return Book.query.all()
@@ -58,5 +58,5 @@ class BookDetail(af.Read, af.Update, af.Delete):
5858
Same body schema for Read, Update, Delete.
5959
"""
6060

61-
kwargs_schema = BookDetailKwargsSchema()
62-
body_schema = BookDetailBodySchema()
61+
kwargs_schema_cls = BookDetailKwargsSchema
62+
body_schema_cls = BookDetailBodySchema

examples/minimal_db/main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Meta:
2828

2929

3030
class Books(af.Create, af.List):
31-
body_schema = BookSchema()
31+
body_schema_cls = BookSchema
3232

3333
def get_instances(self):
3434
return Book.query.all()

src/flask_api_framework/views.py

+72-70
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ def __init__(cls, name, bases, d):
3434
for _ in bases:
3535
for action in actions:
3636
for name, fallbacks in schema_names.items():
37-
name = f"{name}_schema".format(action=action)
37+
name = f"{name}_schema_cls".format(action=action)
3838
fallbacks = [
39-
f"{fallback}_schema".format(action=action)
39+
f"{fallback}_schema_cls".format(action=action)
4040
for fallback in fallbacks
4141
]
4242
attr = getattr_fallback(cls, name, *fallbacks)
@@ -45,9 +45,9 @@ def __init__(cls, name, bases, d):
4545

4646

4747
class BaseView(flask.views.View, metaclass=BaseViewType):
48-
kwargs_schema = None
49-
args_schema = None
50-
body_schema = None
48+
kwargs_schema_cls = None
49+
args_schema_cls = None
50+
body_schema_cls = None
5151

5252
loaded_kwargs = None
5353
loaded_args = None
@@ -65,15 +65,15 @@ def dispatch_request(self, *args, **kwargs):
6565
raise ApiError(status_code=400, source="body") from e
6666

6767
def load_kwargs_schema(self):
68-
self.loaded_kwargs = self.kwargs_schema.load(data=flask.request.view_args)
68+
self.loaded_kwargs = self.kwargs_schema_cls().load(data=flask.request.view_args)
6969

7070
def load_args_schema(self):
71-
self.loaded_args = self.args_schema.load(data=flask.request.args)
71+
self.loaded_args = self.args_schema_cls().load(data=flask.request.args)
7272

73-
def handle_kwargs(self, schema):
73+
def handle_kwargs(self, schema_cls):
7474
try:
75-
if schema is not None:
76-
self.kwargs_schema = schema
75+
if schema_cls is not None:
76+
self.kwargs_schema_cls = schema_cls
7777
self.load_kwargs_schema()
7878
except marshmallow.exceptions.ValidationError as e:
7979
raise ApiError(status_code=400, source="kwargs") from e
@@ -83,10 +83,10 @@ def handle_kwargs(self, schema):
8383
):
8484
raise ApiError(status_code=404)
8585

86-
def handle_args(self, schema):
86+
def handle_args(self, schema_cls):
8787
try:
88-
if schema is not None:
89-
self.args_schema = schema
88+
if schema_cls is not None:
89+
self.args_schema_cls = schema_cls
9090
self.load_args_schema()
9191
except marshmallow.exceptions.ValidationError as e:
9292
raise ApiError(status_code=400, source="args") from e
@@ -98,7 +98,7 @@ def handle_args(self, schema):
9898

9999
def get_schema_success_data(
100100
self,
101-
schema,
101+
schema_cls,
102102
data,
103103
status_code=200,
104104
data_wrapper=None,
@@ -109,29 +109,29 @@ def noop_data_wrapper(x):
109109

110110
if data_wrapper is None:
111111
data_wrapper = noop_data_wrapper
112-
if schema is not None:
112+
if schema_cls is not None:
113113
return (
114-
flask.jsonify(data_wrapper(schema.dump(data, many=many))),
114+
flask.jsonify(data_wrapper(schema_cls().dump(data, many=many))),
115115
status_code,
116116
)
117-
elif schema is None and data is not None:
117+
elif schema_cls is None and data is not None:
118118
return flask.jsonify(data_wrapper(data)), status_code
119119
else:
120120
return "", 204
121121

122122

123123
class List(BaseView):
124-
list_kwargs_schema = None
125-
list_args_schema = None
126-
list_body_schema = None
127-
list_response_body_schema = None
128-
response_body_schema = None
124+
list_kwargs_schema_cls = None
125+
list_args_schema_cls = None
126+
list_body_schema_cls = None
127+
list_response_body_schema_cls = None
128+
response_body_schema_cls = None
129129

130130
instances = None
131131

132132
def handle_get(self, *args, **kwargs):
133-
self.handle_kwargs(self.list_kwargs_schema)
134-
self.handle_args(self.list_args_schema)
133+
self.handle_kwargs(self.list_kwargs_schema_cls)
134+
self.handle_args(self.list_args_schema_cls)
135135
self.instances = self.get_instances()
136136
return self.get_list_response()
137137

@@ -140,25 +140,25 @@ def get_instances(self):
140140

141141
def get_list_response(self):
142142
return self.get_schema_success_data(
143-
schema=self.list_response_body_schema,
143+
schema_cls=self.list_response_body_schema_cls,
144144
data=self.instances,
145145
data_wrapper=lambda data: dict(items=data),
146146
many=True,
147147
)
148148

149149

150150
class Read(BaseView):
151-
read_kwargs_schema = None
152-
read_args_schema = None
153-
read_body_schema = None
154-
read_response_body_schema = None
155-
response_body_schema = None
151+
read_kwargs_schema_cls = None
152+
read_args_schema_cls = None
153+
read_body_schema_cls = None
154+
read_response_body_schema_cls = None
155+
response_body_schema_cls = None
156156

157157
instance = None
158158

159159
def handle_get(self, *args, **kwargs):
160-
self.handle_kwargs(self.read_kwargs_schema)
161-
self.handle_args(self.read_args_schema)
160+
self.handle_kwargs(self.read_kwargs_schema_cls)
161+
self.handle_args(self.read_args_schema_cls)
162162
self.instance = self.get_instance()
163163
return self.get_read_response()
164164

@@ -167,35 +167,37 @@ def get_instance(self):
167167

168168
def get_read_response(self):
169169
return self.get_schema_success_data(
170-
schema=self.read_response_body_schema,
170+
schema_cls=self.read_response_body_schema_cls,
171171
data=self.instance,
172172
)
173173

174174

175175
class Create(BaseView):
176-
create_kwargs_schema = None
177-
create_args_schema = None
178-
create_body_schema = None
179-
create_request_body_schema = None
180-
create_response_body_schema = None
181-
request_body_schema = None
182-
response_body_schema = None
176+
create_kwargs_schema_cls = None
177+
create_args_schema_cls = None
178+
create_body_schema_cls = None
179+
create_request_body_schema_cls = None
180+
create_response_body_schema_cls = None
181+
request_body_schema_cls = None
182+
response_body_schema_cls = None
183183

184184
loaded_body = None
185185
instance = None
186186

187187
def handle_post(self, *args, **kwargs):
188-
self.handle_kwargs(self.create_kwargs_schema)
189-
self.handle_args(self.create_args_schema)
190-
if self.create_request_body_schema is not None:
191-
self.body_schema = self.create_request_body_schema
188+
self.handle_kwargs(self.create_kwargs_schema_cls)
189+
self.handle_args(self.create_args_schema_cls)
190+
if self.create_request_body_schema_cls is not None:
191+
self.body_schema_cls = self.create_request_body_schema_cls
192192
self.load_create_request_body_schema()
193193
self.instance = self.create()
194194
self.db.session.commit()
195195
return self.get_create_response()
196196

197197
def load_create_request_body_schema(self):
198-
self.loaded_body = self.create_request_body_schema.load(data=flask.request.json)
198+
self.loaded_body = self.create_request_body_schema_cls().load(
199+
data=flask.request.json
200+
)
199201

200202
def create(self):
201203
if is_sa_mapped(self.loaded_body):
@@ -204,20 +206,20 @@ def create(self):
204206

205207
def get_create_response(self):
206208
return self.get_schema_success_data(
207-
schema=self.create_response_body_schema,
209+
schema_cls=self.create_response_body_schema_cls,
208210
data=self.instance,
209211
status_code=201,
210212
)
211213

212214

213215
class Update(BaseView):
214-
update_kwargs_schema = None
215-
update_args_schema = None
216-
update_body_schema = None
217-
update_request_body_schema = None
218-
update_response_body_schema = None
219-
request_body_schema = None
220-
response_body_schema = None
216+
update_kwargs_schema_cls = None
217+
update_args_schema_cls = None
218+
update_body_schema_cls = None
219+
update_request_body_schema_cls = None
220+
update_response_body_schema_cls = None
221+
request_body_schema_cls = None
222+
response_body_schema_cls = None
221223

222224
loaded_body = None
223225
instance = None
@@ -229,11 +231,11 @@ def handle_put(self, *args, **kwargs):
229231
return self.handle_update(*args, partial=False, **kwargs)
230232

231233
def handle_update(self, *args, partial, **kwargs):
232-
self.handle_kwargs(self.update_kwargs_schema)
233-
self.handle_args(self.update_args_schema)
234+
self.handle_kwargs(self.update_kwargs_schema_cls)
235+
self.handle_args(self.update_args_schema_cls)
234236
self.instance = self.get_instance()
235-
if self.update_request_body_schema is not None:
236-
self.body_schema = self.load_update_request_body_schema
237+
if self.update_request_body_schema_cls is not None:
238+
self.body_schema_cls = self.update_request_body_schema_cls
237239
self.load_update_request_body_schema(partial=partial)
238240
self.instance = self.update()
239241
self.db.session.commit()
@@ -247,13 +249,13 @@ def load_update_request_body_schema(self, partial):
247249
data=flask.request.json,
248250
partial=partial,
249251
)
250-
if self.get_schema_load_instance(self.update_request_body_schema):
252+
if self.get_schema_load_instance(self.update_request_body_schema_cls):
251253
kwargs["instance"] = self.instance
252-
self.loaded_body = self.update_request_body_schema.load(**kwargs)
254+
self.loaded_body = self.update_request_body_schema_cls().load(**kwargs)
253255

254-
def get_schema_load_instance(self, schema):
256+
def get_schema_load_instance(self, schema_cls):
255257
try:
256-
return schema.Meta.load_instance
258+
return schema_cls.Meta.load_instance
257259
except AttributeError:
258260
return False
259261

@@ -262,23 +264,23 @@ def update(self):
262264

263265
def get_update_response(self):
264266
return self.get_schema_success_data(
265-
schema=self.update_response_body_schema,
267+
schema_cls=self.update_response_body_schema_cls,
266268
data=self.instance,
267269
)
268270

269271

270272
class Delete(BaseView):
271-
delete_kwargs_schema = None
272-
delete_args_schema = None
273-
delete_body_schema = None
274-
delete_response_body_schema = None
275-
response_body_schema = None
273+
delete_kwargs_schema_cls = None
274+
delete_args_schema_cls = None
275+
delete_body_schema_cls = None
276+
delete_response_body_schema_cls = None
277+
response_body_schema_cls = None
276278

277279
instance = None
278280

279281
def handle_delete(self, *args, **kwargs):
280-
self.handle_kwargs(self.delete_kwargs_schema)
281-
self.handle_args(self.delete_args_schema)
282+
self.handle_kwargs(self.delete_kwargs_schema_cls)
283+
self.handle_args(self.delete_args_schema_cls)
282284
self.instance = self.get_instance()
283285
self.instance = self.delete()
284286
self.db.session.commit()
@@ -294,6 +296,6 @@ def delete(self):
294296

295297
def get_delete_response(self):
296298
return self.get_schema_success_data(
297-
schema=self.delete_response_body_schema,
299+
schema_cls=self.delete_response_body_schema_cls,
298300
data=self.instance,
299301
)

0 commit comments

Comments
 (0)