fdc-shared-kernel 0.0.69__tar.gz → 0.0.71__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/PKG-INFO +1 -1
  2. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/fdc_shared_kernel.egg-info/PKG-INFO +1 -1
  3. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/pyproject.toml +1 -1
  4. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/event_executor/event_executor.py +18 -18
  5. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/aws_databus.py +7 -5
  6. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/utils/aws_utility.py +22 -0
  7. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/registries/service_event_registry.py +14 -4
  8. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/status_tracker/status_tracker.py +46 -12
  9. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/README.md +0 -0
  10. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/README_pypi.md +0 -0
  11. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/fdc_shared_kernel.egg-info/SOURCES.txt +0 -0
  12. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/fdc_shared_kernel.egg-info/dependency_links.txt +0 -0
  13. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/fdc_shared_kernel.egg-info/requires.txt +0 -0
  14. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/fdc_shared_kernel.egg-info/top_level.txt +0 -0
  15. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/requirements.txt +0 -0
  16. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/setup.cfg +0 -0
  17. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/__init__.py +0 -0
  18. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/async_task_executor/__init__.py +0 -0
  19. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/async_task_executor/async_task_executor.py +0 -0
  20. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/auth/__init__.py +0 -0
  21. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/auth/jwt_helper.py +0 -0
  22. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/auth/token_handler.py +0 -0
  23. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/config/__init__.py +0 -0
  24. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/database/__init__.py +0 -0
  25. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/enums/__init__.py +0 -0
  26. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/enums/async_task_executor.py +0 -0
  27. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/enums/status_tracker.py +0 -0
  28. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/event_executor/__init__.py +0 -0
  29. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/event_executor/utils.py +0 -0
  30. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/__init__.py +0 -0
  31. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/configuration_exceptions.py +0 -0
  32. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/custom_exceptions.py +0 -0
  33. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/data_validation_exceptions.py +0 -0
  34. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/http_exceptions.py +0 -0
  35. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/infrastructure_exceptions.py +0 -0
  36. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/operational_exceptions.py +0 -0
  37. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/exceptions/security_exceptions.py +0 -0
  38. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/http/__init__.py +0 -0
  39. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/http/httpx_http_client.py +0 -0
  40. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/http/request_http_client.py +0 -0
  41. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/interfaces/__init__.py +0 -0
  42. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/interfaces/databus.py +0 -0
  43. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/interfaces/http.py +0 -0
  44. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/interfaces/keyvault.py +0 -0
  45. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/logger/__init__.py +0 -0
  46. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/__init__.py +0 -0
  47. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/http_databus.py +0 -0
  48. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/nats_databus.py +0 -0
  49. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/nats_publisher.py +0 -0
  50. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/nats_test.py +0 -0
  51. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/messaging/utils/event_messages.py +0 -0
  52. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/metrics/__init__.py +0 -0
  53. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/metrics/status_tracker.py +0 -0
  54. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/models/__init__.py +0 -0
  55. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/registries/__init__.py +0 -0
  56. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/security/__init__.py +0 -0
  57. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/security/key_vault/__init__.py +0 -0
  58. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/security/key_vault/aws_secret_manager.py +0 -0
  59. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/security/key_vault/azure_keyvault.py +0 -0
  60. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/status_tracker/__init__.py +0 -0
  61. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/__init__.py +0 -0
  62. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/config/__init__.py +0 -0
  63. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/config/test_config.py +0 -0
  64. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/logger/__init__.py +0 -0
  65. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/logger/test_logger.py +0 -0
  66. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/messaging/__init__.py +0 -0
  67. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/messaging/test_aws_databus.py +0 -0
  68. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/messaging/test_event_executor.py +0 -0
  69. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/messaging/test_nats_interface.py +0 -0
  70. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/utils/__init__.py +0 -0
  71. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/utils/test_data_validators.py +0 -0
  72. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/utils/test_date_format_utils.py +0 -0
  73. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/tests/utils/test_string_utils.py +0 -0
  74. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/utils/__init__.py +0 -0
  75. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/utils/data_validators_utils.py +0 -0
  76. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/utils/date_format_utils.py +0 -0
  77. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/utils/string_utils.py +0 -0
  78. {fdc_shared_kernel-0.0.69 → fdc_shared_kernel-0.0.71}/shared_kernel/utils/template_renderer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fdc_shared_kernel
