fdc-shared-kernel 0.0.191__tar.gz → 0.0.192__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 (197) hide show
  1. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/PKG-INFO +1 -1
  2. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/fdc_shared_kernel.egg-info/PKG-INFO +1 -1
  3. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/pyproject.toml +1 -1
  4. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/fabric_sql_warehouse_connection.py +72 -37
  5. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/fabric_sql_handler.py +0 -3
  6. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/README.md +0 -0
  7. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/README_pypi.md +0 -0
  8. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/fdc_shared_kernel.egg-info/SOURCES.txt +0 -0
  9. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/fdc_shared_kernel.egg-info/dependency_links.txt +0 -0
  10. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/fdc_shared_kernel.egg-info/requires.txt +0 -0
  11. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/fdc_shared_kernel.egg-info/top_level.txt +0 -0
  12. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/requirements.txt +0 -0
  13. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/setup.cfg +0 -0
  14. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/__init__.py +0 -0
  15. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/agent_communication_channel/__init__.py +0 -0
  16. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/agent_communication_channel/agent_channel.py +0 -0
  17. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/agent_communication_channel/contexts.py +0 -0
  18. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/agent_communication_channel/event_channel.py +0 -0
  19. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/ai_audit_log/__init__.py +0 -0
  20. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/ai_chat_persistence/__init__.py +0 -0
  21. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/ai_chat_persistence/chat_persistence.py +0 -0
  22. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/async_task_executor/__init__.py +0 -0
  23. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/async_task_executor/async_task_executor.py +0 -0
  24. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/auth/__init__.py +0 -0
  25. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/auth/jwt_helper.py +0 -0
  26. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/auth/token_handler.py +0 -0
  27. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/auth/workbook_permission_handler.py +0 -0
  28. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/__init__.py +0 -0
  29. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/batch_job_status_tracker/container_job_status_tracker.py +0 -0
  30. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_handlers/__init__.py +0 -0
  31. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_handlers/aws_batch_job_handler.py +0 -0
  32. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_handlers/azure_apps_job_handler.py +0 -0
  33. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_handlers/job_handler_factory.py +0 -0
  34. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_handlers/job_status_mapper.py +0 -0
  35. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_storage_managers/__init__.py +0 -0
  36. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_storage_managers/azure_blob_storage_manager.py +0 -0
  37. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_storage_managers/job_storage_manager_factory.py +0 -0
  38. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/batch_job/job_storage_managers/s3_job_storage_manager.py +0 -0
  39. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/config/__init__.py +0 -0
  40. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/constants/constants.py +0 -0
  41. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/__init__.py +0 -0
  42. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/databricks_warehouse_connection.py +0 -0
  43. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/jdbc_warehouse_connection.py +0 -0
  44. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/mssql_warehouse_connection.py +0 -0
  45. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/mysql_warehouse_connection.py +0 -0
  46. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/postgresql_warehouse_connection.py +0 -0
  47. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/redshift_warehouse_connection.py +0 -0
  48. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/connections/snowflake_warehouse_connection.py +0 -0
  49. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/custom_query_builders/databricks_query.py +0 -0
  50. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/databricks_handler.py +0 -0
  51. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/factory.py +0 -0
  52. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/jdbc_driver_registry.py +0 -0
  53. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/jdbc_handler.py +0 -0
  54. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/mssql_handler.py +0 -0
  55. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/mysql_handler.py +0 -0
  56. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/odbc_handler.py +0 -0
  57. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/postgresql_handler.py +0 -0
  58. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/databricks_query_executor.py +0 -0
  59. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/fabric_sql_query_executor.py +0 -0
  60. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/jdbc_query_executor.py +0 -0
  61. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/mssql_query_executor.py +0 -0
  62. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/mysql_query_executor.py +0 -0
  63. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/postgresql_query_executor.py +0 -0
  64. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/redshift_query_executor.py +0 -0
  65. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/query_executors/snowflake_query_executor.py +0 -0
  66. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/redshift_handler.py +0 -0
  67. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/snowflake_handler.py +0 -0
  68. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/utils.py +0 -0
  69. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/data_warehouse_handlers/warehouse_handlers_map.py +0 -0
  70. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/database/__init__.py +0 -0
  71. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/__init__.py +0 -0
  72. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/aws_batch_job_context.py +0 -0
  73. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/azure_container_app_job_context.py +0 -0
  74. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/event_executor.py +0 -0
  75. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/job_context.py +0 -0
  76. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/job_record_dataclasses.py +0 -0
  77. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/dataclasses/warehouse_configs.py +0 -0
  78. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/__init__.py +0 -0
  79. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/__init__.py +0 -0
  80. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/csv.py +0 -0
  81. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/databricks.py +0 -0
  82. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/db2.py +0 -0
  83. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/jdbc.py +0 -0
  84. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/jira.py +0 -0
  85. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/mssql.py +0 -0
  86. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/mysql.py +0 -0
  87. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/oracle.py +0 -0
  88. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/postgres.py +0 -0
  89. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/redshift.py +0 -0
  90. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/salesforce.py +0 -0
  91. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/snowflake.py +0 -0
  92. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/connectors_to_system/sqlalchemy.py +0 -0
  93. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/system_to_warehouse/__init__.py +0 -0
  94. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/system_to_warehouse/postgres.py +0 -0
  95. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/datatype_mappings/system_to_warehouse/redshift.py +0 -0
  96. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/enums/__init__.py +0 -0
  97. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/enums/async_task_executor.py +0 -0
  98. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/enums/connection_engine.py +0 -0
  99. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/enums/status_tracker.py +0 -0
  100. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/event_executor/__init__.py +0 -0
  101. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/event_executor/event_executor.py +0 -0
  102. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/event_executor/job_executor.py +0 -0
  103. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/event_executor/utils.py +0 -0
  104. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/__init__.py +0 -0
  105. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/batch_job_exceptions.py +0 -0
  106. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/configuration_exceptions.py +0 -0
  107. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/custom_exceptions.py +0 -0
  108. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/data_validation_exceptions.py +0 -0
  109. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/http_exceptions.py +0 -0
  110. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/infrastructure_exceptions.py +0 -0
  111. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/operational_exceptions.py +0 -0
  112. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/security_exceptions.py +0 -0
  113. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/exceptions/user_intervention_exception.py +0 -0
  114. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/http/__init__.py +0 -0
  115. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/http/httpx_http_client.py +0 -0
  116. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/http/request_http_client.py +0 -0
  117. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/__init__.py +0 -0
  118. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/base_job_handler.py +0 -0
  119. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/data_warehouse_handler.py +0 -0
  120. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/databus.py +0 -0
  121. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/encryption.py +0 -0
  122. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/http.py +0 -0
  123. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/keyvault.py +0 -0
  124. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/query_executor.py +0 -0
  125. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/storage_manager.py +0 -0
  126. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/interfaces/warehouse_connection.py +0 -0
  127. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/logger/__init__.py +0 -0
  128. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/__init__.py +0 -0
  129. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/aws_databus.py +0 -0
  130. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/azure_databus.py +0 -0
  131. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/http_databus.py +0 -0
  132. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/nats_databus.py +0 -0
  133. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/nats_publisher.py +0 -0
  134. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/nats_test.py +0 -0
  135. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/utils/aws_utility.py +0 -0
  136. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/utils/azure_utility.py +0 -0
  137. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/messaging/utils/event_messages.py +0 -0
  138. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/metrics/__init__.py +0 -0
  139. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/metrics/status_tracker.py +0 -0
  140. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/models/__init__.py +0 -0
  141. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/registries/__init__.py +0 -0
  142. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/registries/schema_onboarding_event_registry.py +0 -0
  143. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/registries/service_event_registry.py +0 -0
  144. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/__init__.py +0 -0
  145. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/base_tracker.py +0 -0
  146. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/enums.py +0 -0
  147. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/exceptions.py +0 -0
  148. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/run_manager.py +0 -0
  149. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/schema_onboarding_tracker.py +0 -0
  150. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/shared_helpers.py +0 -0
  151. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/task_determination.py +0 -0
  152. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/task_helpers.py +0 -0
  153. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/task_manager.py +0 -0
  154. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/template_manager.py +0 -0
  155. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/schema_onboarding_tracker/utility_manager.py +0 -0
  156. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/__init__.py +0 -0
  157. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/encryption/__init__.py +0 -0
  158. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/encryption/manager.py +0 -0
  159. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/encryption/providers.py +0 -0
  160. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/key_vault/__init__.py +0 -0
  161. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/key_vault/aws_secret_manager.py +0 -0
  162. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/security/key_vault/azure_keyvault.py +0 -0
  163. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/status_tracker/__init__.py +0 -0
  164. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/status_tracker/status_tracker.py +0 -0
  165. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/storage_handlers/__init__.py +0 -0
  166. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/storage_handlers/blob_file_handler.py +0 -0
  167. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/storage_handlers/s3_storage_handler.py +0 -0
  168. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/__init__.py +0 -0
  169. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/config/__init__.py +0 -0
  170. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/config/test_config.py +0 -0
  171. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/logger/__init__.py +0 -0
  172. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/logger/test_logger.py +0 -0
  173. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/messaging/__init__.py +0 -0
  174. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/messaging/test_aws_databus.py +0 -0
  175. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/messaging/test_event_executor.py +0 -0
  176. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/messaging/test_nats_interface.py +0 -0
  177. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/security/test_encryption.py +0 -0
  178. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/utils/__init__.py +0 -0
  179. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/utils/test_data_validators.py +0 -0
  180. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/utils/test_date_format_utils.py +0 -0
  181. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/tests/utils/test_string_utils.py +0 -0
  182. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/traceability/__init__.py +0 -0
  183. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/traceability/traceability_handler.py +0 -0
  184. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/__init__.py +0 -0
  185. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/data_validators_utils.py +0 -0
  186. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/date_format_utils.py +0 -0
  187. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/date_utils.py +0 -0
  188. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/string_utils.py +0 -0
  189. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/template_renderer.py +0 -0
  190. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/thread_debug_utils.py +0 -0
  191. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/thread_local_storage.py +0 -0
  192. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/shared_kernel/utils/thread_log_traker.py +0 -0
  193. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/tests/__init__.py +0 -0
  194. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/tests/messaging/__init__.py +0 -0
  195. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/tests/messaging/utils/__init__.py +0 -0
  196. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/tests/messaging/utils/test_aws_utility.py +0 -0
  197. {fdc_shared_kernel-0.0.191 → fdc_shared_kernel-0.0.192}/tests/test_job_executor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fdc_shared_kernel
