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.2.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.2-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: annotate-2.4.2.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.2.tar.gz
Algorithm Hash digest
SHA256 58ebf2c3b6766e8e5474dd85735eb8564b52d29b8bf60a980f7de6d8bc46c4eb
MD5 df65eeed2bf63b3f11386c1a930f42f3
BLAKE2b-256 f2c188ea7dc4e09b68be57a26ead7ce51fef13ce56269eb2522d4f8db1a2d89d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: annotate-2.4.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9e7494d0a0331fa482373a35b5f8921e2abd941839d62f35e9b9e99b71465cb9
MD5 064acf055d1b54a2511c0272999230d2
BLAKE2b-256 26ec048abad4e626755af7889db629222c3b3d224e82c6f1f3d6ad8b73ba330c

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