diff --git a/pyproject.toml b/pyproject.toml index c688365..00c29e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,10 +64,12 @@ disable_error_code = [ "arg-type", ] +[tool.pylint] +max-line-length = 79 + [tool.pylint."MESSAGE CONTROL"] disable = [ - "C0114", - "C0301", + "C0301", # line-too-long "C0411", "C0415", "C2801", @@ -93,6 +95,9 @@ disable = [ "W1514", ] +[tool.ruff] +line-length = 79 + [tool.ruff.lint] extend-safe-fixes = [ "D400", # docstrings should end with a period diff --git a/src/multisafepay/api/base/decorator.py b/src/multisafepay/api/base/decorator.py index 15f748a..be2f02b 100644 --- a/src/multisafepay/api/base/decorator.py +++ b/src/multisafepay/api/base/decorator.py @@ -16,7 +16,8 @@ class Decorator: Attributes ---------- - dependencies (Optional[Dict]): A dictionary of dependencies to be used by the decorator. + dependencies (Optional[Dict]): A dictionary of dependencies to be + used by the decorator. """ @@ -28,7 +29,8 @@ def __init__(self: "Decorator", dependencies: Dict = None) -> None: Parameters ---------- - dependencies (dict): A dictionary of dependencies to be used by the decorator, by default {}. + dependencies (dict): A dictionary of dependencies to be used + by the decorator, by default {}. """ self.dependencies = dependencies if dependencies is not None else {} @@ -42,7 +44,8 @@ def adapt_checkout_options( Parameters ---------- - checkout_options (Optional[dict]): A dictionary containing checkout options, by default None. + checkout_options (Optional[dict]): A dictionary containing + checkout options, by default None. Returns ------- @@ -89,7 +92,8 @@ def adapt_custom_info( Parameters ---------- - custom_info (Optional[dict]): A dictionary containing custom information, by default None. + custom_info (Optional[dict]): A dictionary containing custom + information, by default None. Returns ------- @@ -114,7 +118,8 @@ def adapt_customer( Parameters ---------- - customer (Optional[dict]): A dictionary containing customer information, by default None. + customer (Optional[dict]): A dictionary containing customer + information, by default None. Returns ------- @@ -137,7 +142,8 @@ def adapt_order_adjustment( Parameters ---------- - order_adjustment (Optional[dict]): A dictionary containing order adjustment information, by default None. + order_adjustment (Optional[dict]): A dictionary containing + order adjustment information, by default None. Returns ------- @@ -164,7 +170,8 @@ def adapt_payment_details( Parameters ---------- - payment_details (Optional[dict]): A dictionary containing payment details, by default None. + payment_details (Optional[dict]): A dictionary containing + payment details, by default None. Returns ------- @@ -191,7 +198,8 @@ def adapt_payment_methods( Parameters ---------- - payment_methods (Optional[dict]): A dictionary containing payment methods, by default None. + payment_methods (Optional[dict]): A dictionary containing + payment methods, by default None. Returns ------- @@ -216,7 +224,8 @@ def adapt_shopping_cart( Parameters ---------- - shopping_cart (Optional[dict]): A dictionary containing shopping cart information, by default None. + shopping_cart (Optional[dict]): A dictionary containing + shopping cart information, by default None. Returns ------- @@ -240,7 +249,8 @@ def adapt_related_transactions( Parameters ---------- - related_transactions (Optional[dict]): A dictionary containing related transactions, by default None. + related_transactions (Optional[dict]): A dictionary containing + related transactions, by default None. Returns ------- @@ -264,7 +274,8 @@ def adapt_apps(self: "Decorator", apps: Optional[Dict]) -> "Decorator": Parameters ---------- - apps (Optional[dict]): A dictionary containing app information, by default None. + apps (Optional[dict]): A dictionary containing app information, + by default None. Returns ------- @@ -289,7 +300,8 @@ def adapt_brands( Parameters ---------- - brands (Optional[List[Optional[dict]]]): A list of dictionaries containing brand information, by default None. + brands (Optional[List[Optional[dict]]]): A list of + dictionaries containing brand information, by default None. Returns ------- @@ -315,7 +327,8 @@ def adapt_icon_urls( Parameters ---------- - icon_urls (Optional[dict]): A dictionary containing icon URL information, by default None. + icon_urls (Optional[dict]): A dictionary containing icon URL + information, by default None. Returns ------- @@ -340,7 +353,8 @@ def adapt_tokenization( Parameters ---------- - tokenization: (dict, optional) A dictionary containing tokenization information, by default None. + tokenization: (dict, optional) A dictionary containing + tokenization information, by default None. Returns ------- @@ -367,7 +381,8 @@ def adapt_allowed_amount( Parameters ---------- - allowed_amount (Optional[dict]): A dictionary containing allowed amount information, by default None. + allowed_amount (Optional[dict]): A dictionary containing + allowed amount information, by default None. Returns ------- diff --git a/src/multisafepay/api/paths/orders/request/order_request.py b/src/multisafepay/api/paths/orders/request/order_request.py index ef6750f..ae1ffea 100644 --- a/src/multisafepay/api/paths/orders/request/order_request.py +++ b/src/multisafepay/api/paths/orders/request/order_request.py @@ -570,5 +570,5 @@ def validate_amount(self: "OrderRequest") -> "OrderRequest": OrderRequest: The validated OrderRequest object. """ - validate = validate_total_amount(self.dict()) + validate_total_amount(self.dict()) return self diff --git a/src/multisafepay/api/paths/payment_methods/response/components/__init__.py b/src/multisafepay/api/paths/payment_methods/response/components/__init__.py index 44c2a2e..68dc1b0 100644 --- a/src/multisafepay/api/paths/payment_methods/response/components/__init__.py +++ b/src/multisafepay/api/paths/payment_methods/response/components/__init__.py @@ -1 +1 @@ -"""Payment method response components for detailed payment method configurations.""" +"""Payment method response components and configurations.""" diff --git a/src/multisafepay/api/shared/cart/__init__.py b/src/multisafepay/api/shared/cart/__init__.py index 0594f99..a75f6ea 100644 --- a/src/multisafepay/api/shared/cart/__init__.py +++ b/src/multisafepay/api/shared/cart/__init__.py @@ -1 +1 @@ -"""Shopping cart components for handling cart items and shopping cart operations.""" +"""Shopping cart components for cart items and operations.""" diff --git a/src/multisafepay/api/shared/checkout/__init__.py b/src/multisafepay/api/shared/checkout/__init__.py index 32ebec2..2a5de16 100644 --- a/src/multisafepay/api/shared/checkout/__init__.py +++ b/src/multisafepay/api/shared/checkout/__init__.py @@ -1 +1 @@ -"""Checkout components for handling checkout options, tax rules, and payment configuration.""" +"""Checkout components: options, tax rules, and configuration.""" diff --git a/src/multisafepay/api/shared/checkout/tax_rule.py b/src/multisafepay/api/shared/checkout/tax_rule.py index eeac997..20de265 100644 --- a/src/multisafepay/api/shared/checkout/tax_rule.py +++ b/src/multisafepay/api/shared/checkout/tax_rule.py @@ -5,7 +5,7 @@ # See the DISCLAIMER.md file for disclaimer details. -"""Tax rule model for defining taxation rules and rates in checkout processing.""" +"""Tax rule model for taxation rules and rates.""" from typing import Any, Dict, List, Optional, Union diff --git a/src/multisafepay/api/shared/costs.py b/src/multisafepay/api/shared/costs.py index 510546f..62be945 100644 --- a/src/multisafepay/api/shared/costs.py +++ b/src/multisafepay/api/shared/costs.py @@ -5,7 +5,7 @@ # See the DISCLAIMER.md file for disclaimer details. -"""Transaction costs model for handling fees and charges in payment processing.""" +"""Transaction costs model for fees and charges.""" from typing import Optional diff --git a/src/multisafepay/api/shared/customer.py b/src/multisafepay/api/shared/customer.py index 0081f78..4549843 100644 --- a/src/multisafepay/api/shared/customer.py +++ b/src/multisafepay/api/shared/customer.py @@ -151,7 +151,8 @@ def from_dict(d: dict) -> Optional["Customer"]: Returns ------- - Optional[Customer]: A Customer instance if the dictionary is not None, otherwise None. + Optional[Customer]: A Customer instance if the dictionary is + not None, otherwise None. """ if d is None: diff --git a/src/multisafepay/api/shared/delivery.py b/src/multisafepay/api/shared/delivery.py index ba1364f..06956a7 100644 --- a/src/multisafepay/api/shared/delivery.py +++ b/src/multisafepay/api/shared/delivery.py @@ -258,7 +258,8 @@ def from_dict(d: Optional[dict]) -> Optional["Delivery"]: Returns ------- - Optional[Delivery]: A Delivery instance if the dictionary is not None, otherwise None. + Optional[Delivery]: A Delivery instance if the dictionary is + not None, otherwise None. """ if d is None: diff --git a/src/multisafepay/model/api_model.py b/src/multisafepay/model/api_model.py index 2c48905..6c86ecd 100644 --- a/src/multisafepay/model/api_model.py +++ b/src/multisafepay/model/api_model.py @@ -30,7 +30,8 @@ class Config: Attributes ---------- extra (str): - Specifies how to handle extra fields. Set to "allow" to include extra fields. + Specifies how to handle extra fields. Set to "allow" to + include extra fields. """ @@ -38,11 +39,12 @@ class Config: def to_dict(self: "ApiModel") -> dict: """ - Convert the model to a dictionary, removing null values recursively. + Convert the model to a dictionary, removing null values. Returns ------- - dict: The dictionary representation of the model with null values removed. + dict: The dictionary representation of the model with null + values removed. """ return remove_null_recursive(self.dict()) diff --git a/src/multisafepay/model/extra_model.py b/src/multisafepay/model/extra_model.py index 6b51b11..ca2eec7 100644 --- a/src/multisafepay/model/extra_model.py +++ b/src/multisafepay/model/extra_model.py @@ -25,7 +25,8 @@ class Config: Attributes ---------- extra (str): - Specifies how to handle extra fields. Set to "allow" to include extra fields. + Specifies how to handle extra fields. Set to "allow" to + include extra fields. """ diff --git a/src/multisafepay/model/inmutable_model.py b/src/multisafepay/model/inmutable_model.py index 5018d63..a87c6ce 100644 --- a/src/multisafepay/model/inmutable_model.py +++ b/src/multisafepay/model/inmutable_model.py @@ -14,7 +14,8 @@ class InmutableModel(BaseModel): """ A base model class that extends Pydantic's BaseModel. - This class is immutable, meaning its attributes cannot be changed after initialization. + This class is immutable, meaning its attributes cannot be + changed after initialization. """ class Config: @@ -24,7 +25,8 @@ class Config: Attributes ---------- allow_mutation (bool): - Specifies whether mutation of model attributes is allowed. Set to False to make the model immutable. + Specifies whether mutation of model attributes is allowed. + Set to False to make the model immutable. """ diff --git a/src/multisafepay/model/request_model.py b/src/multisafepay/model/request_model.py index ad6d6d3..98b7b3a 100644 --- a/src/multisafepay/model/request_model.py +++ b/src/multisafepay/model/request_model.py @@ -32,11 +32,12 @@ class Config: def to_dict(self: "RequestModel") -> dict: """ - Convert the model to a dictionary, removing null values recursively. + Convert the model to a dictionary, removing null values. Returns ------- - dict: The dictionary representation of the model with null values removed. + dict: The dictionary representation of the model with null + values removed. """ return remove_null_recursive(input_data=self.dict()) diff --git a/src/multisafepay/model/response_model.py b/src/multisafepay/model/response_model.py index 6c99da8..44119db 100644 --- a/src/multisafepay/model/response_model.py +++ b/src/multisafepay/model/response_model.py @@ -15,9 +15,11 @@ class ResponseModel(BaseModel): """ - A base model class for response models that extends Pydantic's BaseModel. + A base model class for response models that extends Pydantic's + BaseModel. - This class is immutable and allows extra fields to be included in the model. + This class is immutable and allows extra fields to be included + in the model. """ @@ -27,9 +29,11 @@ class Config: Attributes ---------- - allow_mutation (bool): Specifies whether mutation of model attributes is allowed. - Set to False to make the model immutable. - extra (str): Specifies how to handle extra fields. Set to "allow" to include extra fields. + allow_mutation (bool): Specifies whether mutation of model + attributes is allowed. Set to False to make the model + immutable. + extra (str): Specifies how to handle extra fields. Set to + "allow" to include extra fields. """ @@ -48,6 +52,7 @@ def from_dict(d: dict) -> Optional["ResponseModel"]: Returns ------- - Optional[ResponseModel]: The created model instance or None if the dictionary is invalid. + Optional[ResponseModel]: The created model instance or None + if the dictionary is invalid. """ diff --git a/src/multisafepay/sdk.py b/src/multisafepay/sdk.py index 0046dd6..2c23056 100644 --- a/src/multisafepay/sdk.py +++ b/src/multisafepay/sdk.py @@ -31,8 +31,8 @@ class Sdk: """ SDK class for interacting with the MultiSafePay API. - This class provides methods to manage various resources such as transactions, - gateways, payment methods, issuers, orders, and more. + This class provides methods to manage various resources such as + transactions, gateways, payment methods, issuers, orders, etc. """ def __init__( diff --git a/src/multisafepay/value_object/creditcard/cvc.py b/src/multisafepay/value_object/creditcard/cvc.py index b75559b..be03510 100644 --- a/src/multisafepay/value_object/creditcard/cvc.py +++ b/src/multisafepay/value_object/creditcard/cvc.py @@ -45,11 +45,13 @@ def validate(cls: "Cvc", cvc: str) -> str: Returns ------- - bool: True if the CVC is valid, raises InvalidArgumentException otherwise. + bool: True if the CVC is valid, raises + InvalidArgumentException otherwise. Raises ------ - InvalidArgumentException: If the CVC does not have 3 digits or is not numeric. + InvalidArgumentException: If the CVC does not have 3 digits + or is not numeric. """ cvc = cvc.replace(" ", "") diff --git a/src/multisafepay/value_object/date.py b/src/multisafepay/value_object/date.py index 509ee85..000d91f 100644 --- a/src/multisafepay/value_object/date.py +++ b/src/multisafepay/value_object/date.py @@ -57,7 +57,8 @@ def get(self: "Date", date_format: str = "%Y-%m-%d") -> str: Parameters ---------- - date_format Optional[str]: The format to return the date in (default is "%Y-%m-%d"). + date_format Optional[str]: The format to return the date in + (default is "%Y-%m-%d"). Returns ------- diff --git a/tests/multisafepay/e2e/examples/capture_manager/test_capture_reservation_cancel.py b/tests/multisafepay/e2e/examples/capture_manager/test_capture_reservation_cancel.py index 4388221..620f035 100644 --- a/tests/multisafepay/e2e/examples/capture_manager/test_capture_reservation_cancel.py +++ b/tests/multisafepay/e2e/examples/capture_manager/test_capture_reservation_cancel.py @@ -170,6 +170,6 @@ def test_capture_reservation_cancel(sdk: Sdk): assert isinstance(capture_reservation_cancel_response, CustomApiResponse) assert capture_reservation_cancel_response.get_status_code() == 200 - assert capture_reservation_cancel_response.get_body_success() == True + assert capture_reservation_cancel_response.get_body_success() is True capture_reservation = capture_reservation_cancel_response.get_data() assert isinstance(capture_reservation, CancelReservation) diff --git a/tests/multisafepay/e2e/examples/recurring_manager/test_recurring.py b/tests/multisafepay/e2e/examples/recurring_manager/test_recurring.py index 5502970..b57f8fd 100644 --- a/tests/multisafepay/e2e/examples/recurring_manager/test_recurring.py +++ b/tests/multisafepay/e2e/examples/recurring_manager/test_recurring.py @@ -155,4 +155,4 @@ def test_recurring(sdk: Sdk): assert isinstance(delete_response, CustomApiResponse) delete_data_response = delete_response.get_body_data() assert isinstance(delete_data_response, dict) - assert delete_data_response.get("removed") == True + assert delete_data_response.get("removed") is True diff --git a/tests/multisafepay/unit/api/shared/cart/test_unit_cart_item.py b/tests/multisafepay/unit/api/shared/cart/test_unit_cart_item.py index 548cb68..7953c3c 100644 --- a/tests/multisafepay/unit/api/shared/cart/test_unit_cart_item.py +++ b/tests/multisafepay/unit/api/shared/cart/test_unit_cart_item.py @@ -228,7 +228,7 @@ def test_add_tax_rate_percentage_infinite(): item.add_tax_rate_percentage(float("inf")) -def test_add_tax_rate_percentage(): +def test_add_tax_rate_percentage_valid(): """ Test that a valid tax rate percentage is correctly set as the tax table selector in a CartItem. @@ -238,7 +238,7 @@ def test_add_tax_rate_percentage(): assert item.tax_table_selector == "0.21" -def test_add_tax_rate_percentage(): +def test_add_tax_rate_percentage_zero_int(): """ Test that a 0 tax rate percentage is correctly set as the tax table selector in a CartItem. @@ -248,7 +248,7 @@ def test_add_tax_rate_percentage(): assert item.tax_table_selector == "0.0" -def test_add_tax_rate_percentage(): +def test_add_tax_rate_percentage_zero_float(): """ Test that a 0.0 tax rate percentage is correctly set as the tax table selector in a CartItem. diff --git a/tests/multisafepay/unit/client/test_unit_api_key.py b/tests/multisafepay/unit/client/test_unit_api_key.py index 62bac53..a597d0d 100644 --- a/tests/multisafepay/unit/client/test_unit_api_key.py +++ b/tests/multisafepay/unit/client/test_unit_api_key.py @@ -24,15 +24,24 @@ def test_valid_api_key_initialization(): assert api_key.api_key == "valid_api_key" -def test_invalid_api_key_initialization(): +def test_invalid_api_key_initialization_no_argument(): """ - Test raising InvalidApiKeyException for an invalid API key. + Test raising ValidationError for missing API key. """ - with pytest.raises(InvalidApiKeyException, match="Invalid API key"): + with pytest.raises(ValidationError): ApiKey() +def test_invalid_api_key_initialization_empty(): + """ + Test raising ValidationError for missing API key. + + """ + with pytest.raises(InvalidApiKeyException, match="Invalid API key"): + ApiKey(api_key="") + + def test_invalid_api_key_initialization_none(): """ Test raising InvalidApiKeyException for an invalid API key. @@ -42,7 +51,7 @@ def test_invalid_api_key_initialization_none(): ApiKey(api_key=None) -def test_invalid_api_key_initialization(): +def test_invalid_api_key_initialization_short(): """ Test raising InvalidApiKeyException for an invalid API key. diff --git a/tests/multisafepay/unit/util/test_unit_dict_utils.py b/tests/multisafepay/unit/util/test_unit_dict_utils.py index 78fc0b5..8e5e726 100644 --- a/tests/multisafepay/unit/util/test_unit_dict_utils.py +++ b/tests/multisafepay/unit/util/test_unit_dict_utils.py @@ -180,5 +180,5 @@ def test_dict_empty(): """ - assert dict_empty({}) == True - assert dict_empty({"a": 1}) == False + assert dict_empty({}) is True + assert dict_empty({"a": 1}) is False