Skip to content

Commit e51c676

Browse files
committed
Create post_init method for base data layer, use it in the resource
Make resource attribute for the base data layer mandatory
1 parent 39c1498 commit e51c676

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

flask_rest_jsonapi/data_layers/alchemy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def get_object(self, view_kwargs, qs=None):
125125

126126
query = self.retrieve_object_query(view_kwargs, filter_field, filter_value)
127127

128-
if hasattr(self, "resource"):
128+
if self.resource is not None:
129129
for i_plugins in self.resource.plugins:
130130
try:
131131
query = i_plugins.data_layer_get_object_update_query(

flask_rest_jsonapi/data_layers/base.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
"""
66

77
import types
8+
from typing import TYPE_CHECKING, Optional
9+
10+
if TYPE_CHECKING:
11+
from flask_rest_jsonapi.resource import Resource
812

913

1014
class BaseDataLayer:
@@ -38,6 +42,11 @@ def __init__(self, kwargs):
3842
3943
:param dict kwargs: information about data layer instance
4044
"""
45+
46+
# initing this attribute here in the first place
47+
# because it can be easily overridden by kwargs below
48+
self.resource: Optional['Resource'] = None
49+
4150
if kwargs.get("methods") is not None:
4251
self.bound_rewritable_methods(kwargs["methods"])
4352
kwargs.pop("methods")
@@ -47,6 +56,17 @@ def __init__(self, kwargs):
4756
for key, value in kwargs.items():
4857
setattr(self, key, value)
4958

59+
def post_init(self):
60+
"""
61+
Post init stage.
62+
63+
At this moment self.resource is already defined
64+
and the layer can do any post init stuff here
65+
66+
NOTE that the data layer is inited for each request
67+
:return:
68+
"""
69+
5070
def create_object(self, data, view_kwargs):
5171
"""Create an object
5272

flask_rest_jsonapi/resource.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def __new__(cls):
5555
"""Constructor of a resource instance"""
5656
if hasattr(cls, "_data_layer"):
5757
cls._data_layer.resource = cls
58+
cls._data_layer.post_init()
5859

5960
return super().__new__(cls)
6061

0 commit comments

Comments
 (0)