3
- Version: 0.0.69
3
+ Version: 0.0.71
4
4
  Summary: Shared library for microservice
5
5
  Author-email: Shikhil S <shikhil.s@dbizsolution.com>, Ahammed Akdham N <ahammedakdham.n@dbizsolution.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fdc_shared_kernel
3
- Version: 0.0.69
3
+ Version: 0.0.71
4
4
  Summary: Shared library for microservice
5
5
  Author-email: Shikhil S <shikhil.s@dbizsolution.com>, Ahammed Akdham N <ahammedakdham.n@dbizsolution.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fdc_shared_kernel"
7
- version = "0.0.69"
7
+ version = "0.0.71"
8
8
  requires-python = ">=3.7"
9
9
  readme = "README_pypi.md"
10
10
  description = "Shared library for microservice"
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import threading
2
3
  from concurrent.futures import ThreadPoolExecutor, Future
3
4
  from typing import Any, Callable, Dict, Optional
@@ -98,12 +99,11 @@ class EventExecutor:
98
99
 
99
100
  # setting tracking payload without the time taken and end time
100
101
  # but with all the other data
101
- self.status_tracker.set_tracking_payload(
102
- span_id=event_msg.event_meta.span_id,
103
- trace_id=event_msg.event_meta.trace_id,
104
- task=event_msg.event_name,
105
- tracking_payload=event_msg.to_json(),
102
+ self.status_tracker.set_event_meta_and_message_receipt_handle(
103
+ event_meta=event_msg.event_meta.to_dict(),
106
104
  task_id=event_msg.event_meta.job_id,
105
+ task=event_msg.event_name,
106
+ message_receipt_handle=event_msg.receipt_handle,
107
107
  )
108
108
 
109
109
  callback(event_msg.raw_message, None)
@@ -113,12 +113,11 @@ class EventExecutor:
113
113
  f"Task {event_msg.event_name} is already in queue. trace-id: {event_msg.event_meta.trace_id}. span-id: {event_msg.event_meta.trace_id}."
114
114
  )
115
115
 
