SYSNET Python Utilities - kompletní sada nástrojů pro Python aplikace
Project description
sysnet-pyutils
SYSNET Python Utilities Library
Knihovna obsahuje základní, v aplikacích hojně používané, utility pro Python projekty.
📋 Obsah
🚀 Instalace
Základní instalace
pip install sysnet-pyutils
Instalace z repository
git clone https://github.com/your-org/pyutils.git
cd pyutils
pip install -e .
Požadavky
- Python 3.10+
- Dependencies (automaticky nainstalovány):
pydantic>=2.0pytzpython-dateutilPyYAMLxmltodictcroniter(pro cron_utils)
⚡ Rychlý start
from sysnet_pyutils import utils as pu
# Generování identifikátorů
pid = pu.pid_next() # Vygeneruje PID
uuid = pu.uuid_next() # Vygeneruje UUID
# Práce s datumy
today = pu.today() # ISO 8601 datum
tomorrow = pu.tomorrow()
# Validace
is_valid = pu.is_valid_email("test@example.com")
is_valid_ico = pu.is_valid_ico("12345678")
# Hash funkce
hash_val = pu.hash_sha256("text")
# Konfigurace
config = pu.Config(config_path='config.yml', config_dict={'key': 'value'})
📦 Moduly
utils.py - Hlavní modul
Obsahuje nejčastěji používané utility funkce.
Singleton pattern
from sysnet_pyutils.utils import Singleton
class MyClass(metaclass=Singleton):
def __init__(self):
self.value = 42
# Vždy vrátí stejnou instanci
instance1 = MyClass()
instance2 = MyClass()
assert instance1 is instance2
Konfigurace
from sysnet_pyutils.utils import Config
# Vytvoření konfigurace
config = Config(
config_path='app_config.yml',
config_dict={'database': 'mongodb://localhost'}
)
if config.loaded:
db_url = config.config['database']
Identifikátory a validace
from sysnet_pyutils import utils as pu
# PID (12místný identifikátor s kontrolním součtem)
pid = pu.pid_next() # Generování
is_valid = pu.pid_check(pid) # Validace
corrected = pu.pid_correct("BAD_PID") # Oprava
# UUID
uuid = pu.uuid_next(uuid_type=4) # UUID verze 4
is_valid = pu.is_valid_uuid(uuid)
# IČO
is_valid = pu.is_valid_ico("27074358")
repaired = pu.repair_ico("2707435X")
# Email
is_valid = pu.is_valid_email("user@example.com")
Hash funkce
from sysnet_pyutils import utils as pu
text = "Hello World"
md5 = pu.hash_md5(text) # MD5 (zastaralé)
sha1 = pu.hash_sha1(text) # SHA-1
sha256 = pu.hash_sha256(text) # SHA-256
sha384 = pu.hash_sha384(text) # SHA-384
Datum a čas
from sysnet_pyutils import utils as pu
from datetime import date
# Aktuální datum
today = pu.today() # ISO 8601 string
tomorrow = pu.tomorrow()
# Konverze
dt = pu.date_to_datetime(date(2023, 5, 15))
dt_utc = pu.date_to_datetime_utc(date(2023, 5, 15))
iso_str = pu.date_to_iso(date(2023, 5, 15))
# Časové zóny
local_time = pu.local_now() # Lokální čas
gmt_time = pu.gmt_now() # GMT/UTC čas
Base64
from sysnet_pyutils import utils as pu
# String ↔ Base64
encoded = pu.encode_string_b64("Hello")
decoded = pu.decode_b64_string(encoded)
# File ↔ Base64
b64_data = pu.encode_file_b64("input.txt")
pu.decode_b64_to_file(b64_data, "output.txt")
Case konverze
from sysnet_pyutils import utils as pu
# String
snake = pu.to_snake("camelCase") # "camel_case"
camel = pu.to_camel("snake_case") # "snakeCase"
# Dictionary
data = {"firstName": "John", "lastName": "Doe"}
snake_dict = pu.to_snake_dict(data)
# {"first_name": "John", "last_name": "Doe"}
camel_dict = pu.to_camel_dict(snake_dict)
# {"firstName": "John", "lastName": "Doe"}
XML
from sysnet_pyutils import utils as pu
# XML → Dict
xml = "<root><name>John</name><age>30</age></root>"
data = pu.xml_to_dict(xml)
# Dict → XML
xml_str = pu.dict_to_xml(data)
CITES utility
from sysnet_pyutils import utils as pu
# Číslo ↔ Písmena (CITES notace)
letters = pu.order_to_cites(1458) # "BDB"
number = pu.cites_to_order("BDB") # 1458
Context a API klíče
from sysnet_pyutils.utils import Context, api_keys_init
# Generování API klíčů
keys = api_keys_init(agenda='my_app', amount=3)
# Použití Context pro autentizaci
config = {
'my_app': {
'api_keys': keys
}
}
ctx = Context(config=config)
if ctx.check_api_key('some_key'):
print(f"Authenticated as: {ctx.user_name}")
data_utils.py
Utility pro práci s daty, převody typů a získávání hodnot ze slovníků.
from sysnet_pyutils import data_utils as du
# Získávání hodnot ze slovníků
data = {'name': 'John', 'age': '30', 'email': 'john@example.com'}
name = du.get_dict_value_string(data, 'name')
age = du.get_dict_value_int(data, 'age')
email = du.get_dict_value_email(data, 'email')
# Konverze datumů
date_obj = du.convert_iso_to_date('2023-05-15')
date_cz = du.convert_cz_to_date('15.05.2023')
# Stránkování pro MongoDB
paging = du.paging_to_mongo(start=20, page_size=10)
# {'start': 20, 'page': 2, 'skip': 20, 'limit': 10}
# Adresa na string
address = {'street': 'Main St 123', 'city': 'Prague', 'zip': '110 00'}
addr_str = du.address_to_string(address)
domino.py
Práce s HCL Domino Data Service (DDS).
from sysnet_pyutils.domino import DdsDictionaryFactory
# Data z DDS
dds_data = {
'Form': 'Document',
'Title': 'Test Document',
'DateCreated': '2023-05-15T10:00:00',
'IsActive': '1',
'Amount': '99.99'
}
factory = DdsDictionaryFactory(dds_data)
# Získání hodnot
title = factory.get_value_string('Title')
is_active = factory.get_value_bool('IsActive')
amount = factory.get_value_float('Amount')
date_created = factory.get_value_datetime('DateCreated')
# Nastavení hodnot
factory.set_value_string('Status', 'Approved')
factory.set_value_bool('Published', True)
geo.py
Geografické transformace - konverze mezi WGS84 a S-JTSK.
from sysnet_pyutils.geo import Wgs84, JTSK
# WGS84 souřadnice (např. z GPS)
wgs = Wgs84(latitude=50.0755, longitude=14.4378, altitude=200.0)
# Konverze na S-JTSK
jtsk = JTSK(0, 0)
jtsk.from_wgs84(lon=wgs.longitude, lat=wgs.latitude, alt=wgs.altitude)
print(f"JTSK X: {jtsk.x}, Y: {jtsk.y}")
cron_utils
Validace cron výrazů (syntaktická i sémantická).
from sysnet_pyutils.cron_utils.validation import (
is_cron_syntax_valid,
has_next_occurrence,
validate_cron,
summarize_cron
)
# Syntaktická validace
is_valid = is_cron_syntax_valid("0 9 * * 1-5") # True
is_valid = is_cron_syntax_valid("60 * * * *") # False
# Sémantická validace (existuje budoucí výskyt?)
has_next = has_next_occurrence("0 0 29 2 *") # True (v přestupném roce)
has_next = has_next_occurrence("0 0 31 2 *") # False (31.2. neexistuje)
# Kompletní validace
is_valid, errors = validate_cron("0 9 * * 1-5")
if not is_valid:
print(f"Chyby: {errors}")
# Sumarizace
summary = summarize_cron("0 9 * * 1-5")
if summary.syntax_ok:
print(f"Další spuštění: {summary.next_run}")
models.general
Datové modely kompatibilní s FastAPI a Pydantic.
from sysnet_pyutils.models.general import (
PersonBaseType,
LocationType,
GeoPointType,
CodeValueType,
MetadataType,
PersonTypeEnum
)
# Vytvoření osoby
person = PersonBaseType(
name="Test Company s.r.o.",
ico="12345678",
email="info@test.com",
location=LocationType(
street="Main Street 123",
city="Prague",
zip="110 00",
wgs=GeoPointType(lat=50.0755, lon=14.4378),
country=CodeValueType(code="CZ", value="Czech Republic")
)
)
# Vytvoření identifikátoru
person.unid = "3005277CB984B7FFC12587890060E2BF"
person.make_identifier() # Vytvoří identifier z unid
# Metadata
metadata = MetadataType(
title="Important Document",
form="certificate",
authorized=True
)
🧪 Testování
Knihovna obsahuje komplexní sadu testů s >90% pokrytím kódu.
Spuštění testů
# Všechny testy
pytest
# S podrobným výstupem
pytest -v
# S pokrytím kódu
pytest --cov=sysnet_pyutils --cov-report=html
# Konkrétní modul
pytest tests/test_utils.py -v
Diagnostika
# Automatická diagnostika problémů
python diagnose_tests.py
# Test runner s rozumnými defaulty
python run_tests.py
# Kontrola syntaxe
python tests/check_tests.py
Řešení problémů
Pokud testy selhávají, přečtěte si:
tests/TROUBLESHOOTING.md- Řešení běžných problémůFIXES_APPLIED.md- Dokumentace opravCONFIG_FIX.md- Specifické opravy Config testů
👨💻 Vývoj
Struktura projektu
pyutils/
├── sysnet_pyutils/ # Hlavní balíček
│ ├── __init__.py
│ ├── utils.py # Hlavní modul
│ ├── data_utils.py # Data utility
│ ├── domino.py # Domino DDS
│ ├── geo.py # Geografické transformace
│ ├── ident.py # Identifikátory
│ ├── barcode.py # Čárové kódy
│ ├── constants.py # Konstanty
│ ├── cron_utils/ # Cron utility
│ ├── models/ # Datové modely
│ ├── globalmodel/ # Globální modely
│ └── syslog/ # Syslog factory
├── tests/ # Testy (pytest)
│ ├── conftest.py # Pytest konfigurace
│ ├── test_utils.py
│ ├── test_data_utils.py
│ ├── test_geo.py
│ ├── test_cron_utils.py
│ ├── test_domino.py
│ ├── test_models_general.py
│ ├── README.md # Dokumentace testů
│ └── TROUBLESHOOTING.md # Řešení problémů
├── pytest.ini # Pytest konfigurace
├── pyproject.toml # Build konfigurace
├── README.md # Tato dokumentace
└── LICENSE # Licence
Přidání nové funkcionality
- Vytvořte funkci v příslušném modulu
- Napište testy v
tests/test_<module>.py - Spusťte testy:
pytest - Zkontrolujte pokrytí:
pytest --cov - Aktualizujte dokumentaci (README.md)
Code style
Dodržujte Python konvence:
- PEP 8 pro formátování kódu
- Type hints pro všechny veřejné funkce
- Docstringy pro všechny moduly, třídy a funkce
📚 Changelog
Verze 1.7.0 (2026-02-13)
🎉 Hlavní změny:
- ✅ Kompletní testovací pokrytí (~435 testů, 90%+ coverage)
- ✅ Opravy importů v
domino.py,log.py,ses.py - ✅ Oprava exception handling syntaxe v
domino.py - ✅ Standardizace type hints v
data_utils.py - ✅ Diagnostické nástroje pro testy
- ✅ Kompletní dokumentace testů
📁 Nové soubory:
tests/conftest.py- Pytest fixturesdiagnose_tests.py- Diagnostický nástrojrun_tests.py- Test runnertests/TROUBLESHOOTING.md- Průvodce řešením problémů- Kompletní sada testů pro všechny moduly
🔧 Opravy:
- Import chyby napříč moduly
- Config singleton konflikty v testech
- Type hints standardizace
- Exception handling syntax
Verze 1.6.0
- Přidán balíček
cron_utilspro validaci cron výrazů - Vyžaduje knihovnu
croniter
Verze 1.5.0
- Nový singleton
SyslogFactorypro odesílání logů
Verze 1.4.9
- Atribut
authorizedpřesunut doMetadataTypeBase
Verze 1.4.8
- Přidána funkce
get_dict_value_as_person_type()
Verze 1.4.4
- Přidána funkce
address_to_string()
Verze 1.4.0
- Do
PersonBaseTypepřidána strukturovaná adresalocation
Verze 1.3.10
- Do
MetadataTypeBasepřidán atributcomment
Verze 1.3.5
- Do
PersonBaseTypepřidán atributperson_printable
Verze 1.3.1
- Přidán modul
constants.py
Verze 1.3.0
- Přidána třída
Contextpro ověřování API klíčů
Verze 1.2.4
- Přidán
PersonTypeEnumz CITES modelu
Verze 1.2.0
- UUID → str v modelech (pro MongoDB)
- Přidán
BaseEnums metodouhas_value
Verze 1.1.3
PersonBaseTyperozšířen oidentifieramake_identifier()
Verze 1.1.0
- Přidán datový slovník
models.general(Pydantic)
Verze 1.0.8
- Nové utility
data_utils - Přidána validace emailů
Verze 1.0.6
- YAML konfigurace v UTF-8
- Nová třída
LoggedObject
Verze 1.0.5
- Přidána třída
DdsDictionaryFactory - Funkce
local_now(),is_valid_unid()
Verze 1.0.4
- CITES utility:
order_to_cites(),cites_to_order()
Verze 1.0.3
- Case konverze:
to_camel(),to_snake() - XML utility:
xml_to_dict(),dict_to_xml()
🛠 Systémové proměnné
Následující proměnné prostředí lze použít pro konfiguraci:
| Proměnná | Popis | Výchozí hodnota |
|---|---|---|
TZ |
Časová zóna | 'Europe/Prague' |
DEBUG |
Debug režim | True |
LOG_FORMAT |
Formát logování | '%(asctime)s - %(levelname)s in %(module)s: %(message)s' |
LOG_DATE_FORMAT |
Formát data v logu | '%d.%m.%Y %H:%M:%S' |
LOG_FILE |
Soubor pro logování | None |
PID_PREFIX |
Prefix pro PID | 'SNT' |
Příklad:
export TZ='UTC'
export DEBUG='False'
export PID_PREFIX='APP'
python my_app.py
📞 Podpora
Problém s testy?
- Přečtěte si
tests/TROUBLESHOOTING.md - Spusťte diagnostiku:
python diagnose_tests.py - Zkontrolujte
FIXES_APPLIED.mdaCONFIG_FIX.md
Našli jste bug?
- Zkontrolujte existující issues
- Vytvořte nový issue s:
- Popisem problému
- Kroky k reprodukci
- Očekávané a skutečné chování
- Verze Python a sysnet-pyutils
Chcete přispět?
- Forkněte repository
- Vytvořte feature branch
- Přidejte testy pro novou funkcionalitu
- Zajistěte, že všechny testy procházejí
- Vytvořte pull request
📄 Licence
Tento projekt je licencován pod MIT licencí - viz LICENSE soubor pro detaily.
🙏 Poděkování
Děkujeme všem přispěvatelům a uživatelům knihovny sysnet-pyutils.
Vytvořeno s ❤️ týmem SYSNET
Verze: 1.6.1
Datum: 2026-02-13
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sysnet_pyutils-1.7.0.tar.gz.
File metadata
- Download URL: sysnet_pyutils-1.7.0.tar.gz
- Upload date:
- Size: 90.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e676ab54793f669c7a7866038ebd0e638c950200eecab39475df631b655be31
|
|
| MD5 |
f67d736ac7b763b6f44b56d2efc723f1
|
|
| BLAKE2b-256 |
6393ccfa55093278db6b0c94b67592cd723811f18160f7db7538b09eb006df6f
|
File details
Details for the file sysnet_pyutils-1.7.0-py3-none-any.whl.
File metadata
- Download URL: sysnet_pyutils-1.7.0-py3-none-any.whl
- Upload date:
- Size: 60.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11a6bb8f65cf9ee3b74482fc624251f21ba7c7de3129c07a49b9794a20b84a66
|
|
| MD5 |
138eb029b2be8564e15c92d4215f392d
|
|
| BLAKE2b-256 |
e6f22bd205f95dcb53e4cfa569c2e88be72776497ff3c5885e37add98ed71a43
|