Skip to main content

Python utilities for files, strings, time, serial, structs, media, electronics, plotting, and database and more...

Project description

Xaeian

Python utilities. Zero dependencies for core. Optional extras for time, serial, media, database and more...

Install

pip install xaeian            # core
pip install xaeian[time]      # + pytz, tzlocal
pip install xaeian[serial]    # + pyserial
pip install xaeian[plot]      # + matplotlib
pip install xaeian[dsp]       # + scipy
pip install xaeian[db]        # + pymysql, psycopg2
pip install xaeian[db-async]  # + aiomysql, asyncpg, aiosqlite
pip install xaeian[mf]        # + pypdf, PyMuPDF, Pillow
pip install xaeian[pdf]       # + reportlab, Pillow
pip install xaeian[eda]       # + sexpdata, pypdf, PyMuPDF
pip install xaeian[sftp]      # + paramiko
pip install xaeian[all]       # everything

Examples

from xaeian import FILE, JSON, CSV, logger, split_str, generate_password
from xaeian.xtime import Time
from xaeian.crc import crc16_modbus
from xaeian.db import Database

# Files: auto extension, context-based paths
JSON.save("config", {"debug": True, "port": 8080})
CSV.save("users", [{"name": "Jan", "age": 30}, {"name": "Anna", "age": 25}])

# Time: parse anything, arithmetic with strings
t = Time("2025-03-01") + "2w 3d"
t.round("w") # Monday 00:00
t.to("iso") # "2025-03-17T00:00:00+01:00"

# CRC: encode/decode with Modbus, ISO, custom
frame = crc16_modbus.encode(b"\x01\x03\x00\x00\x00\x0A")
assert crc16_modbus.decode(frame) is not None

# String tools
split_str('a,"b,c",d', sep=",") # ['a', '"b,c"', 'd']
generate_password(16) # 'aB3$xY9!mN2@pQ7&'

# Database: sqlite/mysql/postgres, sync/async
db = Database("sqlite", "app.db")
db.insert("users", {"name": "Jan", "settings": {"theme": "dark"}})
db.find("users", order="name", limit=10)
async with db.transaction():
  db.update("users", {"verified": True}, "id = ?", 42)

# Plot: fluent, stacked panels, auto datetime
from xaeian.plot import Plot
(Plot(theme="dark")
  .line(t, temp, "Temperature [°C]")
  .panel()
  .line(t, hum, "Humidity [%]")
  .title("Sensors")
  .save("dashboard.png"))

# DSP: immutable signals, filters, FFT, vibration metrics
from xaeian.dsp import Signal
sig = Signal.from_accel(raw_x, fs=6666, bits=16, g_range=2)
clean = sig.highpass(10).lowpass(500)
print(f"RMS:{clean.rms:.4f}  peak_freq:{clean.fft().peak_freq:.0f}Hz")

# Binary structs: C-like encoding with CRC, bitfields, scale/offset
from xaeian.cstruct import Struct, Field, Bitfield, Type, Endian
from xaeian.crc import crc32_iso
pkt = Struct(endian=Endian.little, crc=crc32_iso)
pkt.add(
  Field(Type.uint32, "timestamp", "s"),
  Bitfield("flags", [("enabled", 1), ("error", 1), ("mode", 6)]),
  Field(Type.float, "temperature", "°C"),
)
flags = "flags": {"enabled": 1, "error": 0, "mode": 5}
raw = pkt.encode({"timestamp": 1234567890, "flags": flags, "temperature": 23.5})
pkt.decode(raw) # {"timestamp": 1234567890, "flags": {...}, "temperature": 23.5}

# Media: compress, strip metadata
from xaeian.mf.min import compress
compress("report.pdf") # → report-min.pdf
compress("photos/", max_px=1280) # → photos-min/ (recursive)

# Logging: colored, rotating
log = logger("app", file="app.log")
log.info("started") # 2025-03-01 14:32:01 INF started

CLI

xn tree .                     # directory tree
xn dupes photos/              # find duplicates
xn wifi                       # saved Wi-Fi passwords
xn min report.pdf             # compress PDF
xn min photo.jpg -f avif      # convert to AVIF
xn min photos/ --max-px 1280  # batch resize
xn meta photo.jpg -i          # strip EXIF in-place
xn ico logo.png -o favicon.ico

Modules

Module Description Docs
files FILE, DIR, PATH, JSON, CSV, INI xaeian/readme.md
files_async Async wrappers via asyncio.to_thread() xaeian/readme.md
table Lightweight tabular ops on list[dict] xaeian/readme.md
xstring Split, replace, strip comments, passwords xaeian/readme.md
xtime Datetime parsing, arithmetic, rounding xaeian/readme.md
colors ANSI 256-color terminal codes xaeian/readme.md
log Colored logging with file rotation xaeian/readme.md
crc CRC-8/16/32 with predefined variants xaeian/readme.md
cstruct Binary struct serialization (C-like) xaeian/readme.md
cmd Shell command helpers xaeian/readme.md
serial_port Serial communication with colored output xaeian/readme.md
cbash Embedded device console protocol xaeian/readme.md
plot Fluent matplotlib wrapper with stacked panels xaeian/readme.md
dsp Signal processing, SOS filters, FFT, vibration xaeian/readme.md
db Database abstraction (SQLite, MySQL, PostgreSQL) xaeian/db/readme.md
mf Compress, convert, strip metadata (PDF & images) xaeian/mf/readme.md
pdf PDF document generation (reportlab) xaeian/pdf/readme.md
eda E-series, KiCad export, NgSpice runner xaeian/eda/readme.md
net Network clients (SFTP, FTP) xaeian/net/readme.md
cli tree, dupes, wifi scripts xaeian/cli/readme.md

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

xaeian-0.5.1.tar.gz (121.0 kB view details)

Uploaded Source

Built Distribution

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

xaeian-0.5.1-py3-none-any.whl (149.1 kB view details)

Uploaded Python 3

File details

Details for the file xaeian-0.5.1.tar.gz.

File metadata

  • Download URL: xaeian-0.5.1.tar.gz
  • Upload date:
  • Size: 121.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xaeian-0.5.1.tar.gz
Algorithm Hash digest
SHA256 b74ea046f682e41cd00e05cc69c0794cf8f10935d0925cd3a8694a745d28b8df
MD5 b99f5e80e51d29e85d2050c60efb6f64
BLAKE2b-256 8f8edc0c9cdd4154954d1f9269e857caa71e054a4fe8faf00df0fb85bfcba544

See more details on using hashes here.

Provenance

The following attestation bundles were made for xaeian-0.5.1.tar.gz:

Publisher: publish.yml on Xaeian/Python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xaeian-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: xaeian-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 149.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for xaeian-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ed8030db3e37198613a1ff8d655fad2cf4405c7a8be01b76749a0db822c4b4f7
MD5 895826871df38e070b7fe179698196fd
BLAKE2b-256 10da6b0d89a124541ceea65dfd9efe8b1c01e068ef1b890924c7ee7ac73cd940

See more details on using hashes here.

Provenance

The following attestation bundles were made for xaeian-0.5.1-py3-none-any.whl:

Publisher: publish.yml on Xaeian/Python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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