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

# __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=["password", "db_password", "api_key", "token"]) 

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

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

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.0.tar.gz (10.3 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.0-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sji-0.4.0.tar.gz
  • Upload date:
  • Size: 10.3 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.0.tar.gz
Algorithm Hash digest
SHA256 e994a0d40672cb94856223898d3ecc02bf78eedb199bbea10aa1d3fbbc1c7ec2
MD5 f875ad1f8ae437387cbd1d1984648f85
BLAKE2b-256 1f8ea45f361575a316ce83e8ab9d36570481ce8225d608dc510d2d05f13704fc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sji-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 8.9 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa2494926cc058652b8bae358513a737307e0b3090287bdaf7726b59edf3fdd3
MD5 44fe7c41ec468cbc774120ab2d29d705
BLAKE2b-256 3d47d1bb6cdb36528e7f4f0a46317c89bb14c7b542aa3fe183663ae4c352466b

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