aioscaleway 0.1.0__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.
- aioscaleway-0.1.0/.github/workflows/pull-request.yml +68 -0
- aioscaleway-0.1.0/.github/workflows/release.yml +59 -0
- aioscaleway-0.1.0/.gitignore +23 -0
- aioscaleway-0.1.0/.python-version +1 -0
- aioscaleway-0.1.0/CHANGELOG.md +34 -0
- aioscaleway-0.1.0/CITATION.cff +24 -0
- aioscaleway-0.1.0/CONTRIBUTING.md +115 -0
- aioscaleway-0.1.0/LICENSE +21 -0
- aioscaleway-0.1.0/PKG-INFO +205 -0
- aioscaleway-0.1.0/README.md +170 -0
- aioscaleway-0.1.0/mapping.yaml +283 -0
- aioscaleway-0.1.0/pyproject.toml +94 -0
- aioscaleway-0.1.0/scripts/fetch_specs.sh +22 -0
- aioscaleway-0.1.0/scripts/generate.py +28 -0
- aioscaleway-0.1.0/scripts/objects.py +1370 -0
- aioscaleway-0.1.0/scripts/operations.py +906 -0
- aioscaleway-0.1.0/scripts/release.sh +74 -0
- aioscaleway-0.1.0/scripts/roll_changelog.py +87 -0
- aioscaleway-0.1.0/scripts/spec_index.py +33 -0
- aioscaleway-0.1.0/src/aioscaleway/__init__.py +48 -0
- aioscaleway-0.1.0/src/aioscaleway/_client.py +295 -0
- aioscaleway-0.1.0/src/aioscaleway/_enums.py +15 -0
- aioscaleway-0.1.0/src/aioscaleway/_errors.py +133 -0
- aioscaleway-0.1.0/src/aioscaleway/_models.py +30 -0
- aioscaleway-0.1.0/src/aioscaleway/_namespaces.py +167 -0
- aioscaleway-0.1.0/src/aioscaleway/_objects.py +143 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/account/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/account/v3/__init__.py +272 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/account/v3/api.py +2199 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/account/v3/models.py +1797 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/annotations/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/annotations/v1/__init__.py +38 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/annotations/v1/api.py +527 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/annotations/v1/models.py +223 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/applesilicon/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/applesilicon/v1alpha1/__init__.py +102 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/applesilicon/v1alpha1/api.py +1120 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/applesilicon/v1alpha1/models.py +630 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/audit_trail/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/audit_trail/v1alpha1/__init__.py +246 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/audit_trail/v1alpha1/api.py +1014 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/audit_trail/v1alpha1/models.py +3289 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/autoscaling/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/autoscaling/v1alpha2/__init__.py +62 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/autoscaling/v1alpha2/api.py +334 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/autoscaling/v1alpha2/models.py +476 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v1/__init__.py +160 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v1/api.py +1561 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v1/models.py +1281 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v3/__init__.py +20 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v3/api.py +229 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/baremetal/v3/models.py +80 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/billing/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/billing/v2beta1/__init__.py +62 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/billing/v2beta1/api.py +609 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/billing/v2beta1/models.py +464 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1/__init__.py +46 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1/api.py +711 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1/models.py +366 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1alpha1/__init__.py +46 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1alpha1/api.py +721 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/block/v1alpha1/models.py +338 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/cockpit/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/cockpit/v1/__init__.py +106 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/cockpit/v1/api.py +1772 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/cockpit/v1/models.py +746 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1/__init__.py +96 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1/api.py +1214 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1/models.py +835 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1beta1/__init__.py +90 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1beta1/api.py +1569 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/container/v1beta1/models.py +735 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datalab/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datalab/v1beta1/__init__.py +58 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datalab/v1beta1/api.py +536 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datalab/v1beta1/models.py +382 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datawarehouse/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datawarehouse/v1beta1/__init__.py +58 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datawarehouse/v1beta1/api.py +891 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/datawarehouse/v1beta1/models.py +395 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/dedibox/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/dedibox/v1/__init__.py +192 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/dedibox/v1/api.py +1840 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/dedibox/v1/models.py +1491 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/domain/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/domain/v2beta1/__init__.py +254 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/domain/v2beta1/api.py +2528 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/domain/v2beta1/models.py +1715 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/edge_services/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/edge_services/v1beta1/__init__.py +148 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/edge_services/v1beta1/api.py +2068 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/edge_services/v1beta1/models.py +1088 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/environmental_footprint/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/environmental_footprint/v1alpha1/__init__.py +34 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/environmental_footprint/v1alpha1/api.py +140 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/environmental_footprint/v1alpha1/models.py +182 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/file/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/file/v1alpha1/__init__.py +42 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/file/v1alpha1/api.py +719 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/file/v1alpha1/models.py +297 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/flexibleip/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/flexibleip/v1alpha1/__init__.py +28 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/flexibleip/v1alpha1/api.py +442 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/flexibleip/v1alpha1/models.py +180 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/function/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/function/v1beta1/__init__.py +94 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/function/v1beta1/api.py +1497 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/function/v1beta1/models.py +752 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/generative_apis/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/generative_apis/v1/__init__.py +212 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/generative_apis/v1/api.py +703 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/generative_apis/v1/models.py +1574 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iam/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iam/v1alpha1/__init__.py +176 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iam/v1alpha1/api.py +3233 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iam/v1alpha1/models.py +1430 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/inference/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/inference/v1/__init__.py +56 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/inference/v1/api.py +731 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/inference/v1/models.py +415 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v1/__init__.py +278 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v1/api.py +3448 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v1/models.py +1664 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v2alpha1/__init__.py +172 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v2alpha1/api.py +2553 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/instance/v2alpha1/models.py +1648 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/interlink/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/interlink/v1beta1/__init__.py +56 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/interlink/v1beta1/api.py +1290 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/interlink/v1beta1/models.py +514 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iot/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iot/v1/__init__.py +112 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iot/v1/api.py +1468 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/iot/v1/models.py +743 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/ipam/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/ipam/v1/__init__.py +26 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/ipam/v1/api.py +509 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/ipam/v1/models.py +206 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha1/__init__.py +48 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha1/api.py +609 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha1/models.py +231 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha2/__init__.py +62 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha2/api.py +851 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/jobs/v1alpha2/models.py +476 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/k8s/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/k8s/v1/__init__.py +118 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/k8s/v1/api.py +1595 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/k8s/v1/models.py +1354 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/kafka/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/kafka/v1alpha1/__init__.py +72 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/kafka/v1alpha1/api.py +682 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/kafka/v1alpha1/models.py +458 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/key_manager/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/key_manager/v1alpha1/__init__.py +78 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/key_manager/v1alpha1/api.py +1019 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/key_manager/v1alpha1/models.py +470 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/lb/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/lb/v1/__init__.py +152 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/lb/v1/api.py +2790 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/lb/v1/models.py +1335 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mailbox/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mailbox/v1alpha1/__init__.py +60 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mailbox/v1alpha1/api.py +853 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mailbox/v1alpha1/models.py +483 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/marketplace/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/marketplace/v2/__init__.py +48 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/marketplace/v2/api.py +573 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/marketplace/v2/models.py +268 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/messageq/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/messageq/v1alpha1/__init__.py +60 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/messageq/v1alpha1/api.py +695 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/messageq/v1alpha1/models.py +381 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mnq/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mnq/v1beta1/__init__.py +60 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mnq/v1beta1/api.py +1043 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mnq/v1beta1/models.py +410 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1/__init__.py +94 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1/api.py +1279 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1/models.py +634 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1alpha1/__init__.py +80 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1alpha1/api.py +1031 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/mongodb/v1alpha1/models.py +557 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/partner/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/partner/v1/__init__.py +22 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/partner/v1/api.py +297 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/partner/v1/models.py +110 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/product_catalog/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/product_catalog/v2alpha1/__init__.py +182 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/product_catalog/v2alpha1/api.py +151 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/product_catalog/v2alpha1/models.py +1379 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/qaas/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/qaas/v1alpha1/__init__.py +100 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/qaas/v1alpha1/api.py +1441 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/qaas/v1alpha1/models.py +834 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/rdb/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/rdb/v1/__init__.py +186 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/rdb/v1/api.py +2610 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/rdb/v1/models.py +1277 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/redis/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/redis/v1/__init__.py +74 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/redis/v1/api.py +988 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/redis/v1/models.py +473 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/registry/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/registry/v1/__init__.py +36 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/registry/v1/api.py +627 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/registry/v1/models.py +245 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/reseller/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/reseller/v1/__init__.py +34 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/reseller/v1/api.py +396 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/reseller/v1/models.py +262 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/s2s_vpn/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/s2s_vpn/v1alpha1/__init__.py +84 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/s2s_vpn/v1alpha1/api.py +1409 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/s2s_vpn/v1alpha1/models.py +650 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/search/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/search/v1alpha1/__init__.py +36 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/search/v1alpha1/api.py +79 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/search/v1alpha1/models.py +272 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/searchdb/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/searchdb/v1alpha1/__init__.py +60 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/searchdb/v1alpha1/api.py +703 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/searchdb/v1alpha1/models.py +388 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/secret/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/secret/v1beta1/__init__.py +38 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/secret/v1beta1/api.py +831 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/secret/v1beta1/models.py +304 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/serverless_sqldb/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/serverless_sqldb/v1alpha1/__init__.py +30 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/serverless_sqldb/v1alpha1/api.py +515 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/serverless_sqldb/v1alpha1/models.py +221 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/tem/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/tem/v1alpha1/__init__.py +126 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/tem/v1alpha1/api.py +1494 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/tem/v1alpha1/models.py +1058 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/test/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/test/v1/__init__.py +38 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/test/v1/api.py +290 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/test/v1/models.py +112 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpc/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpc/v2/__init__.py +96 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpc/v2/api.py +2018 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpc/v2/models.py +679 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpcgw/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpcgw/v2/__init__.py +52 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpcgw/v2/api.py +1242 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/vpcgw/v2/models.py +430 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/webhosting/__init__.py +1 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/webhosting/v1/__init__.py +198 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/webhosting/v1/api.py +2337 -0
- aioscaleway-0.1.0/src/aioscaleway/_operations/webhosting/v1/models.py +1260 -0
- aioscaleway-0.1.0/src/aioscaleway/_root.py +68 -0
- aioscaleway-0.1.0/src/aioscaleway/_settings.py +22 -0
- aioscaleway-0.1.0/src/aioscaleway/account/__init__.py +98 -0
- aioscaleway-0.1.0/src/aioscaleway/account/resources.py +2542 -0
- aioscaleway-0.1.0/src/aioscaleway/account/types.py +354 -0
- aioscaleway-0.1.0/src/aioscaleway/ai/__init__.py +82 -0
- aioscaleway-0.1.0/src/aioscaleway/ai/resources.py +1978 -0
- aioscaleway-0.1.0/src/aioscaleway/ai/types.py +340 -0
- aioscaleway-0.1.0/src/aioscaleway/analytics/__init__.py +20 -0
- aioscaleway-0.1.0/src/aioscaleway/analytics/resources.py +364 -0
- aioscaleway-0.1.0/src/aioscaleway/analytics/types.py +52 -0
- aioscaleway-0.1.0/src/aioscaleway/billing/__init__.py +22 -0
- aioscaleway-0.1.0/src/aioscaleway/billing/resources.py +474 -0
- aioscaleway-0.1.0/src/aioscaleway/billing/types.py +88 -0
- aioscaleway-0.1.0/src/aioscaleway/compute/__init__.py +256 -0
- aioscaleway-0.1.0/src/aioscaleway/compute/resources.py +6331 -0
- aioscaleway-0.1.0/src/aioscaleway/compute/types.py +866 -0
- aioscaleway-0.1.0/src/aioscaleway/databases/__init__.py +198 -0
- aioscaleway-0.1.0/src/aioscaleway/databases/resources.py +4970 -0
- aioscaleway-0.1.0/src/aioscaleway/databases/types.py +604 -0
- aioscaleway-0.1.0/src/aioscaleway/domains/__init__.py +66 -0
- aioscaleway-0.1.0/src/aioscaleway/domains/resources.py +1740 -0
- aioscaleway-0.1.0/src/aioscaleway/domains/types.py +244 -0
- aioscaleway-0.1.0/src/aioscaleway/email/__init__.py +68 -0
- aioscaleway-0.1.0/src/aioscaleway/email/resources.py +1619 -0
- aioscaleway-0.1.0/src/aioscaleway/email/types.py +172 -0
- aioscaleway-0.1.0/src/aioscaleway/iam/__init__.py +128 -0
- aioscaleway-0.1.0/src/aioscaleway/iam/resources.py +3613 -0
- aioscaleway-0.1.0/src/aioscaleway/iam/types.py +256 -0
- aioscaleway-0.1.0/src/aioscaleway/iot/__init__.py +44 -0
- aioscaleway-0.1.0/src/aioscaleway/iot/resources.py +1000 -0
- aioscaleway-0.1.0/src/aioscaleway/iot/types.py +96 -0
- aioscaleway-0.1.0/src/aioscaleway/kubernetes/__init__.py +70 -0
- aioscaleway-0.1.0/src/aioscaleway/kubernetes/resources.py +1569 -0
- aioscaleway-0.1.0/src/aioscaleway/kubernetes/types.py +124 -0
- aioscaleway-0.1.0/src/aioscaleway/messaging/__init__.py +76 -0
- aioscaleway-0.1.0/src/aioscaleway/messaging/resources.py +1800 -0
- aioscaleway-0.1.0/src/aioscaleway/messaging/types.py +208 -0
- aioscaleway-0.1.0/src/aioscaleway/network/__init__.py +284 -0
- aioscaleway-0.1.0/src/aioscaleway/network/resources.py +7895 -0
- aioscaleway-0.1.0/src/aioscaleway/network/types.py +534 -0
- aioscaleway-0.1.0/src/aioscaleway/observability/__init__.py +70 -0
- aioscaleway-0.1.0/src/aioscaleway/observability/resources.py +1949 -0
- aioscaleway-0.1.0/src/aioscaleway/observability/types.py +342 -0
- aioscaleway-0.1.0/src/aioscaleway/orders/__init__.py +10 -0
- aioscaleway-0.1.0/src/aioscaleway/orders/resources.py +82 -0
- aioscaleway-0.1.0/src/aioscaleway/orders/types.py +180 -0
- aioscaleway-0.1.0/src/aioscaleway/py.typed +0 -0
- aioscaleway-0.1.0/src/aioscaleway/serverless/__init__.py +94 -0
- aioscaleway-0.1.0/src/aioscaleway/serverless/resources.py +2551 -0
- aioscaleway-0.1.0/src/aioscaleway/serverless/types.py +258 -0
- aioscaleway-0.1.0/src/aioscaleway/storage/__init__.py +38 -0
- aioscaleway-0.1.0/src/aioscaleway/storage/resources.py +933 -0
- aioscaleway-0.1.0/src/aioscaleway/storage/types.py +84 -0
- aioscaleway-0.1.0/src/aioscaleway/web_hosting/__init__.py +78 -0
- aioscaleway-0.1.0/src/aioscaleway/web_hosting/resources.py +1673 -0
- aioscaleway-0.1.0/src/aioscaleway/web_hosting/types.py +166 -0
- aioscaleway-0.1.0/tests/__init__.py +0 -0
- aioscaleway-0.1.0/tests/conftest.py +71 -0
- aioscaleway-0.1.0/tests/test_client.py +225 -0
- aioscaleway-0.1.0/tests/test_objects.py +244 -0
- aioscaleway-0.1.0/tests/test_operations.py +145 -0
- aioscaleway-0.1.0/uv.lock +1152 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
name: Pull request
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [development]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
UV_FROZEN: "1"
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
check:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
fail-fast: false
|
|
22
|
+
matrix:
|
|
23
|
+
python-version: ["3.12", "3.13", "3.14"]
|
|
24
|
+
env:
|
|
25
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
|
+
|
|
29
|
+
- name: Install uv
|
|
30
|
+
uses: astral-sh/setup-uv@v10.3.0
|
|
31
|
+
with:
|
|
32
|
+
version: "0.13.4"
|
|
33
|
+
enable-cache: true
|
|
34
|
+
|
|
35
|
+
- name: Install the project
|
|
36
|
+
run: uv sync
|
|
37
|
+
|
|
38
|
+
- name: Lint
|
|
39
|
+
run: |
|
|
40
|
+
uv run ruff check .
|
|
41
|
+
uv run ruff format --check .
|
|
42
|
+
|
|
43
|
+
- name: Check the generated code matches the specs
|
|
44
|
+
run: |
|
|
45
|
+
uv run python scripts/generate.py
|
|
46
|
+
git diff --exit-code -- src docs
|
|
47
|
+
|
|
48
|
+
- name: Type check
|
|
49
|
+
run: uv run mypy
|
|
50
|
+
|
|
51
|
+
- name: Test
|
|
52
|
+
run: uv run pytest -q
|
|
53
|
+
|
|
54
|
+
docs:
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@v7
|
|
58
|
+
|
|
59
|
+
- name: Install uv
|
|
60
|
+
uses: astral-sh/setup-uv@v10.3.0
|
|
61
|
+
with:
|
|
62
|
+
version: "0.13.4"
|
|
63
|
+
enable-cache: true
|
|
64
|
+
|
|
65
|
+
- name: Build the documentation site
|
|
66
|
+
run: |
|
|
67
|
+
uv sync --group docs
|
|
68
|
+
uv run zensical build --clean
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
env:
|
|
8
|
+
UV_FROZEN: "1"
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
release:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
# PyPI trusts this workflow over OIDC, so no token is stored; the pypi
|
|
15
|
+
# environment waits for a reviewer, since an upload cannot be taken back
|
|
16
|
+
environment:
|
|
17
|
+
name: pypi
|
|
18
|
+
url: https://pypi.org/project/aioscaleway/
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
id-token: write
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v7
|
|
26
|
+
|
|
27
|
+
- name: Install uv
|
|
28
|
+
uses: astral-sh/setup-uv@v10.3.0
|
|
29
|
+
with:
|
|
30
|
+
version: "0.13.4"
|
|
31
|
+
enable-cache: true
|
|
32
|
+
|
|
33
|
+
- name: Check the tag matches the declared version
|
|
34
|
+
run: test "v$(uv version --short)" = "$GITHUB_REF_NAME"
|
|
35
|
+
|
|
36
|
+
- name: Install the project
|
|
37
|
+
run: uv sync
|
|
38
|
+
|
|
39
|
+
- name: Lint
|
|
40
|
+
run: |
|
|
41
|
+
uv run ruff check .
|
|
42
|
+
uv run ruff format --check .
|
|
43
|
+
|
|
44
|
+
- name: Check the generated code matches the specs
|
|
45
|
+
run: |
|
|
46
|
+
uv run python scripts/generate.py
|
|
47
|
+
git diff --exit-code -- src docs
|
|
48
|
+
|
|
49
|
+
- name: Type check
|
|
50
|
+
run: uv run mypy
|
|
51
|
+
|
|
52
|
+
- name: Test
|
|
53
|
+
run: uv run pytest -q
|
|
54
|
+
|
|
55
|
+
- name: Build
|
|
56
|
+
run: uv build
|
|
57
|
+
|
|
58
|
+
- name: Publish to PyPI
|
|
59
|
+
run: uv publish --trusted-publishing always
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
# Tooling caches
|
|
13
|
+
.pytest_cache/
|
|
14
|
+
.ruff_cache/
|
|
15
|
+
.mypy_cache/
|
|
16
|
+
|
|
17
|
+
# Profiler output
|
|
18
|
+
gmon.out
|
|
19
|
+
|
|
20
|
+
# Documentation site build
|
|
21
|
+
site/
|
|
22
|
+
.cache/
|
|
23
|
+
.claude/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to this project, newest first.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2026-11-11
|
|
11
|
+
|
|
12
|
+
First version published on PyPI.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- `Scaleway`, the client, read from the `SCW_*` variables of the Scaleway CLI,
|
|
17
|
+
with `with_options()` to change defaults while sharing connections.
|
|
18
|
+
- Business areas shared with aioovh: `compute`, `storage`, `network`,
|
|
19
|
+
`kubernetes`, `serverless`, `databases`, `analytics`, `messaging`, `ai`,
|
|
20
|
+
`iot`, `email`, `domains`, `web_hosting`, `observability`, `iam`,
|
|
21
|
+
`account`, `billing` and `orders`, covering the 59 API versions published
|
|
22
|
+
on the Scaleway developers website.
|
|
23
|
+
- Collections iterated with `async for`, every page read, narrowed with
|
|
24
|
+
`filter()`, with `pages()` for the totals a page carries; references that act without loading and load when awaited;
|
|
25
|
+
loaded objects that are references too.
|
|
26
|
+
- One method per action, including one per value of the Instance server
|
|
27
|
+
actions (`reboot()`, `power_off()`...).
|
|
28
|
+
- Typed errors under `ScalewayAPIError`, retries with `stamina`, dates as
|
|
29
|
+
`whenever.Instant`, open enumerations, `Money.to_decimal()`.
|
|
30
|
+
- `scw.raw`, the underlying HTTP client, for anything else.
|
|
31
|
+
- Type information shipped with the package (`py.typed`).
|
|
32
|
+
|
|
33
|
+
[Unreleased]: https://gitlab.com/businessagile/libraries/aioscaleway/-/compare/v0.1.0...development
|
|
34
|
+
[0.1.0]: https://gitlab.com/businessagile/libraries/aioscaleway/-/tags/v0.1.0
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: If you use aioscaleway in your work, please cite it as below.
|
|
3
|
+
type: software
|
|
4
|
+
title: aioscaleway
|
|
5
|
+
abstract: Asynchronous, fully typed client for every Scaleway API, on httpx2 and pydantic.
|
|
6
|
+
authors:
|
|
7
|
+
- given-names: Alexandre
|
|
8
|
+
family-names: BERREBI
|
|
9
|
+
email: alexandre.berrebi@businessagile.eu
|
|
10
|
+
affiliation: Business Agile
|
|
11
|
+
website: https://businessagile.eu/en/about
|
|
12
|
+
version: 0.1.0
|
|
13
|
+
date-released: 2026-11-11
|
|
14
|
+
license: MIT
|
|
15
|
+
url: https://aioscaleway.businessagile.eu
|
|
16
|
+
repository-code: https://gitlab.com/businessagile/libraries/aioscaleway
|
|
17
|
+
keywords:
|
|
18
|
+
- scaleway
|
|
19
|
+
- asyncio
|
|
20
|
+
- httpx
|
|
21
|
+
- pydantic
|
|
22
|
+
- sdk
|
|
23
|
+
- api
|
|
24
|
+
- cloud
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Issues and pull requests
|
|
4
|
+
|
|
5
|
+
Report bugs, ask questions and propose changes on
|
|
6
|
+
[GitHub](https://github.com/BiBzz/aioscaleway): [issues](https://github.com/BiBzz/aioscaleway/issues) and pull requests against `development`
|
|
7
|
+
are welcome there, and your commits do not need to be signed.
|
|
8
|
+
|
|
9
|
+
The code is reviewed and merged on
|
|
10
|
+
[GitLab](https://gitlab.com/businessagile/libraries/aioscaleway), which mirrors
|
|
11
|
+
itself to GitHub. A pull request is picked up into a GitLab merge request that
|
|
12
|
+
links back to it, keeps you as the author of your commits, and runs the full
|
|
13
|
+
CI. Once merged, the mirror brings the commits to GitHub, which marks the pull
|
|
14
|
+
request as merged; if they had to be rebased, the pull request is closed with
|
|
15
|
+
a link to the commit. Do not expect the GitHub merge button to work: only the
|
|
16
|
+
mirror writes to `development`.
|
|
17
|
+
|
|
18
|
+
## Setting up
|
|
19
|
+
|
|
20
|
+
The project is managed with [uv](https://docs.astral.sh/uv/), 0.13 or later:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uv sync
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
It uses the interpreter in `.python-version`, the oldest version the library
|
|
27
|
+
supports.
|
|
28
|
+
|
|
29
|
+
## The checks
|
|
30
|
+
|
|
31
|
+
These are the gates CI runs on every merge request on GitLab, and GitHub
|
|
32
|
+
Actions on every pull request:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uv run ruff check .
|
|
36
|
+
uv run ruff format --check .
|
|
37
|
+
uv run python scripts/generate.py && git diff --exit-code -- src docs
|
|
38
|
+
uv run mypy
|
|
39
|
+
uv run pytest -q
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The tests run on Python 3.12, 3.13 and 3.14 in CI.
|
|
43
|
+
|
|
44
|
+
## Generated code
|
|
45
|
+
|
|
46
|
+
Everything under `src/aioscaleway/_operations/` and the area packages
|
|
47
|
+
(`src/aioscaleway/compute/`...) is generated, as are `docs/objects.md` and
|
|
48
|
+
`docs/coverage.md`; each generated file starts with a line saying so. Change
|
|
49
|
+
the generators (`scripts/operations.py`, `scripts/objects.py`), the naming
|
|
50
|
+
table (`mapping.yaml`) or the hand-written runtime (`src/aioscaleway/_*.py`),
|
|
51
|
+
never the output, then regenerate:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
uv run python scripts/generate.py
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The generator stops on a name clash and says which entry of `mapping.yaml` to
|
|
58
|
+
add. Read the diff of `docs/objects.md`: it is the public surface.
|
|
59
|
+
|
|
60
|
+
To pick up what Scaleway changed in its APIs:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
scripts/fetch_specs.sh
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
It downloads every OpenAPI file listed on the developers website and
|
|
67
|
+
regenerates. Commit the specs and the generated code together, in a merge
|
|
68
|
+
request of their own: its diff is the list of API changes.
|
|
69
|
+
|
|
70
|
+
## Commits
|
|
71
|
+
|
|
72
|
+
Work branches off `development`, the default branch, and lands through a
|
|
73
|
+
merge request. Everything in the repository is written in English, and commit
|
|
74
|
+
messages follow the Angular convention: `feat(client): ...`,
|
|
75
|
+
`fix(generator): ...`, `docs: ...`. Maintainers sign their commits and tags.
|
|
76
|
+
|
|
77
|
+
## The changelog
|
|
78
|
+
|
|
79
|
+
Anything a user of the library would notice goes under `## [Unreleased]` in
|
|
80
|
+
[CHANGELOG.md](CHANGELOG.md), in the merge request that changes the behaviour.
|
|
81
|
+
The format is [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
82
|
+
|
|
83
|
+
## Releasing
|
|
84
|
+
|
|
85
|
+
1. In a merge request, bump `version` in `pyproject.toml`, run `uv lock`, and
|
|
86
|
+
turn the `## [Unreleased]` section into the release:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
python3 scripts/roll_changelog.py 0.2.0
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
2. Once it is merged, from an up to date `development`:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
scripts/release.sh
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
It checks the tree matches `origin`, the commit is signed and the
|
|
99
|
+
changelog has the section, replays the checks, signs the `v0.2.0` tag with
|
|
100
|
+
the changelog entry as its message, and pushes it after asking.
|
|
101
|
+
|
|
102
|
+
3. The GitLab mirror carries the tag to GitHub, where the `Release` workflow
|
|
103
|
+
checks the tag matches the version, replays the checks, then waits for a
|
|
104
|
+
reviewer to approve the `pypi` environment. Approving it is the point of no
|
|
105
|
+
return: a version on PyPI can be yanked, but its files can never be uploaded
|
|
106
|
+
again. The workflow builds the wheel and the sdist and uploads them with
|
|
107
|
+
PyPI trusted publishing, so no token is stored anywhere.
|
|
108
|
+
|
|
109
|
+
### What PyPI trusts
|
|
110
|
+
|
|
111
|
+
The trusted publisher declared on PyPI for `aioscaleway` is the GitHub repository
|
|
112
|
+
`BiBzz/aioscaleway`, workflow `release.yml`, environment `pypi`. Renaming the
|
|
113
|
+
repository, the workflow or the environment breaks the upload until the
|
|
114
|
+
publisher is updated on PyPI. Tags matching `v*` are protected on GitLab, and
|
|
115
|
+
on GitHub only the mirror may create them.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Alexandre BERREBI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: aioscaleway
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Asynchronous, fully typed client for every Scaleway API, on httpx2 and pydantic
|
|
5
|
+
Project-URL: Homepage, https://aioscaleway.businessagile.eu
|
|
6
|
+
Project-URL: Documentation, https://aioscaleway.businessagile.eu
|
|
7
|
+
Project-URL: Repository, https://gitlab.com/businessagile/libraries/aioscaleway
|
|
8
|
+
Project-URL: Mirror, https://github.com/BiBzz/aioscaleway
|
|
9
|
+
Project-URL: Issues, https://github.com/BiBzz/aioscaleway/issues
|
|
10
|
+
Project-URL: Changelog, https://gitlab.com/businessagile/libraries/aioscaleway/-/blob/development/CHANGELOG.md
|
|
11
|
+
Author-email: Alexandre BERREBI <alexandre.berrebi@businessagile.eu>
|
|
12
|
+
Maintainer-email: Business Agile <contact@businessagile.eu>
|
|
13
|
+
License-Expression: MIT
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Keywords: api,asyncio,cloud,httpx,pydantic,scaleway,sdk
|
|
16
|
+
Classifier: Development Status :: 4 - Beta
|
|
17
|
+
Classifier: Framework :: AsyncIO
|
|
18
|
+
Classifier: Framework :: Pydantic :: 2
|
|
19
|
+
Classifier: Intended Audience :: Developers
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
26
|
+
Classifier: Topic :: System :: Systems Administration
|
|
27
|
+
Classifier: Typing :: Typed
|
|
28
|
+
Requires-Python: >=3.12
|
|
29
|
+
Requires-Dist: httpx2>=2.16.0
|
|
30
|
+
Requires-Dist: pydantic-settings>=2.16.0
|
|
31
|
+
Requires-Dist: pydantic>=2.14.1
|
|
32
|
+
Requires-Dist: stamina>=26.1.0
|
|
33
|
+
Requires-Dist: whenever>=0.11.0
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# aioscaleway
|
|
37
|
+
|
|
38
|
+
Asynchronous, fully typed Python client for every
|
|
39
|
+
[Scaleway API](https://www.scaleway.com/en/developers/api/), built on
|
|
40
|
+
[httpx2](https://pypi.org/project/httpx2/), [pydantic](https://docs.pydantic.dev/)
|
|
41
|
+
and [whenever](https://whenever.readthedocs.io/).
|
|
42
|
+
|
|
43
|
+
**Documentation**: https://aioscaleway.businessagile.eu
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from aioscaleway import Scaleway
|
|
47
|
+
|
|
48
|
+
async with Scaleway() as scw: # SCW_* from the environment
|
|
49
|
+
server = await scw.compute.servers(server_id) # load
|
|
50
|
+
print(server.name, server.state)
|
|
51
|
+
await server.reboot()
|
|
52
|
+
|
|
53
|
+
async for server in scw.compute.servers.filter(name="web"):
|
|
54
|
+
await server.power_off()
|
|
55
|
+
|
|
56
|
+
async for line in scw.billing.consumptions.filter(billing_period="2026-10"):
|
|
57
|
+
print(line.sku, line.value.to_decimal() if line.value else 0)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Why it exists
|
|
61
|
+
|
|
62
|
+
The official SDK, `scaleway` and `scaleway-async`, sends its requests through
|
|
63
|
+
`requests`: the `async def` methods of `scaleway-async` block the event loop
|
|
64
|
+
while they wait. It also mirrors the API's own layout, one class per product
|
|
65
|
+
and version (`InstanceV1API`, `BillingV2Beta1API`) with flat methods.
|
|
66
|
+
|
|
67
|
+
`aioscaleway` is asynchronous down to the socket and organised around what you
|
|
68
|
+
manipulate rather than where Scaleway files it:
|
|
69
|
+
|
|
70
|
+
- **business areas** shared with its sibling [aioovh](https://pypi.org/project/aioovh/):
|
|
71
|
+
`compute`, `storage`, `network`, `kubernetes`, `databases`, `billing`...;
|
|
72
|
+
- **collections** you iterate with `async for`, narrowed with `filter()`, every
|
|
73
|
+
page read for you;
|
|
74
|
+
- **references** (`scw.compute.servers(server_id)`) that act without a
|
|
75
|
+
request to read them first, and that `await` loads;
|
|
76
|
+
- **objects** that are references too, with typed fields;
|
|
77
|
+
- **one method per action**: `server.reboot()`, `server.power_off()`,
|
|
78
|
+
`server.attach_volume(volume_id=volume)`;
|
|
79
|
+
- **no API version in any name**: the library picks the latest stable version
|
|
80
|
+
of each API, else the latest preview, and says so in the docstring.
|
|
81
|
+
|
|
82
|
+
Everything is generated from the OpenAPI files Scaleway publishes, committed in
|
|
83
|
+
[`specs/`](specs/): 59 API versions and about 1,500 operations. Every
|
|
84
|
+
operation is reachable, either through the objects or through `scw.raw`, and
|
|
85
|
+
[`docs/coverage.md`](docs/coverage.md) says where.
|
|
86
|
+
|
|
87
|
+
## Installation
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
uv add aioscaleway
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Python 3.12 or later.
|
|
94
|
+
|
|
95
|
+
## Usage
|
|
96
|
+
|
|
97
|
+
### Client
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
scw = Scaleway(
|
|
101
|
+
secret_key="...",
|
|
102
|
+
default_region="fr-par",
|
|
103
|
+
default_zone="fr-par-1",
|
|
104
|
+
default_project_id="...",
|
|
105
|
+
)
|
|
106
|
+
nl = scw.with_options(default_zone="nl-ams-1") # same connections, other defaults
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Every value left out is read from the variables of the Scaleway CLI
|
|
110
|
+
(`SCW_SECRET_KEY`, `SCW_DEFAULT_REGION`, `SCW_DEFAULT_ZONE`,
|
|
111
|
+
`SCW_DEFAULT_PROJECT_ID`, `SCW_DEFAULT_ORGANIZATION_ID`, `SCW_API_URL`).
|
|
112
|
+
Use it as an async context manager, or call `await scw.aclose()`.
|
|
113
|
+
|
|
114
|
+
### Collections, references, objects
|
|
115
|
+
|
|
116
|
+
| You write | You get | Requests |
|
|
117
|
+
| --- | --- | --- |
|
|
118
|
+
| `scw.compute.servers` | a collection | none |
|
|
119
|
+
| `scw.compute.servers.filter(name="web")` | the same collection, narrowed | none |
|
|
120
|
+
| `async for s in scw.compute.servers` | loaded objects | one per page |
|
|
121
|
+
| `scw.compute.servers(server_id)` | a reference | none |
|
|
122
|
+
| `await scw.compute.servers(server_id)` | a loaded object | one |
|
|
123
|
+
| `await scw.compute.servers(server_id).reboot()` | the action's result | one |
|
|
124
|
+
| `await scw.compute.servers.create(name=..., commercial_type=...)` | the created object | one |
|
|
125
|
+
|
|
126
|
+
`pages()` yields each page response instead, for the totals and sums an item
|
|
127
|
+
does not carry (`page.total_discount_untaxed_value` of the billing
|
|
128
|
+
consumptions).
|
|
129
|
+
|
|
130
|
+
A loaded object is also a reference: anything that takes a reference takes an
|
|
131
|
+
object. It cannot load itself when printed or read, because those are
|
|
132
|
+
synchronous; mypy flags a field read on a bare reference. `repr()` tells which
|
|
133
|
+
one you hold.
|
|
134
|
+
|
|
135
|
+
Sub-resources hang off their parent:
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
async for pool in scw.kubernetes.clusters(cluster_id).pools:
|
|
139
|
+
print(pool.name, pool.size)
|
|
140
|
+
async for nic in scw.compute.servers(server_id).nics:
|
|
141
|
+
...
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
A resource with a zone or a region takes it as a keyword
|
|
145
|
+
(`scw.compute.servers(server_id, zone="nl-ams-1")`,
|
|
146
|
+
`servers.filter(zone="nl-ams-1")`), defaulting to the client's.
|
|
147
|
+
|
|
148
|
+
### Types
|
|
149
|
+
|
|
150
|
+
Arguments and fields are typed. Enumerations and nested models of an area live
|
|
151
|
+
in its `types` module:
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
from aioscaleway.compute.types import ServerState, BootType
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Dates are `whenever.Instant`, amounts `Money` (`.to_decimal()`).
|
|
158
|
+
Enumerations are open: a value Scaleway adds later is accepted instead of
|
|
159
|
+
failing the response.
|
|
160
|
+
|
|
161
|
+
### Errors
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from aioscaleway import ResourceNotFoundError, ScalewayAPIError
|
|
165
|
+
|
|
166
|
+
try:
|
|
167
|
+
await scw.compute.servers(server_id)
|
|
168
|
+
except ResourceNotFoundError:
|
|
169
|
+
...
|
|
170
|
+
except ScalewayAPIError as error:
|
|
171
|
+
print(error.status_code, error.type, error.message)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`ScalewayTransportError` reports a request that got no answer. Throttling and
|
|
175
|
+
transient failures are retried with [stamina](https://stamina.hynek.me/),
|
|
176
|
+
honouring `Retry-After`; a `POST` is only retried when Scaleway cannot have
|
|
177
|
+
processed it.
|
|
178
|
+
|
|
179
|
+
### The raw layer
|
|
180
|
+
|
|
181
|
+
`scw.raw` is the underlying client, for a call the objects do not cover:
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
await scw.raw.request_json("GET", "/instance/v1/zones/fr-par-1/dashboard")
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Development
|
|
188
|
+
|
|
189
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
190
|
+
[docs/architecture.md](docs/architecture.md). The full object tree is in
|
|
191
|
+
[docs/objects.md](docs/objects.md).
|
|
192
|
+
|
|
193
|
+
The source lives on
|
|
194
|
+
[GitLab](https://gitlab.com/businessagile/libraries/aioscaleway), mirrored to
|
|
195
|
+
[GitHub](https://github.com/BiBzz/aioscaleway), where
|
|
196
|
+
[issues](https://github.com/BiBzz/aioscaleway/issues) and pull requests are welcome.
|
|
197
|
+
|
|
198
|
+
## Author
|
|
199
|
+
|
|
200
|
+
Created by [Alexandre BERREBI](https://businessagile.eu/en/about), maintained by
|
|
201
|
+
[Business Agile](https://businessagile.eu).
|
|
202
|
+
|
|
203
|
+
## License
|
|
204
|
+
|
|
205
|
+
MIT, see [LICENSE](LICENSE).
|