Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

templates.py-1.0.1.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

templates.py-1.0.1-py3-none-any.whl (3.6 kB view details)

Uploaded Python 3

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

Hashes for templates.py-1.0.1.tar.gz
Algorithm Hash digest
SHA256 e62e97564b03ba8baa8fd77fbfc0b7be0321043bb544ce42ff5cf6ec621f5742
MD5 6d6306543abbd02d50df1f1bb3442a97
BLAKE2b-256 42b8be552835cb9704e58c0aafe88c8b6feddd052497e036cd6efdcc33f8cb70

See more details on using hashes here.

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

Hashes for templates.py-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4bb3a66381e23db7beac542c08841f4cfd87aa5bfdd82e0d84648e257268d7bf
MD5 07b74687542f925166e6b0a872d8aa8e
BLAKE2b-256 27360168f628502b8b248e1d1e73056fb5af848695dda6f26823cc765230252c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page