1+ import warnings
2+ from collections .abc import Generator
3+ from typing import Any
4+
5+ from kubernetes .dynamic import DynamicClient
16from simple_logger .logger import get_logger
27
38LOGGER = get_logger (name = __name__ )
@@ -10,21 +15,41 @@ class Event:
1015
1116 api_version = "v1"
1217
18+ # TODO: remove once `client` is mandatory
19+ @staticmethod
20+ def _resolve_client (
21+ client : DynamicClient | None ,
22+ dyn_client : DynamicClient | None ,
23+ ) -> DynamicClient :
24+ """Resolve client from new or deprecated parameter with deprecation warning."""
25+ if client is None and dyn_client is not None :
26+ warnings .warn (
27+ "`dyn_client` arg will be renamed to `client` and will be mandatory in the next major release." ,
28+ FutureWarning ,
29+ stacklevel = 3 , # Adjusted for helper function call
30+ )
31+
32+ resolved = client or dyn_client
33+ assert resolved is not None , "Either 'client' or 'dyn_client' must be provided"
34+ return resolved
35+
1336 @classmethod
1437 def get (
1538 cls ,
16- dyn_client ,
17- namespace = None ,
18- name = None ,
19- label_selector = None ,
20- field_selector = None ,
21- resource_version = None ,
22- timeout = None ,
23- ):
39+ client : DynamicClient | None = None , # TODO: make mandatory in the next major release
40+ dyn_client : DynamicClient | None = None , # TODO: remove in the next major release
41+ namespace : str | None = None ,
42+ name : str | None = None ,
43+ label_selector : str | None = None ,
44+ field_selector : str | None = None ,
45+ resource_version : str | None = None ,
46+ timeout : int | None = None ,
47+ ) -> Generator [Any , None , None ]:
2448 """
2549 get - retrieves K8s events.
2650
2751 Args:
52+ client (DynamicClient): K8s client
2853 dyn_client (DynamicClient): K8s client
2954 namespace (str): event namespace
3055 name (str): event name
@@ -46,6 +71,7 @@ def get(
4671 ):
4772 print(event.object)
4873 """
74+ _client = cls ._resolve_client (client , dyn_client )
4975
5076 LOGGER .info ("Reading events" )
5177 LOGGER .debug (
@@ -54,7 +80,7 @@ def get(
5480 f" resource_version={ resource_version } , timeout={ timeout } "
5581 )
5682
57- event_listener = dyn_client .resources .get (api_version = cls .api_version , kind = cls .__name__ )
83+ event_listener = _client .resources .get (api_version = cls .api_version , kind = cls .__name__ )
5884 yield from event_listener .watch (
5985 namespace = namespace ,
6086 name = name ,
@@ -67,19 +93,21 @@ def get(
6793 @classmethod
6894 def delete_events (
6995 cls ,
70- dyn_client ,
71- namespace = None ,
72- name = None ,
73- label_selector = None ,
74- field_selector = None ,
75- resource_version = None ,
76- timeout = None ,
77- ):
96+ client : DynamicClient | None = None , # TODO: make mandatory in the next major release
97+ dyn_client : DynamicClient | None = None , # TODO: remove in the next major release
98+ namespace : str | None = None ,
99+ name : str | None = None ,
100+ label_selector : str | None = None ,
101+ field_selector : str | None = None ,
102+ resource_version : str | None = None ,
103+ timeout : int | None = None ,
104+ ) -> None :
78105 """
79106 delete_events - delete K8s events. For example, to cleanup events before test, in order to not get old
80107 events in the test, in order to prevent false positive test.
81108
82109 Args:
110+ client (DynamicClient): K8s client
83111 dyn_client (DynamicClient): K8s client
84112 namespace (str): event namespace
85113 name (str): event name
@@ -89,21 +117,20 @@ def delete_events(
89117 resource_version (str): filter events by their resource's version
90118 timeout (int): timeout in seconds
91119
92- Returns
93- list: event objects
94-
95- example: deleting all the event with a reason of "AnEventReason", from "my-namespace" namespace
96-
97- def delete_events_before_test(default_client):
98- Event.delete_events(default_client, namespace=my-namespace, field_selector="reason=AnEventReason")
120+ example: deleting all the events with a reason of "AnEventReason", from "my-namespace" namespace
121+ def delete_events_before_test(client):
122+ Event.delete_events(client=client, namespace="my-namespace", field_selector="reason=AnEventReason")
99123 """
124+ _client = cls ._resolve_client (client , dyn_client )
125+
100126 LOGGER .info ("Deleting events" )
101127 LOGGER .debug (
102128 f"delete_events parameters: namespace={ namespace } , name={ name } ,"
103129 f" label_selector={ label_selector } , field_selector='{ field_selector } ',"
104130 f" resource_version={ resource_version } , timeout={ timeout } "
105131 )
106- dyn_client .resources .get (api_version = cls .api_version , kind = cls .__name__ ).delete (
132+
133+ _client .resources .get (api_version = cls .api_version , kind = cls .__name__ ).delete (
107134 namespace = namespace ,
108135 name = name ,
109136 label_selector = label_selector ,
0 commit comments