splight-lib 5.3.0__tar.gz → 5.24.0.dev2__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.
- splight_lib-5.24.0.dev2/.github/workflows/code-style.yaml +21 -0
- splight_lib-5.24.0.dev2/.github/workflows/developer.yaml +84 -0
- splight_lib-5.24.0.dev2/.github/workflows/pre-release.yaml +71 -0
- splight_lib-5.24.0.dev2/.github/workflows/release.yaml +78 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/check_dev_version.py +28 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/check_master_version.py +30 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/check_pypi_version.py +39 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/check_release_version.py +19 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/check_version_uploaded.py +35 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/cleanup_pypi.py +91 -0
- splight_lib-5.24.0.dev2/.github/workflows/scripts/requirements.txt +2 -0
- splight_lib-5.24.0.dev2/.gitignore +56 -0
- splight_lib-5.24.0.dev2/.pre-commit-config.yaml +10 -0
- splight_lib-5.24.0.dev2/DOCS.md +246 -0
- splight_lib-5.24.0.dev2/Makefile +50 -0
- splight_lib-5.24.0.dev2/PKG-INFO +94 -0
- splight_lib-5.24.0.dev2/README.md +59 -0
- splight_lib-5.24.0.dev2/pyproject.toml +131 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/abstract/client.py +4 -3
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/auth/__init__.py +0 -2
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/__init__.py +0 -6
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/abstract.py +3 -4
- splight_lib-5.24.0.dev2/splight_lib/client/database/builder.py +11 -0
- splight_lib-5.24.0.dev2/splight_lib/client/database/classmap.py +67 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/database/remote_client.py +108 -36
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/__init__.py +5 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/builder.py +27 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/common/__init__.py +13 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/common/abstract.py +38 -0
- {splight_lib-5.3.0/splight_lib/client/datalake → splight_lib-5.24.0.dev2/splight_lib/client/datalake/common}/buffer.py +3 -4
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/__init__.py +13 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/builder.py +24 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/classmap.py +1 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/constants.py +31 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/exceptions.py +12 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v3/remote_client.py +273 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/__init__.py +13 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/builder.py +43 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/exceptions.py +4 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/generic.py +31 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/models.py +78 -0
- splight_lib-5.24.0.dev2/splight_lib/client/datalake/v4/remote_client.py +272 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/exceptions.py +9 -1
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/hub/abstract.py +4 -5
- splight_lib-5.24.0.dev2/splight_lib/client/hub/client.py +169 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/tests/test_database.py +15 -2
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/tests/test_datalake.py +13 -6
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/abstract.py +11 -13
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/spec.py +32 -33
- splight_lib-5.24.0.dev2/splight_lib/config.py +122 -0
- splight_lib-5.24.0.dev2/splight_lib/conftest.py +47 -0
- splight_lib-5.24.0.dev2/splight_lib/constants.py +5 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/encryption.py +1 -2
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/engine.py +4 -4
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/scheduling.py +10 -11
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/task.py +17 -11
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/tests/test_execution.py +2 -2
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/trigger.py +3 -4
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/_internal.py +1 -0
- splight_lib-5.24.0.dev2/splight_lib/models/__init__.py +287 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/__init__.py +161 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/actions.py +21 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/alert.py +43 -36
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/asset.py +92 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/attribute.py +4 -5
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/bus.py +15 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/component.py +92 -96
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/dashboard.py +347 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/data_address.py +3 -5
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/datalake.py +192 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/datalake_base.py +132 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/exceptions.py +85 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/external_grid.py +7 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/file.py +12 -16
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/function.py +41 -36
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/generator.py +19 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/generic.py +9 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/grid.py +6 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/hub.py +122 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/hub_server.py +26 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/inverter.py +28 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/line.py +51 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/metadata.py +38 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/native.py +28 -18
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/secret.py +4 -4
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/segment.py +21 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/server.py +195 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/slack_generator.py +12 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/slack_line.py +14 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/tag.py +6 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/models.json +1 -3
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_component_object_instance.py +4 -4
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/tests/test_database_model.py +156 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_metadata.py +1 -1
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/three_winding_transformer.py +34 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/transformer.py +36 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v3/variable_types.py +18 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/__init__.py +120 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/asset.py +69 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/attribute.py +19 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/base.py +24 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/battery.py +33 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/bus.py +27 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/component.py +602 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/data_address.py +33 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/datalake_base.py +131 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/exceptions.py +76 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/external_grid.py +8 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/file.py +55 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/generator.py +44 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/generic.py +43 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/grid.py +9 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/hub.py +122 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/hub_server.py +26 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/line.py +95 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/load.py +14 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/metadata.py +43 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/native.py +134 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/secret.py +18 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/segment.py +31 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/server.py +195 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/slack_line.py +9 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/solution.py +30 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/tag.py +6 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/transformer.py +44 -0
- splight_lib-5.24.0.dev2/splight_lib/models/_v4/variable_types.py +18 -0
- splight_lib-5.24.0.dev2/splight_lib/models/database.py +80 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/client.py +81 -84
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/tests/test_restclient.py +2 -3
- splight_lib-5.24.0.dev2/splight_lib/server/__init__.py +5 -0
- splight_lib-5.24.0.dev2/splight_lib/server/exceptions.py +3 -0
- splight_lib-5.24.0.dev2/splight_lib/server/server.py +15 -0
- splight_lib-5.24.0.dev2/splight_lib/settings.py +87 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/testing/__init__.py +5 -8
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/test_api_contracts.py +17 -27
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/utils/custom_model.py +8 -8
- splight_lib-5.24.0.dev2/uv.lock +1989 -0
- splight_lib-5.3.0/PKG-INFO +0 -80
- splight_lib-5.3.0/README.md +0 -38
- splight_lib-5.3.0/pyproject.toml +0 -73
- splight_lib-5.3.0/splight_lib/auth/exceptions.py +0 -12
- splight_lib-5.3.0/splight_lib/auth/mac_auth.py +0 -96
- splight_lib-5.3.0/splight_lib/client/database/builder.py +0 -17
- splight_lib-5.3.0/splight_lib/client/database/classmap.py +0 -28
- splight_lib-5.3.0/splight_lib/client/database/local_client.py +0 -187
- splight_lib-5.3.0/splight_lib/client/datalake/__init__.py +0 -9
- splight_lib-5.3.0/splight_lib/client/datalake/abstract.py +0 -71
- splight_lib-5.3.0/splight_lib/client/datalake/builder.py +0 -24
- splight_lib-5.3.0/splight_lib/client/datalake/exceptions.py +0 -6
- splight_lib-5.3.0/splight_lib/client/datalake/local_client.py +0 -119
- splight_lib-5.3.0/splight_lib/client/datalake/remote_client.py +0 -272
- splight_lib-5.3.0/splight_lib/client/datalake/schemas.py +0 -56
- splight_lib-5.3.0/splight_lib/client/file_handler.py +0 -34
- splight_lib-5.3.0/splight_lib/client/filter.py +0 -18
- splight_lib-5.3.0/splight_lib/client/hub/client.py +0 -96
- splight_lib-5.3.0/splight_lib/component/tests/test_abstract.py +0 -1
- splight_lib-5.3.0/splight_lib/constants.py +0 -8
- splight_lib-5.3.0/splight_lib/models/__init__.py +0 -54
- splight_lib-5.3.0/splight_lib/models/asset.py +0 -49
- splight_lib-5.3.0/splight_lib/models/base.py +0 -188
- splight_lib-5.3.0/splight_lib/models/dashboard.py +0 -95
- splight_lib-5.3.0/splight_lib/models/exceptions.py +0 -34
- splight_lib-5.3.0/splight_lib/models/hub.py +0 -205
- splight_lib-5.3.0/splight_lib/models/metadata.py +0 -21
- splight_lib-5.3.0/splight_lib/models/pipeline.py +0 -81
- splight_lib-5.3.0/splight_lib/models/tests/test_database_model.py +0 -133
- splight_lib-5.3.0/splight_lib/settings.py +0 -100
- splight_lib-5.3.0/splight_lib/stringcase.py +0 -23
- splight_lib-5.3.0/splight_lib/tests/test_encryption.py +0 -1
- splight_lib-5.3.0/splight_lib/utils/hub.py +0 -24
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/LICENSE.txt +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/abstract/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/auth/token.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/client/hub/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/exceptions.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/component/tests/test_spec.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/exceptions.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/execution/tests/test_scheduling.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/component.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/constants.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/logging.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/logging/tests/test_logging.py +0 -0
- {splight_lib-5.3.0/splight_lib/models → splight_lib-5.24.0.dev2/splight_lib/models/_v3}/tests/test_models.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/exceptions.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/restclient/types.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/FakeProc.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/tests/asset_geometries.json +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/utils/__init__.py +0 -0
- {splight_lib-5.3.0 → splight_lib-5.24.0.dev2}/splight_lib/version.py +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Code Quality
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
format:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
name: Check Code Quality and Format
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- name: Install Python
|
|
15
|
+
uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.11"
|
|
18
|
+
- name: Install latest uv and set Python version
|
|
19
|
+
uses: astral-sh/setup-uv@v6
|
|
20
|
+
- name: Lint
|
|
21
|
+
run: make check-format
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# used when creating a feature branch for development
|
|
2
|
+
# enabling the creation of dev versions (x.y.z-devN) that are uploaded to pypi
|
|
3
|
+
# if the version is correct, that is, greater than the version of master and pypi
|
|
4
|
+
name: Developer
|
|
5
|
+
on: workflow_dispatch
|
|
6
|
+
|
|
7
|
+
env:
|
|
8
|
+
LIBRARY_NAME: "splight-lib"
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
verify_version:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
name: Verify version is higher than last PyPi package and master version
|
|
14
|
+
steps:
|
|
15
|
+
# get master version
|
|
16
|
+
- name: Checkout to master
|
|
17
|
+
uses: actions/checkout@v3
|
|
18
|
+
with:
|
|
19
|
+
ref: master
|
|
20
|
+
|
|
21
|
+
- name: Get version from master branch
|
|
22
|
+
run: echo "MASTER_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
23
|
+
|
|
24
|
+
# get current branch version
|
|
25
|
+
- name: Checkout to feature branch
|
|
26
|
+
uses: actions/checkout@v3
|
|
27
|
+
|
|
28
|
+
- name: Checks if you are in the master branch
|
|
29
|
+
if: ${{ github.ref == 'refs/heads/master' }}
|
|
30
|
+
run: |
|
|
31
|
+
echo "Cannot run this action in the master branch."
|
|
32
|
+
exit 1
|
|
33
|
+
|
|
34
|
+
- name: Get version from feature branch
|
|
35
|
+
run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
36
|
+
|
|
37
|
+
- name: Set up Python
|
|
38
|
+
uses: actions/setup-python@v3
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.11"
|
|
41
|
+
|
|
42
|
+
# validate versions
|
|
43
|
+
- name: Validates version is a dev version.
|
|
44
|
+
run: python3 .github/workflows/scripts/check_dev_version.py ${{ env.CURRENT_VERSION }}
|
|
45
|
+
|
|
46
|
+
- name: Verifies the dev version is not uploaded.
|
|
47
|
+
run: python .github/workflows/scripts/check_version_uploaded.py ${{ env.CURRENT_VERSION }} $LIBRARY_NAME
|
|
48
|
+
|
|
49
|
+
upload_developer_to_pypi:
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
name: Upload the version to pypi only if it's a developer version
|
|
52
|
+
needs: [verify_version]
|
|
53
|
+
steps:
|
|
54
|
+
- name: Checkout to feature branch
|
|
55
|
+
uses: actions/checkout@v3
|
|
56
|
+
|
|
57
|
+
- name: Get version from feature branch
|
|
58
|
+
run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
59
|
+
|
|
60
|
+
- name: Set up Python
|
|
61
|
+
uses: actions/setup-python@v3
|
|
62
|
+
with:
|
|
63
|
+
python-version: "3.11"
|
|
64
|
+
|
|
65
|
+
- name: Install latest uv and set Python version
|
|
66
|
+
uses: astral-sh/setup-uv@v6
|
|
67
|
+
|
|
68
|
+
- name: Build package
|
|
69
|
+
run: uv build
|
|
70
|
+
|
|
71
|
+
- name: Load variable to decide whether to publish package
|
|
72
|
+
run: |
|
|
73
|
+
if [[ $CURRENT_VERSION =~ "dev" ]]; then
|
|
74
|
+
echo "PUBLISH_PACKAGE=true" >> "$GITHUB_ENV"
|
|
75
|
+
else
|
|
76
|
+
echo "PUBLISH_PACKAGE=false" >> "$GITHUB_ENV"
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
- name: Publish package
|
|
80
|
+
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
|
|
81
|
+
if: ${{ env.PUBLISH_PACKAGE == 'true' }}
|
|
82
|
+
with:
|
|
83
|
+
user: __token__
|
|
84
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# used when creating a pull request
|
|
2
|
+
# this step runs the tests, coding style and validates that the version is
|
|
3
|
+
# release and greater than the version of master and pypi
|
|
4
|
+
name: Pre Release
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
types:
|
|
8
|
+
[opened, synchronize]
|
|
9
|
+
branches:
|
|
10
|
+
- master
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
LIBRARY_NAME: "splight-lib"
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
run_tests_and_coding_style:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
name: Verify library tests and coding style
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout to feature branch
|
|
21
|
+
uses: actions/checkout@v3
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v3
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.11"
|
|
27
|
+
|
|
28
|
+
- name: Install latest uv and set Python version
|
|
29
|
+
uses: astral-sh/setup-uv@v6
|
|
30
|
+
|
|
31
|
+
- name: Install dependencies
|
|
32
|
+
run: |
|
|
33
|
+
uv sync
|
|
34
|
+
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: make test
|
|
37
|
+
|
|
38
|
+
verify_version:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
name: Verify version is a valid release version and is higher than last PyPi package and master version
|
|
41
|
+
steps:
|
|
42
|
+
# get master version
|
|
43
|
+
- name: Checkout to master
|
|
44
|
+
uses: actions/checkout@v3
|
|
45
|
+
with:
|
|
46
|
+
ref: master
|
|
47
|
+
|
|
48
|
+
- name: Get version from master branch
|
|
49
|
+
run: echo "MASTER_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
50
|
+
|
|
51
|
+
# get current branch version
|
|
52
|
+
- name: Checkout to feature branch
|
|
53
|
+
uses: actions/checkout@v3
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v3
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.11"
|
|
59
|
+
|
|
60
|
+
- name: Get version from feature branch
|
|
61
|
+
run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
62
|
+
|
|
63
|
+
# validate versions
|
|
64
|
+
- name: Verify version is a valid release version
|
|
65
|
+
run: python .github/workflows/scripts/check_release_version.py ${{ env.CURRENT_VERSION }}
|
|
66
|
+
|
|
67
|
+
- name: Verify version is greater than last pypi uploaded version
|
|
68
|
+
run: python .github/workflows/scripts/check_pypi_version.py ${{ env.CURRENT_VERSION }} $LIBRARY_NAME
|
|
69
|
+
|
|
70
|
+
- name: Verify version is greater than master version
|
|
71
|
+
run: python .github/workflows/scripts/check_master_version.py ${{ env.MASTER_VERSION }} ${{ env.CURRENT_VERSION }}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# used when a new feature has already been merged to master
|
|
2
|
+
# this step creates a new tag in the github repository, pushes the release
|
|
3
|
+
# version to pypi and deletes all dev versions
|
|
4
|
+
name: Release
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches:
|
|
8
|
+
- master
|
|
9
|
+
|
|
10
|
+
env:
|
|
11
|
+
LIBRARY_NAME: "splight-lib"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
tag_version:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
name: Create tag version on github repository
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout to feature branch
|
|
19
|
+
uses: actions/checkout@v3
|
|
20
|
+
|
|
21
|
+
- name: Get version from feature branch
|
|
22
|
+
run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
23
|
+
|
|
24
|
+
- name: Create tag
|
|
25
|
+
uses: softprops/action-gh-release@v1
|
|
26
|
+
env:
|
|
27
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
28
|
+
with:
|
|
29
|
+
name: Release ${{ env.CURRENT_VERSION }}
|
|
30
|
+
tag_name: ${{ env.CURRENT_VERSION }}
|
|
31
|
+
|
|
32
|
+
upload_release_to_pypi:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
name: Upload release library version to pypi
|
|
35
|
+
needs: [tag_version]
|
|
36
|
+
steps:
|
|
37
|
+
- name: Checkout to feature branch
|
|
38
|
+
uses: actions/checkout@v3
|
|
39
|
+
|
|
40
|
+
- name: Set up Python 3.11
|
|
41
|
+
uses: actions/setup-python@v5
|
|
42
|
+
with:
|
|
43
|
+
python-version: "3.11"
|
|
44
|
+
|
|
45
|
+
- name: Install latest uv and set Python version
|
|
46
|
+
uses: astral-sh/setup-uv@v6
|
|
47
|
+
|
|
48
|
+
- name: Build package
|
|
49
|
+
run: uv build
|
|
50
|
+
|
|
51
|
+
- name: Publish package
|
|
52
|
+
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
|
|
53
|
+
with:
|
|
54
|
+
user: __token__
|
|
55
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
56
|
+
|
|
57
|
+
cleanup_pypi:
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
name: Remove all developer versions from pypi
|
|
60
|
+
needs: [upload_release_to_pypi]
|
|
61
|
+
steps:
|
|
62
|
+
- name: Checkout to feature branch
|
|
63
|
+
uses: actions/checkout@v3
|
|
64
|
+
|
|
65
|
+
- name: Set up Python 3.11
|
|
66
|
+
uses: actions/setup-python@v5
|
|
67
|
+
with:
|
|
68
|
+
python-version: "3.11"
|
|
69
|
+
|
|
70
|
+
# install requests and pypi-cleanup
|
|
71
|
+
- name: Install requirements
|
|
72
|
+
run: pip install -r .github/workflows/scripts/requirements.txt
|
|
73
|
+
|
|
74
|
+
- name: Get version from feature branch
|
|
75
|
+
run: echo "CURRENT_VERSION=$(grep version pyproject.toml | head -1 | awk '{print $3}' | tr -d '\"')" >> "$GITHUB_ENV"
|
|
76
|
+
|
|
77
|
+
- name: Remove all developer versions from pypi
|
|
78
|
+
run: python .github/workflows/scripts/cleanup_pypi.py $LIBRARY_NAME ${{ env.CURRENT_VERSION }} ${{ secrets.PYPI_USERNAME }} ${{ secrets.PYPI_PASSWORD }}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version as parse
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class VersionError(Exception):
|
|
7
|
+
"""Raised when the version is not a developer version."""
|
|
8
|
+
|
|
9
|
+
...
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if __name__ == "__main__":
|
|
13
|
+
"""Checks if the version is a developer version.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
version: The version from the feature branch
|
|
18
|
+
|
|
19
|
+
Raises
|
|
20
|
+
------
|
|
21
|
+
VersionError if the version is not a developer version
|
|
22
|
+
"""
|
|
23
|
+
version_line = sys.argv[1]
|
|
24
|
+
|
|
25
|
+
version = parse(version_line)
|
|
26
|
+
|
|
27
|
+
if not (version.is_prerelease or version.is_devrelease):
|
|
28
|
+
raise VersionError(f"Version {version} is not a developer version")
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version as parse
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class VersionError(Exception):
|
|
7
|
+
"""Raised when the feature version is not greater than the master
|
|
8
|
+
version."""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
if __name__ == "__main__":
|
|
12
|
+
"""Compares versions between the local repository and master.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
old_version (arg 1) (str): local version number (x.y.z)
|
|
16
|
+
new_version (arg 2) (str): master version number (x.y.x)
|
|
17
|
+
Raises:
|
|
18
|
+
VersionError: if the local version is not greater than master version
|
|
19
|
+
"""
|
|
20
|
+
old_version_line = sys.argv[1]
|
|
21
|
+
new_version_line = sys.argv[2]
|
|
22
|
+
|
|
23
|
+
master_version = parse(old_version_line)
|
|
24
|
+
project_version = parse(new_version_line)
|
|
25
|
+
|
|
26
|
+
if project_version <= master_version:
|
|
27
|
+
raise VersionError(
|
|
28
|
+
f"Feature version {project_version} is not greater than "
|
|
29
|
+
f"master version {master_version}"
|
|
30
|
+
)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import sys
|
|
3
|
+
import urllib.request
|
|
4
|
+
|
|
5
|
+
from pkg_resources import parse_version as parse
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class PypiVersionError(Exception):
|
|
9
|
+
"""Raised when the version is not greater than the one on pypi."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_pypi_version(project_name: str):
|
|
13
|
+
url = f"https://pypi.org/pypi/{project_name}/json"
|
|
14
|
+
response = urllib.request.urlopen(url)
|
|
15
|
+
version = json.loads(response.read())["info"]["version"]
|
|
16
|
+
return parse(version)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if __name__ == "__main__":
|
|
20
|
+
"""Compares versions between the local repository and the package on pypi.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
local_version (arg 1) (str): local version number (x.y.z)
|
|
24
|
+
project_name (arg 2) (str): name of the project on pypi
|
|
25
|
+
Raises:
|
|
26
|
+
PypiVersionError: if the local version is not greater than the one on
|
|
27
|
+
pypi
|
|
28
|
+
"""
|
|
29
|
+
local_version = sys.argv[1]
|
|
30
|
+
project_name = sys.argv[2]
|
|
31
|
+
|
|
32
|
+
project_version = parse(local_version)
|
|
33
|
+
public_project_version = get_pypi_version(project_name)
|
|
34
|
+
|
|
35
|
+
if project_version <= public_project_version:
|
|
36
|
+
raise PypiVersionError(
|
|
37
|
+
f"Feature version {project_version} is not greater than "
|
|
38
|
+
f"uploaded version {public_project_version}"
|
|
39
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version as parse
|
|
4
|
+
|
|
5
|
+
if __name__ == "__main__":
|
|
6
|
+
"""Verify if the format is release for a given string version.
|
|
7
|
+
|
|
8
|
+
Example:
|
|
9
|
+
- x.y.z: it's OK.
|
|
10
|
+
- x.y.x.dev0: raises InvalidReleaseVersion
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
version (arg 1) (str): current lib version number (x.y.z)
|
|
14
|
+
Raises:
|
|
15
|
+
InvalidReleaseVersion: if the current version is not a release
|
|
16
|
+
version.
|
|
17
|
+
"""
|
|
18
|
+
string_version = sys.argv[1]
|
|
19
|
+
parse(string_version)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import sys
|
|
3
|
+
import urllib.request
|
|
4
|
+
|
|
5
|
+
from pkg_resources import parse_version as parse
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class PypiVersionError(Exception):
|
|
9
|
+
"""Raised if the local version was already uploaded to pypi."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_pypi_versions(project_name: str):
|
|
13
|
+
url = f"https://pypi.org/pypi/{project_name}/json"
|
|
14
|
+
response = urllib.request.urlopen(url)
|
|
15
|
+
return [parse(r) for r in json.loads(response.read())["releases"].keys()]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if __name__ == "__main__":
|
|
19
|
+
"""Checks the version was not uploaded.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
local_version (arg 1) (str): local version number (x.y.z)
|
|
23
|
+
project_name (arg 2) (str): name of the project on pypi
|
|
24
|
+
Raises:
|
|
25
|
+
PypiVersionError: if the local version was already uploaded to pypi
|
|
26
|
+
"""
|
|
27
|
+
local_version = sys.argv[1]
|
|
28
|
+
project_name = sys.argv[2]
|
|
29
|
+
|
|
30
|
+
project_version = parse(local_version)
|
|
31
|
+
uploaded_versions = get_pypi_versions(project_name)
|
|
32
|
+
if project_version in uploaded_versions:
|
|
33
|
+
raise PypiVersionError(
|
|
34
|
+
f"Feature version {project_version} is already uploaded to pypi."
|
|
35
|
+
)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
import requests
|
|
5
|
+
from pypi_cleanup import CsfrParser
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def delete_developer_versions(
|
|
9
|
+
package_name: str, release_version: str, username: str, password: str
|
|
10
|
+
):
|
|
11
|
+
with requests.Session() as session:
|
|
12
|
+
# generate csrf token
|
|
13
|
+
with session.get("https://pypi.org/account/login/") as response:
|
|
14
|
+
response.raise_for_status()
|
|
15
|
+
form_action = "/account/login/"
|
|
16
|
+
parser = CsfrParser(form_action)
|
|
17
|
+
parser.feed(response.text)
|
|
18
|
+
if not parser.csrf:
|
|
19
|
+
raise ValueError(f"No CSFR found in {form_action}")
|
|
20
|
+
csrf = parser.csrf
|
|
21
|
+
|
|
22
|
+
# validate login
|
|
23
|
+
with session.post(
|
|
24
|
+
"https://pypi.org/account/login/",
|
|
25
|
+
data={
|
|
26
|
+
"csrf_token": csrf,
|
|
27
|
+
"username": username,
|
|
28
|
+
"password": password,
|
|
29
|
+
},
|
|
30
|
+
headers={"referer": "https://pypi.org/account/login/"},
|
|
31
|
+
) as response:
|
|
32
|
+
response.raise_for_status()
|
|
33
|
+
if response.url == "https://pypi.org/account/login/":
|
|
34
|
+
logging.error(f"Login for user {username} failed")
|
|
35
|
+
return 1
|
|
36
|
+
|
|
37
|
+
# get developer versions to delete
|
|
38
|
+
with session.get(
|
|
39
|
+
f"https://pypi.org/pypi/{package_name}/json"
|
|
40
|
+
) as response:
|
|
41
|
+
versions = list(response.json()["releases"].keys())
|
|
42
|
+
to_delete = [
|
|
43
|
+
version
|
|
44
|
+
for version in versions
|
|
45
|
+
if "dev" in version and release_version in version
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# delete versions
|
|
49
|
+
for version in to_delete:
|
|
50
|
+
logging.info(f"Deleting {package_name} version {version}")
|
|
51
|
+
form_action = f"/manage/project/{package_name}/release/{version}/"
|
|
52
|
+
form_url = f"https://pypi.org{form_action}"
|
|
53
|
+
with session.get(form_url) as response:
|
|
54
|
+
response.raise_for_status()
|
|
55
|
+
parser = CsfrParser(form_action, "confirm_delete_version")
|
|
56
|
+
parser.feed(response.text)
|
|
57
|
+
if not parser.csrf:
|
|
58
|
+
raise ValueError(f"No CSFR found in {form_action}")
|
|
59
|
+
csrf = parser.csrf
|
|
60
|
+
referer = response.url
|
|
61
|
+
|
|
62
|
+
with session.post(
|
|
63
|
+
form_url,
|
|
64
|
+
data={"csrf_token": csrf, "confirm_delete_version": version},
|
|
65
|
+
headers={"referer": referer},
|
|
66
|
+
) as response:
|
|
67
|
+
response.raise_for_status()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if __name__ == "__main__":
|
|
71
|
+
"""Remove all developer version from given release version
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
package_name (arg 1) (str): library package name (splight-lib)
|
|
75
|
+
release_version (arg 2) (str): current release version (x.y.z)
|
|
76
|
+
username (arg 3) (str): pypi account username
|
|
77
|
+
password (arg 4) (str): pypi account password
|
|
78
|
+
Raises:
|
|
79
|
+
ValueError: When CSRF fails.
|
|
80
|
+
"""
|
|
81
|
+
package_name = sys.argv[1]
|
|
82
|
+
release_version = sys.argv[2]
|
|
83
|
+
username = sys.argv[3]
|
|
84
|
+
password = sys.argv[4]
|
|
85
|
+
|
|
86
|
+
public_project_version = delete_developer_versions(
|
|
87
|
+
package_name=package_name,
|
|
88
|
+
release_version=release_version,
|
|
89
|
+
username=username,
|
|
90
|
+
password=password,
|
|
91
|
+
)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
.env/*
|
|
2
|
+
build/*
|
|
3
|
+
splight_lib.egg-info/*
|
|
4
|
+
db.sqlite3
|
|
5
|
+
# These are some examples of commonly ignored file patterns.
|
|
6
|
+
# You should customize this list as applicable to your project.
|
|
7
|
+
# Learn more about .gitignore:
|
|
8
|
+
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore
|
|
9
|
+
|
|
10
|
+
# Node artifact files
|
|
11
|
+
node_modules/
|
|
12
|
+
dist/
|
|
13
|
+
|
|
14
|
+
# Compiled Java class files
|
|
15
|
+
*.class
|
|
16
|
+
|
|
17
|
+
# Compiled Python bytecode
|
|
18
|
+
*.py[cod]
|
|
19
|
+
|
|
20
|
+
# Log files
|
|
21
|
+
*.log
|
|
22
|
+
|
|
23
|
+
# Package files
|
|
24
|
+
*.jar
|
|
25
|
+
|
|
26
|
+
# Maven
|
|
27
|
+
target/
|
|
28
|
+
dist/
|
|
29
|
+
|
|
30
|
+
# JetBrains IDE
|
|
31
|
+
.idea/
|
|
32
|
+
|
|
33
|
+
# Unit test reports
|
|
34
|
+
TEST*.xml
|
|
35
|
+
|
|
36
|
+
# Generated by MacOS
|
|
37
|
+
.DS_Store
|
|
38
|
+
|
|
39
|
+
# Generated by Windows
|
|
40
|
+
Thumbs.db
|
|
41
|
+
|
|
42
|
+
# Applications
|
|
43
|
+
*.app
|
|
44
|
+
*.exe
|
|
45
|
+
*.war
|
|
46
|
+
|
|
47
|
+
# Large media files
|
|
48
|
+
*.mp4
|
|
49
|
+
*.tiff
|
|
50
|
+
*.avi
|
|
51
|
+
*.flv
|
|
52
|
+
*.mov
|
|
53
|
+
*.wmv
|
|
54
|
+
#vscode
|
|
55
|
+
.vscode
|
|
56
|
+
mise.toml
|