Skip to main content

Python Annotation System

Project description

annotate

Python Annotation System

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


Download files

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

Source Distribution

tombulled_annotate-0.1.15.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

tombulled_annotate-0.1.15-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file tombulled_annotate-0.1.15.tar.gz.

File metadata

  • Download URL: tombulled_annotate-0.1.15.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.10 Linux/5.4.0-144-generic

File hashes

Hashes for tombulled_annotate-0.1.15.tar.gz
Algorithm Hash digest
SHA256 d4ceb8ea87fbac60673fef4c1a06fa4e60585fa561f0795406c541e219afe85d
MD5 f76d498c7396facb8295167ce34d456a
BLAKE2b-256 da66b730f49b8fcd10e06a25fca36d80fc97ce4704ba0218619690655e082241

See more details on using hashes here.

File details

Details for the file tombulled_annotate-0.1.15-py3-none-any.whl.

File metadata

File hashes

Hashes for tombulled_annotate-0.1.15-py3-none-any.whl
Algorithm Hash digest
SHA256 bd51ad93d2326f632c0f35fcef7e449f9249c877b5128f0e2a8c227037c46a2c
MD5 b98c0cd7c1735a076492c94e731bf31f
BLAKE2b-256 541d7307128face90b30861e9911baa8665cdc13c94549f782057bd7d95bc1d1

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