omnata-plugin-runtime 0.7.0a185__py3-none-any.whl → 0.8.0a187__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- omnata_plugin_runtime/configuration.py +1 -2
- omnata_plugin_runtime/logging.py +27 -1
- omnata_plugin_runtime/plugin_entrypoints.py +28 -4
- omnata_plugin_runtime/rate_limiting.py +1 -2
- {omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/METADATA +5 -1
- omnata_plugin_runtime-0.8.0a187.dist-info/RECORD +12 -0
- omnata_plugin_runtime-0.7.0a185.dist-info/RECORD +0 -12
- {omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/LICENSE +0 -0
- {omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/WHEEL +0 -0
@@ -11,6 +11,7 @@ from enum import Enum
|
|
11
11
|
|
12
12
|
from abc import ABC
|
13
13
|
from pydantic import BaseModel, Field, PrivateAttr, SerializationInfo, TypeAdapter, field_validator, model_serializer, validator # pylint: disable=no-name-in-module
|
14
|
+
from .logging import logger
|
14
15
|
|
15
16
|
if tuple(sys.version_info[:2]) >= (3, 9):
|
16
17
|
# Python 3.9 and above
|
@@ -19,8 +20,6 @@ else:
|
|
19
20
|
# Python 3.8 and below
|
20
21
|
from typing_extensions import Annotated
|
21
22
|
|
22
|
-
logger = logging.getLogger(__name__)
|
23
|
-
|
24
23
|
|
25
24
|
class MapperType(str, Enum):
|
26
25
|
FIELD_MAPPING_SELECTOR = "field_mapping_selector"
|
omnata_plugin_runtime/logging.py
CHANGED
@@ -4,12 +4,38 @@ Custom logging functionality for Omnata
|
|
4
4
|
import logging
|
5
5
|
import logging.handlers
|
6
6
|
import traceback
|
7
|
-
from logging import Logger
|
7
|
+
from logging import Logger, getLogger
|
8
8
|
from typing import Dict, List, Optional
|
9
9
|
from snowflake.snowpark import Session
|
10
10
|
from pydantic import ValidationError
|
11
|
+
from opentelemetry import trace
|
11
12
|
|
12
13
|
|
14
|
+
class CustomLoggerAdapter(logging.LoggerAdapter):
|
15
|
+
"""
|
16
|
+
A logger adapter which attaches current trace and span IDs to log messages, so that they can be correlated to traces.
|
17
|
+
Also offers the ability to add static extras.
|
18
|
+
"""
|
19
|
+
def __init__(self, logger:logging.Logger, extra):
|
20
|
+
super(CustomLoggerAdapter, self).__init__(logger, extra)
|
21
|
+
self.extra_extras = {}
|
22
|
+
|
23
|
+
def add_extra(self, key, value):
|
24
|
+
self.extra_extras[key] = value
|
25
|
+
|
26
|
+
def process(self, msg, kwargs):
|
27
|
+
extra = kwargs.get("extra", {})
|
28
|
+
current_span = trace.get_current_span()
|
29
|
+
context = current_span.get_span_context() if current_span is not None else None
|
30
|
+
if context is not None:
|
31
|
+
extra["trace_id"] = format(context.trace_id, 'x') # format as hex string to be consistent with Snowflake's handler
|
32
|
+
extra["span_id"] = format(context.span_id, 'x')
|
33
|
+
extra.update(self.extra_extras)
|
34
|
+
kwargs["extra"] = extra
|
35
|
+
return msg, kwargs
|
36
|
+
|
37
|
+
logger = CustomLoggerAdapter(getLogger("omnata_plugin"), {})
|
38
|
+
|
13
39
|
def log_exception(exception: Exception, logger_instance: Logger):
|
14
40
|
"""
|
15
41
|
Logs an exception to a logger
|
@@ -24,7 +24,7 @@ from .configuration import (
|
|
24
24
|
ConnectivityOption
|
25
25
|
)
|
26
26
|
from .forms import ConnectionMethod, FormInputField, FormOption
|
27
|
-
from .logging import OmnataPluginLogHandler
|
27
|
+
from .logging import OmnataPluginLogHandler, logger
|
28
28
|
from .omnata_plugin import (
|
29
29
|
SnowflakeBillingEvent,
|
30
30
|
BillingEventRequest,
|
@@ -37,9 +37,6 @@ from .omnata_plugin import (
|
|
37
37
|
from pydantic import TypeAdapter
|
38
38
|
from .rate_limiting import ApiLimits, RateLimitState
|
39
39
|
|
40
|
-
# set the logger class to our custom logger so that pydantic errors are handled correctly
|
41
|
-
logger = logging.getLogger(__name__)
|
42
|
-
|
43
40
|
IMPORT_DIRECTORY_NAME = "snowflake_import_directory"
|
44
41
|
|
45
42
|
|
@@ -93,6 +90,14 @@ class PluginEntrypoint:
|
|
93
90
|
connection_id=request.connection_id,
|
94
91
|
sync_run_id=request.run_id,
|
95
92
|
)
|
93
|
+
logger.add_extra('omnata.operation', 'sync')
|
94
|
+
logger.add_extra('omnata.sync.id', request.sync_id)
|
95
|
+
logger.add_extra('omnata.sync.direction', request.sync_direction)
|
96
|
+
logger.add_extra('omnata.connection.id', request.connection_id)
|
97
|
+
logger.add_extra('omnata.sync.run_id', request.run_id)
|
98
|
+
logger.add_extra('omnata.sync_branch.id', request.sync_branch_id)
|
99
|
+
logger.add_extra('omnata.sync_branch.name', request.sync_branch_name)
|
100
|
+
|
96
101
|
omnata_log_handler.register(
|
97
102
|
request.logging_level, self._plugin_instance.additional_loggers()
|
98
103
|
)
|
@@ -283,6 +288,12 @@ class PluginEntrypoint:
|
|
283
288
|
sync_parameters: Dict,
|
284
289
|
current_form_parameters: Optional[Dict],
|
285
290
|
):
|
291
|
+
logger.add_extra('omnata.operation', 'configuration_form')
|
292
|
+
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
293
|
+
logger.add_extra('omnata.connection.connection_method', connection_method)
|
294
|
+
logger.add_extra('omnata.configuration_form.function_name', function_name)
|
295
|
+
logger.add_extra('omnata.sync.direction', sync_direction)
|
296
|
+
|
286
297
|
logger.info("Entered configuration_form method")
|
287
298
|
sync_strategy = normalise_nulls(sync_strategy)
|
288
299
|
oauth_secret_name = normalise_nulls(oauth_secret_name)
|
@@ -342,6 +353,10 @@ class PluginEntrypoint:
|
|
342
353
|
sync_parameters: Dict,
|
343
354
|
selected_streams: Optional[List[str]], # None to return all streams without requiring schema
|
344
355
|
):
|
356
|
+
logger.add_extra('omnata.operation', 'list_streams')
|
357
|
+
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
358
|
+
logger.add_extra('omnata.connection.connection_method', connection_method)
|
359
|
+
logger.add_extra('omnata.sync.direction', 'inbound')
|
345
360
|
logger.debug("Entered list_streams method")
|
346
361
|
oauth_secret_name = normalise_nulls(oauth_secret_name)
|
347
362
|
other_secrets_name = normalise_nulls(other_secrets_name)
|
@@ -393,6 +408,8 @@ class PluginEntrypoint:
|
|
393
408
|
return results
|
394
409
|
|
395
410
|
def connection_form(self,connectivity_option: str):
|
411
|
+
logger.add_extra('omnata.operation', 'connection_form')
|
412
|
+
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
396
413
|
connectivity_option = TypeAdapter(ConnectivityOption).validate_python(connectivity_option)
|
397
414
|
logger.info("Entered connection_form method")
|
398
415
|
if self._plugin_instance.connection_form.__code__.co_argcount==1:
|
@@ -402,6 +419,7 @@ class PluginEntrypoint:
|
|
402
419
|
return [f.model_dump() for f in form]
|
403
420
|
|
404
421
|
def create_billing_events(self, session, event_request: Dict):
|
422
|
+
logger.add_extra('omnata.operation', 'create_billing_events')
|
405
423
|
logger.info("Entered create_billing_events method")
|
406
424
|
request = TypeAdapter(BillingEventRequest).validate_python(event_request)
|
407
425
|
events: List[SnowflakeBillingEvent] = self._plugin_instance.create_billing_events(
|
@@ -474,6 +492,9 @@ class PluginEntrypoint:
|
|
474
492
|
oauth_secret_name: Optional[str],
|
475
493
|
other_secrets_name: Optional[str],
|
476
494
|
):
|
495
|
+
logger.add_extra('omnata.operation', 'connection_test')
|
496
|
+
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
497
|
+
logger.add_extra('omnata.connection.connection_method', method)
|
477
498
|
logger.info("Entered connect method")
|
478
499
|
logger.info(f"Connection parameters: {connection_parameters}")
|
479
500
|
connection_secrets = get_secrets(oauth_secret_name, other_secrets_name)
|
@@ -524,6 +545,9 @@ class PluginEntrypoint:
|
|
524
545
|
connection_parameters: Dict,
|
525
546
|
oauth_secret_name: Optional[str],
|
526
547
|
other_secrets_name: Optional[str]):
|
548
|
+
logger.add_extra('omnata.operation', 'api_limits')
|
549
|
+
logger.add_extra('omnata.connection.connectivity_option', connectivity_option)
|
550
|
+
logger.add_extra('omnata.connection.connection_method', method)
|
527
551
|
logger.info("Entered api_limits method")
|
528
552
|
connection_secrets = get_secrets(oauth_secret_name, other_secrets_name)
|
529
553
|
from omnata_plugin_runtime.omnata_plugin import (
|
@@ -15,12 +15,11 @@ import logging
|
|
15
15
|
from pydantic import Field, root_validator, PrivateAttr, field_serializer
|
16
16
|
from pydantic_core import to_jsonable_python
|
17
17
|
from .configuration import SubscriptableBaseModel
|
18
|
+
from .logging import logger
|
18
19
|
import pytz
|
19
20
|
from requests.adapters import HTTPAdapter
|
20
21
|
from urllib3.util.retry import Retry
|
21
22
|
|
22
|
-
logger = getLogger(__name__)
|
23
|
-
|
24
23
|
TimeUnitType = Literal["second", "minute", "hour", "day"]
|
25
24
|
|
26
25
|
HttpMethodType = Literal[
|
{omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omnata-plugin-runtime
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.8.0a187
|
4
4
|
Summary: Classes and common runtime components for building and running Omnata Plugins
|
5
5
|
Author: James Weakley
|
6
6
|
Author-email: james.weakley@omnata.com
|
@@ -19,9 +19,11 @@ Requires-Dist: idna (<=3.7)
|
|
19
19
|
Requires-Dist: jinja2 (>=3.1.2,<=3.1.4)
|
20
20
|
Requires-Dist: markupsafe (<=2.1.3)
|
21
21
|
Requires-Dist: numpy (<1.27.0)
|
22
|
+
Requires-Dist: opentelemetry-api (<=1.23.0)
|
22
23
|
Requires-Dist: packaging (<=24.1)
|
23
24
|
Requires-Dist: pandas (<=2.2.2)
|
24
25
|
Requires-Dist: platformdirs (<=3.10.0)
|
26
|
+
Requires-Dist: protobuf (<=4.25.3)
|
25
27
|
Requires-Dist: pyarrow (<=16.1.0)
|
26
28
|
Requires-Dist: pycparser (<=2.21)
|
27
29
|
Requires-Dist: pydantic (>=2,<=2.8.2)
|
@@ -34,10 +36,12 @@ Requires-Dist: requests (>=2,<=2.32.3)
|
|
34
36
|
Requires-Dist: setuptools (<=72.1.0)
|
35
37
|
Requires-Dist: snowflake-connector-python (>=3,<=3.12.0)
|
36
38
|
Requires-Dist: snowflake-snowpark-python (==1.23.0)
|
39
|
+
Requires-Dist: snowflake-telemetry-python (<=0.5.0)
|
37
40
|
Requires-Dist: tenacity (>=8,<=8.2.3)
|
38
41
|
Requires-Dist: tomlkit (<=0.11.1)
|
39
42
|
Requires-Dist: urllib3 (<=2.2.2)
|
40
43
|
Requires-Dist: wheel (<=0.43.0)
|
44
|
+
Requires-Dist: wrapt (<=1.14.1)
|
41
45
|
Description-Content-Type: text/markdown
|
42
46
|
|
43
47
|
# omnata-plugin-runtime
|
@@ -0,0 +1,12 @@
|
|
1
|
+
omnata_plugin_runtime/__init__.py,sha256=MS9d1whnfT_B3-ThqZ7l63QeC_8OEKTuaYV5wTwRpBA,1576
|
2
|
+
omnata_plugin_runtime/api.py,sha256=tVi4KLL0v5N3yz3Ie0kSyFemryu572gCbtSRfWN6wBU,6523
|
3
|
+
omnata_plugin_runtime/configuration.py,sha256=5M7dmQu9BO2msES9Foa8fOKfWui7iPSExAJdj9TeI98,38329
|
4
|
+
omnata_plugin_runtime/forms.py,sha256=ueodN2GIMS5N9fqebpY4uNGJnjEb9HcuaVQVfWH-cGg,19838
|
5
|
+
omnata_plugin_runtime/logging.py,sha256=u_Bo2v4jS3C_2E_Y8a7yfZZcIP-h5Mak_FPnFHUwFbU,4378
|
6
|
+
omnata_plugin_runtime/omnata_plugin.py,sha256=aggjb_CTTjhgqjS8CHPOm4ENU0jNcYoT6LC8yI1IeF4,130048
|
7
|
+
omnata_plugin_runtime/plugin_entrypoints.py,sha256=LM4FHMW0N3N13oxsUqkSEbUhH95uFw-yNIJ5kNGDgWE,30633
|
8
|
+
omnata_plugin_runtime/rate_limiting.py,sha256=JKtyz8mA9D0FSZgQplPusmk2rVclcjkwtE59fQQrQ_I,25610
|
9
|
+
omnata_plugin_runtime-0.8.0a187.dist-info/LICENSE,sha256=rGaMQG3R3F5-JGDp_-rlMKpDIkg5n0SI4kctTk8eZSI,56
|
10
|
+
omnata_plugin_runtime-0.8.0a187.dist-info/METADATA,sha256=uVZoK32EmYnNrEAi7mDHt6x9iVZ2IvrBXWBqpmmbNeo,2148
|
11
|
+
omnata_plugin_runtime-0.8.0a187.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
12
|
+
omnata_plugin_runtime-0.8.0a187.dist-info/RECORD,,
|
@@ -1,12 +0,0 @@
|
|
1
|
-
omnata_plugin_runtime/__init__.py,sha256=MS9d1whnfT_B3-ThqZ7l63QeC_8OEKTuaYV5wTwRpBA,1576
|
2
|
-
omnata_plugin_runtime/api.py,sha256=tVi4KLL0v5N3yz3Ie0kSyFemryu572gCbtSRfWN6wBU,6523
|
3
|
-
omnata_plugin_runtime/configuration.py,sha256=Yyz3trj7G6nh3JyEw6S5qlrXUfS_MB-vZgATcNdWzp0,38339
|
4
|
-
omnata_plugin_runtime/forms.py,sha256=ueodN2GIMS5N9fqebpY4uNGJnjEb9HcuaVQVfWH-cGg,19838
|
5
|
-
omnata_plugin_runtime/logging.py,sha256=bn7eKoNWvtuyTk7RTwBS9UARMtqkiICtgMtzq3KA2V0,3272
|
6
|
-
omnata_plugin_runtime/omnata_plugin.py,sha256=aggjb_CTTjhgqjS8CHPOm4ENU0jNcYoT6LC8yI1IeF4,130048
|
7
|
-
omnata_plugin_runtime/plugin_entrypoints.py,sha256=spCatkTxRX0WAgX0wqZP_vUF4Z-uOF8SrASuO3HXT1o,28937
|
8
|
-
omnata_plugin_runtime/rate_limiting.py,sha256=JukA0l7x7Klqz2b54mR-poP7NRxpUHgWSGp6h0B8u6Q,25612
|
9
|
-
omnata_plugin_runtime-0.7.0a185.dist-info/LICENSE,sha256=rGaMQG3R3F5-JGDp_-rlMKpDIkg5n0SI4kctTk8eZSI,56
|
10
|
-
omnata_plugin_runtime-0.7.0a185.dist-info/METADATA,sha256=86lC7ANJnSk4cP_mEbsVMWe9TztTWzZprrMhklxlvbM,1985
|
11
|
-
omnata_plugin_runtime-0.7.0a185.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
12
|
-
omnata_plugin_runtime-0.7.0a185.dist-info/RECORD,,
|
{omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/LICENSE
RENAMED
File without changes
|
{omnata_plugin_runtime-0.7.0a185.dist-info → omnata_plugin_runtime-0.8.0a187.dist-info}/WHEEL
RENAMED
File without changes
|