Skip to main content

work with annotated but not defined/not used attrs in class

Project description

Ver/TestedPython Ver/Os
repo/Created Commit/Last Tests/GitHubWorkflowStatus Tests/GitHubWorkflowStatus
repo/Size Commit/Count/t Commit/Count/y Commit/Count/m

annot_attrs (current v0.0.12/Ver/Pypi Latest)

DESCRIPTION_SHORT

work with annotated but not defined/not used attrs in class

DESCRIPTION_LONG

Designed to get list of annotated but not defined/not used attrs from class (not instance!).
may be helpful further in instance to check that really have values.

Features

  1. get set of unused attributes from class(not instance!)
  2. work with nested classes
  3. get values:
    • by case insensitive names
    • by dict key access method
  4. work on any object (over Obj parameter!):
    • at least for NamedTuple

License

See the LICENSE file for license rights and limitations (MIT).

Release history

See the HISTORY.md file for release history.

Installation

pip install annot-attrs

Import

from annot_attrs import *

USAGE EXAMPLES

See tests and sourcecode for other examples.


1. example1.py

# ===============================================================
### 1. inheritance
# (BEST practice - dont mess classes! use as separated object!)
from annot_attrs import *

class Cls:
    ATTR1: int
    ATTR2: int = 2

obj = Cls(1)

assert AnnotAttrs().annots_get_set(obj) == {"ATTR1", }
assert AnnotAttrs().annots_get_dict(obj) == {"ATTR1": 1, }


# ===============================================================
from annot_attrs import *

class Cls(AnnotAttrs):
    ATTR1: int
    ATTR2: int = 2

assert Cls().annots_get_set() == {"ATTR1", }

class Cls2(Cls):
    ATTR1: int = 2
    ATTR3: int

assert Cls2().annots_get_set() == {"ATTR1", "ATTR3", }

inst = Cls2()
inst.ATTR1 = 1
inst.ATTR2 = 1
inst.ATTR3 = 1

assert Cls2().annots_get_set() == {"ATTR1", "ATTR3", }

assert Cls().ATTR2 == 2
assert Cls().attr2 == 2

assert Cls()["ATTR2"] == 2
assert Cls()["attr2"] == 2

obj = Cls()
try:
    obj.annots_get_dict()
except Exx__AttrNotExist:
    pass
else:
    assert False

obj.ATTR1 = 1
assert obj.annots_get_dict() == {"ATTR1": 1}


# ===============================================================
### 2. Indepandant usage
from annot_attrs import *

try:
    class Cls(AnnotAttrs, NamedTuple):
        ATTR1: int
        ATTR2: int = 2
except TypeError:
    # TypeError: can only inherit from a NamedTuple type and Generic
    pass
else:
    assert True

class Cls(NamedTuple):
    ATTR1: int
    ATTR2: int = 2

obj = Cls(1)
assert AnnotAttrs().annots_get_set(obj) == {"ATTR1", }
assert AnnotAttrs().annots_get_dict(obj) == {"ATTR1": 1}

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

annot_attrs-0.0.12.tar.gz (8.4 kB view hashes)

Uploaded Source

Built Distribution

annot_attrs-0.0.12-py3-none-any.whl (7.4 kB view hashes)

Uploaded Python 3

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