3
- Version: 0.0.191
3
+ Version: 0.0.192
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.4
2
2
  Name: fdc_shared_kernel
3
- Version: 0.0.191
3
+ Version: 0.0.192
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.191"
7
+ version = "0.0.192"
8
8
  requires-python = ">=3.7"
9
9
  readme = "README_pypi.md"
10
10
  description = "Shared library for microservice"
@@ -23,6 +23,7 @@ logger = Logger(config.get("APP_NAME"))
23
23
  class FabricSQLWarehouseConnection(DataWarehouseConnection):
24
24
 
25
25
  _engines: Dict[str, Engine] = {}
26
+ _tokens: Dict[str, dict] = {}
26
27
  _lock = threading.Lock()
27
28
 
28
29
  def __init__(
@@ -43,39 +44,16 @@ class FabricSQLWarehouseConnection(DataWarehouseConnection):
43
44
  self.search = pagination.get("search") if isinstance(pagination, dict) else None
44
45
 
45
46
  def _engine_key(self, cfg: FabricSQLConfig) -> str:
46
- pwd_hash = hashlib.sha256(cfg.password.encode()).hexdigest()
47
- return f"{cfg.host}|{cfg.port}|{cfg.database}|{cfg.username}|{pwd_hash}"
47
+ h = hashlib.md5(f"{cfg.host}:{cfg.port}:{cfg.database}:{cfg.username}".encode()).hexdigest()
48
+ return h
48
49
 
49
- def _get_fabric_connection_params(self, cfg: FabricSQLConfig) -> tuple:
50
+ def _get_fabric_connection_params(self, cfg: FabricSQLConfig) -> str:
50
51
  """
51
- Builds the token authentication and connection parameters for Microsoft Fabric SQL.
52
+ Builds the base connection parameters for Microsoft Fabric SQL.
52
53
 
53
54
  Returns:
54
- tuple: (connection_string, connect_args)
55
+ str: Connection string
55
56
  """
56
- logger.info("Using Fabric SQL connector (pyodbc native) with access token authentication")
57
- tenant_id = getattr(cfg, "tenant_id", None)
58
- if not tenant_id:
59
- raise ValueError(
60
- "tenant_id is required in FabricSQLConfig for authenticating to Microsoft Fabric via Active Directory Service Principal."
61
- )
62
-
63
- from azure.identity import ClientSecretCredential
64
- import struct
65
-
66
- # Get OAuth2 token for Azure SQL / Fabric from Microsoft Entra ID
67
- cred = ClientSecretCredential(
68
- tenant_id=tenant_id,
69
- client_id=cfg.username,
70
- client_secret=cfg.password
71
- )
72
- token_obj = cred.get_token("https://database.windows.net/.default")
73
-
74
- # Encode token as UTF-16-LE and pack into structure expected by the SQL Server ODBC driver.
75
- # The binary layout expects [4 bytes for length of token payload] followed by the [raw token bytes].
76
- token_bytes = token_obj.token.encode("utf-16-le")
77
- token_struct = struct.pack(f"<I{len(token_bytes)}s", len(token_bytes), token_bytes)
78
-
79
57
  import urllib.parse
80
58
  # Build ODBC params. We omit UID and Password fields entirely from the connection string.
81
59
  # Authentication is handled solely by injecting the access token into the connection handle.
@@ -89,11 +67,7 @@ class FabricSQLWarehouseConnection(DataWarehouseConnection):
89
67
  # We use odbc_connect query param to prevent SQLAlchemy dialect from auto-injecting
90
68
  # conflicting credentials/parameters (avoiding error FA005).
91
69
  connection_string = f"mssql+pyodbc:///?odbc_connect={odbc_params}"
92
-
93
- # Inject the token using ODBC attribute SQL_COPT_SS_ACCESS_TOKEN (attribute ID 1256)
94
- # before the connection is established.
95
- connect_args = {"attrs_before": {1256: token_struct}}
96
- return connection_string, connect_args
70
+ return connection_string
97
71
 
98
72
  def _get_engine(self) -> Engine:
99
73
  cfg = self._fabric_config
@@ -102,19 +76,79 @@ class FabricSQLWarehouseConnection(DataWarehouseConnection):
102
76
  if key not in self._engines:
103
77
  with self.__class__._lock: # thread-safe
104
78
  if key not in self._engines: # recheck
105
- connection_string, connect_args = self._get_fabric_connection_params(cfg)
79
+ from sqlalchemy import event
80
+
81
+ connection_string = self._get_fabric_connection_params(cfg)
106
82
 
107
- self._engines[key] = create_engine(
83
+ engine = create_engine(
108
84
  connection_string,
109
- connect_args=connect_args,
110
85
  pool_size=10,
111
86
  max_overflow=5,
112
87
  pool_timeout=30,
113
88
  pool_recycle=1800,
114
89
  pool_pre_ping=True,
115
90
  )
91
+
92
+ # Ensure a thread-safe token cache structure exists for this database key.
93
+ # Each unique database configuration gets its own token cache, expiration tracker, and lock.
94
+ if key not in self._tokens:
95
+ self._tokens[key] = {
96
+ "token": None, # Stores the packed binary token structure
97
+ "expires_at": 0, # Unix timestamp indicating token expiration time
98
+ "lock": threading.Lock() # Lock to synchronize concurrent token refreshes
99
+ }
100
+
101
+ # Register an event listener on the engine to intercept connection establishment.
102
+ # Every time SQLAlchemy checks out or opens a new raw DBAPI connection from the pool,
103
+ # this listener executes to inject a valid, fresh Entra ID access token.
104
+ @event.listens_for(engine, "do_connect")
105
+ def provide_token(dialect, conn_rec, cargs, cparams):
106
+ now = time.time()
107
+ token_info = self._tokens[key]
108
+
109
+ # Check if the token is missing or near expiration (within 5 minutes / 300 seconds).
110
+ # This buffer ensures we don't send a token that is about to expire.
111
+ if token_info["token"] is None or now >= token_info["expires_at"] - 300:
112
+ # Acquire the database-specific lock to serialize token generation.
113
+ # If 10 threads try to connect concurrently when a token expires,
114
+ # only the first thread executes the token fetch; others block here.
115
+ with token_info["lock"]:
116
+ # Double-checked locking pattern: once the lock is acquired,
117
+ # re-verify if another thread updated the token while we were waiting.
118
+ if token_info["token"] is None or now >= token_info["expires_at"] - 300:
119
+ tenant_id = getattr(cfg, "tenant_id", None)
120
+ if not tenant_id:
121
+ raise ValueError(
122
+ "tenant_id is required in FabricSQLConfig for authenticating to Microsoft Fabric via Active Directory Service Principal."
123
+ )
124
+
125
+ from azure.identity import ClientSecretCredential
126
+ import struct
127
+
128
+ logger.info("Fetching fresh Entra ID access token for Fabric SQL connection...")
129
+ # Instantiate the credential to retrieve a token for the Azure SQL Endpoint
130
+ cred = ClientSecretCredential(
131
+ tenant_id=tenant_id,
132
+ client_id=cfg.username,
133
+ client_secret=cfg.password
134
+ )
135
+ token_obj = cred.get_token("https://database.windows.net/.default")
136
+
137
+ # Encode the OAuth token to UTF-16-LE bytes.
138
+ # Pack the payload into the binary structure required by ODBC Driver 18:
139
+ # [4 bytes representing the length of the token string] followed by [the token string bytes].
140
+ token_bytes = token_obj.token.encode("utf-16-le")
141
+ token_info["token"] = struct.pack(f"<I{len(token_bytes)}s", len(token_bytes), token_bytes)
142
+ token_info["expires_at"] = token_obj.expires_on
143
+ logger.info("Successfully fetched and cached fresh Entra ID access token.")
144
+
145
+ # Inject the packed binary token structure into pyodbc's attrs_before connection attribute list.
146
+ # Attribute ID 1256 maps to SQL_COPT_SS_ACCESS_TOKEN.
147
+ cparams["attrs_before"] = {1256: token_info["token"]}
148
+
149
+ self._engines[key] = engine
116
150
  logger.info(
117
- f"Created new Fabric SQL engine for {cfg.host}:{cfg.port}/{cfg.database}"
151
+ f"Created new Fabric SQL engine for {cfg.host}:{cfg.port}/{cfg.database} with dynamic token provider"
118
152
  )
119
153
 
120
154
  return self._engines[key]
@@ -163,6 +197,7 @@ class FabricSQLWarehouseConnection(DataWarehouseConnection):
163
197
  for engine in self._engines.values():
164
198
  engine.dispose()
165
199
  self._engines.clear()
200
+ self._tokens.clear()
166
201
  logger.info("All Fabric SQL engine pools disposed.")
167
202
 
168
203
  def is_valid_connection(self) -> bool:
@@ -52,9 +52,6 @@ class FabricSQLWarehouseHandler(WarehouseHandler):
52
52
  connection = self._build_connection()
53
53
  return FabricSQLQueryExecutor(warehouse_connection=connection)
54
54
 
55
- def get_constants_section(self) -> str:
56
- return "mssql"
57
-
58
55
  def get_query_object(self) -> MSSQLQuery:
59
56
  return MSSQLQuery
60
57