EnAccess / EnAccess/OpenPAYGO-python

Provide explicit type hints and pydantic validation for robust usage

Open
#34 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
15
Forks
15
PR merge metrics
No merged PRs in 30d

Description

**Description:**
Hi team! Thanks for building such an awesome library for the OpenPAYGO ecosystem.

**Expected Behavior:**
When using the OpenPAYGO library in modern Python backend applications (like FastAPI servers or typing-heavy codebases), developers expect:

* Clear type definitions showing what arguments standard functions (like `decode_token` or `MetricsRequestHandler`) accept and return.
* When processing JSON or dictionaries from devices, malformed data should raise explicit parsing/validation errors before reaching deep token logic.

**Current Behavior:**
Currently, functions like `decode_token` and `MetricsRequestHandler` rely on loose dictionaries and typeless signatures. Passing incorrect types or malformed historical data can trigger cryptic `KeyError` or `ValueError`, making debugging difficult.

**Proposed Solution:**
Add explicit Python typing (`typing.Dict`, `typing.Optional`, etc.) to method signatures across:

* `openpaygo/token_encode.py`
* `openpaygo/token_decode.py`
* `metrics_request.py` / `metrics_response.py`

Additionally, leverage **Pydantic models** to automatically validate and parse input data, stripping invalid or unexpected fields.

**Implementation Notes:**

* Created `openpaygo/models.py` with Pydantic models:

* `MetricsDataFormat`
* `MetricsRequestData`
* `MetricsHistoricalDataStep`
* Functions in `metrics_request.py` and `metrics_response.py` now cast dictionaries into Pydantic models.
* Core files (`token_shared.py`, `token_encode.py`, `token_decode.py`) updated with type hints.
* Integration tests run successfully with all 80 tests passing.

**Benefits:**

* Improved type safety and clearer function signatures.
* Automatic input/output validation reduces runtime errors.
* Easier debugging and maintenance for developers.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.