omnata-plugin-runtime 0.8.0a188__py3-none-any.whl → 0.8.0a189__py3-none-any.whl
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.
- omnata_plugin_runtime/configuration.py +3 -1
- omnata_plugin_runtime/plugin_entrypoints.py +49 -40
- {omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/METADATA +1 -1
- {omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/RECORD +6 -6
- {omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/LICENSE +0 -0
- {omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/WHEEL +0 -0
@@ -19,7 +19,9 @@ if tuple(sys.version_info[:2]) >= (3, 9):
|
|
19
19
|
else:
|
20
20
|
# Python 3.8 and below
|
21
21
|
from typing_extensions import Annotated
|
22
|
+
from opentelemetry import trace
|
22
23
|
|
24
|
+
tracer = trace.get_tracer(__name__)
|
23
25
|
|
24
26
|
class MapperType(str, Enum):
|
25
27
|
FIELD_MAPPING_SELECTOR = "field_mapping_selector"
|
@@ -871,7 +873,7 @@ InboundSyncStreamsConfiguration.model_rebuild()
|
|
871
873
|
StoredFieldMappings.model_rebuild()
|
872
874
|
OutboundSyncConfigurationParameters.model_rebuild()
|
873
875
|
|
874
|
-
|
876
|
+
@tracer.start_as_current_span("get_secrets")
|
875
877
|
def get_secrets(oauth_secret_name: Optional[str], other_secrets_name: Optional[str]
|
876
878
|
) -> Dict[str, StoredConfigurationValue]:
|
877
879
|
connection_secrets = {}
|
@@ -39,7 +39,7 @@ from .rate_limiting import ApiLimits, RateLimitState
|
|
39
39
|
from opentelemetry import trace
|
40
40
|
|
41
41
|
IMPORT_DIRECTORY_NAME = "snowflake_import_directory"
|
42
|
-
|
42
|
+
tracer = trace.get_tracer(__name__)
|
43
43
|
|
44
44
|
class PluginEntrypoint:
|
45
45
|
"""
|
@@ -51,8 +51,7 @@ class PluginEntrypoint:
|
|
51
51
|
self, plugin_fqn: str, session: Session, module_name: str, class_name: str
|
52
52
|
):
|
53
53
|
logger.info(f"Initialising plugin entrypoint for {plugin_fqn}")
|
54
|
-
|
55
|
-
with self.tracer.start_as_current_span("plugin_initialization") as span:
|
54
|
+
with tracer.start_as_current_span("plugin_initialization") as span:
|
56
55
|
self._session = session
|
57
56
|
import_dir = sys._xoptions[IMPORT_DIRECTORY_NAME]
|
58
57
|
span.add_event("Adding plugin zip to path")
|
@@ -93,7 +92,7 @@ class PluginEntrypoint:
|
|
93
92
|
logger.add_extra('omnata.sync_branch.id', request.sync_branch_id)
|
94
93
|
logger.add_extra('omnata.sync_branch.name', request.sync_branch_name)
|
95
94
|
logger.info("Entered sync method")
|
96
|
-
with
|
95
|
+
with tracer.start_as_current_span("initialization") as span:
|
97
96
|
span.add_event("Fetching secrets")
|
98
97
|
|
99
98
|
request = TypeAdapter(SyncRequestPayload).validate_python(sync_request)
|
@@ -186,11 +185,11 @@ class PluginEntrypoint:
|
|
186
185
|
)
|
187
186
|
try:
|
188
187
|
self._plugin_instance._configuration_parameters = parameters
|
189
|
-
with
|
188
|
+
with tracer.start_as_current_span("invoke_plugin") as span:
|
190
189
|
with HttpRateLimiting(outbound_sync_request, parameters):
|
191
190
|
self._plugin_instance.sync_outbound(parameters, outbound_sync_request)
|
192
191
|
if self._plugin_instance.disable_background_workers is False:
|
193
|
-
with
|
192
|
+
with tracer.start_as_current_span("results_finalization") as span:
|
194
193
|
outbound_sync_request.apply_results_queue()
|
195
194
|
outbound_sync_request.apply_rate_limit_state()
|
196
195
|
if outbound_sync_request.deadline_reached:
|
@@ -246,12 +245,12 @@ class PluginEntrypoint:
|
|
246
245
|
inbound_sync_request.update_activity("Invoking plugin")
|
247
246
|
logger.info(f"inbound sync request: {inbound_sync_request}")
|
248
247
|
# plugin_instance._inbound_sync_request = outbound_sync_request
|
249
|
-
with
|
248
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
250
249
|
with HttpRateLimiting(inbound_sync_request, parameters):
|
251
250
|
self._plugin_instance.sync_inbound(parameters, inbound_sync_request)
|
252
251
|
logger.info("Finished invoking plugin")
|
253
252
|
if self._plugin_instance.disable_background_workers is False:
|
254
|
-
with
|
253
|
+
with tracer.start_as_current_span("results_finalization") as span:
|
255
254
|
inbound_sync_request.update_activity("Staging remaining records")
|
256
255
|
logger.info("Calling apply_results_queue")
|
257
256
|
inbound_sync_request.apply_results_queue()
|
@@ -304,6 +303,8 @@ class PluginEntrypoint:
|
|
304
303
|
sync_parameters: Dict,
|
305
304
|
current_form_parameters: Optional[Dict],
|
306
305
|
):
|
306
|
+
if function_name is None:
|
307
|
+
function_name = f"{sync_direction}_configuration_form"
|
307
308
|
logger.add_extra('omnata.operation', 'configuration_form')
|
308
309
|
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
309
310
|
logger.add_extra('omnata.connection.connection_method', connection_method)
|
@@ -349,9 +350,10 @@ class PluginEntrypoint:
|
|
349
350
|
parameters.access_token_secret_name = oauth_secret_name
|
350
351
|
the_function = getattr(
|
351
352
|
self._plugin_instance,
|
352
|
-
function_name
|
353
|
+
function_name
|
353
354
|
)
|
354
|
-
|
355
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
356
|
+
script_result = the_function(parameters)
|
355
357
|
if isinstance(script_result, BaseModel):
|
356
358
|
script_result = script_result.model_dump()
|
357
359
|
elif isinstance(script_result, List):
|
@@ -393,8 +395,8 @@ class PluginEntrypoint:
|
|
393
395
|
)
|
394
396
|
if oauth_secret_name is not None:
|
395
397
|
parameters.access_token_secret_name = oauth_secret_name
|
396
|
-
|
397
|
-
|
398
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
399
|
+
script_result = self._plugin_instance.inbound_stream_list(parameters)
|
398
400
|
if isinstance(script_result, BaseModel):
|
399
401
|
script_result = script_result.model_dump()
|
400
402
|
elif isinstance(script_result, List):
|
@@ -428,19 +430,21 @@ class PluginEntrypoint:
|
|
428
430
|
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
429
431
|
connectivity_option = TypeAdapter(ConnectivityOption).validate_python(connectivity_option)
|
430
432
|
logger.info("Entered connection_form method")
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
433
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
434
|
+
if self._plugin_instance.connection_form.__code__.co_argcount==1:
|
435
|
+
form: List[ConnectionMethod] = self._plugin_instance.connection_form()
|
436
|
+
else:
|
437
|
+
form: List[ConnectionMethod] = self._plugin_instance.connection_form(connectivity_option)
|
435
438
|
return [f.model_dump() for f in form]
|
436
439
|
|
437
440
|
def create_billing_events(self, session, event_request: Dict):
|
438
441
|
logger.add_extra('omnata.operation', 'create_billing_events')
|
439
442
|
logger.info("Entered create_billing_events method")
|
440
443
|
request = TypeAdapter(BillingEventRequest).validate_python(event_request)
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
445
|
+
events: List[SnowflakeBillingEvent] = self._plugin_instance.create_billing_events(
|
446
|
+
request
|
447
|
+
)
|
444
448
|
# create each billing event, waiting a second between each one
|
445
449
|
first_time = True
|
446
450
|
for billing_event in events:
|
@@ -527,31 +531,35 @@ class PluginEntrypoint:
|
|
527
531
|
)
|
528
532
|
if oauth_secret_name is not None:
|
529
533
|
parameters.access_token_secret_name = oauth_secret_name
|
530
|
-
|
531
|
-
|
532
|
-
|
534
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
535
|
+
connect_response = self._plugin_instance.connect(
|
536
|
+
parameters=parameters
|
537
|
+
)
|
533
538
|
# the connect method can also return more network addresses. If so, we need to update the
|
534
539
|
# network rule associated with the external access integration
|
535
540
|
if connect_response is None:
|
536
541
|
raise ValueError("Plugin did not return a ConnectResponse object from the connect method")
|
537
542
|
if connect_response.network_addresses is not None:
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
f"
|
554
|
-
|
543
|
+
with tracer.start_as_current_span("network_rule_update") as network_rule_update_span:
|
544
|
+
network_rule_update_span.add_event("Retrieving existing network rule")
|
545
|
+
existing_rule_result = self._session.sql(
|
546
|
+
f"desc network rule {network_rule_name}"
|
547
|
+
).collect()
|
548
|
+
rule_values: List[str] = existing_rule_result[0].value_list.split(",")
|
549
|
+
rule_values = [r for r in rule_values if r != '']
|
550
|
+
logger.info(f"Existing rules for {network_rule_name}: {rule_values}")
|
551
|
+
for network_address in connect_response.network_addresses:
|
552
|
+
if network_address not in rule_values:
|
553
|
+
rule_values.append(network_address)
|
554
|
+
#if len(rule_values)==0:
|
555
|
+
# logger.info("No network addresses for plugin, adding localhost")
|
556
|
+
# rule_values.append("https://localhost")
|
557
|
+
logger.info(f"New rules for {network_rule_name}: {rule_values}")
|
558
|
+
rule_values_string = ",".join([f"'{value}'" for value in rule_values])
|
559
|
+
network_rule_update_span.add_event("Updating network rule")
|
560
|
+
self._session.sql(
|
561
|
+
f"alter network rule {network_rule_name} set value_list = ({rule_values_string})"
|
562
|
+
).collect()
|
555
563
|
|
556
564
|
return connect_response.model_dump()
|
557
565
|
|
@@ -578,7 +586,8 @@ class PluginEntrypoint:
|
|
578
586
|
)
|
579
587
|
if oauth_secret_name is not None:
|
580
588
|
connection_parameters.access_token_secret_name = oauth_secret_name
|
581
|
-
|
589
|
+
with tracer.start_as_current_span("invoke_plugin"):
|
590
|
+
response: List[ApiLimits] = self._plugin_instance.api_limits(connection_parameters)
|
582
591
|
return [api_limit.model_dump() for api_limit in response]
|
583
592
|
|
584
593
|
def outbound_record_validator(
|
{omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/RECORD
RENAMED
@@ -1,12 +1,12 @@
|
|
1
1
|
omnata_plugin_runtime/__init__.py,sha256=MS9d1whnfT_B3-ThqZ7l63QeC_8OEKTuaYV5wTwRpBA,1576
|
2
2
|
omnata_plugin_runtime/api.py,sha256=tVi4KLL0v5N3yz3Ie0kSyFemryu572gCbtSRfWN6wBU,6523
|
3
|
-
omnata_plugin_runtime/configuration.py,sha256=
|
3
|
+
omnata_plugin_runtime/configuration.py,sha256=uMGMqKYy4XmntX1ROungUwTJXeY2ciczAb_PtRCFZZI,38441
|
4
4
|
omnata_plugin_runtime/forms.py,sha256=ueodN2GIMS5N9fqebpY4uNGJnjEb9HcuaVQVfWH-cGg,19838
|
5
5
|
omnata_plugin_runtime/logging.py,sha256=u_Bo2v4jS3C_2E_Y8a7yfZZcIP-h5Mak_FPnFHUwFbU,4378
|
6
6
|
omnata_plugin_runtime/omnata_plugin.py,sha256=aggjb_CTTjhgqjS8CHPOm4ENU0jNcYoT6LC8yI1IeF4,130048
|
7
|
-
omnata_plugin_runtime/plugin_entrypoints.py,sha256=
|
7
|
+
omnata_plugin_runtime/plugin_entrypoints.py,sha256=dK2mdH9-HRa4vjCso3SIblC72wRU2txDJJBBwMbruo0,32760
|
8
8
|
omnata_plugin_runtime/rate_limiting.py,sha256=JKtyz8mA9D0FSZgQplPusmk2rVclcjkwtE59fQQrQ_I,25610
|
9
|
-
omnata_plugin_runtime-0.8.
|
10
|
-
omnata_plugin_runtime-0.8.
|
11
|
-
omnata_plugin_runtime-0.8.
|
12
|
-
omnata_plugin_runtime-0.8.
|
9
|
+
omnata_plugin_runtime-0.8.0a189.dist-info/LICENSE,sha256=rGaMQG3R3F5-JGDp_-rlMKpDIkg5n0SI4kctTk8eZSI,56
|
10
|
+
omnata_plugin_runtime-0.8.0a189.dist-info/METADATA,sha256=F0OeMjD6lEQkouWm1NJWuuqIbe7eJfpTEEZFjNATmys,2148
|
11
|
+
omnata_plugin_runtime-0.8.0a189.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
12
|
+
omnata_plugin_runtime-0.8.0a189.dist-info/RECORD,,
|
{omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/LICENSE
RENAMED
File without changes
|
{omnata_plugin_runtime-0.8.0a188.dist-info → omnata_plugin_runtime-0.8.0a189.dist-info}/WHEEL
RENAMED
File without changes
|