diff --git a/README.md b/README.md index 613e54d..69fb295 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A Python client library for the PAY.JP v2 API. This SDK provides a convenient wa This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: 2.0.0 -- Package version: 1.1.0 +- Package version: 1.2.0 - Generator version: 7.14.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen @@ -83,6 +83,7 @@ Class | Method | HTTP request | Description *BalancesApi* | [**get_all_balances**](docs/BalancesApi.md#get_all_balances) | **GET** /v2/balances | Get All Balances *BalancesApi* | [**get_balance**](docs/BalancesApi.md#get_balance) | **GET** /v2/balances/{balance_id} | Get Balance *CheckoutSessionsApi* | [**create_checkout_session**](docs/CheckoutSessionsApi.md#create_checkout_session) | **POST** /v2/checkout/sessions | Create Checkout Session +*CheckoutSessionsApi* | [**expire_checkout_session**](docs/CheckoutSessionsApi.md#expire_checkout_session) | **POST** /v2/checkout/sessions/{checkout_session_id}/expire | Expire Checkout Session *CheckoutSessionsApi* | [**get_all_checkout_session_line_items**](docs/CheckoutSessionsApi.md#get_all_checkout_session_line_items) | **GET** /v2/checkout/sessions/{checkout_session_id}/line_items | Get All Checkout Session Line Items *CheckoutSessionsApi* | [**get_all_checkout_sessions**](docs/CheckoutSessionsApi.md#get_all_checkout_sessions) | **GET** /v2/checkout/sessions | Get All Checkout Sessions *CheckoutSessionsApi* | [**get_checkout_session**](docs/CheckoutSessionsApi.md#get_checkout_session) | **GET** /v2/checkout/sessions/{checkout_session_id} | Get Checkout Session diff --git a/docs/CheckoutSessionsApi.md b/docs/CheckoutSessionsApi.md index 787295b..31d13f9 100644 --- a/docs/CheckoutSessionsApi.md +++ b/docs/CheckoutSessionsApi.md @@ -5,6 +5,7 @@ All URIs are relative to *https://api.pay.jp* Method | HTTP request | Description ------------- | ------------- | ------------- [**create_checkout_session**](CheckoutSessionsApi.md#create_checkout_session) | **POST** /v2/checkout/sessions | Create Checkout Session +[**expire_checkout_session**](CheckoutSessionsApi.md#expire_checkout_session) | **POST** /v2/checkout/sessions/{checkout_session_id}/expire | Expire Checkout Session [**get_all_checkout_session_line_items**](CheckoutSessionsApi.md#get_all_checkout_session_line_items) | **GET** /v2/checkout/sessions/{checkout_session_id}/line_items | Get All Checkout Session Line Items [**get_all_checkout_sessions**](CheckoutSessionsApi.md#get_all_checkout_sessions) | **GET** /v2/checkout/sessions | Get All Checkout Sessions [**get_checkout_session**](CheckoutSessionsApi.md#get_checkout_session) | **GET** /v2/checkout/sessions/{checkout_session_id} | Get Checkout Session @@ -97,6 +98,92 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **expire_checkout_session** +> CheckoutSessionDetailsResponse expire_checkout_session(checkout_session_id) + +Expire Checkout Session + +### Example + +* Basic Authentication (HTTPBasic): +* Bearer Authentication (HTTPBearer): + +```python +import payjpv2 +from payjpv2.models.checkout_session_details_response import CheckoutSessionDetailsResponse +from payjpv2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://api.pay.jp +# See configuration.py for a list of all supported configuration parameters. +configuration = payjpv2.Configuration( + host = "https://api.pay.jp" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: HTTPBasic +configuration = payjpv2.Configuration( + username = os.environ["USERNAME"], + password = os.environ["PASSWORD"] +) + +# Configure Bearer authorization: HTTPBearer +configuration = payjpv2.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with payjpv2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = payjpv2.CheckoutSessionsApi(api_client) + checkout_session_id = 'checkout_session_id_example' # str | + + try: + # Expire Checkout Session + api_response = api_instance.expire_checkout_session(checkout_session_id) + print("The response of CheckoutSessionsApi->expire_checkout_session:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling CheckoutSessionsApi->expire_checkout_session: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **checkout_session_id** | **str**| | + +### Return type + +[**CheckoutSessionDetailsResponse**](CheckoutSessionDetailsResponse.md) + +### Authorization + +[HTTPBasic](../README.md#HTTPBasic), [HTTPBearer](../README.md#HTTPBearer) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, application/problem+json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | +**404** | Not Found | - | +**400** | Checkout Session Not Expirable | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_all_checkout_session_line_items** > CheckoutSessionLineItemListResponse get_all_checkout_session_line_items(checkout_session_id, limit=limit, starting_after=starting_after, ending_before=ending_before) diff --git a/docs/PaymentFlowsApi.md b/docs/PaymentFlowsApi.md index 106e3f2..61fccfd 100644 --- a/docs/PaymentFlowsApi.md +++ b/docs/PaymentFlowsApi.md @@ -278,7 +278,7 @@ Name | Type | Description | Notes **200** | Successful Response | - | **422** | Validation Error | - | **404** | Not Found | - | -**400** | Invalid Status<br>Missing Payment Method<br>Detached Payment Method Not Usable<br>Payment Method Not Owned By Customer<br>Customer Required For Payment Method<br>Payment Method Type Not Allowed<br>Extended Authorization Not Available<br>Apple Pay Disabled In Livemode<br>Invalid Apple Pay Token<br>Unacceptable Brand On Apple Pay | - | +**400** | Invalid Status<br>Checkout Session Expired<br>Missing Payment Method<br>Detached Payment Method Not Usable<br>Payment Method Not Owned By Customer<br>Customer Required For Payment Method<br>Payment Method Type Not Allowed<br>Extended Authorization Not Available<br>Apple Pay Disabled In Livemode<br>Invalid Apple Pay Token<br>Unacceptable Brand On Apple Pay | - | **402** | Payment Failed | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/SetupFlowCancelRequest.md b/docs/SetupFlowCancelRequest.md index 3da6f5c..239f4b2 100644 --- a/docs/SetupFlowCancelRequest.md +++ b/docs/SetupFlowCancelRequest.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cancellation_reason** | [**SetupFlowCancellationReason**](SetupFlowCancellationReason.md) | この SetupFlow のキャンセル理由。 | 値 | |:---| | **abandoned**: 顧客が SetupFlow を完了しなかった場合。 | | **requested_by_customer**: 顧客がキャンセルを要求した場合。 | | **duplicate**: 支払い方法が重複している場合。 | | [optional] +**cancellation_reason** | **str** | この SetupFlow のキャンセル理由。 | 値 | |:---| | **abandoned**: 顧客が SetupFlow を完了しなかった場合。 | | **requested_by_customer**: 顧客がキャンセルを要求した場合。 | | **duplicate**: 支払い方法が重複している場合。 | | [optional] ## Example diff --git a/docs/SetupFlowCancellationReason.md b/docs/SetupFlowCancellationReason.md index 40c2e97..e1d00d1 100644 --- a/docs/SetupFlowCancellationReason.md +++ b/docs/SetupFlowCancellationReason.md @@ -7,6 +7,8 @@ * `DUPLICATE` (value: `'duplicate'`) +* `EXPIRED` (value: `'expired'`) + * `REQUESTED_BY_CUSTOMER` (value: `'requested_by_customer'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/payjpv2/__init__.py b/payjpv2/__init__.py index cfc6541..8d1eb59 100644 --- a/payjpv2/__init__.py +++ b/payjpv2/__init__.py @@ -15,7 +15,7 @@ """ # noqa: E501 -__version__ = "1.1.0" +__version__ = "1.2.0" # import apis into sdk package from payjpv2.api.balances_api import BalancesApi diff --git a/payjpv2/api/checkout_sessions_api.py b/payjpv2/api/checkout_sessions_api.py index 715b24e..7d06565 100644 --- a/payjpv2/api/checkout_sessions_api.py +++ b/payjpv2/api/checkout_sessions_api.py @@ -335,6 +335,287 @@ def _create_checkout_session_serialize( + @validate_call + def expire_checkout_session( + self, + checkout_session_id: StrictStr, + *, + request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + request_auth: Optional[Dict[StrictStr, Any]] = None, + headers: Optional[Dict[StrictStr, Any]] = None, + idempotency_key: Optional[StrictStr] = None, + host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> CheckoutSessionDetailsResponse: + """Expire Checkout Session + + + :param checkout_session_id: (required) + :type checkout_session_id: str + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type request_timeout: int, tuple(int, int), optional + :param request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type request_auth: dict, optional + :param headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type headers: dict, optional + :param idempotency_key: an idempotency key for the request. + used to ensure the request is only processed once. + :type idempotency_key: str, optional + :param host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._expire_checkout_session_serialize( + checkout_session_id=checkout_session_id, + _request_auth=request_auth, + _content_type='application/json', + _headers=headers, + _idempotency_key=idempotency_key, + _host_index=host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "CheckoutSessionDetailsResponse", + '422': "ErrorResponse", + '404': "ErrorResponse", + '400': "ErrorResponse", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def expire_checkout_session_with_http_info( + self, + checkout_session_id: StrictStr, + *, + request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + request_auth: Optional[Dict[StrictStr, Any]] = None, + headers: Optional[Dict[StrictStr, Any]] = None, + idempotency_key: Optional[StrictStr] = None, + host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[CheckoutSessionDetailsResponse]: + """Expire Checkout Session + + + :param checkout_session_id: (required) + :type checkout_session_id: str + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type request_timeout: int, tuple(int, int), optional + :param request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type request_auth: dict, optional + :param headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type headers: dict, optional + :param idempotency_key: an idempotency key for the request. + used to ensure the request is only processed once. + :type idempotency_key: str, optional + :param host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._expire_checkout_session_serialize( + checkout_session_id=checkout_session_id, + _request_auth=request_auth, + _content_type='application/json', + _headers=headers, + _idempotency_key=idempotency_key, + _host_index=host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "CheckoutSessionDetailsResponse", + '422': "ErrorResponse", + '404': "ErrorResponse", + '400': "ErrorResponse", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def expire_checkout_session_without_preload_content( + self, + checkout_session_id: StrictStr, + *, + request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + request_auth: Optional[Dict[StrictStr, Any]] = None, + headers: Optional[Dict[StrictStr, Any]] = None, + idempotency_key: Optional[StrictStr] = None, + host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Expire Checkout Session + + + :param checkout_session_id: (required) + :type checkout_session_id: str + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type request_timeout: int, tuple(int, int), optional + :param request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type request_auth: dict, optional + :param headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type headers: dict, optional + :param idempotency_key: an idempotency key for the request. + used to ensure the request is only processed once. + :type idempotency_key: str, optional + :param host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._expire_checkout_session_serialize( + checkout_session_id=checkout_session_id, + _request_auth=request_auth, + _content_type='application/json', + _headers=headers, + _idempotency_key=idempotency_key, + _host_index=host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "CheckoutSessionDetailsResponse", + '422': "ErrorResponse", + '404': "ErrorResponse", + '400': "ErrorResponse", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=request_timeout + ) + return response_data.response + + + def _expire_checkout_session_serialize( + self, + checkout_session_id, + _request_auth, + _content_type, + _headers, + _idempotency_key, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + if _idempotency_key is not None: + _header_params['Idempotency-Key'] = _idempotency_key + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if checkout_session_id is not None: + _path_params['checkout_session_id'] = checkout_session_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json', + 'application/problem+json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'HTTPBasic', + 'HTTPBearer' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/v2/checkout/sessions/{checkout_session_id}/expire', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def get_all_checkout_session_line_items( self, diff --git a/payjpv2/api_client.py b/payjpv2/api_client.py index 27ab3c2..3920b7c 100644 --- a/payjpv2/api_client.py +++ b/payjpv2/api_client.py @@ -92,7 +92,7 @@ def __init__( self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'payjp/payjpv2 PythonBindings/1.1.0' + self.user_agent = 'payjp/payjpv2 PythonBindings/1.2.0' # Set X-Payjp-Client-User-Agent header. self.default_headers['X-Payjp-Client-User-Agent'] = self._build_client_user_agent() self.client_side_validation = configuration.client_side_validation @@ -115,7 +115,7 @@ def user_agent(self, value): def _build_client_user_agent(self): """Build X-Payjp-Client-User-Agent header value.""" ua_info = { - 'bindings_version': '1.1.0', + 'bindings_version': '1.2.0', 'lang': 'python', 'lang_version': sys.version.split()[0], 'publisher': 'payjp', diff --git a/payjpv2/configuration.py b/payjpv2/configuration.py index 1333b77..8ae3d1c 100644 --- a/payjpv2/configuration.py +++ b/payjpv2/configuration.py @@ -525,7 +525,7 @@ def to_debug_report(self) -> str: "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: 2.0.0\n"\ - "SDK Package Version: 1.1.0".\ + "SDK Package Version: 1.2.0".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self) -> List[HostSetting]: diff --git a/payjpv2/models/setup_flow_cancel_request.py b/payjpv2/models/setup_flow_cancel_request.py index 97d0599..0ea655e 100644 --- a/payjpv2/models/setup_flow_cancel_request.py +++ b/payjpv2/models/setup_flow_cancel_request.py @@ -18,9 +18,8 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional -from payjpv2.models.setup_flow_cancellation_reason import SetupFlowCancellationReason from typing import Optional, Set from typing_extensions import Self @@ -28,9 +27,19 @@ class SetupFlowCancelRequest(BaseModel): """ SetupFlowCancelRequest """ # noqa: E501 - cancellation_reason: Optional[SetupFlowCancellationReason] = Field(default=None, description="この SetupFlow のキャンセル理由。 | 値 | |:---| | **abandoned**: 顧客が SetupFlow を完了しなかった場合。 | | **requested_by_customer**: 顧客がキャンセルを要求した場合。 | | **duplicate**: 支払い方法が重複している場合。 |") + cancellation_reason: Optional[StrictStr] = Field(default=None, description="この SetupFlow のキャンセル理由。 | 値 | |:---| | **abandoned**: 顧客が SetupFlow を完了しなかった場合。 | | **requested_by_customer**: 顧客がキャンセルを要求した場合。 | | **duplicate**: 支払い方法が重複している場合。 |") __properties: ClassVar[List[str]] = ["cancellation_reason"] + @field_validator('cancellation_reason') + def cancellation_reason_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in set(['abandoned', 'duplicate', 'requested_by_customer']): + raise ValueError("must be one of enum values ('abandoned', 'duplicate', 'requested_by_customer')") + return value + model_config = ConfigDict( populate_by_name=True, validate_assignment=True, diff --git a/payjpv2/models/setup_flow_cancellation_reason.py b/payjpv2/models/setup_flow_cancellation_reason.py index e433e8b..f5a773e 100644 --- a/payjpv2/models/setup_flow_cancellation_reason.py +++ b/payjpv2/models/setup_flow_cancellation_reason.py @@ -29,6 +29,7 @@ class SetupFlowCancellationReason(str, Enum): """ ABANDONED = 'abandoned' DUPLICATE = 'duplicate' + EXPIRED = 'expired' REQUESTED_BY_CUSTOMER = 'requested_by_customer' @classmethod diff --git a/pyproject.toml b/pyproject.toml index 80b3563..895407a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "payjpv2" -version = "1.1.0" +version = "1.2.0" description = "PAY.JP Python SDK - A Python client library for PAY.JP v2 API" authors = [{name = "PAY.JP", email = "support@pay.jp"}] license = {text = "MIT"} diff --git a/setup.py b/setup.py index c2c38d5..92d4454 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools NAME = "payjpv2" -VERSION = "1.1.0" +VERSION = "1.2.0" PYTHON_REQUIRES = ">= 3.8" REQUIRES = [ "urllib3 >= 2.1.0, < 3.0.0", diff --git a/test/test_checkout_sessions_api.py b/test/test_checkout_sessions_api.py index d5c2847..44435ca 100644 --- a/test/test_checkout_sessions_api.py +++ b/test/test_checkout_sessions_api.py @@ -34,6 +34,13 @@ def test_create_checkout_session(self) -> None: """ pass + def test_expire_checkout_session(self) -> None: + """Test case for expire_checkout_session + + Expire Checkout Session + """ + pass + def test_get_all_checkout_session_line_items(self) -> None: """Test case for get_all_checkout_session_line_items diff --git a/uv.lock b/uv.lock index 778a01c..87cf278 100644 --- a/uv.lock +++ b/uv.lock @@ -131,7 +131,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version < '3.9'" }, + { name = "tomli" }, ] [[package]] @@ -209,7 +209,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version >= '3.9' and python_full_version <= '3.11'" }, + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] @@ -226,7 +226,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -266,9 +266,9 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "mccabe", marker = "python_full_version < '3.8.1'" }, - { name = "pycodestyle", version = "2.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8.1'" }, - { name = "pyflakes", version = "2.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.8.1'" }, + { name = "mccabe" }, + { name = "pycodestyle", version = "2.9.1", source = { registry = "https://pypi.org/simple" } }, + { name = "pyflakes", version = "2.5.0", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/00/9808c62b2d529cefc69ce4e4a1ea42c0f855effa55817b7327ec5b75e60a/flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db", size = 145862, upload-time = "2022-08-03T23:21:27.108Z" } wheels = [ @@ -283,9 +283,9 @@ resolution-markers = [ "python_full_version >= '3.8.1' and python_full_version < '3.9'", ] dependencies = [ - { name = "mccabe", marker = "python_full_version >= '3.8.1' and python_full_version < '3.9'" }, - { name = "pycodestyle", version = "2.12.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.8.1' and python_full_version < '3.9'" }, - { name = "pyflakes", version = "3.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.8.1' and python_full_version < '3.9'" }, + { name = "mccabe" }, + { name = "pycodestyle", version = "2.12.1", source = { registry = "https://pypi.org/simple" } }, + { name = "pyflakes", version = "3.2.0", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/16/3f2a0bb700ad65ac9663262905a025917c020a3f92f014d2ba8964b4602c/flake8-7.1.2.tar.gz", hash = "sha256:c586ffd0b41540951ae41af572e6790dbd49fc12b3aa2541685d253d9bd504bd", size = 48119, upload-time = "2025-02-16T18:45:44.296Z" } wheels = [ @@ -300,9 +300,9 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "mccabe", marker = "python_full_version >= '3.9'" }, - { name = "pycodestyle", version = "2.13.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, - { name = "pyflakes", version = "3.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, + { name = "mccabe" }, + { name = "pycodestyle", version = "2.13.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pyflakes", version = "3.3.2", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/c4/5842fc9fc94584c455543540af62fd9900faade32511fab650e9891ec225/flake8-7.2.0.tar.gz", hash = "sha256:fa558ae3f6f7dbf2b4f22663e5343b6b6023620461f8d4ff2019ef4b5ee70426", size = 48177, upload-time = "2025-03-29T20:08:39.329Z" } wheels = [ @@ -336,9 +336,9 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "mypy-extensions", marker = "python_full_version < '3.9'" }, - { name = "tomli", marker = "python_full_version < '3.9'" }, - { name = "typing-extensions", marker = "python_full_version < '3.9'" }, + { name = "mypy-extensions" }, + { name = "tomli" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b9/eb/2c92d8ea1e684440f54fa49ac5d9a5f19967b7b472a281f419e69a8d228e/mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6", size = 3216051, upload-time = "2024-12-30T16:39:07.335Z" } wheels = [ @@ -389,9 +389,9 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "mypy-extensions", marker = "python_full_version >= '3.9'" }, - { name = "tomli", marker = "python_full_version >= '3.9' and python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.9'" }, + { name = "mypy-extensions" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717, upload-time = "2025-02-05T03:50:34.655Z" } wheels = [ @@ -448,7 +448,7 @@ wheels = [ [[package]] name = "payjpv2" -version = "1.0.10" +version = "1.2.0" source = { editable = "." } dependencies = [ { name = "pydantic", version = "2.10.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, @@ -569,9 +569,9 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "annotated-types", marker = "python_full_version < '3.9'" }, - { name = "pydantic-core", version = "2.27.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" }, - { name = "typing-extensions", marker = "python_full_version < '3.9'" }, + { name = "annotated-types" }, + { name = "pydantic-core", version = "2.27.2", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b7/ae/d5220c5c52b158b1de7ca89fc5edb72f304a70a4c540c84c8844bf4008de/pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236", size = 761681, upload-time = "2025-01-24T01:42:12.693Z" } wheels = [ @@ -586,10 +586,10 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "annotated-types", marker = "python_full_version >= '3.9'" }, - { name = "pydantic-core", version = "2.33.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.9'" }, - { name = "typing-inspection", marker = "python_full_version >= '3.9'" }, + { name = "annotated-types" }, + { name = "pydantic-core", version = "2.33.2", source = { registry = "https://pypi.org/simple" } }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, ] sdist = { url = "https://files.pythonhosted.org/packages/77/ab/5250d56ad03884ab5efd07f734203943c8a8ab40d551e208af81d0257bf2/pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d", size = 786540, upload-time = "2025-04-29T20:38:55.02Z" } wheels = [ @@ -605,7 +605,7 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.9'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fc/01/f3e5ac5e7c25833db5eb555f7b7ab24cd6f8c322d3a3ad2d67a952dc0abc/pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39", size = 413443, upload-time = "2024-12-18T11:31:54.917Z" } wheels = [ @@ -718,7 +718,7 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "typing-extensions", marker = "python_full_version >= '3.9'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } wheels = [ @@ -867,8 +867,8 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "packaging", marker = "python_full_version < '3.9'" }, - { name = "tomli", marker = "python_full_version < '3.9'" }, + { name = "packaging" }, + { name = "tomli" }, ] sdist = { url = "https://files.pythonhosted.org/packages/bb/19/441e0624a8afedd15bbcce96df1b80479dd0ff0d965f5ce8fde4f2f6ffad/pyproject_api-1.8.0.tar.gz", hash = "sha256:77b8049f2feb5d33eefcc21b57f1e279636277a8ac8ad6b5871037b243778496", size = 22340, upload-time = "2024-09-18T23:18:37.805Z" } wheels = [ @@ -883,8 +883,8 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "packaging", marker = "python_full_version >= '3.9'" }, - { name = "tomli", marker = "python_full_version >= '3.9' and python_full_version < '3.11'" }, + { name = "packaging" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7e/66/fdc17e94486836eda4ba7113c0db9ac7e2f4eea1b968ee09de2fe75e391b/pyproject_api-1.9.0.tar.gz", hash = "sha256:7e8a9854b2dfb49454fae421cb86af43efbb2b2454e5646ffb7623540321ae6e", size = 22714, upload-time = "2025-01-21T18:02:00.923Z" } wheels = [ @@ -917,8 +917,8 @@ resolution-markers = [ "python_full_version < '3.8.1'", ] dependencies = [ - { name = "coverage", version = "7.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.9'" }, - { name = "pytest", marker = "python_full_version < '3.9'" }, + { name = "coverage", version = "7.6.1", source = { registry = "https://pypi.org/simple" }, extra = ["toml"] }, + { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/67/00efc8d11b630c56f15f4ad9c7f9223f1e5ec275aaae3fa9118c6a223ad2/pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857", size = 63042, upload-time = "2024-03-24T20:16:34.856Z" } wheels = [ @@ -933,8 +933,8 @@ resolution-markers = [ "python_full_version >= '3.9'", ] dependencies = [ - { name = "coverage", version = "7.8.0", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.9'" }, - { name = "pytest", marker = "python_full_version >= '3.9'" }, + { name = "coverage", version = "7.8.0", source = { registry = "https://pypi.org/simple" }, extra = ["toml"] }, + { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/25/69/5f1e57f6c5a39f81411b550027bf72842c4567ff5fd572bed1edc9e4b5d9/pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a", size = 66857, upload-time = "2025-04-05T14:07:51.592Z" } wheels = [ @@ -1074,7 +1074,7 @@ name = "typing-inspection" version = "0.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version >= '3.9'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/5c/e6082df02e215b846b4b8c0b887a64d7d08ffaba30605502639d44c06b82/typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122", size = 76222, upload-time = "2025-02-25T17:27:59.638Z" } wheels = [