Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#41 user config #42

Merged
merged 2 commits into from
Jul 30, 2022
Merged

Feature/#41 user config #42

merged 2 commits into from
Jul 30, 2022

Conversation

pmayd
Copy link
Collaborator

@pmayd pmayd commented Jul 28, 2022

Größerer PR, der eine user config einführt und die .env damit ablöst. Umstieg auf ConfigParser, damit keine dependency zu python-dotevn mehr.

Zahlt ein auf #41

Im Detail:

  • Mit laden der library via import pygenesis wird eine settings.ini in ~/.pygenesis angelegt. Diese brauchen wir, um den tatsächlichen Konfigpfad abzuspeichern. Der User kann selbst entscheiden, wo die eigentliche Config liegen soll, aber genau diese Entscheidung muss irgendwo festgehalten werden, persistent, auch nach Programmende
  • In der settings.ini gibt es ein Key config_dir, das per default auf ~/.pygenesis zeigt.
  • Damit die library genutzt werden kann, muss eine Konfigdatei namens config.ini im Ordner config_dir sein, auf die der Key in settings.ini zeigt. Für neue Benutzer ist das noch nicht der Fall, daher kommt es beim Import von pygenesis.cube bzw. beim Laden der config via pygenesis.config.load_config zu einem Fehler: Could not find <config>. Please make sure to run init_config() first.`
  • Der Benutzer muss also zu allererst init_config() ausführen, das habe ich in pygenesis direkt verfügbar gemacht, siehe auch mein Notebook. init_config() ohne Argumente legt eine default config im config_dir an. Alternativ kann der Benutzer seinen eigenen Pfad angeben. Der Benutzer wird darauf hingewiesen, dass er noch Username und Password ergänzen muss.
  • Sobald die config.ini angelegt ist, kann load_config() zum Laden verwendet werden, siehe cube.py für ein Beispiel. Wenn der Benutzer aber vergessen hat, seine credentials einzugeben, kommt erneut ein Logger Critical error: Username and/or password are missing!
  • Der User muss also zuerst seine credentials in der config.ini ablegen. Danach ist er good to go und kann load_config() nutzen.

TL;DR:

  1. from pygenesis import init_config ausführen und init_config() mit oder ohne Pfad aufrufen, das erzeugt dann eine config.ini am angegebenen Pfad, default in ~/.pygenesis
  2. In die erzeugte config.ini Username und Password eintragen
  3. Fertig! Config benutzen via from pygenesis.config import load_config (könnte auch noch in den root namespace).

@pmayd pmayd linked an issue Jul 29, 2022 that may be closed by this pull request
Copy link
Collaborator

@codehering codehering left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sehr cool! hab nur einen kleinen Typo gefunden :-)

src/pygenesis/config.py Outdated Show resolved Hide resolved

_write_config(default_settings, DEFAULT_SETTINGS_FILE)
logger.info(
"Settings file was created. Path: %s.", DEFAULT_SETTINGS_FILE
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kein f-String?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Guter catch, tatsächlich auch ne Linter Warnung aber sehr speziell. Ich hatte davor f-string und man bekommt den Hinweis, hier explizit das alte %-printf Format zu nutzen weil das lazy ist. Der Hintergrund ist, das logger. im Verleich zu print nicht immer ausgeführt wird, weil es vom LOG-LEVEL abhängt, das der user selbst bestimmen kann, indem er setLevel aufruft. Ein f-string wird jedoch immer ausgewertet, auch wenn die eigentliche Log-Nachricht gar nicht abgeschickt wird. Daher soll man bei logger tatsächlich wohl %-Format verwenden, da hier der String so an die Funktion geht und in der Funktion erst zusammengebaut wird.

@@ -31,3 +30,10 @@ target-version = ['py39']
[build-system]
build-backend = "poetry.core.masonry.api"
requires = ["poetry-core>=1.0.0"]

[tool.pytest.ini_options]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

das musst mir mal am Dienstag genauer erklären :-)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sind Startoptionen für pytest. Die pyproject.toml ist ja die "neueste" zentrale Konfig für Python-projekte und gilt für so ziemlich alle Tools, sofern sie das neue File-Format unterstützen. Also Tools wie black, pylint etc. können auch hierüber konfiguriert werden, ich finde nur meist die alten Dateien einfacher zu lesen bzw. kenne da die Syntax oder man findet mehr Beispiele. Hier bewirkt "-s", dass auch print-Messages mit ausgegeben werden, ich starte also pytest quasi immer mit "pytest -s", damit ich auch die print-messages angezeigt bekomme, ist einfacher als immer die Tests per DebugModus auszuführen. Und -v ist für eine erhöhte Verbosität

implement a user config using configparser module

upload created doc as artifact

update module docstring
@pmayd pmayd merged commit 1779053 into dev Jul 30, 2022
@pmayd pmayd deleted the feature/#41-user-config branch July 30, 2022 19:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

config in user folder
2 participants