Utilities for converting mixed input to integers, calculating CPU limits, handling None values, importing code dynamically, and manipulating nested data.
pip install hunterMakesPy-
Convert strings, floats, binary data to validated integers — Accepts messy input like
["1", 2.0, b"3"]and returns[1, 2, 3]or fails with descriptive errors. -
Calculate CPU/concurrency limits from flexible specifications — Pass
0.75for 75% of CPUs,Truefor 1 CPU,4for exactly 4 CPUs, or-2to reserve 2 CPUs. -
Eliminate type checker warnings about None — Convert
Type | Nonereturns toTypeby validating at runtime that values are not None. -
Import Python code from dot-notation paths or file paths — Load functions or classes from
"scipy.signal.windows"or"path/to/file.py"without manual module loading. -
Create nested directories without error handling — Write to
"deep/nested/path/file.txt"and parent directories are created automatically, existing directories are silently skipped. -
Format and write Python source code automatically — Removes unused imports, sorts import statements, applies consistent formatting before writing files.
-
Extract all strings from arbitrarily nested data — Recursively traverse dictionaries, lists, tuples, sets and collect every string value into a flat list.
-
Merge multiple dictionaries with list values — Combine
{"a": [1, 2]}and{"a": [3], "b": [4]}into{"a": [1, 2, 3], "b": [4]}with optional deduplication and sorting. -
Compress NumPy arrays to compact string representations — Encode repetitive patterns and sequences using run-length encoding and Python range syntax that evaluates back to the original data.
-
Replace ambiguous numeric literals with semantic names — Use
decreasinginstead of-1,inclusivefor boundary adjustments,zeroIndexedfor index conversions, making intent explicit.
import hunterMakesPy as humpy
# Integer validation from mixed sources
ports = humpy.intInnit(["8080", 443, "22"], "server_ports")
# Flexible CPU limit calculation
workers = humpy.defineConcurrencyLimit(limit=0.75) # 6 CPUs on 8-core machine
# None-checking without type errors
config = humpy.raiseIfNone(getConfig(), "Missing configuration")
# Dynamic imports
windowFunc = humpy.importLogicalPath2Identifier("scipy.signal.windows", "hann")
# Safe file writing
humpy.writeStringToHere("content", "nested/dirs/file.txt") # Creates dirs
# String extraction from nested data
strings = humpy.stringItUp({"users": ["alice"], "config": {"host": "localhost"}})
# Returns: ["users", "alice", "config", "host", "localhost"]
# Dictionary merging
merged = humpy.updateExtendPolishDictionaryLists(
{"servers": ["chicago"]},
{"servers": ["tokyo", "chicago"]},
destroyDuplicates=True
)
# Returns: {"servers": ["chicago", "tokyo"]}Import test suites to validate custom functions that match the expected signatures:
from hunterMakesPy.tests.test_parseParameters import PytestFor_intInnit
@pytest.mark.parametrize("test_name,test_func", PytestFor_intInnit(myFunction))
def test_my_integer_validator(test_name, test_func):
test_func()