Python Annotation System Inspired by Java Annotations
Project description
annotate
Python Annotation System Inspired by Java Annotations
About
Annotations are tags that store object metadata (e.g. for functions/classes)
Installation
From PyPI
pip install tombulled-annotate
From GitHub
pip install git+https://github.com/tombulled/annotate@main
Usage
Marker
An annotation with a fixed value
import annotate
@annotate.marker
def deprecated() -> bool:
return True
@deprecated
def foo():
pass
>>> annotate.get_annotations(foo)
{'deprecated': True}
Annotation
An annotation with a configurable value
import annotate
@annotate.annotation
def metadata(*, author: str, version: str) -> dict:
return dict(
author = author,
version = version,
)
@metadata(author='sam', version='1.0.1')
def foo():
pass
>>> annotate.get_annotations(foo)
{'metadata': {'author': 'sam', 'version': '1.0.1'}}
Repeatable Annotation
An annotation that can be used to annotate the same object multiple times
import annotate
@annotate.annotation(repeatable=True)
def tag(tag: str, /) -> str:
return tag
@tag('awesome')
@tag('cool')
@tag('funky')
def foo():
pass
>>> annotate.get_annotations(foo)
{'tag': ['funky', 'cool', 'awesome']}
Inherited Annotation
An annotation that gets added to subclasses of an annotated class
import annotate
@annotate.annotation(inherited=True)
def identifier(identifier: str, /) -> str:
return identifier
@identifier('abc')
class Class:
pass
class Subclass(Class):
pass
>>> annotate.get_annotations(Class)
{'identifier': 'abc'}
>>> annotate.get_annotations(Subclass)
{'identifier': 'abc'}
Targetted Annotation
An annotation that targets objects of specific types
import annotate
import types
@annotate.annotation(targets=(types.FunctionType,))
def description(description: str, /) -> str:
return description
@description('A really cool function')
def foo():
pass
>>> annotate.get_annotations(foo)
{'description': 'A really cool function'}
Non-Stored Annotation
import annotate
@annotate.annotation(stored=False)
def author(name: str, /) -> None:
pass
@author('Tim')
def foo():
pass
>>> annotate.get_annotations(foo)
{}
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
Close
Hashes for tombulled-annotate-0.1.14.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c64c08e92d765692bd98df318ec27bba9ed2f85219ab5c4ca087b5f04944ff2 |
|
MD5 | 8b72a5cd0335a085f55b60caf358d6da |
|
BLAKE2b-256 | 72e69a2e3c5ade64c2f22824e4bfb33c3a80413580335d1c9b345899bbdb0f45 |
Close
Hashes for tombulled_annotate-0.1.14-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1481e767a293d682a4bf9fd62b2737ca66affe5c557ce270cfa2b45b542b001 |
|
MD5 | 26d94d1298cf6ec2e60b11de6d80d160 |
|
BLAKE2b-256 | 286963873491d08820689eea6a044cec9846cc6452a0d6f42bd3319328d158cd |