Simple function templating for Python.
Project description
templates.py
Simple function templating for Python.
Example
from templates import template
from typing import Type
@template
def cast(t: Type):
def inner(val: str):
return t(val)
return inner
casted = cast[tuple]("abc")
print(casted) # ("a", "b", "c")
Installation
Linux/macOS
python3 -m pip install -U templates.py
Windows
py -3 -m pip install -U templates.py
Usage
Start with decorating a function with templates.template
and putting the generics in your signature, like so:
from templates import template
@template
def my_template(a: str, b: str, c: str): # needs to get called using my_template[a, b, c]()
...
Now, for the actual functionality, you need to define another function inside it.
Make sure to return the inner function!
Example:
from templates import template
@template
def my_template(a: str, b: str, c: str):
def inner(test: str):
...
return inner # you always need to return the inner function
Limitations
Type Checking Issue
Due to typing_extensions.ParamSpec
being horrible, the following code will not raise an type issue (at least when using pylance)
@template
def add(a: int, b: int):
def inner(c: int) -> int:
return a + b + c
return inner
a = test[1, 2, 3](4) # only raises a runtime error
print(a)
Luckily, you can still see the needed generics when hovering over the template call.
Default Generics
Default generics are not supported:
@template
def my_template(a: str, b: str, c: str = "c"):
def inner(test: str):
...
return inner
my_template["a", "b"]("hi") # raises templates.TemplateError
Return Type Annotation
There is no good way to annotate function return type:
@template
def my_template(a: str, b: str, c: str) -> str: # typing error!
def inner(test: str):
...
return inner
my_template["a", "b", "c"]("hi")
However, you can set the return type of the inner function:
@template
def my_template(a: str, b: str, c: str):
def inner(test: str) -> str: # do this instead!!
...
return inner
my_template["a", "b", "c"]("hi")
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
Built Distribution
File details
Details for the file templates.py-1.0.1.tar.gz
.
File metadata
- Download URL: templates.py-1.0.1.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.1 keyring/18.0.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e62e97564b03ba8baa8fd77fbfc0b7be0321043bb544ce42ff5cf6ec621f5742 |
|
MD5 | 6d6306543abbd02d50df1f1bb3442a97 |
|
BLAKE2b-256 | 42b8be552835cb9704e58c0aafe88c8b6feddd052497e036cd6efdcc33f8cb70 |
File details
Details for the file templates.py-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: templates.py-1.0.1-py3-none-any.whl
- Upload date:
- Size: 3.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.1 keyring/18.0.1 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bb3a66381e23db7beac542c08841f4cfd87aa5bfdd82e0d84648e257268d7bf |
|
MD5 | 07b74687542f925166e6b0a872d8aa8e |
|
BLAKE2b-256 | 27360168f628502b8b248e1d1e73056fb5af848695dda6f26823cc765230252c |