Dispatch function's parameters through the callstack omitting arguments on intermediary functions. (a.k.a.: stack variable)
Project description
Dispatch function’s parameters through the callstack omitting arguments on intermediary functions.
Installing
https://pypi.org/project/stackvar/
pip install -U stackvar
Example
import stackvar
def test_stackvar():
# sending within a context
with stackvar.send(send_email, email='rsanchez@example.com'):
foo()
# Use default value
send_email()
# pass specific value
send_email('jerry@example.com')
def foo():
# intermediary function
bar()
def bar():
# intermediary function
send_email()
@stackvar.receive()
def send_email(email: stackvar.Variable = 'morty@example.com'):
print(f'Sending email to={email}')
if __name__ == '__main__':
test_stackvar()
Will output
Sending email to=rsanchez@example.com Sending email to=morty@example.com Sending email to=jerry@example.com
Cheatsheet
import stackvar
import uuid
def cheat_sheet_doc():
# Using namespace (recommended method)
my_namespace = stackvar.Namespace(uuid.uuid4())
@stackvar.receive(my_namespace)
def send_email(email: stackvar.Variable = 'morty@example.com'):
print(f'Sending email to={email}')
with stackvar.send(my_namespace, email='rsanchez@example.com'):
send_email()
# Automatic namespace (solved from function)
@stackvar.receive()
def send_email2(email: stackvar.Variable = 'morty@example.com'):
print(f'Sending email to={email}')
with stackvar.send(send_email2, email='rsanchez@example.com'):
send_email2()
# Without decorator
ns_uuid2 = stackvar.Namespace(uuid.uuid4())
def send_email_nodecorator():
email1 = ns_uuid2.email1
# setting default value for a variable
email2 = getattr(ns_uuid2, 'email2', 'jerry@example.com')
print(f'Sending email1 to={email1} and {email2}')
# another fancier way to set a default
email2 = stackvar.get(ns_uuid2, email2='summer@example.com')
print(f'Sending email1 to={email1} and {email2}')
with stackvar.send(ns_uuid2, email1='rsanchez@example.com'):
send_email_nodecorator()
# No default values
ns_uuid3 = stackvar.Namespace(uuid.uuid4())
@stackvar.receive(ns_uuid3)
def send_no_default(email1: stackvar.Variable, email2: stackvar.Variable):
print(f'Sending={email1} and {email2}')
with stackvar.send(ns_uuid3,
email1='rsanchez@example.com',
email2='summer@example.com'):
send_no_default()
# Using Factory for mutable values
ns_uuid4 = stackvar.Namespace(uuid.uuid4())
@stackvar.receive(ns_uuid4)
def send_factory(email_list: stackvar.Factory = list):
email_list.append('squanchy@example.com')
print(f'Sending to={email_list}')
with stackvar.send(ns_uuid4):
send_factory()
if __name__ == '__main__':
cheat_sheet_doc()
More docs
Check examples at https://gitlab.com/joaduo/stackvar/-/tree/main/tests
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
stackvar-3.1.0.tar.gz
(5.9 kB
view details)
File details
Details for the file stackvar-3.1.0.tar.gz
.
File metadata
- Download URL: stackvar-3.1.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 054a08951e1de0e891c2c99a88f40702a5cf3aed5012f47797b111097ada7cac |
|
MD5 | 49dec9a0c019f3e0295b5beadfa69db1 |
|
BLAKE2b-256 | c5e4c33225d9390bc65fd73ea425bac8720f9ba29efcc3bfb20632e5d87109b0 |