Skip to content

PTHMINT-94: Http transport#45

Draft
danielcivit wants to merge 7 commits intomasterfrom
PTHMINT-94
Draft

PTHMINT-94: Http transport#45
danielcivit wants to merge 7 commits intomasterfrom
PTHMINT-94

Conversation

@danielcivit
Copy link
Member

This pull request introduces a major refactor to the SDK's HTTP transport layer, decoupling the SDK from specific HTTP client libraries and enabling flexible transport injection. The changes implement a new abstraction for HTTP communication, update the client and SDK classes to use this abstraction, and provide examples for integrating with multiple HTTP clients (requests, httpx, and urllib3). The project dependency configuration is also updated to support optional transports.

Transport Layer Abstraction and Integration

  • Introduced the HTTPTransport and HTTPResponse protocol interfaces in src/multisafepay/transport/http_transport.py to abstract HTTP communication and response handling, enabling the SDK to work with any compatible HTTP client.
  • Updated the Client and Sdk classes to accept a transport parameter instead of a concrete HTTP client, defaulting to RequestsTransport if none is provided. All request logic now uses the transport abstraction. [1] [2] [3] [4] [5] [6] [7]

Example Implementations for Multiple HTTP Clients

  • Added example transports for httpx and urllib3, demonstrating how to inject custom transport implementations and adapt responses to the SDK interface. The request_transport.py example shows advanced requests.Session usage with retry and connection pooling. [1] [2] [3]

Dependency Management and Configuration

  • Updated pyproject.toml to move requests and urllib3 to an optional extra, allowing users to install only the transports they need. Development dependencies now include python-dotenv, requests, urllib3, and httpx for example and test support. [1] [2]

Module Structure and Exports

  • Added src/multisafepay/transport/__init__.py to define the transport module's public API and ensure proper import and discoverability.
  • Minor update to src/multisafepay/__init__.py to clarify exports.

These changes make the SDK more flexible, testable, and extensible for users who want to use different HTTP clients or custom transport logic.

Migrate typing annotations to built-in generics (list, dict, etc.) and tidy imports across the codebase for Python 3.9+ compatibility. Updated various modules to replace typing.List/Dict/Type/Iterator with modern equivalents, adjusted some Optional and Union hints, and simplified imports. Added [tool.ruff] target-version = "py39" to pyproject.toml. Also tightened tests: assert recurring_id presence and use identity check for boolean in an assertion.
Update pyproject.toml to require pylint ^3.3.0 and regenerate poetry.lock (Poetry 2.2.1) to lock the updated dependencies. This ensures dev tooling uses the newer pylint release and related dependency constraints are refreshed.
Move and consolidate the [tool.ruff] block in pyproject.toml (add target-version = "py39" and remove duplicate section). Update DecimalAmount.validator signature to use a string forward reference for cls ("DecimalAmount") instead of type[...] to avoid typing/forward-reference issues on Python 3.9 and keep annotations consistet.
Declare requests (^2.32.3) and urllib3 (^2.2.2) in pyproject.toml. Update poetry.lock to reflect the added dependencies and their metadata (charset-normalizer/requests/urllib3 set to non-optional and assigned to main and dev groups), and refresh the lockfile content hash.
@codecov
Copy link

codecov bot commented Feb 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.77%. Comparing base (8b69b3b) to head (53aaf06).

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #45      +/-   ##
==========================================
+ Coverage   90.62%   90.77%   +0.15%     
==========================================
  Files         144      147       +3     
  Lines        2539     2581      +42     
==========================================
+ Hits         2301     2343      +42     
  Misses        238      238              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants