diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 8404479..4cdf15b 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: 833c6a67-4a4a-4ef1-ba24-165a29264e4a management: - docChecksum: c085668c13bc2030b2e9476716daf3ca + docChecksum: 382dc904c609b6b5f4d984d5c35b3f52 docVersion: 1.0.0 speakeasyVersion: 1.685.0 generationVersion: 2.794.1 - releaseVersion: 1.10.10 - configChecksum: 3a4c7ffc22702ff72807fbd8861043a1 + releaseVersion: 1.10.11 + configChecksum: 3f47855715dc6995bd71c3a8985f867e repoURL: https://github.com/gr4vy/gr4vy-python.git installationURL: https://github.com/gr4vy/gr4vy-python.git published: true persistentEdits: - generation_id: 6372c37c-303e-464e-ac20-d251cba44ce3 - pristine_commit_hash: 4665cf9b6666a5976a1046befd82bd32b4b720ee - pristine_tree_hash: 383ab4d2fd5992ddc76f21fee5de88be8e3e4397 + generation_id: 58022ffb-3399-4795-8572-eb8c7b45cc65 + pristine_commit_hash: 3784a60447f1aefee8ef5faef56648792026e7c7 + pristine_tree_hash: c0955b2ee8a09dd212a5deae5032f8a64569b0de features: python: additionalDependencies: 1.0.0 @@ -1774,6 +1774,10 @@ trackedFiles: id: 7a717ea5afc6 last_write_checksum: sha1:08c0e043054e79e7e383022831727a4cbfca5712 pristine_git_object: e195ea619beb4845da7bbd48b990c01c6ef7307f + docs/models/threedsecure.md: + id: "695081314145" + last_write_checksum: sha1:19631acb096d645da434d17d6eb38a78badab0ac + pristine_git_object: 0a6e8d86b7860a8f72dd015ef72f56a75cb37dbb docs/models/threedsecuredata.md: id: 9fc94179f0d8 last_write_checksum: sha1:eca4467bdede3bc850defba397dfd12b63e345e0 @@ -1848,8 +1852,8 @@ trackedFiles: pristine_git_object: 39f6d2994c5488cef87982585bef5d57c1fe9e15 docs/models/transactioncreate.md: id: 2eccca1e0d3d - last_write_checksum: sha1:22a27680ea14b516797bf5439a38471fcd80888f - pristine_git_object: 68696354d0767257a456ee482cf4ec20386bba9c + last_write_checksum: sha1:a097d65c9f0a1469d4908e1fb95ad63d4bb751bd + pristine_git_object: c60289ac287648e6792f1e14e72dfae7f5c03d54 docs/models/transactioncreatepaymentmethod.md: id: 3797152d0145 last_write_checksum: sha1:211519d39358f87544d49ed79a32215b747fdcf8 @@ -1916,8 +1920,8 @@ trackedFiles: pristine_git_object: d72001a29a44aef022b474d36e28906c3481f475 docs/models/transactionthreedsecuresummary.md: id: 3440c6822ffe - last_write_checksum: sha1:703902f613a69c98518ca6b515d2ae421271afad - pristine_git_object: fac74b4e3730664d49878551fd6e22aebcb95b78 + last_write_checksum: sha1:aee89cd9a9ed83b580c09150e14767db6cff3880 + pristine_git_object: 4ab902804abbfe4d99ecd330b3334b6a26368e38 docs/models/transactionupdate.md: id: 845d149ccaed last_write_checksum: sha1:5010cf29ad26fd3a8929e4eb4a1253c056966006 @@ -2196,8 +2200,8 @@ trackedFiles: pristine_git_object: a3f212b22be155a47de24e7e217168022f33403f docs/sdks/transactions/README.md: id: 85592abe3c6b - last_write_checksum: sha1:18822595908f6bba006dcd3b596870c7f83ff11a - pristine_git_object: 253d9f56908bad4736c183b5043401cdf280e2bb + last_write_checksum: sha1:130efd9cac1263652e0a8d5d9d83f68e39d5f7cb + pristine_git_object: ba22aeeef03347543ad479932a5167b29a547c06 docs/sdks/transactionsrefunds/README.md: id: c6a0400f5020 last_write_checksum: sha1:903f4c62aa5ba02a3401017b03238ee69ca3a2ff @@ -2220,8 +2224,8 @@ trackedFiles: pristine_git_object: e8cd3e85682cd3d489cf3c5be75a0563d0c9f4bf pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:afd5110208203e47713187f7b09a02dcdbf87852 - pristine_git_object: 9bfbfc25ff5da13dbfaca1ca6009f2e13e339213 + last_write_checksum: sha1:7f49c3afca67dd2332a8933a9aba5b95b4e0f2b8 + pristine_git_object: 97be065758b7dbd490b525bfe450a3f0472db904 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:63a92abbd1de3323613f0d4c1ae4412076577710 @@ -2248,8 +2252,8 @@ trackedFiles: pristine_git_object: 83a0d00f9b5b1a6d837643a32bfd0f82cd4f98ce src/gr4vy/_version.py: id: 1b5ad1da47aa - last_write_checksum: sha1:719b22a042358f767cefb1da3d51b4b805d82078 - pristine_git_object: ef6e6dd3aa781cf1bb4a5980a0c83090e1a17b79 + last_write_checksum: sha1:3c387029f7574a31069afdb1e1dd6240fc63e38b + pristine_git_object: 14e5ac085477e58dc6cce2a9ea45823e98add300 src/gr4vy/account_updater.py: id: 6dc8f39e2fb9 last_write_checksum: sha1:fabc79a59dd06fb927ce2d834fbafbcad5836a4b @@ -2400,8 +2404,8 @@ trackedFiles: pristine_git_object: 2d392799bbe0b66682b15c14348917eccbcd684e src/gr4vy/models/__init__.py: id: 427cc7fddfe2 - last_write_checksum: sha1:6334cb437cbde649f298e4d7d7db97fbddac86bc - pristine_git_object: 9b3a0ca4b9875e490629254a94d7a0499f631a84 + last_write_checksum: sha1:27a988875d3377e255521d06967cb23e1e50c57f + pristine_git_object: 565fc9d45df7abda6d0d56b3e888e54e2eee00c3 src/gr4vy/models/accountsreceivablesreportspec.py: id: cc6a9368f988 last_write_checksum: sha1:3bbf41c27e4bea011331f20e28cf16a1109fd7dc @@ -3626,6 +3630,10 @@ trackedFiles: id: edf64e5b9feb last_write_checksum: sha1:a95b6fab9100cc8f7dccb8e092debdb529ad0e64 pristine_git_object: e61b9954bd08eff0e1cb10eeff200264a99eaf4e + src/gr4vy/models/threedsecure.py: + id: 665663cf801f + last_write_checksum: sha1:ee5dd8edbf7312a3263960b9a94642fcd02b28dc + pristine_git_object: 604ed414fab5ea49ad601ae76d5344f21d34d5f0 src/gr4vy/models/threedsecuredatav1.py: id: 082f021da827 last_write_checksum: sha1:944abd8b744836fb6482d7797936bd633367b468 @@ -3688,8 +3696,8 @@ trackedFiles: pristine_git_object: b5989e318a364a2988071d2660b84a65e8b5ecf1 src/gr4vy/models/transactioncreate.py: id: 640e0433670e - last_write_checksum: sha1:4647b7278c1daf1522a0c0e2f0a0037a31b38733 - pristine_git_object: c5b3241ceba7a308d3799e8a1e7c3a6dc355a310 + last_write_checksum: sha1:ac9f9d0d63c5956a6109450a5e24a4d38fffcccd + pristine_git_object: ccbc0e22972143e9814b2c4045ed92c6db36b045 src/gr4vy/models/transactionevent.py: id: 89844a174227 last_write_checksum: sha1:a035348d5ab3e2d719c2a25878c24e984b7a3075 @@ -3752,8 +3760,8 @@ trackedFiles: pristine_git_object: 63538acfe3e4bafe4f7c863338bcf7f3a858e134 src/gr4vy/models/transactionthreedsecuresummary.py: id: 0605662319b6 - last_write_checksum: sha1:8ec022c529f6a60e75439586a157f4042595e6df - pristine_git_object: 3a3918c14e841deadbe7d24f5784c09fe51ae87c + last_write_checksum: sha1:e7050a4000f82c7b3ca978d4a2a5b53b1d4ae801 + pristine_git_object: ae8f4f2c17d0709bf2bc21d19dba2b5c2f715337 src/gr4vy/models/transactionupdate.py: id: c6f258f04762 last_write_checksum: sha1:7c3c8ff00c57b36ee9a0fabe156865042de272c7 @@ -3924,8 +3932,8 @@ trackedFiles: pristine_git_object: 5449feb9e2541c9537efc7337e7fab9530b09901 src/gr4vy/transactions.py: id: 88da8fa0ed7f - last_write_checksum: sha1:ffdce813ed751f09ee9cf745983c29cdc54eaf2d - pristine_git_object: 27e5027cfefab41b5d857e546db021c22ef5a67f + last_write_checksum: sha1:f90cf5054a01a4a6924756f09821259dd602082e + pristine_git_object: 270adaea1935d2bb05cb2e7d3dc23021fdae4da9 src/gr4vy/transactions_refunds.py: id: ee2cc8522919 last_write_checksum: sha1:2b9b50a62a60169c0c50b8ec83ee24acd44ec001 @@ -7478,7 +7486,7 @@ examples: application/json: {"type": "error", "code": "gateway_timeout", "status": 504, "message": "Request could not be processed"} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: "## Python SDK Changes:\n* `gr4vy.payment-links.list()`: `response.items.[].installment_count` **Added**\n* `gr4vy.payment-links.create()`: \n * `request.installment_count` **Added**\n * `response.installment_count` **Added**\n* `gr4vy.payment-links.get()`: `response.installment_count` **Added**\n" +releaseNotes: "## Python SDK Changes:\n* `gr4vy.transactions.create()`: \n * `request.three_d_secure` **Added**\n * `response.three_d_secure.amount` **Added**\n* `gr4vy.transactions.get()`: `response.three_d_secure.amount` **Added**\n* `gr4vy.transactions.update()`: `response.three_d_secure.amount` **Added**\n* `gr4vy.transactions.capture()`: `response.[transaction].three_d_secure.amount` **Added**\n* `gr4vy.transactions.void()`: `response.[transaction].three_d_secure.amount` **Added**\n* `gr4vy.transactions.cancel()`: `response.transaction.three_d_secure.amount` **Added**\n* `gr4vy.transactions.sync()`: `response.three_d_secure.amount` **Added**\n" generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index b966a42..2c16fcf 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -26,7 +26,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 1.10.10 + version: 1.10.11 additionalDependencies: dev: freezegun: ^1.5.1 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 2198e58..043217c 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,20 +2,20 @@ speakeasyVersion: 1.685.0 sources: openapi: sourceNamespace: openapi - sourceRevisionDigest: sha256:70f0fa25987d6517e76aed6746f33def38f27a1dcc3c05f0c8dbab0bfbaa773a - sourceBlobDigest: sha256:e4f78fe6567c8e4da16544ef5d236c8435a72beafa14995b381fcecd3479ac1c + sourceRevisionDigest: sha256:a9e26f1a54cbb4570ac55a0e8407a23e4598624458a440f402fbe11c018cfb90 + sourceBlobDigest: sha256:8ea9c7bf89e5ba3ddef32e76e4860adf0b806c17b0167d3d252a2e2bab9bc52b tags: - latest - - speakeasy-sdk-regen-1768292720 + - speakeasy-sdk-regen-1768309132 - 1.0.0 targets: python: source: openapi sourceNamespace: openapi - sourceRevisionDigest: sha256:70f0fa25987d6517e76aed6746f33def38f27a1dcc3c05f0c8dbab0bfbaa773a - sourceBlobDigest: sha256:e4f78fe6567c8e4da16544ef5d236c8435a72beafa14995b381fcecd3479ac1c + sourceRevisionDigest: sha256:a9e26f1a54cbb4570ac55a0e8407a23e4598624458a440f402fbe11c018cfb90 + sourceBlobDigest: sha256:8ea9c7bf89e5ba3ddef32e76e4860adf0b806c17b0167d3d252a2e2bab9bc52b codeSamplesNamespace: openapi-python-code-samples - codeSamplesRevisionDigest: sha256:12aae9352990f96861ca5c941bffa33ec8cf50f1b0ce38dfa4b30985d9674bd8 + codeSamplesRevisionDigest: sha256:4078c097c287612fe2ecefc3d27e79954e05ecd6e7b0ea3e69f532eee1560eb7 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 5cdf693..cbd4847 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1318,4 +1318,14 @@ Based on: ### Generated - [python v1.10.10] . ### Releases -- [PyPI v1.10.10] https://pypi.org/project/gr4vy/1.10.10 - . \ No newline at end of file +- [PyPI v1.10.10] https://pypi.org/project/gr4vy/1.10.10 - . + +## 2026-01-13 12:58:33 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.685.0 (2.794.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.10.11] . +### Releases +- [PyPI v1.10.11] https://pypi.org/project/gr4vy/1.10.11 - . \ No newline at end of file diff --git a/docs/models/threedsecure.md b/docs/models/threedsecure.md new file mode 100644 index 0000000..0a6e8d8 --- /dev/null +++ b/docs/models/threedsecure.md @@ -0,0 +1,8 @@ +# ThreeDSecure + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The amount to be used for 3DS authentication. Optionally set this value to authenticate a greater amount than the transaction amount. | \ No newline at end of file diff --git a/docs/models/transactioncreate.md b/docs/models/transactioncreate.md index 6869635..c60289a 100644 --- a/docs/models/transactioncreate.md +++ b/docs/models/transactioncreate.md @@ -17,6 +17,7 @@ | `intent` | [Optional[models.TransactionIntent]](../models/transactionintent.md) | :heavy_minus_sign: | N/A | | | `store` | *Optional[bool]* | :heavy_minus_sign: | Whether or not to also try and store the payment method with us so that it can be used again for future use. This is only supported for payment methods that support this feature. There are also a few restrictions on how the flag may be set:

