8
8
CustomObjectPagedQueryResponseSchema ,
9
9
CustomObjectSchema ,
10
10
)
11
- from commercetools .platform .models ._schemas .error import ErrorResponseSchema
12
11
from commercetools .testing .abstract import BaseModel , ServiceBackend
13
12
from commercetools .testing .utils import create_commercetools_response
14
13
@@ -27,7 +26,7 @@ def add(self, draft, id=None):
27
26
version matches. otherwise create a new item
28
27
"""
29
28
new_obj = self ._create_from_draft (draft , id )
30
- current_obj = self ._get_by_container_key (new_obj .container , new_obj .key )
29
+ current_obj = self ._get_by_container_and_key (new_obj .container , new_obj .key )
31
30
32
31
if current_obj :
33
32
if current_obj ["version" ] != new_obj .version :
@@ -55,7 +54,7 @@ def _create_from_draft(
55
54
last_modified_at = datetime .datetime .now (datetime .timezone .utc ),
56
55
)
57
56
58
- def _get_by_container_key (
57
+ def _get_by_container_and_key (
59
58
self , container : str , key : str
60
59
) -> typing .Optional [typing .Dict ]:
61
60
return next (
@@ -78,7 +77,21 @@ def urls(self):
78
77
return [
79
78
("^$" , "GET" , self .query ),
80
79
("^$" , "POST" , self .create ),
81
- ("^(?P<container>[^/]+)/(?P<key>[^/]+)$" , "GET" , self .get_by_container_key ),
80
+ (
81
+ "^(?P<container>[^/]+)/(?P<key>[^/]+)$" ,
82
+ "GET" ,
83
+ self .get_by_container_and_key ,
84
+ ),
85
+ (
86
+ "^(?P<container>[^/]+)/(?P<key>[^/]+)$" ,
87
+ "POST" ,
88
+ self .update_by_container_and_key ,
89
+ ),
90
+ (
91
+ "^(?P<container>[^/]+)/(?P<key>[^/]+)$" ,
92
+ "DELETE" ,
93
+ self .delete_by_container_and_key ,
94
+ ),
82
95
("^(?P<container>[^/]+)$" , "GET" , self .query_by_container ),
83
96
]
84
97
@@ -91,9 +104,21 @@ def query_by_container(self, request, container: str):
91
104
92
105
return self .query (request )
93
106
94
- def get_by_container_key (self , request , container : str , key : str ):
95
- item = self .model ._get_by_container_key (container , key )
107
+ def get_by_container_and_key (self , request , container : str , key : str ):
108
+ item = self .model ._get_by_container_and_key (container , key )
96
109
if item :
97
110
return create_commercetools_response (request , json = item )
98
- else :
99
- return create_commercetools_response (request , status_code = 404 )
111
+
112
+ return create_commercetools_response (request , status_code = 404 )
113
+
114
+ def update_by_container_and_key (self , request , container : str , key : str ):
115
+ item = self .model ._get_by_container_and_key (container , key )
116
+ return self ._update (request , item )
117
+
118
+ def delete_by_container_and_key (self , request , container : str , key : str ):
119
+ item = self .model ._get_by_container_and_key (container , key )
120
+ if item :
121
+ obj = self .model .delete_by_container_and_key (container , key )
122
+ return create_commercetools_response (request , json = obj )
123
+
124
+ return create_commercetools_response (request , status_code = 404 )
0 commit comments