Utility functions solving common but annoying problems.
Project description
ezpyzy
Utility functions solving common but annoying problems.
Installation
pip install ezpyzy
Usage
import ezpyzy as ez
Easily save and load .txt, .json, .csv, and .pkl
text_file = ez.File('foo.txt')
json_file = ez.File('bar.json')
csv_file = ez.File('baz.csv')
pkl_file = ez.File('qux.pkl')
text_file.save('Hello, world!')
json_file.save({'a': 1, 'b': 2})
csv_file.save([[1, 2], [3, 4]])
pkl_file.save({1, 2, 3, 4})
assert text_file.load() == 'Hello, world!'
assert json_file.load() == {'a': 1, 'b': 2}
assert csv_file.load() == [[1, 2], [3, 4]]
assert pkl_file.load() == {1, 2, 3, 4}
Easily cache function results in a file
@ez.autocache
def heavy_workload():
...
return {'a': 1, 'b': 2}
x = heavy_workload(save='foo.json') # Save result after calculating
x = heavy_workload(load='foo.json') # Load result without calculating
Capture all args passed to a function in a dict
@ez.allargs
def foo(a, b, c, allargs=None):
print(allargs)
return a + b + c
foo(1, 2, 3) # Prints {'a': 1, 'b': 2, 'c': 3}
Automatically fill parameters by default with object attributes
@dc.dataclass
class Foo:
a: int
b: int
c: int
@ez.update_settings
def bar(self, a=None, b=None, c=None):
return a + b + c
foo = Foo(0, 1, 2)
print(foo.bar(5)) # Prints 8
Replace dataclass attributes by mutation with type hinting
@dc.dataclass
class Foo:
a: int
b: int
c: int
foo = Foo(0, 1, 2)
ez.replace(foo, b=3, c=5)
print(foo) # Prints Foo(a=0, b=3, c=5)
with ez.replace(foo, a=2):
print(foo) # Prints Foo(a=2, b=3, c=5)
print(foo) # Prints Foo(a=0, b=3, c=5)
Bind arguments (functools.partial) with type hinting
def foo(a: int, b: int, c: int):
return a + b + c
bar = ez.bind(foo)(a=1, b=2)
print(bar(c=3)) # Prints 6
Easy notification emails
ez.email(
'recipient@gmail.com',
'Subject Line',
"""Body of email.""",
)
To use, create a file ~/.pw/gmail.json (easiest to use an app password using gmail).
{
"smtp_server": "smtp.gmail.com",
"smtp_port": 587,
"sender_email": "address@gmail.com",
"sender_password": "app_password"
}
Automatically generate human-readable names for objects
print(ez.denominate()) # Prints a cool name like "DaringBespin"
Automatically generate a short-ish UUID (12 chars)
print(ez.uuid()) # Prints something like "A5_H2ka4f33S"
Shushes stdout and stderr
with ez.shush():
print('This will not print.')
Quick hacky way to run sequential tests
with check("My first test"):
x = [1, 2, 3]
assert x[0] == 1
with check("My second test"):
x[1] = 4
assert sum(x) == 8
Print-style debugging that keeps variables from the previous run
Kind of like if jupyter notebook had a baby with using a bunch of print statements to debug code.
data = load_data_for_a_long_time()
ez.explore() # Prints nearby variables and pauses execution
process_data() # will not run yet
After moving the explore()
call and hitting enter...
data = load_data_for_a_long_time() # will not run again
process_data() # will run now
ez.explore() # Prints nearby variables and pauses execution
Dataframes but with type hinting
@dc.dataclass
class Foo(ez.Table):
id: ez.ColID = None
name: ez.ColStr = None
age: ez.ColInt = None
table = Foo.of([
['1', 'Alice', 20],
['2', 'Bob', 21],
['3', 'Charlie', 22],
])
for row in table:
print(row().name) # Type hinted. Prints Alice, Bob, Charlie
print(table)
Foo Table: 3 cols x 3 rows
id|name |age
--|-------|---
1 |Alice |20
2 |Bob |21
3 |Charlie|22
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ezpyzy-0.2.0.tar.gz
(30.6 kB
view details)
Built Distribution
ezpyzy-0.2.0-py3-none-any.whl
(34.8 kB
view details)
File details
Details for the file ezpyzy-0.2.0.tar.gz
.
File metadata
- Download URL: ezpyzy-0.2.0.tar.gz
- Upload date:
- Size: 30.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.11 Linux/6.0.14-201.fsync.fc36.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea6393c3438dab96e6c539c32bc08f7babbf8021055aa0de7c63ed2647b9a77f |
|
MD5 | 801c8fe9ba32ca4c6dc664647063e83e |
|
BLAKE2b-256 | 13f347eb3dd6ac0f2842b8e88e5007a97bdb04bf000fb7b1ab1db7625d5b2826 |
File details
Details for the file ezpyzy-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: ezpyzy-0.2.0-py3-none-any.whl
- Upload date:
- Size: 34.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.11 Linux/6.0.14-201.fsync.fc36.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9893393a17172de866e9cbd960ccf2a28395cfa4f4c0ed59c1772443183a3d78 |
|
MD5 | 20f643e477c731c1a61dad6cb81b1d14 |
|
BLAKE2b-256 | 164a3544b0a67496ded45d6754e304e7d07623c871fdbc5ca9a7d33edb2ac503 |