Skip to content

PTHMINT-94: Http transport#45

Closed
danielcivit wants to merge 3 commits intomasterfrom
PTHMINT-94
Closed

PTHMINT-94: Http transport#45
danielcivit wants to merge 3 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.

@codecov
Copy link

codecov bot commented Feb 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.81%. Comparing base (c5e46e1) to head (06cec95).

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #45      +/-   ##
==========================================
+ Coverage   90.62%   90.81%   +0.18%     
==========================================
  Files         144      147       +3     
  Lines        2539     2579      +40     
==========================================
+ Hits         2301     2342      +41     
+ Misses        238      237       -1     

☔ 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.

Add a pluggable HTTP transport layer so callers can inject custom HTTP clients. Introduces src/multisafepay/transport (HTTP transport interface, RequestsTransport and underlying http transport), updates SDK and client to accept/select a transport, and adds example transports for httpx, requests.Session and urllib3 (including a response adapter). Includes new unit/e2e tests and test helpers for transport selection and mocks, plus minor README/pyproject tweaks.
@zulquer zulquer marked this pull request as ready for review March 3, 2026 13:17
zulquer added 2 commits March 3, 2026 15:01
Annotate client methods' context parameter as Optional[dict[str, Any]] and standardize parameter/type annotations in HTTPTransport and RequestsTransport docstrings (consistently use parenthetical param types and shorter, PEP-484-like type expressions). These edits improve typing clarity and make the transport docs consistent and easier to read.
Add copyright, Open Software License (OSL) v3.0 and disclaimer header comments to several test and support modules for legal/attribution purposes. Affected files: tests/multisafepay/e2e/examples/transport/test_custom_httpx_transport.py, tests/multisafepay/e2e/examples/transport/test_custom_requests_session_transport.py, tests/multisafepay/e2e/examples/transport/test_custom_urllib3_transport.py, tests/multisafepay/unit/transport/test_unit_transport_selection.py, tests/support/alt_http_transports.py, tests/support/mock_transport.py. No functional code changes.
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