SUThing 
SUThing /ˈsu.θɪŋ/ or /ˈsʌ.θɪŋ/ (Some Useful Things) is a collection of small, dependable utilities.
A Python utility package providing tools for file handling, timing, profiling, data comparison and hashing.
Features
- File Handling: one-line reading and writing with the format inferred from the extension (YAML, JSON, JSON Lines, CSV/TSV, text, dotenv, pickle), transparent
.gz/.bz2/.xz/.zstcompression, atomic writes and streaming reads - Timing and Profiling: a
Timercontext manager/decorator and opt-in function profiling with per-key statistics - Data Comparison: deep
diffof nested structures that reports the path of every difference, with numeric tolerance and order-insensitive matching - Hashing: stable hashes of JSON-like values, text, files and directory trees
- Small Helpers:
batched,slugify,to_jsonable,env_flag,setup_logging,utc_now_iso
Documentation
Full documentation is available at: growgraph.github.io/suthing
Installation
pip install suthing
Usage Examples
File Handling
from suthing import FileHandle, FileType
# format inferred from the extension
data = FileHandle.load("config.yaml")
# compressed by suffix, written atomically
FileHandle.dump(data, "output.json.gz")
# data shipped inside a package
defaults = FileHandle.load_resource("mypkg.data", "defaults.yaml")
# explicit format for an unrecognised extension
secret = FileHandle.load("token.secret", how=FileType.TXT)
Timing Code
from suthing import Timer
with Timer() as t:
# Your code here
pass
print(f"Execution took {t.elapsed_str}")
Profiling Functions
from suthing import Profiler, profiled
@profiled(key_args="input_size")
def my_function(input_size): ...
with Profiler() as prof:
my_function(100)
stats = prof.summary() # {"my_function(input_size=100)": ProfileStats(...)}
Deep Comparison
from suthing import diff, equals
equals(expected, actual) # bool
for d in diff(expected, actual): # where they differ
print(d) # $.users[1].name: values differ (expected='Bob', actual='Rob')
Requirements
- Python 3.11+
- pandas (imported only for CSV/TSV)
- PyYAML
- python-dotenv
- optional:
zstandardfor.zstfiles (pip install "suthing[zstd]")
Development
uv sync --group dev
uv run pytest test
uv run ty check suthing test
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. See Contributing for the full workflow.
Metadata
Release files for suthing 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| suthing-0.6.1.tar.gz | 21.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| suthing-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.9 kB
Release files / suthing-0.6.1.tar.gz
| Download URL | suthing-0.6.1.tar.gz |
|---|---|
| Size | 21.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b20f15bf922a60583905525a84c73888d3ad8686b6a0d629600a3132fe1a4563
|
|
BLAKE2b-256 checksum How to use checksums |
34f69adffe12d876cb37211d1d05d4484516ab21d85ef937e3220fc9c8f8db50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / suthing-0.6.1-py3-none-any.whl
| Download URL | suthing-0.6.1-py3-none-any.whl |
|---|---|
| Size | 26.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7013e33bb96f14ceafe7444eb4e069079a8c185036c5f4e15d146774a3b90923
|
|
BLAKE2b-256 checksum How to use checksums |
96880df5a43ba110a4f68af512cdcdfe8ee621aa051fdb46ad2dba4f48de2244
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|