Suitkaise
Write Python at hacker-level speeds.
(pronounced exactly like the word suitcase)
All files in this repository are licensed under the Apache License 2.0, including:
- source code
- examples
- documentation
- tests
- site content code
- and everything else
Installation
pip install suitkaise
Info
Explicitly supported Python versions: 3.11 and above
Currently, suitkaise is version 0.4.14.
suitkaise contains the following modules:
cucumber: serialization enginecircuits: flow control with the Circuit and BreakingCircuit classes.processing: upgraded multiprocessing with easy shared statepaths: upgraded path class and utilities for path opssk: modifiers for functions and class methodstiming: timer class with deep statistics usable in many ways
Documentation
All documentation is available for download.
CLI:
- downloads to project root
- cwd must be within project root
suitkaise docs
Python:
from suitkaise import docs
# download to project root
docs.download()
# download to a specific path within your project
docs.download("path/within/project")
To place docs outside your project root, use the Permission context manager.
from suitkaise import docs
with docs.Permission():
docs.download("/Users/joe/Documents")
You can also view more at suitkaise.info.
Quick Start
Parallel processing with shared state
from suitkaise.processing import Share, Pool, Skprocess
import logging
# put anything on Share — literally anything
share = Share()
share.counter = 0
share.results = []
share.log = logging.getLogger("worker")
class Worker(Skprocess):
def __init__(self, share, item):
self.share = share
self.item = item
def __run__(self):
result = self.item * 2
self.share.results.append(result) # shared list
self.share.counter += 1 # shared counter
self.share.log.info(f"done: {result}") # shared logger
pool = Pool(workers=4)
pool.star().map(Worker, [(share, x) for x in range(20)])
print(share.counter) # 20
print(len(share.results)) # 20
print(share.log.handlers) # still works
Serialize anything
from suitkaise import cucumber
data = cucumber.serialize(any_object)
restored = cucumber.deserialize(data)
Time anything
from suitkaise.timing import timethis
@timethis()
def my_function():
do_work()
my_function()
print(my_function.timer.mean)
from suitkaise.timing import TimeThis
with TimeThis() as timer:
do_this()
then_this()
this_too()
# stops timing and records on exit
# get most recent time
print(timer.most_recent)
Add retry, timeout, background execution to any function
from suitkaise import sk
@sk
def fetch(url):
return requests.get(url).json()
# retry 3 times, timeout after 5 seconds each attempt
data = fetch.retry(3).timeout(5.0)("https://api.example.com")
Cross-platform paths, normalized path types
from suitkaise.paths import Skpath
path = Skpath("data/file.txt")
print(path.rp) # "data/file.txt" — same on every machine, every OS
from suitkaise.paths import autopath
@autopath()
def process(path: AnyPath):
print(path.rp) # always an Skpath, no matter what was passed in
process("data/file.txt") # str → Skpath
process(Path("data/file.txt")) # Path → Skpath
Circuit breakers
from suitkaise import Circuit
circuit = Circuit(num_shorts_to_trip=5, sleep_time_after_trip=1.0)
for request in requests:
try:
process(request)
except ServiceError:
circuit.short()
from suitkaise import BreakingCircuit
breaker = BreakingCircuit(num_shorts_to_trip=3, sleep_time_after_trip=1.0)
while not breaker.broken:
try:
result = risky_operation()
break # success
except OperationError:
breaker.short() # count the failure
if breaker.broken:
handle_failure()
For more, see the full documentation at suitkaise.info or download the docs with suitkaise docs in your terminal after installation.
Metadata
Release files for suitkaise 0.4.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| suitkaise-0.4.14.tar.gz | 412.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| suitkaise-0.4.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 895.3 kB
Release files / suitkaise-0.4.14.tar.gz
| Download URL | suitkaise-0.4.14.tar.gz |
|---|---|
| Size | 412.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
206793abb5a7cb0d76aee90d2100d25faf3ca8ecf8236eac31fec424413cfcaf
|
|
BLAKE2b-256 checksum How to use checksums |
91b234a04264406679030ffde7fb4aeeb736f4462bbafe30bf4035f4e6dbbcdc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.12
|
Release files / suitkaise-0.4.14-py3-none-any.whl
| Download URL | suitkaise-0.4.14-py3-none-any.whl |
|---|---|
| Size | 482.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
641427ef9386164544cd82c0cffc7337841ca33c8268642c9b806e7322a00080
|
|
BLAKE2b-256 checksum How to use checksums |
2cae5953dd886fb02d63eb6cac687a34372a540a3b6194809b99ccc7b7594985
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.12
|
Security for suitkaise 0.4.14
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.