Skip to main content

SJI - Eine einfache Python-Bibliothek für Job-Initialisierung

Project description

SJI

Eine einfache Python-Bibliothek für die Initialisierung von Jobs/Skripten (Logging, Konfiguration, Ordnerstruktur).

Installation

pip install sji

Verwendung

from sji import (
  SimpleJobInit,
  get_script_version,
  apply_credential_placeholders_from_file,
)
import configparser

# __file__ an SimpleJobInit übergeben
sji = SimpleJobInit(__file__)

# Logger verwenden
sji.logger.info("Starte Job...")

# Konfiguration lesen (INI)
cfg = sji.config
value = cfg.get('section', 'key', fallback='default')

# Persistente Datei-Pfade erhalten
csv_path = sji.get_persistent_file_path('csv')

# Temporäre Datei-Pfade erhalten
tmp_path = sji.get_tmp_file_path('work.tmp')

# Versionen ermitteln
sji.logger.info(f"script_version={sji.get_job_script_version(include_git_tag=True)}")
sji.logger.info(f"config_file_hash={sji.get_config_file_hash()}")
sji.logger.info(f"config_file_version={sji.get_config_file_version()}")

# Top-Level-Funktion (unabhängig von der Klasse):
script_version = get_script_version(__file__, include_git_tag=True)

# Konfiguration mit Maskierung loggen
sji.log_config(secret_fields={"db_config": ["password", "db_password"], "api": ["api_key", "token"]})

# Optional: Credential-Ersetzung auch für extern geladene Configs nutzen
external_cfg = configparser.ConfigParser()
external_cfg.read("path/to/other.config.ini")
replaced_fields = apply_credential_placeholders_from_file(
  config=external_cfg,
  credentials_filepath="path/to/other.credentials.ini",
  logger=sji.logger,
)

Dabei werden automatisch erzeugt/genutzt:

  • logs/.log (mit optionaler Rotation)
  • tmp/ Verzeichnis
  • .config.ini für Einstellungen

Minimalbeispiel für die INI-Datei

Datei: <skriptname>.config.ini im selben Verzeichnis wie das Skript

[logging]
level = INFO
log_rotation_when = midnight
log_rotation_backup_count = 7

[section]
key = some-value

Credential-Ersetzung

SJI unterstützt die automatische Ersetzung von Platzhaltern in der Konfigurationsdatei durch Werte aus einer separaten credentials.ini-Datei. Dies ermöglicht es, sensible Daten wie Passwörter oder API-Schlüssel getrennt von der Hauptkonfiguration zu verwalten.

Funktionsweise

  1. Platzhalter-Format: In der config.ini können Platzhalter im Format [[[[name]]]] verwendet werden.
  2. Credentials-Datei: Die Datei <skriptname>.credentials.ini wird automatisch im selben Verzeichnis wie das Skript gesucht.
  3. Ersetzung: Platzhalter werden durch Werte aus derselben Section und mit demselben Key-Namen aus der credentials.ini ersetzt.
  4. Optional: Wenn die credentials.ini nicht existiert, bleiben die Platzhalter unverändert.

Beispiel

test_job.config.ini:

[db_config]
db_user = postgres
db_password = [[[[db_password]]]]
db_host = localhost
db_port = 5432
db_name = test_db

[api]
api_key = [[[[api_key]]]]

test_job.credentials.ini:

[db_config]
db_password = my_secret_password_123

[api]
api_key = api_key_abc123xyz

Nach der Initialisierung von SimpleJobInit werden die Platzhalter automatisch ersetzt:

  • db_password wird zu my_secret_password_123
  • api_key wird zu api_key_abc123xyz

Hinweise

  • Die credentials.ini sollte nicht in Versionskontrolle (Git) eingecheckt werden
  • Platzhalter können nur durch Werte aus derselben Section ersetzt werden
  • Wenn ein Platzhalter nicht in der credentials.ini gefunden wird, bleibt er unverändert
  • Die Ersetzung erfolgt automatisch beim Laden der Konfiguration
  • Die Ersetzungslogik kann auch unabhängig genutzt werden über apply_credential_placeholders(...) oder apply_credential_placeholders_from_file(...)

API

Klasse: SimpleJobInit

  • SimpleJobInit(script_file_path: str)
    • Initialisiert Logging, lädt/prüft INI-Config, erzeugt Ordner (logs, tmp)
  • Eigenschaften
    • logger: konfigurierter logging.Logger
    • config: configparser.ConfigParser
  • Methoden
    • get_tmp_file_path(file_name: str) -> str: Pfad im tmp/-Verzeichnis
    • get_persistent_file_path(file_ending: str) -> str: Pfad <skriptname>.<file_ending>
    • get_job_script_version(include_git_tag: bool = False) -> str: ermittelt Skriptversion (Git/FS)
    • get_config_file_hash() -> str: SHA-256 Hash der INI-Datei
    • get_config_file_version() -> str: cfg_<UTC-Zeit>_<sha256> basierend auf Datei-mtime und Hash
    • load_additional_config(extra_config_filepath: str, credentials_filepath: str | None = None) -> Dict[str, Set[str]]: Lädt eine zusätzliche INI in die Instanz-Config und führt Credential-Ersetzung aus (optional mit explizitem Credentials-Pfad)
    • log_config(secret_fields) -> None: loggt INI-Inhalt, maskiert definierte Felder (case-insensitive)
    • get_postgres_sqlalchemy_engine(db_config): baut SQLAlchemy-Engine aus INI-Werten

Top-Level-Funktion

  • get_script_version(script_file_path: str, include_git_tag: bool = False) -> str
    • Wie get_job_script_version, aber als freie Funktion für eigenständige Nutzung
  • apply_credential_placeholders(config, credentials, logger=None) -> Dict[str, Set[str]]
    • Ersetzt [[[[name]]]] Platzhalter in einer beliebig geladenen ConfigParser-Instanz
  • apply_credential_placeholders_from_file(config, credentials_filepath, logger=None) -> Dict[str, Set[str]]
    • Lädt Credentials aus Datei und ersetzt Platzhalter in einer beliebig geladenen ConfigParser-Instanz

Lizenz

MIT-Lizenz - siehe LICENSE für Details.

  • Project build with support of AI (Cursor IDE).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sji-0.4.3.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sji-0.4.3-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file sji-0.4.3.tar.gz.

File metadata

  • Download URL: sji-0.4.3.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for sji-0.4.3.tar.gz
Algorithm Hash digest
SHA256 43f7c7c59f94dbb3449ad1d8f774849b488bd4abb81323e8ec10b637df1f762e
MD5 fa78b68384231458920bb713a42911d8
BLAKE2b-256 fad6094d964c9a215e9d5258d3d90f6679969f29ae6b35eb1f9ae340ef1b987d

See more details on using hashes here.

File details

Details for the file sji-0.4.3-py3-none-any.whl.

File metadata

  • Download URL: sji-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for sji-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0b91e74ae90f38f2fd74f18c22fd69b30f5f20cc62662ced8274d67a82d71244
MD5 cce36c343683f7b6b472b25c8d44de90
BLAKE2b-256 1d88df994e6dabbab9bd0efc20cfad4d6e47a5da35c2616d667653de074ac32e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page