@@ -250,6 +250,16 @@ def _check_params(fragment, fragment_type, fragment_value):
250250 if fragment_value and not (fragment_type or fragment ):
251251 raise ValueError ("Fragment value filter also needs 'fragment_type' or 'fragment' filter." )
252252
253+ def _prepare_base_query (
254+ self ,
255+ fragment : str = None ,
256+ fragment_type : str = None ,
257+ fragment_value : str = None ,
258+ ** kwargs ) -> str :
259+ Events ._check_params (fragment , fragment_type , fragment_value )
260+ base_query = self ._prepare_query (** kwargs )
261+ return base_query
262+
253263 def select (self ,
254264 expression : str = None ,
255265 type : str = None , source : str = None , fragment : str = None , # noqa (type)
@@ -323,22 +333,26 @@ def select(self,
323333 Returns:
324334 Generator for Event objects
325335 """
326- Events ._check_params (fragment , fragment_type , fragment_value )
327-
328- base_query = self ._prepare_query (
336+ base_query = self ._prepare_base_query (
329337 expression = expression ,
330- type = type , source = source , fragment = fragment ,
331- fragment_type = fragment_type , fragment_value = fragment_value ,
332- before = before , after = after ,
333- date_from = date_from , date_to = date_to ,
334- created_before = created_before , created_after = created_after ,
335- created_from = created_from , created_to = created_to ,
336- updated_before = updated_before , updated_after = updated_after ,
337- last_updated_from = last_updated_from , last_updated_to = last_updated_to ,
338- min_age = min_age , max_age = max_age ,
338+ type = type ,
339+ source = source ,
340+ fragment = fragment ,
341+ fragment_type = fragment_type ,
342+ fragment_value = fragment_value ,
343+ before = before ,
344+ after = after ,
345+ created_before = created_before ,
346+ created_after = created_after ,
347+ updated_before = updated_before ,
348+ updated_after = updated_after ,
349+ min_age = min_age ,
350+ max_age = max_age ,
351+ date_from = date_from ,
352+ date_to = date_to ,
339353 reverse = reverse ,
340- with_source_devices = with_source_devices , with_source_assets = with_source_assets ,
341- page_size = page_size ,
354+ with_source_assets = with_source_assets ,
355+ with_source_devices = with_source_devices ,
342356 ** kwargs )
343357 return super ()._iterate (
344358 base_query ,
@@ -415,29 +429,73 @@ def get_count(
415429 Returns:
416430 Number of potential results
417431 """
418- Events ._check_params (
432+ base_query = self ._prepare_base_query (
433+ expression = expression ,
434+ type = type ,
435+ source = source ,
419436 fragment = fragment ,
420437 fragment_type = fragment_type ,
421438 fragment_value = fragment_value ,
422- )
423- base_query = self ._prepare_query (
424- expression = expression ,
425- type = type , source = source , fragment = fragment ,
426- fragment_type = fragment_type , fragment_value = fragment_value ,
427- before = before , after = after ,
428- date_from = date_from , date_to = date_to ,
429- created_before = created_before , created_after = created_after ,
430- created_from = created_from , created_to = created_to ,
431- updated_before = updated_before , updated_after = updated_after ,
432- last_updated_from = last_updated_from , last_updated_to = last_updated_to ,
433- min_age = min_age , max_age = max_age ,
439+ before = before ,
440+ after = after ,
441+ created_before = created_before ,
442+ created_after = created_after ,
443+ updated_before = updated_before ,
444+ updated_after = updated_after ,
445+ min_age = min_age ,
446+ max_age = max_age ,
447+ date_from = date_from ,
448+ date_to = date_to ,
434449 reverse = reverse ,
435- with_source_devices = with_source_devices , with_source_assets = with_source_assets ,
436- limit = limit ,
437- ** kwargs
438- )
450+ with_source_assets = with_source_assets ,
451+ with_source_devices = with_source_devices ,
452+ ** kwargs )
439453 return self ._get_count (base_query )
440454
455+ def get_last (
456+ self ,
457+ expression : str = None ,
458+ type : str = None , source : str = None , fragment : str = None , # noqa (type)
459+ fragment_type : str = None , fragment_value : str = None ,
460+ before : str | datetime = None , date_to : str | datetime = None ,
461+ created_before : str | datetime = None , created_to : str | datetime = None ,
462+ updated_before : str | datetime = None , last_updated_to : str | datetime = None ,
463+ min_age : timedelta = None ,
464+ with_source_assets : bool = None ,
465+ with_source_devices : bool = None ,
466+ ** kwargs
467+ ) -> Event | None :
468+ """Retrieve the most recent event.
469+ """
470+ after = None
471+ if not before and not date_to and not min_age :
472+ after = '1970-01-01'
473+ base_query = self ._prepare_base_query (
474+ expression = expression ,
475+ type = type ,
476+ source = source ,
477+ fragment = fragment ,
478+ fragment_type = fragment_type ,
479+ fragment_value = fragment_value ,
480+ before = before ,
481+ date_to = date_to ,
482+ after = after , # fallback if no other is defined
483+ created_before = created_before ,
484+ created_to = created_to ,
485+ updated_before = updated_before ,
486+ last_updated_to = last_updated_to ,
487+ min_age = min_age ,
488+ reverse = False , # newest first (non-standard)
489+ with_source_assets = with_source_assets ,
490+ with_source_devices = with_source_devices ,
491+ ** kwargs )
492+ r = self ._get_page (base_query , 1 )
493+ if not r :
494+ return None
495+ e = Event .from_json (r [0 ])
496+ e .c8y = self .c8y # inject c8y connection into instance
497+ return e
498+
441499 def create (self , * events : Event ):
442500 """Create event objects within the database.
443501
0 commit comments