# tmdsclient.py
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
![Python Versions (officially) supported](https://img.shields.io/pypi/pyversions/tmdsclient.svg)
![Pypi status badge](https://img.shields.io/pypi/v/tmdsclient)
![Unittests status badge](https://github.com/Hochfrequenz/tmdsclient.py/workflows/Unittests/badge.svg)
![Coverage status badge](https://github.com/Hochfrequenz/tmdsclient.py/workflows/Coverage/badge.svg)
![Linting status badge](https://github.com/Hochfrequenz/tmdsclient.py/workflows/Linting/badge.svg)
![Black status badge](https://github.com/Hochfrequenz/tmdsclient.py/workflows/Formatting/badge.svg)

This repository contains the package `tmdsclient`.
It is an async, fully typed Python client for the Technical Master Data Service (TMDS).

Its features are handwritten and extended as we need them.
So it is _not_ autogenerated from the TMDS OpenAPI.

## Installation
Install it [from PyPI](https://pypi.org/project/tmdsclient/):
```bash
pip install tmdsclient
```

## Usage
```python
from yarl import URL
from tmdsclient import TmdsClient, TmdsConfig

tmds_config = TmdsConfig(
    server_url=URL("https://my-tmds.xtk-test.org/"),
    usr="my-usr",
    pwd="my-pwd",
)
client = TmdsClient(tmds_config)
netzvertrage = await client.get_netzvertraege_for_melo("DE1234567890123456789012345678901")
```

Even though we did not fully replicate the TMDS data model (mainly [BO4E.net](https://github.com/Hochfrequenz/BO4E-dotnet/) + some wrapper classes),
we tried to make the client as flexible as possible.
You can use any unmapped field returned by TMDS by using the [`model_extra` property of pydantic](https://docs.pydantic.dev/latest/api/base_model/#pydantic.BaseModel.model_extra).

## Development
For development of this library, follow the instructions in our [Python Template Repository](https://github.com/Hochfrequenz/python_template_repository).
tl;dr: `tox -e dev` will set up a development environment for you.

### Release (CI/CD)

To release a new version of this library, [create a new release](https://github.com/Hochfrequenz/tmdsclient.py/releases/new) in GitHub.
Make sure its tag starts with `v` and the version number, e.g. `v1.2.3`.
Releases are not restricted to the main branch, but we prefer them to happen there.

## Contribute
You are very welcome to contribute to this template repository by opening a pull request against the main branch.
