Skip to content

Commit 33a53cb

Browse files
committed
wip data element
wip wip wip wip wip
1 parent edeee0a commit 33a53cb

16 files changed

+8944
-226
lines changed

README.md

Lines changed: 42 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -1,153 +1,55 @@
1-
# Python Template Repository including a `tox.ini`, Unittests&Coverage, Pylint & MyPy Linting Actions and a PyPI Publishing Workflow
1+
# FUNDAMEND - Formate und DAtenModelle für die ENergiewirtschaft in Deutschland
22

3-
<!--- you need to replace the `organization/repo_name` in the status badge URLs --->
3+
Dieses Repository enthält das Python-Paket `fundamend`.
44

5-
![Unittests status badge](https://github.com/Hochfrequenz/python_template_repository/workflows/Unittests/badge.svg)
6-
![Coverage status badge](https://github.com/Hochfrequenz/python_template_repository/workflows/Coverage/badge.svg)
7-
![Linting status badge](https://github.com/Hochfrequenz/python_template_repository/workflows/Linting/badge.svg)
8-
![Black status badge](https://github.com/Hochfrequenz/python_template_repository/workflows/Formatting/badge.svg)
5+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6+
![Python Versions (officially) supported](https://img.shields.io/pypi/pyversions/fundamend.svg)
7+
![Pypi status badge](https://img.shields.io/pypi/v/fundamend)
8+
![Unittests status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Unittests/badge.svg)
9+
![Coverage status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Coverage/badge.svg)
10+
![Linting status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Linting/badge.svg)
11+
![Black status badge](https://github.com/Hochfrequenz/xml-fundamend-python/workflows/Formatting/badge.svg)
912

10-
This is a template repository.
11-
It doesn't contain any useful code but only a minimal working setup for a Python project including:
13+
## Sinn und Zweck
14+
Seit 2024 bietet der BDEW (endlich) maschinenlesbare MIG- und AHB-Spezifikationen an, wo zuvor nur PDF oder Word-Dateien veröffentlicht wurden.
15+
Das ist ein wichtiger Schritt für eine echte Digitalisierung der Marktkommunikation im deutschen Energiemarkt.
1216

13-
- a basic **project structure** with
14-
- tox.ini
15-
- `pyproject.toml` where the project metadata and dependencies are defined
16-
- and a requirements.txt derived from it
17-
- an example class
18-
- an example unit test (using pytest)
19-
- ready to use **Github Actions** for
20-
- [pytest](https://pytest.org)
21-
- [code coverage measurement](https://coverage.readthedocs.io) (fails below 80% by default)
22-
- [pylint](https://pylint.org/) (only accepts 10/10 code rating by default)
23-
- [mypy](https://github.com/python/mypy) (static type checks where possible)
24-
- [black](https://github.com/psf/black) code formatter check
25-
- [isort](https://pycqa.github.io/isort/) import order check
26-
- [codespell](https://github.com/codespell-project/codespell) spell check (including an ignore list)
27-
- autoresolve dev-dependencies with `tox -e compile_requirements`
28-
- ready-to-use publishing workflow for pypi (see readme section below)
17+
Die nun maschinenlesbaren Informationen sind XML-basiert.
2918

30-
By default, it uses Python version 3.12.
31-
32-
This repository uses a [`src`-based layout](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/).
33-
This approach has many advantages and basically means for developers, that all business logic lives in the `src` directory.
34-
35-
## How to use this Repository on Your Machine
36-
37-
This introduction assumes that you have tox installed already (
38-
see [installation instructions](https://tox.readthedocs.io/en/latest/installation.html)) and that a `.toxbase` environment
39-
has been created.
40-
`.toxbase` is a project independent virtual environment-template for all the tox environments on your machine. If anything is weird during the tox installation or after the installation, try turning your computer off and on again before getting too frustrated.
41-
42-
### Powershell restrictions on Windows
43-
Also on new windows machines it is possible that the execution policy is set to restricted and you are not allowed execute scripts. You can find detailed information [here](https://learn.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3).
44-
45-
The quickest way to solve this problem: Open an Administrator Powershell (e.g. Windows PowerShell App)
46-
```ps
47-
Set-ExecutionPolicy -ExecutionPolicy AllSigned
48-
```
49-
and try again (with your regular user, not as admin).
50-
51-
### Creating the project-specifc dev environment.
52-
If all problems are solved and you're ready to start:
53-
1. clone the repository, you want to work in
54-
2. create the `dev` environment on your machine. To do this:
55-
a) Open a Powershell
56-
b) change directory to your repository
57-
and finally type
19+
Dieses Repository enthält ein kleines Python-Paket, das die XML-Dateien einliest und als Python-Objekte zur Verfügung stellt, damit sich niemand mit XML herumschlagen muss.
20+
Das ist alles.
5821

22+
## Installation und Verwendung
23+
Das Paket ist auf PyPI verfügbar und kann mit pip installiert werden:
5924
```bash
60-
tox -e dev
61-
```
62-
63-
You have now created the development environment (dev environment). It is the environment which contains both the usual requirements as well as the testing and linting tools.
64-
65-
### How to use with PyCharm
66-
67-
1. You have cloned the repository, you want to work in, and have created the virtual environment, in which the repository should be executed (`your_repo/.tox/dev`). Now, to actually work inside the newly created environment, you need to tell PyCharm (your IDE) that it should use the virtual environment - to be more precise: the interpreter of this dev environment. How to do this:
68-
a) navigate to: File ➡ Settings (Strg + Alt + S) ➡ Project: your_project ➡ Python Interpreter ➡ Add interpreter ➡ Existing
69-
b) Choose as interpreter: `your_repo\.tox\dev\Scripts\python.exe` (under windows)
70-
2. Set the default test runner of your project to pytest. How to do it:
71-
a) navigate to Files ➡ Settings ➡ Tools ➡ Python integrated tools ➡ Testing: Default test runner
72-
b) Change to "pytest"
73-
If this doesn't work anymore, see [the PyCharm docs](https://www.jetbrains.com/help/pycharm/choosing-your-testing-framework.html)
74-
3. Set the `src` directory as sources root. How to do this:
75-
right click on 'src' ➡ "Mark directory as…" ➡ sources root
76-
If this doesn't work anymore, see: [PyCharm docs](https://www.jetbrains.com/help/pycharm/content-root.html).
77-
Setting the `src` directory right, allows PyCharm to effectively suggest import paths.
78-
If you ever see something like `from src.mypackage.mymodule import ...`, then you probably forgot this step.
79-
5. Set the working directory of the unit tests to the project root (instead of the unittest directory). How to do this:
80-
a) Open any test file whose name starts with `test_` in unit tests/tests
81-
b) Right click inside the code ➡ More Run/Debug ➡ Modify Run Configuration ➡ expand Environment collapsible ➡ Working directory
82-
c) Change to `your_repo` instead of `your_repo\unittests`
83-
By doing so, the import and other file paths in the tests are relative to the repo root.
84-
If this doesn't work anymore, see: [working directory of the unit tests](https://www.jetbrains.com/help/pycharm/creating-run-debug-configuration-for-tests.html)
85-
86-
### How to use with VS Code
87-
All paths mentioned in this section are relative to the repository root.
88-
89-
1. Open the folder with VS Code.
90-
2. **Select the python interpreter** ([official docs](https://code.visualstudio.com/docs/python/environments#_manually-specify-an-interpreter)) which is created by tox. Open the command pallett with `CTRL + P` and type `Python: Select Interpreter`. Select the interpreter which is placed in `.tox/dev/Scripts/python.exe` under Windows or `.tox/dev/bin/python` under Linux and macOS.
91-
3. **Set up pytest and pylint**. Therefore we open the file `.vscode/settings.json` which should be automatically generated during the interpreter setup. If it doesn't exist, create it. Insert the following lines into the settings:
92-
93-
```json
94-
{
95-
"python.testing.unittestEnabled": false,
96-
"python.testing.nosetestsEnabled": false,
97-
"python.testing.pytestEnabled": true,
98-
"pythonTestExplorer.testFramework": "pytest",
99-
"python.testing.pytestArgs": ["unittests"],
100-
"python.linting.pylintEnabled": true
101-
}
25+
pip install fundamend
10226
```
10327

104-
4. Create a `.env` file and insert the following line
105-
106-
For Windows:
107-
108-
```
109-
PYTHONPATH=src;${PYTHONPATH}
110-
```
111-
112-
For Linux and Mac:
113-
114-
```
115-
PYTHONPATH=src:${PYTHONPATH}
28+
```python
29+
from pathlib import Path
30+
from fundamend import MigReader, MessageImplementationGuide
31+
32+
# Angenommen, mig_utilts.xml enthält:
33+
# <?xml version="1.0" encoding="UTF-8"?>
34+
# <M_UTILTS Versionsnummer="1.1c"
35+
# Veroeffentlichungsdatum="24.10.2023"
36+
# Author="BDEW">
37+
# ...
38+
# </M_UTILTS>
39+
40+
reader = MigReader(Path("pfad/zur/mig_utils.xml"))
41+
mig = reader.read()
42+
assert isinstance(mig, MessageImplementationGuide)
43+
assert mig.format == "UTILTS"
11644
```
11745

118-
This makes sure, that the imports are working for the unittests.
119-
At the moment I am not totally sure that it is the best practise, but it's getting the job done.
120-
121-
5. Enjoy 🤗
122-
123-
## Publishing on PyPI
124-
125-
This repository contains all necessary CI steps to publish any project created from it on PyPI.
126-
It uses the trusted publishers workflow as described in the [official Python documentation](https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/).
127-
It just requires some manual adjustments/settings depending on your project:
128-
129-
1. Fill out the metadata in the [`pyproject.toml`](pyproject.toml); Namely the package name and the dependencies which should be in sync with your `requirements.in`.
130-
2. Uncomment the lines in [`.github/workflows/python-publish.yml`](.github/workflows/python-publish.yml)
131-
3. Create a [new environment in your GitHub repository](https://github.com/Hochfrequenz/python_template_repository/settings/environments) and call it `release`.
132-
4. Set up a new trusted publisher [in your PYPI account](https://pypi.org/manage/account/publishing/).
133-
1. PyPI Project Name: The name which you defined in the `pyproject.toml` is the name of the project which you have to enter here.
134-
2. Owner: The GitHub organization name or GitHub username that owns the repository
135-
3. Repository name: The name of the GitHub repository that contains the publishing workflow
136-
4. Workflow name: The filename of the publishing workflow. This file should exist in the .github/workflows/ directory in the repository configured above. Here in our case: `python-publish.yml`
137-
5. Environment name: The name of the GitHub Actions environment that the above workflow uses for publishing. Here in our case: `release`
138-
5. Now create a release by clicking on "Create new release" in the right Github sidebar (or visit `github.com/your-username/your-reponame/releases/new`). This should trigger the workflow (see the "Actions" tab of your repo).
139-
6. Check if the action failed. If it succeeded your PyPI account should now show the new project. It might take some minutes until the package can be installed via `pip install packagename` because the index has to be updated.
140-
7. Now create another PyPI token with limited scope and update the Github repository secret accordingly.
141-
142-
## Contribute
143-
144-
You are very welcome to contribute to this template repository by opening a pull request against the main branch.
46+
Aktuell (Version 0.1) können nur MIGs gelesen werden.
47+
Der AHB-Teil soll aber folgen.
14548

146-
### GitHub Actions
49+
## Verwendung und Mitwirken
50+
Der Code ist MIT-lizenziert und kann daher frei verwendet werden.
51+
Wir freuen uns über Pull Requests an den main-Branch dieses Repositories.
14752

148-
- Dependabot auto-approve / -merge:
149-
- If the actor is the Dependabot bot (i.e. on every commit by Dependabot)
150-
the pull request is automatically approved and auto merge gets activated
151-
(using squash merge).
152-
Note that if you haven't enabled "auto merge" for your repository, the auto merge activation will fail.
153-
If you want to use a merge type other than "squash merge" you have to edit the workflow.
53+
## Hochfrequenz
54+
Die [Hochfrequenz Unternehmensberatung GmbH](https://www.hochfrequenz.de) ist eine Beratung für Energieversorger im deutschsprachigen Raum.
55+
Wir arbeiten größtenteils remote, haben aber auch Büros in Berlin, Bremen, Leipzig, Köln und Grünwald und attraktive [Stellenangebote](https://www.hochfrequenz.de/index.php/karriere/aktuelle-stellenausschreibungen/full-stack-entwickler).

domain-specific-terms.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
11
# contains 1 lower case word per line which are ignored in the spell_check
22
autor
3+
formate
4+
fundamend
5+
oder
6+
ist
7+
als

pyproject.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
2-
name = "bamx"
3-
description = "Python interface XML documents for MIG and AHBs, published by BDEW "
2+
name = "fundamend"
3+
description = "XML basierte Formate und DatemModelle für die Energiewirtschaft in Deutschland"
44
license = { text = "MIT" }
55
requires-python = ">=3.11"
66
authors = [{ name = "Hochfrequenz Unternehmensberatung GmbH", email = "[email protected]" }]
@@ -20,8 +20,8 @@ dependencies = [] # add all the dependencies here
2020
dynamic = ["readme", "version"]
2121

2222
[project.urls]
23-
Changelog = "https://github.com/Hochfrequenz/bdew_ahb_mig_xml-python/releases"
24-
Homepage = "https://github.com/Hochfrequenz/bdew_ahb_mig_xml-python"
23+
Changelog = "https://github.com/Hochfrequenz/xml-fundamend/releases"
24+
Homepage = "https://github.com/Hochfrequenz/xml-fundamend"
2525

2626
[tool.black]
2727
line-length = 120
@@ -52,7 +52,7 @@ fragments = [{ path = "README.md" }]
5252
source = "vcs"
5353

5454
[tool.hatch.build.hooks.vcs]
55-
version-file = "src/_bamx_version.py"
55+
version-file = "src/_fundamend_version.py"
5656
template = '''
5757
version = "{version}"
5858
'''

src/bamx/__init__.py

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/bamx/models/__init__.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/bamx/models/messageimplementationguide.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/bamx/reader/migreader.py

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/fundamend/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"""
2+
fundamend contains Formate und Datenmodelle für die Energiewirtschaft in Deutschland.
3+
pip install xml-fundamend
4+
"""
5+
from .models import MessageImplementationGuide
6+
from .reader import MigReader
7+
8+
__all__ = ["MigReader", "MessageImplementationGuide"]

src/fundamend/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
"""contains model classes representing MIGs and AHBs"""
2+
from .messageimplementationguide import MessageImplementationGuide
3+
4+
__all__ = ["MessageImplementationGuide"]

0 commit comments

Comments
 (0)