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 | |
|---|---|---|---|
| suitkaise-0.4.14.tar.gz | 412.8 kB | 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
|