116
- self.status_tracker.set_tracking_payload(
117
- span_id=event_msg.event_meta.span_id,
118
- trace_id=event_msg.event_meta.trace_id,
119
- task=event_msg.event_name,
120
- tracking_payload=event_msg.to_json(),
116
+ self.status_tracker.set_event_meta_and_message_receipt_handle(
117
+ event_meta=event_msg.event_meta.to_dict(),
121
118
  task_id=event_msg.event_meta.job_id,
119
+ task=event_msg.event_name,
120
+ message_receipt_handle=event_msg.receipt_handle,
122
121
  )
123
122
 
124
123
  self.status_tracker.update_task(
@@ -128,13 +127,15 @@ class EventExecutor:
128
127
  status=TaskStatus.PROCESSING.value,
129
128
  task_id=event_msg.event_meta.job_id,
130
129
  )
131
- callback(event_msg.raw_message, task.get("tracking_payload"))
130
+ tracking_id = json.loads(task["tracking_id"]) if task["tracking_id"] else None
131
+ callback(event_msg.raw_message, tracking_id)
132
132
 
133
133
  elif task["status"] == TaskStatus.PROCESSING.value:
134
134
  logger.info(
135
135
  f"Task {event_msg.event_name} is already processing. trace-id: {event_msg.event_meta.trace_id}. span-id: {event_msg.event_meta.trace_id}."
136
136
  )
137
- callback(event_msg.raw_message, task.get("tracking_payload"))
137
+ tracking_id = json.loads(task["tracking_id"]) if task["tracking_id"] else None
138
+ callback(event_msg.raw_message, tracking_id)
138
139
 
139
140
  return True
140
141
 
@@ -172,13 +173,12 @@ class EventExecutor:
172
173
  logger.info(
173
174
  f"Setting tracking payload for event {event_msg.event_name}. trace-id: {event_msg.event_meta.trace_id}. span-id: {event_msg.event_meta.trace_id}."
174
175
  )
175
- # updating tracking payload with the time taken and end time
176
- self.status_tracker.set_tracking_payload(
177
- span_id=event_msg.event_meta.span_id,
178
- trace_id=event_msg.event_meta.trace_id,
179
- task=event_msg.event_name,
180
- tracking_payload=event_msg.to_json(),
176
+ # updating event_meta with the time taken and end time
177
+ self.status_tracker.set_event_meta_and_message_receipt_handle(
178
+ event_meta=event_msg.event_meta.to_dict(),
181
179
  task_id=event_msg.event_meta.job_id,
180
+ task=event_msg.event_name,
181
+ message_receipt_handle=event_msg.receipt_handle,
182
182
  )
183
183
 
184
184
  def _update_event_stats(self, event_name: str, success: bool) -> None:
@@ -71,12 +71,14 @@ class AWSDataBus(DataBus):
71
71
  status=TaskStatus.QUEUED.value,
72
72
  task_id=validated_event_dict["event_meta"]["job_id"],
73
73
  )
74
- self.status_tracker.set_tracking_payload(
75
- span_id=validated_event_dict["event_meta"]["span_id"],
76
- trace_id=validated_event_dict["event_meta"]["trace_id"],
77
- task=validated_event_dict["event_name"],
78
- tracking_payload=json.dumps(validated_event_dict),
74
+
75
+ self.status_tracker.set_event_meta_and_message_receipt_handle(
76
+ event_meta=validated_event_dict["event_meta"],
79
77
  task_id=validated_event_dict["event_meta"]["job_id"],
78
+ task=validated_event_dict["event_name"],
79
+ )
80
+ logger.info(
81
+ f"Updated event: {validated_event_dict['event_name']} with meta: {validated_event_dict['event_meta']}"
80
82
  )
81
83
 
82
84
  def subscribe_sync_event(self, event_name: str, callback: Callable[[Any], None]):
@@ -256,3 +256,25 @@ class AWSMessagingUtility:
256
256
  except Exception as e:
257
257
  logger.error(f"Failed to publish event: {e}")
258
258
  return False, None
259
+
260
+ def get_queue_url_arn(self, event_name: str) -> dict:
261
+ queue_name = f"{self.service_name}-{event_name}"
262
+ queue_arn = f"arn:aws:sqs:{self.region}:{self.account_id}:{queue_name}"
263
+ queue_url = f"https://sqs.{self.region}.amazonaws.com/{self.account_id}/{queue_name}"
264
+ return {
265
+ "queue_arn": queue_arn,
266
+ "queue_url": queue_url
267
+ }
268
+
269
+ def update_visibility_timeout(self, queue_url, receipt_handle, timeout_in_seconds):
270
+ try:
271
+ response = self.sqs.change_message_visibility(
272
+ QueueUrl=queue_url,
273
+ ReceiptHandle=receipt_handle,
274
+ VisibilityTimeout=timeout_in_seconds
275
+ )
276
+ logger.info(f"Message visibility changed: {response}")
277
+
278
+ except ClientError as e:
279
+ logger.error(f"Error changing message visibility: {e}")
280
+ raise e
@@ -20,12 +20,22 @@ class ServiceEventRegistry:
20
20
  + "/event/subscribe-sync-event/MARK_TASK_AS_FAILURE/"
21
21
  )
22
22
 
23
- SET_TRACKING_PAYLOAD = (
23
+ GET_TASK = (
24
24
  config.get("MASTER_SERVICE_BASE_ENDPOINT")
25
- + "/event/subscribe-sync-event/SET_TRACKING_PAYLOAD/"
25
+ + "/event/subscribe-sync-event/GET_TASK/"
26
26
  )
27
27
 
28
- GET_TASK = (
28
+ GET_IN_PROGRESS_TASK = (
29
29
  config.get("MASTER_SERVICE_BASE_ENDPOINT")
30
- + "/event/subscribe-sync-event/GET_TASK/"
30
+ + "/event/subscribe-sync-event/GET_IN_PROGRESS_TASK/"
31
+ )
32
+
33
+ SET_EVENT_META_AND_MESSAGE_RECEIPT_HANDLE = (
34
+ config.get("MASTER_SERVICE_BASE_ENDPOINT")
35
+ + "/event/subscribe-sync-event/SET_EVENT_META_AND_MESSAGE_RECEIPT_HANDLE/"
36
+ )
37
+
38
+ SET_TRACKING_ID = (
39
+ config.get("MASTER_SERVICE_BASE_ENDPOINT")
40
+ + "/event/subscribe-sync-event/SET_TRACKING_ID/"
31
41
  )
@@ -88,19 +88,51 @@ class StatusTracker:
88
88
  except Exception as e:
89
89
  raise StatusTrackerException(e)
90
90
 
91
+
92
+ def get_task(self, task, task_id):
93
+ """Publishes a synchronous event to retrieve a task"""
94
+ try:
95
+ payload = {
96
+ "task": task,
97
+ "task_id": task_id,
98
+ }
99
+ response: dict = self.databus.request_event(
100
+ getattr(service_event_registry, "GET_TASK"), payload
101
+ )
102
+ return response.get("data")
103
+
104
+ except Exception as e:
105
+ raise StatusTrackerException(e)
91
106
 
92
- def set_tracking_payload(self, span_id, trace_id, task, tracking_payload, task_id):
93
- """Publishes a synchronous event to set tracking payload"""
107
+
108
+ def get_in_progress_task(self, task):
109
+ """Publishes a synchronous event to retrieve a task in Processing status"""
94
110
  try:
95
111
  payload = {
96
- "span_id": span_id,
97
- "trace_id": trace_id,
98
112
  "task": task,
99
- "tracking_payload": tracking_payload,
113
+ }
114
+ response: dict = self.databus.request_event(
115
+ getattr(service_event_registry, "GET_IN_PROGRESS_TASK"), payload
116
+ )
117
+ return response.get("data")
118
+
119
+ except Exception as e:
120
+ raise StatusTrackerException(e)
121
+
122
+
123
+ def set_event_meta_and_message_receipt_handle(self, event_meta, task_id, task, message_receipt_handle=None):
124
+ """Publishes a synchronous event to set event meta"""
125
+ try:
126
+ payload = {
127
+ "event_meta": event_meta,
100
128
  "task_id": task_id,
129
+ "task": task,
101
130
  }
131
+ if message_receipt_handle:
132
+ payload["message_receipt_handle"] = message_receipt_handle
133
+
102
134
  response = self.databus.request_event(
103
- getattr(service_event_registry, "SET_TRACKING_PAYLOAD"), payload
135
+ getattr(service_event_registry, "SET_EVENT_META_AND_MESSAGE_RECEIPT_HANDLE"), payload
104
136
  )
105
137
  return response
106
138
 
@@ -108,17 +140,19 @@ class StatusTracker:
108
140
  raise StatusTrackerException(e)
109
141
 
110
142
 
111
- def get_task(self, task, task_id):
112
- """Publishes a synchronous event to retrieve a task"""
143
+ def set_tracking_id(self, task_id, task, tracking_id):
144
+ """Publishes a synchronous event to set tracking id"""
113
145
  try:
114
146
  payload = {
115
- "task": task,
116
147
  "task_id": task_id,
148
+ "task": task,
149
+ "tracking_id": tracking_id,
117
150
  }
118
- response: dict = self.databus.request_event(
119
- getattr(service_event_registry, "GET_TASK"), payload
151
+ response = self.databus.request_event(
152
+ getattr(service_event_registry, "SET_TRACKING_ID"), payload
120
153
  )
121
- return response.get("data")
154
+ return response
122
155
 
123
156
  except Exception as e:
124
157
  raise StatusTrackerException(e)
158
+