From 4a61d84380831c3e1c3ba5927fb1681c7894e273 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Thu, 3 Apr 2025 00:27:33 +0000 Subject: [PATCH] ci: regenerated with OpenAPI Doc , Speakeasy CLI 1.525.2 --- .speakeasy/workflow.lock | 24 +++---- RELEASES.md | 12 +++- gusto_app_int/.speakeasy/gen.lock | 6 +- gusto_app_int/.speakeasy/gen.yaml | 2 +- .../models/metadatawithmultipleentities.md | 2 +- .../docs/models/metadatawithoneentity.md | 8 +-- gusto_app_int/docs/models/primarysignatory.md | 2 +- gusto_app_int/pyproject.toml | 2 +- .../src/gusto_app_integration/_version.py | 4 +- .../gusto_app_integration/models/company.py | 42 +++++++++++- .../models/metadata_with_multiple_entities.py | 8 +-- .../models/metadata_with_one_entity.py | 66 ++++++++++++++++--- gusto_embedded/.speakeasy/gen.lock | 6 +- gusto_embedded/.speakeasy/gen.yaml | 2 +- .../models/metadatawithmultipleentities.md | 2 +- .../docs/models/metadatawithoneentity.md | 8 +-- .../docs/models/primarysignatory.md | 2 +- gusto_embedded/docs/sdks/reports/README.md | 2 +- gusto_embedded/pyproject.toml | 2 +- gusto_embedded/src/gusto_embedded/_version.py | 4 +- .../src/gusto_embedded/models/company.py | 42 +++++++++++- .../models/metadata_with_multiple_entities.py | 8 +-- .../models/metadata_with_one_entity.py | 66 ++++++++++++++++--- gusto_embedded/src/gusto_embedded/reports.py | 4 +- 24 files changed, 252 insertions(+), 74 deletions(-) diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 79316e6b..2f3cf847 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,35 +2,35 @@ speakeasyVersion: 1.525.2 sources: Gusto-App-Int-OAS: sourceNamespace: gusto-app-int-oas - sourceRevisionDigest: sha256:146394ace1f2364d29972b713f4c983469873146b72b8e440e4c85a116118413 - sourceBlobDigest: sha256:928c472ebcc8603189dec96605686c09586dbc5e8f76169a7ca59a1c3cf777d5 + sourceRevisionDigest: sha256:689628279a41eeb057e1c7afdca8152784bd5f9c2b58efa4bc1665fc4a209577 + sourceBlobDigest: sha256:81ba6d3af1a240459cf53438bb3b5b518d869062b7dd32abfa212c70952b5886 tags: - latest - - speakeasy-sdk-regen-1742257375 + - speakeasy-sdk-regen-1743553451 - "2024-04-01" Gusto-OAS: sourceNamespace: gusto-oas - sourceRevisionDigest: sha256:058c4e660dd4b27a1cd8a068429a5239a71a1b5b365fde8544362ffcf28c2939 - sourceBlobDigest: sha256:4c5a52b64a2132d394b1fae941027466dcf804b8de2d8e7995eeb16a6f9a2392 + sourceRevisionDigest: sha256:20cf22a6e926e505aa744b6c012c764f2add3299c5a5fd4f623162b518b3c9b6 + sourceBlobDigest: sha256:a5d5ddef31610735f102cde75d6c827223f5382ebbd680161128fd7e2b242c36 tags: - latest - - speakeasy-sdk-regen-1742257375 + - speakeasy-sdk-regen-1743553451 - "2024-04-01" targets: gusto: source: Gusto-OAS sourceNamespace: gusto-oas - sourceRevisionDigest: sha256:058c4e660dd4b27a1cd8a068429a5239a71a1b5b365fde8544362ffcf28c2939 - sourceBlobDigest: sha256:4c5a52b64a2132d394b1fae941027466dcf804b8de2d8e7995eeb16a6f9a2392 + sourceRevisionDigest: sha256:20cf22a6e926e505aa744b6c012c764f2add3299c5a5fd4f623162b518b3c9b6 + sourceBlobDigest: sha256:a5d5ddef31610735f102cde75d6c827223f5382ebbd680161128fd7e2b242c36 codeSamplesNamespace: gusto-oas-python-code-samples - codeSamplesRevisionDigest: sha256:a02d9747808931b1ac9832630609b77df58001e95aae6f66f0d0b535b2e5a243 + codeSamplesRevisionDigest: sha256:0a063a27ea60e9873d6294ed5ec3c241d735406c892fbe9df2a4a8b0dc93fc49 gusto-app-int: source: Gusto-App-Int-OAS sourceNamespace: gusto-app-int-oas - sourceRevisionDigest: sha256:146394ace1f2364d29972b713f4c983469873146b72b8e440e4c85a116118413 - sourceBlobDigest: sha256:928c472ebcc8603189dec96605686c09586dbc5e8f76169a7ca59a1c3cf777d5 + sourceRevisionDigest: sha256:689628279a41eeb057e1c7afdca8152784bd5f9c2b58efa4bc1665fc4a209577 + sourceBlobDigest: sha256:81ba6d3af1a240459cf53438bb3b5b518d869062b7dd32abfa212c70952b5886 codeSamplesNamespace: gusto-app-int-oas-python-code-samples - codeSamplesRevisionDigest: sha256:f13e0c32f6a3382d3dd1046c8ba164778440942d263cb02d201f05578c89462c + codeSamplesRevisionDigest: sha256:1f6740fe62454346fb6432f61c3eb830a5a5f7a02686cd212b41b925be25c440 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index be6471b1..5a7c2ef4 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -58,4 +58,14 @@ Based on: ### Generated - [python v0.2.2] gusto_app_int ### Releases -- [PyPI v0.2.2] https://pypi.org/project/gusto_app_integration/0.2.2 - gusto_app_int \ No newline at end of file +- [PyPI v0.2.2] https://pypi.org/project/gusto_app_integration/0.2.2 - gusto_app_int + +## 2025-04-03 00:23:18 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.525.2 (2.562.3) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.2.3] gusto_app_int +### Releases +- [PyPI v0.2.3] https://pypi.org/project/gusto_app_integration/0.2.3 - gusto_app_int \ No newline at end of file diff --git a/gusto_app_int/.speakeasy/gen.lock b/gusto_app_int/.speakeasy/gen.lock index b5ebc4fe..1f293f97 100644 --- a/gusto_app_int/.speakeasy/gen.lock +++ b/gusto_app_int/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 307f4640-0d05-4c9e-b275-cb7fc716aa23 management: - docChecksum: 78dbfa21931768c6fe27a77e45ba47a1 + docChecksum: 4c5d2f1216a28f6762e454df8bdcc054 docVersion: "2024-04-01" speakeasyVersion: 1.525.2 generationVersion: 2.562.3 - releaseVersion: 0.2.2 - configChecksum: c99a9a504eb21dcd8712f151b9512847 + releaseVersion: 0.2.3 + configChecksum: 1526a81640ebb32b6b92729d14d28fc0 repoURL: https://github.com/Gusto/gusto-python-client.git repoSubDirectory: gusto_app_int installationURL: https://github.com/Gusto/gusto-python-client.git#subdirectory=gusto_app_int diff --git a/gusto_app_int/.speakeasy/gen.yaml b/gusto_app_int/.speakeasy/gen.yaml index ab321c60..cace5ab4 100644 --- a/gusto_app_int/.speakeasy/gen.yaml +++ b/gusto_app_int/.speakeasy/gen.yaml @@ -15,7 +15,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true python: - version: 0.2.2 + version: 0.2.3 additionalDependencies: dev: {} main: {} diff --git a/gusto_app_int/docs/models/metadatawithmultipleentities.md b/gusto_app_int/docs/models/metadatawithmultipleentities.md index 251896da..b5ba5d20 100644 --- a/gusto_app_int/docs/models/metadatawithmultipleentities.md +++ b/gusto_app_int/docs/models/metadatawithmultipleentities.md @@ -7,4 +7,4 @@ multiple entities | Field | Type | Required | Description | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `entities` | List[[models.MetadataWithOneEntity](../models/metadatawithoneentity.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file +| `entities` | List[[models.MetadataWithOneEntity](../models/metadatawithoneentity.md)] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/gusto_app_int/docs/models/metadatawithoneentity.md b/gusto_app_int/docs/models/metadatawithoneentity.md index c2b38208..159be174 100644 --- a/gusto_app_int/docs/models/metadatawithoneentity.md +++ b/gusto_app_int/docs/models/metadatawithoneentity.md @@ -9,8 +9,8 @@ single entity | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | | `entity_type` | *Optional[str]* | :heavy_minus_sign: | Name of the entity that the error corresponds to. | | `entity_uuid` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the entity. | -| `valid_from` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `valid_up_to` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `state` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `valid_from` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `valid_up_to` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `state` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `__pydantic_extra__` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/gusto_app_int/docs/models/primarysignatory.md b/gusto_app_int/docs/models/primarysignatory.md index 994e9faf..f457bac4 100644 --- a/gusto_app_int/docs/models/primarysignatory.md +++ b/gusto_app_int/docs/models/primarysignatory.md @@ -9,7 +9,7 @@ The primary signatory of the company. | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | | `uuid` | *Optional[str]* | :heavy_minus_sign: | The UUID of the company's primary signatory. | | `first_name` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's first name. | -| `middle_initial` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's middle initial. | +| `middle_initial` | *OptionalNullable[str]* | :heavy_minus_sign: | The company's primary signatory's middle initial. | | `last_name` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's last name. | | `phone` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's phone number. | | `email` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's email address. | diff --git a/gusto_app_int/pyproject.toml b/gusto_app_int/pyproject.toml index 7c35c5bb..303ecb5c 100644 --- a/gusto_app_int/pyproject.toml +++ b/gusto_app_int/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gusto_app_integration" -version = "0.2.2" +version = "0.2.3" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/gusto_app_int/src/gusto_app_integration/_version.py b/gusto_app_int/src/gusto_app_integration/_version.py index 7b1d3aaf..6f60b9c3 100644 --- a/gusto_app_int/src/gusto_app_integration/_version.py +++ b/gusto_app_int/src/gusto_app_integration/_version.py @@ -3,11 +3,11 @@ import importlib.metadata __title__: str = "gusto_app_integration" -__version__: str = "0.2.2" +__version__: str = "0.2.3" __openapi_doc_version__: str = "2024-04-01" __gen_version__: str = "2.562.3" __user_agent__: str = ( - "speakeasy-sdk/python 0.2.2 2.562.3 2024-04-01 gusto_app_integration" + "speakeasy-sdk/python 0.2.3 2.562.3 2024-04-01 gusto_app_integration" ) try: diff --git a/gusto_app_int/src/gusto_app_integration/models/company.py b/gusto_app_int/src/gusto_app_integration/models/company.py index 1f79a8ca..1dc55c2d 100644 --- a/gusto_app_int/src/gusto_app_integration/models/company.py +++ b/gusto_app_int/src/gusto_app_integration/models/company.py @@ -194,7 +194,7 @@ class PrimarySignatoryTypedDict(TypedDict): r"""The UUID of the company's primary signatory.""" first_name: NotRequired[str] r"""The company's primary signatory's first name.""" - middle_initial: NotRequired[str] + middle_initial: NotRequired[Nullable[str]] r"""The company's primary signatory's middle initial.""" last_name: NotRequired[str] r"""The company's primary signatory's last name.""" @@ -215,7 +215,7 @@ class PrimarySignatory(BaseModel): first_name: Optional[str] = None r"""The company's primary signatory's first name.""" - middle_initial: Optional[str] = None + middle_initial: OptionalNullable[str] = UNSET r"""The company's primary signatory's middle initial.""" last_name: Optional[str] = None @@ -230,6 +230,44 @@ class PrimarySignatory(BaseModel): home_address: Optional[HomeAddress] = None r"""The company's primary signatory's home address.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "uuid", + "first_name", + "middle_initial", + "last_name", + "phone", + "email", + "home_address", + ] + nullable_fields = ["middle_initial"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in self.model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m + class PrimaryPayrollAdminTypedDict(TypedDict): r"""The primary payroll admin of the company.""" diff --git a/gusto_app_int/src/gusto_app_integration/models/metadata_with_multiple_entities.py b/gusto_app_int/src/gusto_app_integration/models/metadata_with_multiple_entities.py index d7f77b12..622defe0 100644 --- a/gusto_app_int/src/gusto_app_integration/models/metadata_with_multiple_entities.py +++ b/gusto_app_int/src/gusto_app_integration/models/metadata_with_multiple_entities.py @@ -6,17 +6,17 @@ MetadataWithOneEntityTypedDict, ) from gusto_app_integration.types import BaseModel -from typing import List, Optional -from typing_extensions import NotRequired, TypedDict +from typing import List +from typing_extensions import TypedDict class MetadataWithMultipleEntitiesTypedDict(TypedDict): r"""multiple entities""" - entities: NotRequired[List[MetadataWithOneEntityTypedDict]] + entities: List[MetadataWithOneEntityTypedDict] class MetadataWithMultipleEntities(BaseModel): r"""multiple entities""" - entities: Optional[List[MetadataWithOneEntity]] = None + entities: List[MetadataWithOneEntity] diff --git a/gusto_app_int/src/gusto_app_integration/models/metadata_with_one_entity.py b/gusto_app_int/src/gusto_app_integration/models/metadata_with_one_entity.py index 5c09cc79..095b51d7 100644 --- a/gusto_app_int/src/gusto_app_integration/models/metadata_with_one_entity.py +++ b/gusto_app_int/src/gusto_app_integration/models/metadata_with_one_entity.py @@ -1,9 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from gusto_app_integration.types import BaseModel +from gusto_app_integration.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) import pydantic -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -15,10 +21,10 @@ class MetadataWithOneEntityTypedDict(TypedDict): r"""Name of the entity that the error corresponds to.""" entity_uuid: NotRequired[str] r"""Unique identifier for the entity.""" - valid_from: NotRequired[str] - valid_up_to: NotRequired[str] - key: NotRequired[str] - state: NotRequired[str] + valid_from: NotRequired[Nullable[str]] + valid_up_to: NotRequired[Nullable[str]] + key: NotRequired[Nullable[str]] + state: NotRequired[Nullable[str]] class MetadataWithOneEntity(BaseModel): @@ -35,13 +41,13 @@ class MetadataWithOneEntity(BaseModel): entity_uuid: Optional[str] = None r"""Unique identifier for the entity.""" - valid_from: Optional[str] = None + valid_from: OptionalNullable[str] = UNSET - valid_up_to: Optional[str] = None + valid_up_to: OptionalNullable[str] = UNSET - key: Optional[str] = None + key: OptionalNullable[str] = UNSET - state: Optional[str] = None + state: OptionalNullable[str] = UNSET @property def additional_properties(self): @@ -50,3 +56,43 @@ def additional_properties(self): @additional_properties.setter def additional_properties(self, value): self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride] + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "entity_type", + "entity_uuid", + "valid_from", + "valid_up_to", + "key", + "state", + ] + nullable_fields = ["valid_from", "valid_up_to", "key", "state"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in self.model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + for k, v in serialized.items(): + m[k] = v + + return m diff --git a/gusto_embedded/.speakeasy/gen.lock b/gusto_embedded/.speakeasy/gen.lock index 39efbb71..ca2a9873 100644 --- a/gusto_embedded/.speakeasy/gen.lock +++ b/gusto_embedded/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: f70034eb-4870-4b8d-aeb4-4c71b6c1ec45 management: - docChecksum: 29004e8f8da002dc3badd2a54c0d18f3 + docChecksum: 9b5f6791f932c112cce1dbd387fca945 docVersion: "2024-04-01" speakeasyVersion: 1.525.2 generationVersion: 2.562.3 - releaseVersion: 0.2.2 - configChecksum: 09952e3da8ac446bf4af2a35bc91a639 + releaseVersion: 0.2.3 + configChecksum: cc6c24b6f3b84eaa0f761e5fb4c1e429 repoURL: https://github.com/Gusto/gusto-python-client.git repoSubDirectory: gusto_embedded installationURL: https://github.com/Gusto/gusto-python-client.git#subdirectory=gusto_embedded diff --git a/gusto_embedded/.speakeasy/gen.yaml b/gusto_embedded/.speakeasy/gen.yaml index f5e078fd..9ad0f7d1 100644 --- a/gusto_embedded/.speakeasy/gen.yaml +++ b/gusto_embedded/.speakeasy/gen.yaml @@ -18,7 +18,7 @@ generation: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true python: - version: 0.2.2 + version: 0.2.3 additionalDependencies: dev: {} main: {} diff --git a/gusto_embedded/docs/models/metadatawithmultipleentities.md b/gusto_embedded/docs/models/metadatawithmultipleentities.md index 251896da..b5ba5d20 100644 --- a/gusto_embedded/docs/models/metadatawithmultipleentities.md +++ b/gusto_embedded/docs/models/metadatawithmultipleentities.md @@ -7,4 +7,4 @@ multiple entities | Field | Type | Required | Description | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `entities` | List[[models.MetadataWithOneEntity](../models/metadatawithoneentity.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file +| `entities` | List[[models.MetadataWithOneEntity](../models/metadatawithoneentity.md)] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/gusto_embedded/docs/models/metadatawithoneentity.md b/gusto_embedded/docs/models/metadatawithoneentity.md index c2b38208..159be174 100644 --- a/gusto_embedded/docs/models/metadatawithoneentity.md +++ b/gusto_embedded/docs/models/metadatawithoneentity.md @@ -9,8 +9,8 @@ single entity | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | | `entity_type` | *Optional[str]* | :heavy_minus_sign: | Name of the entity that the error corresponds to. | | `entity_uuid` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the entity. | -| `valid_from` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `valid_up_to` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `state` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `valid_from` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `valid_up_to` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `state` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `__pydantic_extra__` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/gusto_embedded/docs/models/primarysignatory.md b/gusto_embedded/docs/models/primarysignatory.md index 7933bee7..5e90e345 100644 --- a/gusto_embedded/docs/models/primarysignatory.md +++ b/gusto_embedded/docs/models/primarysignatory.md @@ -9,7 +9,7 @@ The primary signatory of the company. | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | `uuid` | *Optional[str]* | :heavy_minus_sign: | The UUID of the company's primary signatory. | | `first_name` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's first name. | -| `middle_initial` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's middle initial. | +| `middle_initial` | *OptionalNullable[str]* | :heavy_minus_sign: | The company's primary signatory's middle initial. | | `last_name` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's last name. | | `phone` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's phone number. | | `email` | *Optional[str]* | :heavy_minus_sign: | The company's primary signatory's email address. | diff --git a/gusto_embedded/docs/sdks/reports/README.md b/gusto_embedded/docs/sdks/reports/README.md index c835d6d7..70315157 100644 --- a/gusto_embedded/docs/sdks/reports/README.md +++ b/gusto_embedded/docs/sdks/reports/README.md @@ -11,7 +11,7 @@ ## create_custom -Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. +Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. This URL is valid for 10 minutes. scope: `company_reports:write` diff --git a/gusto_embedded/pyproject.toml b/gusto_embedded/pyproject.toml index f2bcf715..11c5bc59 100644 --- a/gusto_embedded/pyproject.toml +++ b/gusto_embedded/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gusto_embedded" -version = "0.2.2" +version = "0.2.3" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/gusto_embedded/src/gusto_embedded/_version.py b/gusto_embedded/src/gusto_embedded/_version.py index 94813ad7..785bbe27 100644 --- a/gusto_embedded/src/gusto_embedded/_version.py +++ b/gusto_embedded/src/gusto_embedded/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "gusto_embedded" -__version__: str = "0.2.2" +__version__: str = "0.2.3" __openapi_doc_version__: str = "2024-04-01" __gen_version__: str = "2.562.3" -__user_agent__: str = "speakeasy-sdk/python 0.2.2 2.562.3 2024-04-01 gusto_embedded" +__user_agent__: str = "speakeasy-sdk/python 0.2.3 2.562.3 2024-04-01 gusto_embedded" try: if __package__ is not None: diff --git a/gusto_embedded/src/gusto_embedded/models/company.py b/gusto_embedded/src/gusto_embedded/models/company.py index ae630bf9..b2a33757 100644 --- a/gusto_embedded/src/gusto_embedded/models/company.py +++ b/gusto_embedded/src/gusto_embedded/models/company.py @@ -194,7 +194,7 @@ class PrimarySignatoryTypedDict(TypedDict): r"""The UUID of the company's primary signatory.""" first_name: NotRequired[str] r"""The company's primary signatory's first name.""" - middle_initial: NotRequired[str] + middle_initial: NotRequired[Nullable[str]] r"""The company's primary signatory's middle initial.""" last_name: NotRequired[str] r"""The company's primary signatory's last name.""" @@ -215,7 +215,7 @@ class PrimarySignatory(BaseModel): first_name: Optional[str] = None r"""The company's primary signatory's first name.""" - middle_initial: Optional[str] = None + middle_initial: OptionalNullable[str] = UNSET r"""The company's primary signatory's middle initial.""" last_name: Optional[str] = None @@ -230,6 +230,44 @@ class PrimarySignatory(BaseModel): home_address: Optional[CompanyHomeAddress] = None r"""The company's primary signatory's home address.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "uuid", + "first_name", + "middle_initial", + "last_name", + "phone", + "email", + "home_address", + ] + nullable_fields = ["middle_initial"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in self.model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m + class PrimaryPayrollAdminTypedDict(TypedDict): r"""The primary payroll admin of the company.""" diff --git a/gusto_embedded/src/gusto_embedded/models/metadata_with_multiple_entities.py b/gusto_embedded/src/gusto_embedded/models/metadata_with_multiple_entities.py index 37bb9f09..66a34f28 100644 --- a/gusto_embedded/src/gusto_embedded/models/metadata_with_multiple_entities.py +++ b/gusto_embedded/src/gusto_embedded/models/metadata_with_multiple_entities.py @@ -6,17 +6,17 @@ MetadataWithOneEntityTypedDict, ) from gusto_embedded.types import BaseModel -from typing import List, Optional -from typing_extensions import NotRequired, TypedDict +from typing import List +from typing_extensions import TypedDict class MetadataWithMultipleEntitiesTypedDict(TypedDict): r"""multiple entities""" - entities: NotRequired[List[MetadataWithOneEntityTypedDict]] + entities: List[MetadataWithOneEntityTypedDict] class MetadataWithMultipleEntities(BaseModel): r"""multiple entities""" - entities: Optional[List[MetadataWithOneEntity]] = None + entities: List[MetadataWithOneEntity] diff --git a/gusto_embedded/src/gusto_embedded/models/metadata_with_one_entity.py b/gusto_embedded/src/gusto_embedded/models/metadata_with_one_entity.py index 3f80114f..3ba6f193 100644 --- a/gusto_embedded/src/gusto_embedded/models/metadata_with_one_entity.py +++ b/gusto_embedded/src/gusto_embedded/models/metadata_with_one_entity.py @@ -1,9 +1,15 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from gusto_embedded.types import BaseModel +from gusto_embedded.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) import pydantic -from pydantic import ConfigDict +from pydantic import ConfigDict, model_serializer from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -15,10 +21,10 @@ class MetadataWithOneEntityTypedDict(TypedDict): r"""Name of the entity that the error corresponds to.""" entity_uuid: NotRequired[str] r"""Unique identifier for the entity.""" - valid_from: NotRequired[str] - valid_up_to: NotRequired[str] - key: NotRequired[str] - state: NotRequired[str] + valid_from: NotRequired[Nullable[str]] + valid_up_to: NotRequired[Nullable[str]] + key: NotRequired[Nullable[str]] + state: NotRequired[Nullable[str]] class MetadataWithOneEntity(BaseModel): @@ -35,13 +41,13 @@ class MetadataWithOneEntity(BaseModel): entity_uuid: Optional[str] = None r"""Unique identifier for the entity.""" - valid_from: Optional[str] = None + valid_from: OptionalNullable[str] = UNSET - valid_up_to: Optional[str] = None + valid_up_to: OptionalNullable[str] = UNSET - key: Optional[str] = None + key: OptionalNullable[str] = UNSET - state: Optional[str] = None + state: OptionalNullable[str] = UNSET @property def additional_properties(self): @@ -50,3 +56,43 @@ def additional_properties(self): @additional_properties.setter def additional_properties(self, value): self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride] + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [ + "entity_type", + "entity_uuid", + "valid_from", + "valid_up_to", + "key", + "state", + ] + nullable_fields = ["valid_from", "valid_up_to", "key", "state"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in self.model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + for k, v in serialized.items(): + m[k] = v + + return m diff --git a/gusto_embedded/src/gusto_embedded/reports.py b/gusto_embedded/src/gusto_embedded/reports.py index 859672c7..64558ee3 100644 --- a/gusto_embedded/src/gusto_embedded/reports.py +++ b/gusto_embedded/src/gusto_embedded/reports.py @@ -43,7 +43,7 @@ def create_custom( ) -> models.CreateReport: r"""Create a custom report - Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. + Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. This URL is valid for 10 minutes. scope: `company_reports:write` @@ -207,7 +207,7 @@ async def create_custom_async( ) -> models.CreateReport: r"""Create a custom report - Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. + Create a custom report for a company. This endpoint initiates creating a custom report with custom columns, groupings, and filters. The `request_uuid` in the response can then be used to poll for the status and report URL upon completion using the report GET endpoint. This URL is valid for 10 minutes. scope: `company_reports:write`