Skip to main content

A package for extended built-in types

Project description

typing_ex

A python package for extended typing (python 3.8+)

Notice: yet to be heavily tested, only simple tests are passed.

Frozen frozen.py

  • FrozenList: Immutable list
  • FrozenDict: Immutable dict
  • frozen_copy: Create frozen copy of supported types (Sequence, Set, Mapping)

TypeInfo type_info.py

  • TypeInfo: provide type information and run-time type checking
    • TypeInfo[...].type: type
    • TypeInfo[...]..origin: unsubscripted type
    • TypeInfo[...]..args: type arguments
    • TypeInfo[...]..name: name of type (including arguments)
    • TypeInfo.check_union(t1, t2): check if union type t1 fulfill union type t2
    • TypeInfo[...].check_value(value): check if value matches the type in type info
    • TypeInfo[...].is_*: check if type is _
# type_a | type_b is only supported when python >= 3.10
TypeInfo[list[int | str]].name # list[int | str]
TypeInfo.check_union(int | str, str | int) # True
TypeInfo.check_union(int, int | str) # True
TypeInfo.check_union(int, Union[int | str]) # True
TypeInfo.check_union(Union[int, str], Union[str, int]) # True
TypeInfo.check_union(int | str, str) # False
TypeInfo.check_union(int | str, int | float) # False
TypeInfo.check_union(Union[int, str], int | float) # False
TypeInfo[int | str].check_value(123) # True
TypeInfo[list[int | str]].check_value([1, "2", 3]) # True
TypeInfo[list[int]].check_value([1, "2", 3]) # False
TypeInfo[list[int | str]].check_value([1.0, "2", 3]) # False

TypedDefaultDict typed_defaultdict.py

  • TypedDefaultDict: combining features of TypedDict and defaultdict with type checking in __init__, __setitem__ and __setattr__

  • Good for writing schema as a class for JSON/YAML/XML/etc. data which provides both static and runtime type checking.

class TestDict(TypedDefaultDict):
    foo: str | None = "bar" # default value is "bar"
    bar: list[str] = [] # default value is []

testdict = TestDict()
testdict["foo"] # "bar"
testdict.foo # "bar"
testdict.bar # []
# check type and unexpected properties on assignment
testdict.abcd # raises `UnknownPropertyError`
testdict.foo = 123 # raises `PropertyValueError`
testdict = TestDict( # raises `PropertyValueError`
    foo = 123
)

# example of loading from JSON
with open("test.json", "r") as f:
    # will also check on init
    testdict = TestDict(json.load(f))

EnumEx enum_ex.py

  • EnumEx is a Enum like class that support enum aliasing (keeping same value but different name).
    • EnumEx.__iter__: a generator of all non-alias enum instances.
    • EnumEx.names: a tuple of all enum names.
    • EnumEx.values: a tuple of all enum values.
    • EnumEx.enums: a tuple of all enum instances.
    • EnumEx.value_type: returns __value_type__ if defined, int otherwise.
class AliasedEnum(EnumEx):
    __value_type__ = str # default is int
    foo = "1"
    foo2 = foo # alias
    bar = "2"
    bar2 = bar # alias

foo.name # "foo"
foo.value # 1

foo2.name # "foo2"
foo2.value # 1
foo2.orig_name # "foo"

bar2.name # "bar2"
bar2.value # 2
bar2.orig_name # "bar"

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

typing_ex-0.1.1.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

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

typing_ex-0.1.1-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file typing_ex-0.1.1.tar.gz.

File metadata

  • Download URL: typing_ex-0.1.1.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.12.3 CPython/3.10.12

File hashes

Hashes for typing_ex-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fbbacd9e1e5d53ac316ea05c77d2a3166b77e70dcfb90a744ebfb19a6e23eda8
MD5 51f9b1594f8675417dcddf842c237037
BLAKE2b-256 86517601a44160921760c7fda63973c94062ef0ff893e9d6b2a096d202d4ae60

See more details on using hashes here.

File details

Details for the file typing_ex-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: typing_ex-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.12.3 CPython/3.10.12

File hashes

Hashes for typing_ex-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f7d71a5ecd7a77f6384d10e368d2748c9472ebdc25c93de838bb61e23f39438a
MD5 3a1eb7b393ad867a922ac335be79fad5
BLAKE2b-256 1d4bbed29d1c0762631332d836785cb1efbe98b52b0d4f5a8eaa96d444b07244

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