* The flag has to be set to `true` when the `payment_source` is set to `recurring` or `installment`, and `merchant_initiated` is set to `false`.
* The flag has to be set to `false` (or not set) when using a previously vaulted payment method. | true | | `three_d_secure_data` | [OptionalNullable[models.ThreeDSecureData]](../models/threedsecuredata.md) | :heavy_minus_sign: | Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction. | | +| `three_d_secure` | [OptionalNullable[models.ThreeDSecure]](../models/threedsecure.md) | :heavy_minus_sign: | Optional 3-D Secure values to use during the authentication flow. | | | `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it. | {
"cohort": "cohort-12345",
"order": "order-12345"
} | | `is_subsequent_payment` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the transaction represents a subsequent payment coming from a setup recurring payment. Please note there are some restrictions on how this flag may be used.

The flag can only be `false` (or not set) when the transaction meets one of the following criteria:

* It is not `merchant_initiated`.
* `payment_source` is set to `card_on_file`.

The flag can only be set to `true` when the transaction meets one of the following criteria:
* It is not `merchant_initiated`.
* `payment_source` is set to `recurring` or `installment` and `merchant_initiated` is set to `true`.
* `payment_source` is set to `card_on_file`. | true | | `merchant_initiated` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the transaction was initiated by the merchant (true) or customer (false). | true | diff --git a/docs/models/transactionthreedsecuresummary.md b/docs/models/transactionthreedsecuresummary.md index fac74b4..4ab9028 100644 --- a/docs/models/transactionthreedsecuresummary.md +++ b/docs/models/transactionthreedsecuresummary.md @@ -9,4 +9,5 @@ | `status` | [OptionalNullable[models.ThreeDSecureStatus]](../models/threedsecurestatus.md) | :heavy_minus_sign: | The status of the 3DS challenge for this transaction. | complete | | `method` | [OptionalNullable[models.ThreeDSecureMethod]](../models/threedsecuremethod.md) | :heavy_minus_sign: | The method used for 3DS authentication for this transaction. | challenge | | `response_data` | [OptionalNullable[models.ResponseData]](../models/responsedata.md) | :heavy_minus_sign: | The 3DS data sent to the payment service for this transaction. This will only be populated if external 3DS data was passed in directly as part of the transaction API call, or if our 3DS server returned a status code of `Y` or `A`. In case of a failure to authenticate (status `N`, `R`, or `U`) this field will not be populated. To see full details about the 3DS calls please use our transaction events API. | | -| `error_data` | [OptionalNullable[models.ThreeDSecureError]](../models/threedsecureerror.md) | :heavy_minus_sign: | The error data received from our 3DS server. This will not be populated if the customer failed the authentication with a status code of `N`, `R`, or `U`. To see full details about the 3DS calls in those situations please use our transaction events API. | | \ No newline at end of file +| `error_data` | [OptionalNullable[models.ThreeDSecureError]](../models/threedsecureerror.md) | :heavy_minus_sign: | The error data received from our 3DS server. This will not be populated if the customer failed the authentication with a status code of `N`, `R`, or `U`. To see full details about the 3DS calls in those situations please use our transaction events API. | | +| `amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The amount used for 3DS authentication. | | \ No newline at end of file diff --git a/docs/sdks/transactions/README.md b/docs/sdks/transactions/README.md index 253d9f5..ba22aee 100644 --- a/docs/sdks/transactions/README.md +++ b/docs/sdks/transactions/README.md @@ -186,6 +186,7 @@ with Gr4vy( | `intent` | [Optional[models.TransactionIntent]](../../models/transactionintent.md) | :heavy_minus_sign: | N/A | | | `store` | *Optional[bool]* | :heavy_minus_sign: | Whether or not to also try and store the payment method with us so that it can be used again for future use. This is only supported for payment methods that support this feature. There are also a few restrictions on how the flag may be set:

* The flag has to be set to `true` when the `payment_source` is set to `recurring` or `installment`, and `merchant_initiated` is set to `false`.
* The flag has to be set to `false` (or not set) when using a previously vaulted payment method. | true | | `three_d_secure_data` | [OptionalNullable[models.ThreeDSecureData]](../../models/threedsecuredata.md) | :heavy_minus_sign: | Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction. | | +| `three_d_secure` | [OptionalNullable[models.ThreeDSecure]](../../models/threedsecure.md) | :heavy_minus_sign: | Optional 3-D Secure values to use during the authentication flow. | | | `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it. | {
"cohort": "cohort-12345",
"order": "order-12345"
} | | `is_subsequent_payment` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the transaction represents a subsequent payment coming from a setup recurring payment. Please note there are some restrictions on how this flag may be used.

The flag can only be `false` (or not set) when the transaction meets one of the following criteria:

* It is not `merchant_initiated`.
* `payment_source` is set to `card_on_file`.

The flag can only be set to `true` when the transaction meets one of the following criteria:
* It is not `merchant_initiated`.
* `payment_source` is set to `recurring` or `installment` and `merchant_initiated` is set to `true`.
* `payment_source` is set to `card_on_file`. | true | | `merchant_initiated` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the transaction was initiated by the merchant (true) or customer (false). | true | diff --git a/pyproject.toml b/pyproject.toml index 9bfbfc2..97be065 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "gr4vy" -version = "1.10.10" +version = "1.10.11" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Gr4vy" },] readme = "README-PYPI.md" diff --git a/src/gr4vy/_version.py b/src/gr4vy/_version.py index ef6e6dd..14e5ac0 100644 --- a/src/gr4vy/_version.py +++ b/src/gr4vy/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "gr4vy" -__version__: str = "1.10.10" +__version__: str = "1.10.11" __openapi_doc_version__: str = "1.0.0" __gen_version__: str = "2.794.1" -__user_agent__: str = "speakeasy-sdk/python 1.10.10 2.794.1 1.0.0 gr4vy" +__user_agent__: str = "speakeasy-sdk/python 1.10.11 2.794.1 1.0.0 gr4vy" try: if __package__ is not None: diff --git a/src/gr4vy/models/__init__.py b/src/gr4vy/models/__init__.py index 9b3a0ca..565fc9d 100644 --- a/src/gr4vy/models/__init__.py +++ b/src/gr4vy/models/__init__.py @@ -1013,6 +1013,7 @@ ) from .taxid import TaxID, TaxIDTypedDict from .taxidkind import TaxIDKind + from .threedsecure import ThreeDSecure, ThreeDSecureTypedDict from .threedsecuredatav1 import ThreeDSecureDataV1, ThreeDSecureDataV1TypedDict from .threedsecuredatav2 import ThreeDSecureDataV2, ThreeDSecureDataV2TypedDict from .threedsecureerror import ThreeDSecureError, ThreeDSecureErrorTypedDict @@ -1974,6 +1975,7 @@ "TaxID", "TaxIDKind", "TaxIDTypedDict", + "ThreeDSecure", "ThreeDSecureData", "ThreeDSecureDataTypedDict", "ThreeDSecureDataV1", @@ -1984,6 +1986,7 @@ "ThreeDSecureErrorTypedDict", "ThreeDSecureMethod", "ThreeDSecureStatus", + "ThreeDSecureTypedDict", "ThreeDSecureV2", "ThreeDSecureV2TypedDict", "TicketDeliveryMethod", @@ -2895,6 +2898,8 @@ "TaxID": ".taxid", "TaxIDTypedDict": ".taxid", "TaxIDKind": ".taxidkind", + "ThreeDSecure": ".threedsecure", + "ThreeDSecureTypedDict": ".threedsecure", "ThreeDSecureDataV1": ".threedsecuredatav1", "ThreeDSecureDataV1TypedDict": ".threedsecuredatav1", "ThreeDSecureDataV2": ".threedsecuredatav2", diff --git a/src/gr4vy/models/threedsecure.py b/src/gr4vy/models/threedsecure.py new file mode 100644 index 0000000..604ed41 --- /dev/null +++ b/src/gr4vy/models/threedsecure.py @@ -0,0 +1,46 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from gr4vy.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from pydantic import model_serializer +from typing_extensions import NotRequired, TypedDict + + +class ThreeDSecureTypedDict(TypedDict): + amount: NotRequired[Nullable[int]] + r"""The amount to be used for 3DS authentication. Optionally set this value to authenticate a greater amount than the transaction amount.""" + + +class ThreeDSecure(BaseModel): + amount: OptionalNullable[int] = UNSET + r"""The amount to be used for 3DS authentication. Optionally set this value to authenticate a greater amount than the transaction amount.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["amount"] + nullable_fields = ["amount"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(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 diff --git a/src/gr4vy/models/transactioncreate.py b/src/gr4vy/models/transactioncreate.py index c5b3241..ccbc0e2 100644 --- a/src/gr4vy/models/transactioncreate.py +++ b/src/gr4vy/models/transactioncreate.py @@ -56,6 +56,7 @@ RedirectPaymentMethodCreateTypedDict, ) from .statementdescriptor import StatementDescriptor, StatementDescriptorTypedDict +from .threedsecure import ThreeDSecure, ThreeDSecureTypedDict from .threedsecuredatav1 import ThreeDSecureDataV1, ThreeDSecureDataV1TypedDict from .threedsecuredatav2 import ThreeDSecureDataV2, ThreeDSecureDataV2TypedDict from .tokenpaymentmethodcreate import ( @@ -164,6 +165,8 @@ class TransactionCreateTypedDict(TypedDict): """ three_d_secure_data: NotRequired[Nullable[ThreeDSecureDataTypedDict]] r"""Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction.""" + three_d_secure: NotRequired[Nullable[ThreeDSecureTypedDict]] + r"""Optional 3-D Secure values to use during the authentication flow.""" metadata: NotRequired[Nullable[Dict[str, str]]] r"""Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it.""" is_subsequent_payment: NotRequired[bool] @@ -277,6 +280,9 @@ class TransactionCreate(BaseModel): three_d_secure_data: OptionalNullable[ThreeDSecureData] = UNSET r"""Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction.""" + three_d_secure: OptionalNullable[ThreeDSecure] = UNSET + r"""Optional 3-D Secure values to use during the authentication flow.""" + metadata: OptionalNullable[Dict[str, str]] = UNSET r"""Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it.""" @@ -388,6 +394,7 @@ def serialize_model(self, handler): "intent", "store", "three_d_secure_data", + "three_d_secure", "metadata", "is_subsequent_payment", "merchant_initiated", @@ -425,6 +432,7 @@ def serialize_model(self, handler): "gift_cards", "external_identifier", "three_d_secure_data", + "three_d_secure", "metadata", "airline", "cart_items", diff --git a/src/gr4vy/models/transactionthreedsecuresummary.py b/src/gr4vy/models/transactionthreedsecuresummary.py index 3a3918c..ae8f4f2 100644 --- a/src/gr4vy/models/transactionthreedsecuresummary.py +++ b/src/gr4vy/models/transactionthreedsecuresummary.py @@ -33,6 +33,8 @@ class TransactionThreeDSecureSummaryTypedDict(TypedDict): r"""The 3DS data sent to the payment service for this transaction. This will only be populated if external 3DS data was passed in directly as part of the transaction API call, or if our 3DS server returned a status code of `Y` or `A`. In case of a failure to authenticate (status `N`, `R`, or `U`) this field will not be populated. To see full details about the 3DS calls please use our transaction events API.""" error_data: NotRequired[Nullable[ThreeDSecureErrorTypedDict]] r"""The error data received from our 3DS server. This will not be populated if the customer failed the authentication with a status code of `N`, `R`, or `U`. To see full details about the 3DS calls in those situations please use our transaction events API.""" + amount: NotRequired[Nullable[int]] + r"""The amount used for 3DS authentication.""" class TransactionThreeDSecureSummary(BaseModel): @@ -51,10 +53,27 @@ class TransactionThreeDSecureSummary(BaseModel): error_data: OptionalNullable[ThreeDSecureError] = UNSET r"""The error data received from our 3DS server. This will not be populated if the customer failed the authentication with a status code of `N`, `R`, or `U`. To see full details about the 3DS calls in those situations please use our transaction events API.""" + amount: OptionalNullable[int] = UNSET + r"""The amount used for 3DS authentication.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["version", "status", "method", "response_data", "error_data"] - nullable_fields = ["version", "status", "method", "response_data", "error_data"] + optional_fields = [ + "version", + "status", + "method", + "response_data", + "error_data", + "amount", + ] + nullable_fields = [ + "version", + "status", + "method", + "response_data", + "error_data", + "amount", + ] null_default_fields = [] serialized = handler(self) diff --git a/src/gr4vy/transactions.py b/src/gr4vy/transactions.py index 27e5027..270adae 100644 --- a/src/gr4vy/transactions.py +++ b/src/gr4vy/transactions.py @@ -748,6 +748,9 @@ def create( three_d_secure_data: OptionalNullable[ Union[models.ThreeDSecureData, models.ThreeDSecureDataTypedDict] ] = UNSET, + three_d_secure: OptionalNullable[ + Union[models.ThreeDSecure, models.ThreeDSecureTypedDict] + ] = UNSET, metadata: OptionalNullable[Dict[str, str]] = UNSET, is_subsequent_payment: Optional[bool] = False, merchant_initiated: Optional[bool] = False, @@ -819,6 +822,7 @@ def create( * The flag has to be set to `true` when the `payment_source` is set to `recurring` or `installment`, and `merchant_initiated` is set to `false`. * The flag has to be set to `false` (or not set) when using a previously vaulted payment method. :param three_d_secure_data: Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction. + :param three_d_secure: Optional 3-D Secure values to use during the authentication flow. :param metadata: Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it. :param is_subsequent_payment: Indicates whether the transaction represents a subsequent payment coming from a setup recurring payment. Please note there are some restrictions on how this flag may be used. @@ -902,6 +906,9 @@ def create( three_d_secure_data=utils.get_pydantic_model( three_d_secure_data, OptionalNullable[models.ThreeDSecureData] ), + three_d_secure=utils.get_pydantic_model( + three_d_secure, OptionalNullable[models.ThreeDSecure] + ), metadata=metadata, is_subsequent_payment=is_subsequent_payment, merchant_initiated=merchant_initiated, @@ -1089,6 +1096,9 @@ async def create_async( three_d_secure_data: OptionalNullable[ Union[models.ThreeDSecureData, models.ThreeDSecureDataTypedDict] ] = UNSET, + three_d_secure: OptionalNullable[ + Union[models.ThreeDSecure, models.ThreeDSecureTypedDict] + ] = UNSET, metadata: OptionalNullable[Dict[str, str]] = UNSET, is_subsequent_payment: Optional[bool] = False, merchant_initiated: Optional[bool] = False, @@ -1160,6 +1170,7 @@ async def create_async( * The flag has to be set to `true` when the `payment_source` is set to `recurring` or `installment`, and `merchant_initiated` is set to `false`. * The flag has to be set to `false` (or not set) when using a previously vaulted payment method. :param three_d_secure_data: Pass through 3-D Secure data to support external 3-D Secure authorisation. If using an external 3-D Secure provider, you should not pass a `redirect_url` in the `payment_method` object for a transaction. + :param three_d_secure: Optional 3-D Secure values to use during the authentication flow. :param metadata: Any additional information about the transaction that you would like to store as key-value pairs. This data is passed to payment service providers that support it. :param is_subsequent_payment: Indicates whether the transaction represents a subsequent payment coming from a setup recurring payment. Please note there are some restrictions on how this flag may be used. @@ -1243,6 +1254,9 @@ async def create_async( three_d_secure_data=utils.get_pydantic_model( three_d_secure_data, OptionalNullable[models.ThreeDSecureData] ), + three_d_secure=utils.get_pydantic_model( + three_d_secure, OptionalNullable[models.ThreeDSecure] + ), metadata=metadata, is_subsequent_payment=is_subsequent_payment, merchant_initiated=merchant_initiated,