diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f9d82f..d0c0eea3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - **Feature:** Delete Project labels using the new method `DeleteProjectLabels` - **Feature:** List folders using the new method `ListFolders` - **Feature:** Partial Update Organization using the new method `PartialUpdateOrganization` +- `stackitmarketplace`: [v1.2.0](services/stackitmarketplace/CHANGELOG.md#v120-2025-06-06) + - **Fix:** Fixed types for `VendorId`, `ProjectId`, `OrganizationId` and `SubscriptionId` + ## Release (2025-06-03) diff --git a/services/stackitmarketplace/CHANGELOG.md b/services/stackitmarketplace/CHANGELOG.md index 10cbbca6..7f86bdda 100644 --- a/services/stackitmarketplace/CHANGELOG.md +++ b/services/stackitmarketplace/CHANGELOG.md @@ -1,3 +1,6 @@ +# v1.2.0 (2025-06-06) +- **Fix:** Fixed types for `VendorId`, `ProjectId`, `OrganizationId` and `SubscriptionId` + ## v1.1.3 (2025-06-02) - **Feature:** Added `industries` to `CatalogProductDetail` diff --git a/services/stackitmarketplace/pyproject.toml b/services/stackitmarketplace/pyproject.toml index 67b33f66..92e1d1b2 100644 --- a/services/stackitmarketplace/pyproject.toml +++ b/services/stackitmarketplace/pyproject.toml @@ -3,7 +3,7 @@ name = "stackit-stackitmarketplace" [tool.poetry] name = "stackit-stackitmarketplace" -version = "v1.1.3" +version = "v1.2.0" authors = [ "STACKIT Developer Tools ", ] diff --git a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_details_vendor.py b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_details_vendor.py index e39ac175..f110cbf7 100644 --- a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_details_vendor.py +++ b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_details_vendor.py @@ -38,7 +38,9 @@ class CatalogProductDetailsVendor(BaseModel): description: StrictStr = Field(description="The vendor description.") logo: Union[StrictBytes, StrictStr] = Field(description="The logo base64 encoded.") name: Annotated[str, Field(strict=True, max_length=512)] = Field(description="The product's vendor name.") - vendor_id: object = Field(alias="vendorId") + vendor_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( + description="Universally Unique Identifier (UUID).", alias="vendorId" + ) video_url: Annotated[str, Field(strict=True, max_length=512)] = Field( description="The vendor video URL.", alias="videoUrl" ) @@ -54,6 +56,15 @@ def name_validate_regular_expression(cls, value): raise ValueError(r"must validate the regular expression /^[a-zA-ZäüöÄÜÖ0-9,.!?()@\/:=\n\t -]+$/") return value + @field_validator("vendor_id") + def vendor_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + @field_validator("video_url") def video_url_validate_regular_expression(cls, value): """Validates the regular expression""" diff --git a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_overview_vendor.py b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_overview_vendor.py index 0d5d2f10..e6a26e6c 100644 --- a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_overview_vendor.py +++ b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/catalog_product_overview_vendor.py @@ -29,7 +29,9 @@ class CatalogProductOverviewVendor(BaseModel): """ name: Annotated[str, Field(strict=True, max_length=512)] = Field(description="The product's vendor name.") - vendor_id: object = Field(alias="vendorId") + vendor_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( + description="Universally Unique Identifier (UUID).", alias="vendorId" + ) website_url: Annotated[str, Field(strict=True, max_length=512)] = Field( description="Uniform Resource Locator.", alias="websiteUrl" ) @@ -42,6 +44,15 @@ def name_validate_regular_expression(cls, value): raise ValueError(r"must validate the regular expression /^[a-zA-ZäüöÄÜÖ0-9,.!?()@\/:=\n\t -]+$/") return value + @field_validator("vendor_id") + def vendor_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + @field_validator("website_url") def website_url_validate_regular_expression(cls, value): """Validates the regular expression""" diff --git a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/vendor_subscription.py b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/vendor_subscription.py index e0194804..1bbfef6e 100644 --- a/services/stackitmarketplace/src/stackit/stackitmarketplace/models/vendor_subscription.py +++ b/services/stackitmarketplace/src/stackit/stackitmarketplace/models/vendor_subscription.py @@ -16,10 +16,11 @@ import json import pprint +import re from typing import Any, ClassVar, Dict, List, Optional, Set -from pydantic import BaseModel, ConfigDict, Field -from typing_extensions import Self +from pydantic import BaseModel, ConfigDict, Field, field_validator +from typing_extensions import Annotated, Self from stackit.stackitmarketplace.models.subscription_lifecycle_state import ( SubscriptionLifecycleState, @@ -33,12 +34,45 @@ class VendorSubscription(BaseModel): """ lifecycle_state: SubscriptionLifecycleState = Field(alias="lifecycleState") - organization_id: object = Field(alias="organizationId") + organization_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( + description="Universally Unique Identifier (UUID).", alias="organizationId" + ) product: SubscriptionProduct - project_id: object = Field(alias="projectId") - subscription_id: object = Field(alias="subscriptionId") + project_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( + description="Universally Unique Identifier (UUID).", alias="projectId" + ) + subscription_id: Annotated[str, Field(min_length=36, strict=True, max_length=36)] = Field( + description="Universally Unique Identifier (UUID).", alias="subscriptionId" + ) __properties: ClassVar[List[str]] = ["lifecycleState", "organizationId", "product", "projectId", "subscriptionId"] + @field_validator("organization_id") + def organization_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + + @field_validator("project_id") + def project_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + + @field_validator("subscription_id") + def subscription_id_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", value): + raise ValueError( + r"must validate the regular expression /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/" + ) + return value + model_config = ConfigDict( populate_by_name=True, validate_assignment=True,