6
6
from ninja_extra .shortcuts import get_object_or_none
7
7
8
8
from easy .exception import BaseAPIException
9
- from easy .response import BaseApiResponse
10
9
11
10
logger = logging .getLogger (__name__ )
12
11
@@ -37,37 +36,35 @@ def _separate_payload(self, payload: Dict) -> Tuple[Dict, Dict]:
37
36
return local_fields , m2m_fields
38
37
39
38
@staticmethod
40
- def _crud_set_m2m_obj (obj : models .Model , m2m_fields : Dict ) -> bool :
39
+ def _crud_set_m2m_obj (obj : models .Model , m2m_fields : Dict ) -> None :
41
40
if obj and m2m_fields :
42
41
for _field , _value in m2m_fields .items ():
43
42
if _value and isinstance (_value , List ):
44
43
m2m_f = getattr (obj , _field )
45
44
m2m_f .set (_value )
46
- return True
47
45
48
46
# Define BASE CRUD
49
47
@transaction .atomic ()
50
48
def _crud_add_obj (self , ** payload : Dict ) -> Any :
51
49
local_f_payload , m2m_f_payload = self ._separate_payload (payload )
52
50
53
- # Create obj with local_fields payload
54
- obj = self .model .objects .create (** local_f_payload )
55
-
56
- # Save obj with m2m_fields payload
57
- set_m2m_status = self ._crud_set_m2m_obj (obj , m2m_f_payload )
58
-
59
- if obj and set_m2m_status :
51
+ try :
52
+ # Create obj with local_fields payload
53
+ obj = self .model .objects .create (** local_f_payload )
54
+ # Save obj with m2m_fields payload
55
+ self ._crud_set_m2m_obj (obj , m2m_f_payload )
56
+ except Exception as e : # pragma: no cover
57
+ raise BaseAPIException (f"Create Error - { e } " )
58
+ if obj :
60
59
return obj .id
61
- else :
62
- return None
63
60
64
- def _crud_del_obj (self , pk : int ) -> "BaseApiResponse" :
61
+ def _crud_del_obj (self , pk : int ) -> bool :
65
62
obj = get_object_or_none (self .model , pk = pk )
66
63
if obj :
67
64
self .model .objects .filter (pk = pk ).delete ()
68
- return BaseApiResponse ( "Deleted." , errno = 204 )
65
+ return True
69
66
else :
70
- return BaseApiResponse ( "Not Found." , errno = 404 )
67
+ return False
71
68
72
69
@transaction .atomic ()
73
70
def _crud_update_obj (self , pk : int , payload : Dict ) -> bool :
@@ -76,11 +73,10 @@ def _crud_update_obj(self, pk: int, payload: Dict) -> bool:
76
73
return False
77
74
try :
78
75
obj , _ = self .model .objects .update_or_create (pk = pk , defaults = local_fields )
76
+ self ._crud_set_m2m_obj (obj , m2m_fields )
79
77
except Exception as e : # pragma: no cover
80
78
raise BaseAPIException (f"Update Error - { e } " )
81
-
82
- set_m2m_status = self ._crud_set_m2m_obj (obj , m2m_fields )
83
- return bool (set_m2m_status and obj )
79
+ return bool (obj )
84
80
85
81
def _crud_get_obj (self , pk : int ) -> Any :
86
82
if self .m2m_fields_list :
0 commit comments