Skip to content

Commit 62eed28

Browse files
authored
Add persistent storage feature (#51)
* change python versions * prepare for register persistene * remove zeroMode from examples * ignore envrc files * change loglevel and add persistence configuration * add persistence configuration * adding new library that handles the persistence * add persistence feature * update documentation to reflect persistence feature * enhance python library path * fix renamed function * add tests for new library * remove irrenelvant file * enable DEBUG mode by default in test * add new version number and add persistence documentation * optimize storage * fixing graceful stop persistence save * increase version * change logger configuration * add arc42 * add some community standards * fix some wordings * add security information * ignore venv and python version * fixes
1 parent 745ba68 commit 62eed28

22 files changed

Lines changed: 1184 additions & 118 deletions

.github/workflows/test.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
runs-on: ubuntu-latest
1212
strategy:
1313
matrix:
14-
python-version: ["3.10", "3.11", "3.12"]
14+
python-version: ["3.11", "3.12", "3.13"]
1515

1616
steps:
1717
- uses: actions/checkout@v4
@@ -27,9 +27,9 @@ jobs:
2727
- name: Lint with ruff
2828
run: |
2929
# stop the build if there are Python syntax errors or undefined names
30-
ruff check --select=E9,F63,F7,F82 --target-version=py37 .
30+
ruff check --select=E9,F63,F7,F82 --target-version=py312 .
3131
# default set of ruff rules with GitHub Annotations
32-
ruff check --target-version=py37 .
32+
ruff check --target-version=py312 .
3333
- name: Test with pytest
3434
run: |
3535
pytest

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Created by https://www.gitignore.io/api/osx,java,linux,eclipse,windows,netbeans,java-web,intellij
2+
.envrc
23

34
### Eclipse ###
45

@@ -225,3 +226,5 @@ $RECYCLE.BIN/
225226

226227
# End of https://www.gitignore.io/api/osx,java,linux,eclipse,windows,netbeans,java-web,intellij
227228
__pycache__/
229+
/.venv/
230+
/.python-version

CODE_OF_CONDUCT.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, religion, or sexual identity
10+
and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the
26+
overall community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or
31+
advances of any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email
35+
address, without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official e-mail address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at
63+
e-mail notification.
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series
86+
of actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or
93+
permanent ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within
113+
the community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.0, available at
119+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120+
121+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
122+
enforcement ladder](https://github.com/mozilla/diversity).
123+
124+
[homepage]: https://www.contributor-covenant.org
125+
126+
For answers to common questions about this code of conduct, see the FAQ at
127+
https://www.contributor-covenant.org/faq. Translations are available at
128+
https://www.contributor-covenant.org/translations.

CONTRIBUTING.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
## How to contribute to Modbus Server
2+
3+
#### **Did you find a bug?**
4+
5+
* **Do not open up a GitHub issue if the bug is a security vulnerability
6+
in modbus-server**, and instead write me a mail to [info@oberdorf-itc.de](mailto:info@oberdorf-itc.de).
7+
8+
* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/cybcon/modbus-server/issues).
9+
10+
* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/cybcon/modbus-server/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
11+
12+
#### **Did you write a patch that fixes a bug?**
13+
14+
* Open a new GitHub pull request with the patch.
15+
16+
* Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
17+
18+
* All commits needs to have a valid GPG signature
19+
20+
* All pull request checks have to pass successfully
21+
22+
* If using 3rd party components, the licence needs to be compatible with the license of this project
23+
24+
#### **Did you fix whitespace, format code, or make a purely cosmetic patch?**
25+
26+
Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability of the application will generally not be accepted.
27+
28+
#### **Do you intend to add a new feature or change an existing one?**
29+
30+
* Open a new GitHub pull request with the patch.
31+
32+
* Ensure the PR description clearly describes the new feature or the change. Include the relevant issue number if applicable.
33+
34+
* All commits needs to have a valid GPG signature
35+
36+
* All pull request checks have to pass successfully
37+
38+
* If using 3rd party components, the licence needs to be compatible with the license of this project
39+
40+
#### **Do you have questions about the source code?**
41+
42+
* Write me a mail to [info@oberdorf-itc.de](mailto:info@oberdorf-itc.de).
43+
44+
Thanks! :heart: :heart: :heart:
45+
46+
Michael

Dockerfile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
FROM alpine:3.23.3
22

33
LABEL maintainer="Michael Oberdorf IT-Consulting <info@oberdorf-itc.de>"
4-
LABEL site.local.program.version="2.0.0"
4+
LABEL site.local.program.version="2.1.0"
55

66
RUN apk upgrade --available --no-cache --update \
77
&& apk add --no-cache --update \
88
python3=3.12.12-r0 \
99
py3-pip=25.1.1-r1 \
1010
# Cleanup APK
11-
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
11+
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/* \
12+
# Prepare persistant storage
13+
&& mkdir -p /data \
14+
&& chown 1434:1434 /data
1215

1316
COPY --chown=root:root /src /
1417

@@ -19,5 +22,7 @@ EXPOSE 5020/udp
1922

2023
USER 1434:1434
2124

25+
VOLUME [ "/data" ]
26+
2227
# Start Server
2328
ENTRYPOINT ["python", "-u", "/app/modbus_server.py"]

Dockerfile.test

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
FROM alpine:3.23.2
22

33
LABEL maintainer="Michael Oberdorf IT-Consulting <info@oberdorf-itc.de>"
4-
LABEL site.local.program.version="1.4.1"
4+
LABEL site.local.program.version="2.1.0"
55

66
RUN apk upgrade --available --no-cache --update \
77
&& apk add --no-cache --update \
88
python3=3.12.12-r0 \
99
py3-pip=25.1.1-r1 \
1010
# Cleanup APK
11-
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
11+
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/* \
12+
# Prepare persistant storage
13+
&& mkdir -p /data \
14+
&& chown 1434:1434 /data
1215

1316
COPY --chown=root:root /src /
1417
COPY --chown=root:root /examples/test.json /test.json
@@ -20,5 +23,7 @@ EXPOSE 5020/udp
2023

2124
USER 1434:1434
2225

26+
VOLUME [ "/data" ]
27+
2328
# Start Server
2429
ENTRYPOINT ["python", "-u", "/app/modbus_server.py"]

0 commit comments

Comments
 (0)