Skip to main content

Decorator to set a function's __annotations__ like Py3.

Project description

annotate

Function annotations.

Overview

@annotate

Decorator to set a function’s __annotations__ like Py3.

PyPI record.

Documentation.

Examples

from typing   import Optional, Tuple, Union, Sequence
from annotate import annotate

import jni

from .lib         import cached
from .jobjectbase import JObjectBase
from .jclass      import JClass
from .jobject     import JObject


class JArray(JObjectBase):
    """Java Array"""

    @classmethod
    @annotate('JArray', size=Union[int, long])
    def newBooleanArray(cls, size):
        ...
    ...
    @classmethod
    @annotate('JArray', size=Union[int, long])
    def newDoubleArray(cls, size):
        ...
    @classmethod
    @annotate('JArray', size=Union[int, long])
    def newStringArray(cls, size):
        ...
    @classmethod
    @annotate('JArray', size=Union[int, long], component_class=JClass)
    def newObjectArray(cls, size, component_class):
        ...

    @annotate(jenv=jni.JNIEnv, jarr=jni.jarray, borrowed=bool)
    def __init__(self, jenv, jarr, borrowed=False):
        ...

    def __hash__(self):
        return super(JArray, self).__hash__()

    def __len__(self):
        return self.getLength()

    @annotate(JObject, borrowed=bool)
    def asObject(self, borrowed=False):
        ...

    @cached
    @annotate(int)
    def getLength(self):
        ...

    @annotate(bool, idx=int)
    def getBoolean(self, idx):
        ...
    ...
    @annotate(float, idx=int)
    def getDouble(self, idx):
        ...
    @annotate(Optional[str], idx=int)
    def getString(self, idx):
        ...
    @annotate(Optional[JObject], idx=int)
    def getObject(self, idx):
        ...

    @annotate(idx=int, val=bool)
    def setBoolean(self, idx, val):
        ...
    @annotate(idx=int, val=str)
    def setChar(self, idx, val):
        ...
    ...
    @annotate(idx=int, val=Union[int, long])
    def setLong(self, idx, val):
        ...
    @annotate(idx=int, val=float)
    def setDouble(self, idx, val):
        ...
    @annotate(idx=int, val=Optional[str])
    def setString(self, idx, val):
        ...
    @annotate(idx=int, val=Optional[JObject])
    def setObject(self, idx, val):
        ...

    @annotate('JArray', start=int, stop=int, step=int)
    def getBooleanSlice(self, start, stop, step):
        ...
    ...
    @annotate('JArray', start=int, stop=int, step=int)
    def getDoubleSlice(self, start, stop, step):
        ...
    @annotate('JArray', start=int, stop=int, step=int)
    def getStringSlice(self, start, stop, step):
        ...
    @annotate('JArray', start=int, stop=int, step=int)
    def getObjectSlice(self, start, stop, step):
        ...

    @annotate(start=int, stop=int, step=int, val=Sequence[bool])
    def setBooleanSlice(self, start, stop, step, val):
        ...
    @annotate(start=int, stop=int, step=int, val=Union[Sequence[str], str])
    def setCharSlice(self, start, stop, step, val):
        ...
    @annotate(start=int, stop=int, step=int,
              val=Union[Sequence[Union[int,bytes]], (bytes, bytearray)])
    def setByteSlice(self, start, stop, step, val):
        ...
    ...
    @annotate(start=int, stop=int, step=int, val=Sequence[float])
    def setDoubleSlice(self, start, stop, step, val):
        ...
    @annotate(start=int, stop=int, step=int, val=Sequence[Optional[str]])
    def setStringSlice(self, start, stop, step, val):
        ...
    @annotate(start=int, stop=int, step=int, val=Sequence[Optional[JObject]])
    def setObjectSlice(self, start, stop, step, val):
        ...

    @annotate(Tuple)
    def getBooleanBuffer(self):
        with self.jvm as (jvm, jenv):
            is_copy = jni.jboolean()
            return jenv.GetBooleanArrayElements(self._jobj, is_copy), jni.sizeof(jni.jboolean), b"B", is_copy
    ...
    @annotate(Tuple)
    def getDoubleBuffer(self):
        with self.jvm as (jvm, jenv):
            is_copy = jni.jboolean()
            return jenv.GetDoubleArrayElements(self._jobj, is_copy), jni.sizeof(jni.jdouble), b"d", is_copy

    @annotate(buf=object)
    def releaseBooleanBuffer(self, buf):
        with self.jvm as (jvm, jenv):
            jenv.ReleaseBooleanArrayElements(self._jobj, jni.cast(buf, jni.POINTER(jni.jboolean)))
    ...
    @annotate(buf=object)
    def releaseDoubleBuffer(self, buf):
        with self.jvm as (jvm, jenv):
            jenv.ReleaseDoubleArrayElements(self._jobj, jni.cast(buf, jni.POINTER(jni.jdouble)))

Installation

Prerequisites:

To install run:

python -m pip install --upgrade annotate

Development

Prerequisites:

  • Development is strictly based on nox. To install it run:

    python -m pip install --upgrade nox

Visit Development page.

Installation from sources:

clone the sources:

git clone https://github.com/karpierz/annotate annotate

and run:

python -m pip install ./annotate

or on development mode:

python -m pip install --editable ./annotate

License

Copyright (c) 2012-2026 Adam Karpierz
Licensed under the zlib/libpng License
Please refer to the accompanying LICENSE file.

Authors

Sponsoring

If you would like to sponsor the development of this project, your contribution is greatly appreciated.
As I am now retired, any support helps me dedicate more time to maintaining and improving this work.

Donate

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

annotate-2.4.0.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

annotate-2.4.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file annotate-2.4.0.tar.gz.

File metadata

  • Download URL: annotate-2.4.0.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for annotate-2.4.0.tar.gz
Algorithm Hash digest
SHA256 f53fedbe1c20e1bd51ce6d36d547ea59598844f5f964d8e12772e6141b885170
MD5 b770e00ad3b555ed5bc21b47d8685803
BLAKE2b-256 3bf84132ca423f7dd723c287f7823a70890f23715b907acb5dbd3f3b3cd41bd2

See more details on using hashes here.

File details

Details for the file annotate-2.4.0-py3-none-any.whl.

File metadata

  • Download URL: annotate-2.4.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for annotate-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d06a10f78479c638ea1eae0ebb406b49d481cc99aa58c6cb3155a9940f698312
MD5 8781e9279ba14330f0f8a2b77befc574
BLAKE2b-256 8f95e7a93ddd0e62c623fc1ab61e989df6a6da36e63a7896c16f646bbf83eda3

See more details on using hashes here.

Supported by

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