[Feature]: Thread-safe Multi-Instance API Client with Configuration Isolation
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Empieza por mapear los objetos exportados de nivel superior, los submódulos individuales de los controladores de API y los puntos de entrada del cliente HTTP para entender dónde se mantienen el estado singleton y la configuración. Revisa el workaround de ListTerminalsProtocol y las anotaciones existentes; se considera terminado cuando las configuraciones independientes funcionan simultáneamente y los analizadores estáticos pueden entender la API del cliente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Feature summary
Multi‑instance, thread‑safe API client with better typing
Problem statement
Background
The current Python client uses a singleton pattern for each API handler and the HTTP client. In multithreaded environments (e.g., UWSGI) this leads to thread‑safety issues and makes it impossible to use different credentials/settings for separate services (e.g., ECOM vs. POS).
A workaround is already in place: importing individual API parts from submodules and instantiating a separate HTTP client for each use‑case. However, the library’s interface still encourages the global singleton, which is not safe.
Proposed improvements
| Area | Desired change |
|---|---|
| Instance isolation | Remove the singleton pattern and allow callers to create multiple independent client instances. Each instance should accept its own configuration (API endpoint, authentication keys, HTTP client, etc.). |
| Documentation | Clearly document that the top‑level exported objects are global singletons and discourage their use in multi‑tenant or concurrent workflows. Provide examples of per‑instance creation. |
| Thread safety | Ensure no shared mutable state lives inside the client or its handler objects, so concurrent requests with different configs are safe. |
| Type hints | Improve static typing: • Functions that currently return AdyenResult | None | Unknown actually raise inside helper functions. Either raise the exception directly or return a clear Union with explicit error types. • Provide type stubs / .pyi files or refined type annotations so tools like basedpyright and mypy can understand the API signatures. • Example: Replace the ad‑hoc ListTerminalsProtocol workaround with a real protocol exposed in the library. |
My comments (for reference)
- The library is generated via an API generator, so a complete rewrite is not realistic.
- Instantiating small objects in Python has negligible memory overhead—no performance penalty.
- I am available for hire, on a consulting basis.
Proposed solution
Goal: Get a library that supports multiple concurrent clients with distinct configurations while providing robust typing for static analysis tools. This solves the thread‑safety problem and makes the ECOM/POS multi‑tenant use‑case straightforward.
Alternatives considered
No response
Additional context
No response
- Lenguaje dominante
- Python
- Estrellas
- 67
- Forks
- 51
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Adyen/adyen-python-api-library
-
[Bug] api_*_version override has no effect on PAL-based service URLsPosiblemente ocupada @cobanfurkanx la tomó hace 12 días. AbiertoBug do not stale
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
[Feature]: Foreign Exchange APIAbiertoFeature
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Adyen/adyen-python-api-library#487 · 1 comentario · 1 reacción ·
-
[Test] Add baseUrl environment tests to all service test filesPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertodo not stale Test
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
-
chore: consolidate package metadata into pyproject.toml (PEP 621)Posiblemente ocupada @erdemtuna la tomó hace 194 días. Abiertodo not stale
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
-
[Bug]: Unknown properties return NonePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertodo not stale
Dificultad 2/5 1-3 horas Aptitud para principiantes 48/100
Adyen/adyen-python-api-library#397 · 2 comentarios ·
Todos los issues de Adyen/adyen-python-api-library
Issues similares
-
documentation good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
drevendev/HungryCrab#273 ·
Los mantenedores suelen responder en 1 día
-
good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
drevendev/BeautifulRepo#19 ·
Los mantenedores suelen responder en 2 días
-
Moonshot: Kimi K3 always sends `reasoning_effort="max"`, though the API now accepts `low` and `high`Abiertoaccepted
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
UKGovernmentBEIS/inspect_ai#5939 ·
Los mantenedores suelen responder en 1 día
-
bug linux
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Fill paper for Screen2WordsAbiertoarea:data data-quality
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
reacher-z/Awesome-CUA#1468 ·
Los mantenedores suelen responder en 1 día