centra-sdk 0.1.52.dev2__tar.gz → 0.1.53__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.
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/PKG-INFO +35 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/README.md +34 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/pyproject.toml +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/dependencies.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/main.py +1 -1
- centra_sdk-0.1.53/src/centra_sdk/models/connector/__init__.py +3 -0
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/__init__.py +3 -0
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/common/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/common/common.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/common/inventory.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/config/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/config/switches.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/consumer/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/consumer/agents.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/consumer/enforcement.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/k8s/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/k8s/k8s_inventory.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/operations/__init__.py +3 -0
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/operations/aws/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/aws/accounts.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/aws/flowlogs.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/operations/azure/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/azure/setup.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/config.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/operations/gcp/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/gcp/setup.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/health.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/info.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/log.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/onboard.py +2 -2
- centra_sdk-0.1.53/src/centra_sdk/models/connector/v1/provider/__init__.py +3 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/inventory.py +17 -17
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/lookup.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/networks.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/reveal.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/switch_observability.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/version.py +2 -2
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/account.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/agents.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/authentication.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/control.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/enforcement.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/flow_logs.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/health.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/info.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/inventory.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/logging.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/onboarding.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/operations.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/setup.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/switch_observability.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/routers/switches.py +1 -1
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/gc_cli.py +167 -2
- centra_sdk-0.1.53/src/centra_sdk/utils/sdk_version.py +107 -0
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/common/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/config/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/consumer/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/k8s/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/operations/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/operations/aws/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/operations/azure/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/operations/gcp/__init__.py +0 -3
- centra_sdk-0.1.52.dev2/src/centra_sdk/models/connector/v1/provider/__init__.py +0 -3
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/__init__.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/auth.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/config_masking.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/context.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/gc_handler.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/gc_serializer.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/handler_registry.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/log_handling.py +0 -0
- {centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/utils/option_values_handler.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: centra-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.53
|
|
4
4
|
Summary:
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: ivasylenko
|
|
@@ -33,6 +33,7 @@ The **Centra SDK** is a UNOFFICIAL FastAPI-based SDK designed to simplify the in
|
|
|
33
33
|
- [Quick Start](#quick-start)
|
|
34
34
|
- [Router Modules](#router-modules)
|
|
35
35
|
- [Models and Data Types](#models-and-data-types)
|
|
36
|
+
- [Aggregator Compatibility](#aggregator-compatibility-min_aggregator_sdk_version)
|
|
36
37
|
- [API Documentation](#api-documentation)
|
|
37
38
|
|
|
38
39
|
## Overview
|
|
@@ -383,6 +384,39 @@ def validate_k8s_service_port(v, handler, info):
|
|
|
383
384
|
|
|
384
385
|
```
|
|
385
386
|
|
|
387
|
+
## Aggregator Compatibility (`min_aggregator_sdk_version`)
|
|
388
|
+
|
|
389
|
+
Every integration built with this SDK declares the **minimum centra-sdk version
|
|
390
|
+
its aggregator must be running** to host it. ILM uses this to gate
|
|
391
|
+
distribution: an environment whose aggregators run an older centra-sdk than the
|
|
392
|
+
floor simply isn't offered the integration (shown in ILM as *"aggregator SDK too
|
|
393
|
+
old (needs vX)"* — expected, not an error). The value is reported, with the
|
|
394
|
+
SDK version the integration was built with, by the `discover-sdk-compat` CLI
|
|
395
|
+
command that every connector exposes:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
$ cli discover-sdk-compat --format json
|
|
399
|
+
{"status": "okay", "sdk_version": "0.1.52", "min_aggregator_sdk_version": "0.1.45"}
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Adjusting the floor
|
|
403
|
+
|
|
404
|
+
The floor is a single constant — **`MIN_AGGREGATOR_SDK_VERSION` in
|
|
405
|
+
[`utils/sdk_version.py`](utils/sdk_version.py)**. That file's module docstring is
|
|
406
|
+
the authoritative, step-by-step guide (`HOW TO ADJUST`). In short:
|
|
407
|
+
|
|
408
|
+
- **When:** bump it **only** when a change in this SDK genuinely requires a newer
|
|
409
|
+
aggregator runtime (a new aggregator-side endpoint/field/protocol the
|
|
410
|
+
integration depends on). Purely integration-side changes (helpers, bugfixes,
|
|
411
|
+
fields the aggregator ignores) must **not** raise it — a too-high floor needlessly
|
|
412
|
+
locks integrations out of older-but-still-capable environments.
|
|
413
|
+
- **How:** set the constant to the *released* centra-sdk version that added the
|
|
414
|
+
required aggregator-side support (e.g. `"0.1.45"`), bump `version` in
|
|
415
|
+
`sdk/pyproject.toml` as usual, and commit. Nothing else to wire — the CLI
|
|
416
|
+
reports it and ILM gates on it automatically.
|
|
417
|
+
- **Rules of thumb:** keep `MIN_AGGREGATOR_SDK_VERSION` ≤ this package's own
|
|
418
|
+
version; only ever raise it; when in doubt, leave it.
|
|
419
|
+
|
|
386
420
|
## API Documentation
|
|
387
421
|
|
|
388
422
|
Once your application is running, you can access:
|
|
@@ -10,6 +10,7 @@ The **Centra SDK** is a UNOFFICIAL FastAPI-based SDK designed to simplify the in
|
|
|
10
10
|
- [Quick Start](#quick-start)
|
|
11
11
|
- [Router Modules](#router-modules)
|
|
12
12
|
- [Models and Data Types](#models-and-data-types)
|
|
13
|
+
- [Aggregator Compatibility](#aggregator-compatibility-min_aggregator_sdk_version)
|
|
13
14
|
- [API Documentation](#api-documentation)
|
|
14
15
|
|
|
15
16
|
## Overview
|
|
@@ -360,6 +361,39 @@ def validate_k8s_service_port(v, handler, info):
|
|
|
360
361
|
|
|
361
362
|
```
|
|
362
363
|
|
|
364
|
+
## Aggregator Compatibility (`min_aggregator_sdk_version`)
|
|
365
|
+
|
|
366
|
+
Every integration built with this SDK declares the **minimum centra-sdk version
|
|
367
|
+
its aggregator must be running** to host it. ILM uses this to gate
|
|
368
|
+
distribution: an environment whose aggregators run an older centra-sdk than the
|
|
369
|
+
floor simply isn't offered the integration (shown in ILM as *"aggregator SDK too
|
|
370
|
+
old (needs vX)"* — expected, not an error). The value is reported, with the
|
|
371
|
+
SDK version the integration was built with, by the `discover-sdk-compat` CLI
|
|
372
|
+
command that every connector exposes:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
$ cli discover-sdk-compat --format json
|
|
376
|
+
{"status": "okay", "sdk_version": "0.1.52", "min_aggregator_sdk_version": "0.1.45"}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Adjusting the floor
|
|
380
|
+
|
|
381
|
+
The floor is a single constant — **`MIN_AGGREGATOR_SDK_VERSION` in
|
|
382
|
+
[`utils/sdk_version.py`](utils/sdk_version.py)**. That file's module docstring is
|
|
383
|
+
the authoritative, step-by-step guide (`HOW TO ADJUST`). In short:
|
|
384
|
+
|
|
385
|
+
- **When:** bump it **only** when a change in this SDK genuinely requires a newer
|
|
386
|
+
aggregator runtime (a new aggregator-side endpoint/field/protocol the
|
|
387
|
+
integration depends on). Purely integration-side changes (helpers, bugfixes,
|
|
388
|
+
fields the aggregator ignores) must **not** raise it — a too-high floor needlessly
|
|
389
|
+
locks integrations out of older-but-still-capable environments.
|
|
390
|
+
- **How:** set the constant to the *released* centra-sdk version that added the
|
|
391
|
+
required aggregator-side support (e.g. `"0.1.45"`), bump `version` in
|
|
392
|
+
`sdk/pyproject.toml` as usual, and commit. Nothing else to wire — the CLI
|
|
393
|
+
reports it and ILM gates on it automatically.
|
|
394
|
+
- **Rules of thumb:** keep `MIN_AGGREGATOR_SDK_VERSION` ≤ this package's own
|
|
395
|
+
version; only ever raise it; when in doubt, leave it.
|
|
396
|
+
|
|
363
397
|
## API Documentation
|
|
364
398
|
|
|
365
399
|
Once your application is running, you can access:
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/common/common.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/common/inventory.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/config/switches.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/consumer/agents.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/k8s/k8s_inventory.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/config.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/health.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/info.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/operations/log.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -23,6 +23,21 @@ class NetworkConnections(BaseModel, GcSerializer):
|
|
|
23
23
|
reachable_networks: List[str] = Field(..., alias='reachable-networks')
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
class Labels(RootModel[List[Label]]):
|
|
27
|
+
model_config = ConfigDict(
|
|
28
|
+
populate_by_name=True,
|
|
29
|
+
from_attributes=True,
|
|
30
|
+
)
|
|
31
|
+
root: List[Label]
|
|
32
|
+
|
|
33
|
+
def __getattr__(self, attr: str):
|
|
34
|
+
return getattr(self.root, attr)
|
|
35
|
+
|
|
36
|
+
def __iter__(self):
|
|
37
|
+
for item in self.root:
|
|
38
|
+
yield item
|
|
39
|
+
|
|
40
|
+
|
|
26
41
|
class InventoryAssetType(Enum):
|
|
27
42
|
VMS = 'vms'
|
|
28
43
|
K8S_SERVICES = 'k8s_services'
|
|
@@ -69,21 +84,6 @@ class NetworkTopology(RootModel[List[NetworkConnections]]):
|
|
|
69
84
|
yield item
|
|
70
85
|
|
|
71
86
|
|
|
72
|
-
class Labels(RootModel[List[Label]]):
|
|
73
|
-
model_config = ConfigDict(
|
|
74
|
-
populate_by_name=True,
|
|
75
|
-
from_attributes=True,
|
|
76
|
-
)
|
|
77
|
-
root: List[Label]
|
|
78
|
-
|
|
79
|
-
def __getattr__(self, attr: str):
|
|
80
|
-
return getattr(self.root, attr)
|
|
81
|
-
|
|
82
|
-
def __iter__(self):
|
|
83
|
-
for item in self.root:
|
|
84
|
-
yield item
|
|
85
|
-
|
|
86
|
-
|
|
87
87
|
class Inventory(RootModel[List[InventoryItem]]):
|
|
88
88
|
model_config = ConfigDict(
|
|
89
89
|
populate_by_name=True,
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/lookup.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/networks.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
{centra_sdk-0.1.52.dev2 → centra_sdk-0.1.53}/src/centra_sdk/models/connector/v1/provider/reveal.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by fastapi-codegen:
|
|
2
|
-
# filename: /
|
|
3
|
-
# timestamp: 2026-
|
|
2
|
+
# filename: /home/circleci/project/guardicore/connector
|
|
3
|
+
# timestamp: 2026-06-01T04:15:31+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -25,6 +25,7 @@ from rich.table import Table
|
|
|
25
25
|
|
|
26
26
|
from centra_sdk.models.connector.v1.operations.config import ConfigOpts
|
|
27
27
|
from centra_sdk.models.connector.v1.operations.onboard import IntegrationCapabilities, InfraCapabilities
|
|
28
|
+
from centra_sdk.utils.sdk_version import MIN_AGGREGATOR_SDK_VERSION, installed_sdk_version
|
|
28
29
|
|
|
29
30
|
# Constants
|
|
30
31
|
OUTPUT_FORMAT_TABLE = 'table'
|
|
@@ -363,6 +364,116 @@ class DiscoverIntegrationCapabilitiesResponse(CliResponse):
|
|
|
363
364
|
|
|
364
365
|
return self.value
|
|
365
366
|
|
|
367
|
+
|
|
368
|
+
@dataclass
|
|
369
|
+
class DiscoverSdkCompatResponse(CliResponse):
|
|
370
|
+
"""Response wrapper for SDK-compatibility discovery operations.
|
|
371
|
+
|
|
372
|
+
Reports the centra-sdk version this integration was built with and the
|
|
373
|
+
minimum centra-sdk version an aggregator runtime must have to run it.
|
|
374
|
+
|
|
375
|
+
Attributes:
|
|
376
|
+
sdk_version: The installed centra-sdk version (built-with), or None
|
|
377
|
+
min_aggregator_sdk_version: The aggregator-runtime floor for this SDK
|
|
378
|
+
"""
|
|
379
|
+
sdk_version: Optional[str] = None
|
|
380
|
+
min_aggregator_sdk_version: Optional[str] = None
|
|
381
|
+
|
|
382
|
+
@property
|
|
383
|
+
def title(self) -> str:
|
|
384
|
+
"""Get the title for table display.
|
|
385
|
+
|
|
386
|
+
Returns:
|
|
387
|
+
Title string for SDK-compatibility table output
|
|
388
|
+
"""
|
|
389
|
+
return "SDK Compatibility"
|
|
390
|
+
|
|
391
|
+
@classmethod
|
|
392
|
+
def success(cls, sdk_version: Optional[str], min_aggregator_sdk_version: Optional[str]) -> 'DiscoverSdkCompatResponse':
|
|
393
|
+
"""Create a successful SDK-compatibility discovery response.
|
|
394
|
+
|
|
395
|
+
Args:
|
|
396
|
+
sdk_version: The installed centra-sdk version (may be None if unresolvable)
|
|
397
|
+
min_aggregator_sdk_version: The declared aggregator-runtime floor
|
|
398
|
+
|
|
399
|
+
Returns:
|
|
400
|
+
DiscoverSdkCompatResponse instance with success status
|
|
401
|
+
"""
|
|
402
|
+
return cls(
|
|
403
|
+
status=STATUS_OK,
|
|
404
|
+
message="SDK compatibility discovery successful",
|
|
405
|
+
sdk_version=sdk_version,
|
|
406
|
+
min_aggregator_sdk_version=min_aggregator_sdk_version
|
|
407
|
+
)
|
|
408
|
+
|
|
409
|
+
@classmethod
|
|
410
|
+
def error(cls, error_message: str) -> 'DiscoverSdkCompatResponse':
|
|
411
|
+
"""Create an error SDK-compatibility discovery response.
|
|
412
|
+
|
|
413
|
+
Args:
|
|
414
|
+
error_message: Description of the error that occurred
|
|
415
|
+
|
|
416
|
+
Returns:
|
|
417
|
+
DiscoverSdkCompatResponse instance with error status
|
|
418
|
+
"""
|
|
419
|
+
return cls(
|
|
420
|
+
status=STATUS_ERROR,
|
|
421
|
+
message=error_message
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
@property
|
|
425
|
+
def value(self) -> Dict[str, Any]:
|
|
426
|
+
"""Get the SDK-compatibility result as serializable data.
|
|
427
|
+
|
|
428
|
+
Returns:
|
|
429
|
+
Dictionary containing status, sdk_version, and the aggregator floor
|
|
430
|
+
"""
|
|
431
|
+
if self.status == STATUS_ERROR:
|
|
432
|
+
return {"status": self.status, "message": self.message}
|
|
433
|
+
|
|
434
|
+
return {
|
|
435
|
+
"status": self.status,
|
|
436
|
+
"message": self.message,
|
|
437
|
+
"sdk_version": self.sdk_version,
|
|
438
|
+
"min_aggregator_sdk_version": self.min_aggregator_sdk_version
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
def print(self, format: str = 'json'):
|
|
442
|
+
"""Print the response in the specified format.
|
|
443
|
+
|
|
444
|
+
Args:
|
|
445
|
+
format: Output format ('json' or 'table')
|
|
446
|
+
"""
|
|
447
|
+
response_fmt = self.format(format)
|
|
448
|
+
if isinstance(response_fmt, Table):
|
|
449
|
+
rprint(response_fmt)
|
|
450
|
+
else:
|
|
451
|
+
print(response_fmt)
|
|
452
|
+
|
|
453
|
+
def format(self, output_format: OutputFormat) -> Union[Table, str]:
|
|
454
|
+
"""Format the SDK-compatibility info based on the requested output format.
|
|
455
|
+
|
|
456
|
+
Args:
|
|
457
|
+
output_format: Desired output format
|
|
458
|
+
|
|
459
|
+
Returns:
|
|
460
|
+
Formatted output as Table or JSON string
|
|
461
|
+
"""
|
|
462
|
+
if output_format == OUTPUT_FORMAT_JSON:
|
|
463
|
+
return json.dumps(self.value)
|
|
464
|
+
|
|
465
|
+
# table format
|
|
466
|
+
if output_format == OUTPUT_FORMAT_TABLE:
|
|
467
|
+
if self.status == STATUS_ERROR:
|
|
468
|
+
return self.format_table([{"status": self.status, "message": self.message}])
|
|
469
|
+
return self.format_table([{
|
|
470
|
+
"sdk_version": str(self.sdk_version),
|
|
471
|
+
"min_aggregator_sdk_version": str(self.min_aggregator_sdk_version)
|
|
472
|
+
}])
|
|
473
|
+
|
|
474
|
+
return self.value
|
|
475
|
+
|
|
476
|
+
|
|
366
477
|
@dataclass
|
|
367
478
|
class DiscoverInfraCapabilitiesResponse(CliResponse):
|
|
368
479
|
"""Response wrapper for infrastructure capabilities discovery operations.
|
|
@@ -545,6 +656,28 @@ class CliHandler(ABC):
|
|
|
545
656
|
except Exception as e:
|
|
546
657
|
return DiscoverMetadataResponse.error(f"Error during metadata discovery: {e}")
|
|
547
658
|
|
|
659
|
+
def discover_sdk_compat(self) -> DiscoverSdkCompatResponse:
|
|
660
|
+
"""Handle SDK-compatibility discovery command.
|
|
661
|
+
|
|
662
|
+
Reports the centra-sdk version this integration was built with (the
|
|
663
|
+
installed package version inside the image) and the minimum centra-sdk
|
|
664
|
+
version an aggregator runtime must have to run it. Concrete on the base
|
|
665
|
+
handler so every integration reports automatically with no author
|
|
666
|
+
changes.
|
|
667
|
+
|
|
668
|
+
If the installed version cannot be resolved, the response is still a
|
|
669
|
+
success with ``sdk_version`` set to ``None`` -- the declared floor
|
|
670
|
+
(``min_aggregator_sdk_version``) is the authoritative gate value, so an
|
|
671
|
+
unresolvable installed version must not turn this into an error.
|
|
672
|
+
|
|
673
|
+
Returns:
|
|
674
|
+
DiscoverSdkCompatResponse with the installed and minimum versions
|
|
675
|
+
"""
|
|
676
|
+
return DiscoverSdkCompatResponse.success(
|
|
677
|
+
sdk_version=installed_sdk_version(),
|
|
678
|
+
min_aggregator_sdk_version=MIN_AGGREGATOR_SDK_VERSION,
|
|
679
|
+
)
|
|
680
|
+
|
|
548
681
|
@staticmethod
|
|
549
682
|
def _validate_metadata_folder(source_folder):
|
|
550
683
|
"""Validate that the source folder contains required files."""
|
|
@@ -737,6 +870,37 @@ def _discover_infra_capabilities_command():
|
|
|
737
870
|
return discover_infra_capabilities
|
|
738
871
|
|
|
739
872
|
|
|
873
|
+
def _discover_sdk_compat_command():
|
|
874
|
+
"""Create the discover-sdk-compat command function."""
|
|
875
|
+
@click.command()
|
|
876
|
+
@click.option('--format', 'output_format', type=click.Choice([OUTPUT_FORMAT_TABLE, OUTPUT_FORMAT_JSON]),
|
|
877
|
+
default=OUTPUT_FORMAT_JSON, help='Output format')
|
|
878
|
+
@pass_context
|
|
879
|
+
def discover_sdk_compat(ctx, output_format: OutputFormat):
|
|
880
|
+
"""Discover and display the SDK-compatibility information.
|
|
881
|
+
|
|
882
|
+
This command reports the centra-sdk version this integration was built
|
|
883
|
+
with and the minimum centra-sdk version an aggregator runtime must have
|
|
884
|
+
to run it. The output can be formatted as either a human-readable table
|
|
885
|
+
or machine-parseable JSON.
|
|
886
|
+
|
|
887
|
+
Examples:
|
|
888
|
+
# Display SDK compatibility in JSON format
|
|
889
|
+
cli discover-sdk-compat --format json
|
|
890
|
+
|
|
891
|
+
# Display SDK compatibility in table format
|
|
892
|
+
cli discover-sdk-compat --format table
|
|
893
|
+
"""
|
|
894
|
+
try:
|
|
895
|
+
ret = CliHandler.from_context(ctx).discover_sdk_compat()
|
|
896
|
+
ret.print(output_format)
|
|
897
|
+
except Exception as e:
|
|
898
|
+
ret = DiscoverSdkCompatResponse.error(f"Error while discovering SDK compatibility: {e}")
|
|
899
|
+
ret.print(OUTPUT_FORMAT_JSON)
|
|
900
|
+
sys.exit(1)
|
|
901
|
+
return discover_sdk_compat
|
|
902
|
+
|
|
903
|
+
|
|
740
904
|
def get_default_commands() -> List[click.Command]:
|
|
741
905
|
"""Get the default CLI commands.
|
|
742
906
|
|
|
@@ -754,7 +918,8 @@ def get_default_commands() -> List[click.Command]:
|
|
|
754
918
|
_health_check_command(),
|
|
755
919
|
_discover_metadata_command(),
|
|
756
920
|
_discover_integration_capabilities_command(),
|
|
757
|
-
_discover_infra_capabilities_command()
|
|
921
|
+
_discover_infra_capabilities_command(),
|
|
922
|
+
_discover_sdk_compat_command()
|
|
758
923
|
]
|
|
759
924
|
|
|
760
925
|
|
|
@@ -779,7 +944,7 @@ def create_cli(handler: 'CliHandler', prog_name: str = "cli", commands: Optional
|
|
|
779
944
|
app = create_cli(handler, "my-cli", commands=custom_commands)
|
|
780
945
|
"""
|
|
781
946
|
@click.group(name="cli")
|
|
782
|
-
@click.version_option(version="1.0.0", prog_name=prog_name)
|
|
947
|
+
@click.version_option(version=installed_sdk_version() or "1.0.0", prog_name=prog_name)
|
|
783
948
|
@pass_context
|
|
784
949
|
def cli_group(ctx):
|
|
785
950
|
ctx.ensure_object(dict)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""centra-sdk version helpers for SDK-compatibility discovery.
|
|
3
|
+
|
|
4
|
+
This module exposes the two values used by the ``discover-sdk-compat`` CLI
|
|
5
|
+
command (see :mod:`centra_sdk.utils.gc_cli`), which ILM reads to decide whether
|
|
6
|
+
an integration built with this SDK can run on a given Centra environment:
|
|
7
|
+
|
|
8
|
+
* ``MIN_AGGREGATOR_SDK_VERSION`` -- the aggregator-runtime floor (see the big
|
|
9
|
+
"HOW TO ADJUST" block below).
|
|
10
|
+
* ``installed_sdk_version()`` -- the centra-sdk version actually installed in
|
|
11
|
+
the integration image at runtime.
|
|
12
|
+
|
|
13
|
+
This file ships in the SDK source and survives codegen because ``sdk/utils/``
|
|
14
|
+
is copied verbatim into ``src/centra_sdk/utils/`` by ``sdk/scripts/generate.py``.
|
|
15
|
+
|
|
16
|
+
────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
HOW TO ADJUST ``MIN_AGGREGATOR_SDK_VERSION`` (read this before changing it)
|
|
18
|
+
────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
WHAT IT MEANS
|
|
21
|
+
"An aggregator must have **at least** this centra-sdk version installed in
|
|
22
|
+
its runtime to run integrations built with THIS release of the SDK."
|
|
23
|
+
ILM compares it against every aggregator's reported installed centra-sdk
|
|
24
|
+
version. If an environment's newest aggregator is older than this floor,
|
|
25
|
+
ILM will NOT distribute integrations built with this SDK to that
|
|
26
|
+
environment -- it surfaces them in the UI as "aggregator SDK too old
|
|
27
|
+
(needs vX)". That is expected behaviour, not an error.
|
|
28
|
+
|
|
29
|
+
WHEN TO BUMP IT (rare -- most releases do NOT touch this)
|
|
30
|
+
Bump it ONLY when a change in this SDK makes an integration unable to run
|
|
31
|
+
on an older aggregator runtime, e.g. you:
|
|
32
|
+
• call a new aggregator-side gRPC/HTTP endpoint or field that older
|
|
33
|
+
aggregators don't implement;
|
|
34
|
+
• rely on aggregator behaviour/protocol added in a specific centra-sdk
|
|
35
|
+
version;
|
|
36
|
+
• change the wire contract in a way the aggregator must understand.
|
|
37
|
+
If your change is purely integration-side (a new helper, a bugfix, a new
|
|
38
|
+
model field the aggregator ignores), DO NOT bump it -- a higher floor
|
|
39
|
+
needlessly locks integrations out of older-but-still-capable environments.
|
|
40
|
+
|
|
41
|
+
HOW TO BUMP IT (one line + the usual version bump)
|
|
42
|
+
1. Set the value below to the *released* centra-sdk version in which the
|
|
43
|
+
aggregator gained the support your change depends on (e.g. "0.1.45").
|
|
44
|
+
Use a real published version string, MAJOR.MINOR.PATCH.
|
|
45
|
+
2. Bump ``version`` in ``sdk/pyproject.toml`` as usual (every PR does this).
|
|
46
|
+
3. Commit. That's it -- nothing else to wire:
|
|
47
|
+
• ``discover-sdk-compat`` reports the new floor automatically;
|
|
48
|
+
• ILM's extractor persists it and gates distribution on it.
|
|
49
|
+
|
|
50
|
+
RULES OF THUMB
|
|
51
|
+
• Keep ``MIN_AGGREGATOR_SDK_VERSION`` <= this package's own version. You
|
|
52
|
+
can't require an aggregator runtime newer than the SDK that declares it.
|
|
53
|
+
• Only ever raise it, and only to a version that has actually shipped to
|
|
54
|
+
aggregators. Lowering it is almost never correct (it would claim older
|
|
55
|
+
aggregators can run integrations that in fact need newer support).
|
|
56
|
+
• When in doubt, leave it. A too-low floor lets a genuinely-incompatible
|
|
57
|
+
install through; a too-high floor just delays rollout to older
|
|
58
|
+
environments.
|
|
59
|
+
|
|
60
|
+
WORKED EXAMPLE
|
|
61
|
+
You add a call to an aggregator endpoint that only exists from centra-sdk
|
|
62
|
+
0.1.45 onward, and you're releasing this as 0.1.52::
|
|
63
|
+
|
|
64
|
+
MIN_AGGREGATOR_SDK_VERSION = "0.1.45" # <- raise from "0.1.39"
|
|
65
|
+
# sdk/pyproject.toml: version = "0.1.52"
|
|
66
|
+
|
|
67
|
+
Result: ILM distributes 0.1.52-built integrations only to environments
|
|
68
|
+
whose aggregators run centra-sdk >= 0.1.45; older environments show
|
|
69
|
+
"needs Centra SDK >= 0.1.45" until their aggregators are upgraded.
|
|
70
|
+
────────────────────────────────────────────────────────────────────────────
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
from importlib.metadata import PackageNotFoundError, version as _pkg_version
|
|
74
|
+
from typing import Optional
|
|
75
|
+
|
|
76
|
+
# Distribution name on PyPI (import name is ``centra_sdk``).
|
|
77
|
+
_PACKAGE_NAME = "centra-sdk"
|
|
78
|
+
|
|
79
|
+
# ===========================================================================
|
|
80
|
+
# The aggregator-runtime floor for integrations built with THIS release.
|
|
81
|
+
#
|
|
82
|
+
# >>> To change this, read the "HOW TO ADJUST MIN_AGGREGATOR_SDK_VERSION"
|
|
83
|
+
# block in this module's docstring (just above). <<<
|
|
84
|
+
#
|
|
85
|
+
# Short version: bump ONLY when this SDK needs a newer aggregator runtime; set
|
|
86
|
+
# it to the released centra-sdk version that added the required aggregator-side
|
|
87
|
+
# support; keep it <= this package's own version; otherwise leave it alone.
|
|
88
|
+
# ===========================================================================
|
|
89
|
+
# Current floor: 0.1.39 -- the aggregator's actual baseline centra-sdk runtime.
|
|
90
|
+
MIN_AGGREGATOR_SDK_VERSION: str = "0.1.39"
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def installed_sdk_version() -> Optional[str]:
|
|
94
|
+
"""Return the installed centra-sdk package version, or ``None``.
|
|
95
|
+
|
|
96
|
+
Resolves ``importlib.metadata.version("centra-sdk")``. When the package
|
|
97
|
+
metadata is not available (``PackageNotFoundError`` -- typically a source
|
|
98
|
+
checkout that was never installed), returns ``None`` rather than raising so
|
|
99
|
+
that callers can degrade gracefully.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
The installed centra-sdk version string, or ``None`` if unresolvable.
|
|
103
|
+
"""
|
|
104
|
+
try:
|
|
105
|
+
return _pkg_version(_PACKAGE_NAME)
|
|
106
|
+
except PackageNotFoundError:
|
|
107
|
+
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|