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
    • 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.2.tar.gz (11.5 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.2-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sji-0.4.2.tar.gz
  • Upload date:
  • Size: 11.5 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.2.tar.gz
Algorithm Hash digest
SHA256 7213b5591aa4597e5d809d45c51efbbbcd8d5cf9739e709eec8b0968bf093f47
MD5 c23f9d4bcc64fd424811bd6a8dbd98f9
BLAKE2b-256 00476935f1dc4f145d1e7f42e108f976807602c973230a4558cd1b06d3aefaf6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sji-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 9.5 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d31ac87b1da10a584dd83719ddafccc509a996afc800fae629adcf5b3c266e65
MD5 95b46398f5908797df5e44d46f958725
BLAKE2b-256 c072534cacefdef2141cef9e3305e483a13b10ab37efef811831fd2d1831874e

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