@@ -183,7 +183,10 @@ def put(self,
183183 voluptuous .Required ('scope_key' ): vutils .get_string_type (),
184184 voluptuous .Required ('fetcher' ): vutils .get_string_type (),
185185 voluptuous .Required ('collector' ): vutils .get_string_type (),
186+ # This "state" property should be removed in the next release.
186187 voluptuous .Required ('state' ): vutils .get_string_type (),
188+ voluptuous .Optional ('last_processed_timestamp' ):
189+ voluptuous .Coerce (tzutils .dt_from_iso ),
187190 voluptuous .Required ('active' ): bool ,
188191 voluptuous .Required ('scope_activation_toggle_date' ):
189192 vutils .get_string_type ()
@@ -226,6 +229,79 @@ def patch(self, scope_id, scope_key=None, fetcher=None,
226229 'fetcher' : update_storage_scope .fetcher ,
227230 'collector' : update_storage_scope .collector ,
228231 'state' : update_storage_scope .state .isoformat (),
232+ 'last_processed_timestamp' :
233+ update_storage_scope .last_processed_timestamp .isoformat (),
234+ 'active' : update_storage_scope .active ,
235+ 'scope_activation_toggle_date' :
236+ update_storage_scope .scope_activation_toggle_date .isoformat ()
237+ }
238+
239+ @api_utils .add_input_schema ('body' , {
240+ voluptuous .Required ('scope_id' ):
241+ api_utils .SingleQueryParam (str ),
242+ voluptuous .Optional ('scope_key' ):
243+ api_utils .SingleQueryParam (str ),
244+ voluptuous .Optional ('fetcher' ):
245+ api_utils .SingleQueryParam (str ),
246+ voluptuous .Optional ('collector' ):
247+ api_utils .SingleQueryParam (str ),
248+ voluptuous .Optional ('active' ):
249+ api_utils .SingleQueryParam (bool ),
250+ })
251+ @api_utils .add_output_schema ({
252+ voluptuous .Required ('scope_id' ): vutils .get_string_type (),
253+ voluptuous .Required ('scope_key' ): vutils .get_string_type (),
254+ voluptuous .Required ('fetcher' ): vutils .get_string_type (),
255+ voluptuous .Required ('collector' ): vutils .get_string_type (),
256+ # This "state" property should be removed in the next release.
257+ voluptuous .Required ('state' ): vutils .get_string_type (),
258+ voluptuous .Optional ('last_processed_timestamp' ):
259+ voluptuous .Coerce (tzutils .dt_from_iso ),
260+ voluptuous .Required ('active' ): bool ,
261+ voluptuous .Required ('scope_activation_toggle_date' ):
262+ vutils .get_string_type ()
263+ })
264+ def post (self , scope_id , scope_key = None , fetcher = None , collector = None ,
265+ active = None ):
266+
267+ policy .authorize (
268+ flask .request .context ,
269+ 'scope:post_state' ,
270+ {'tenant_id' : scope_id or flask .request .context .project_id }
271+ )
272+ results = self ._storage_state .get_all (identifier = scope_id )
273+
274+ if len (results ) >= 1 :
275+ LOG .debug ("There is already a scope with ID [%s], "
276+ "scopes found: [%s]." , scope_id , results )
277+ raise http_exceptions .NotFound ("Cannot create a scope with an "
278+ "already existing scope_id: %s."
279+ % scope_id )
280+
281+ LOG .debug ("Creating storage scope with data: [scope_id=%s, "
282+ "scope_key=%s, fetcher=%s, collector=%s, active=%s]." ,
283+ scope_id , scope_key , fetcher , collector , active )
284+
285+ self ._storage_state .create_scope (scope_id , None , fetcher = fetcher ,
286+ collector = collector ,
287+ scope_key = scope_key , active = active )
288+
289+ storage_scopes = self ._storage_state .get_all (
290+ identifier = scope_id )
291+
292+ update_storage_scope = storage_scopes [0 ]
293+ last_processed_timestamp = None
294+ if update_storage_scope .last_processed_timestamp .isoformat ():
295+ last_processed_timestamp = \
296+ update_storage_scope .last_processed_timestamp .isoformat ()
297+
298+ return {
299+ 'scope_id' : update_storage_scope .identifier ,
300+ 'scope_key' : update_storage_scope .scope_key ,
301+ 'fetcher' : update_storage_scope .fetcher ,
302+ 'collector' : update_storage_scope .collector ,
303+ 'state' : last_processed_timestamp ,
304+ 'last_processed_timestamp' : last_processed_timestamp ,
229305 'active' : update_storage_scope .active ,
230306 'scope_activation_toggle_date' :
231307 update_storage_scope .scope_activation_toggle_date .isoformat ()
0 commit comments