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.2.tar.gz (9.6 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.2-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: typing_ex-0.1.2.tar.gz
  • Upload date:
  • Size: 9.6 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.2.tar.gz
Algorithm Hash digest
SHA256 bb131453c30291d65e43a2a75afd408c71a1d59496da292c183f4267e795f82a
MD5 409b6a7eaf806b48c4804273019e7d99
BLAKE2b-256 260d22500e35d8799add9eb5dd85a69df6aa18c41089548cca68e819267e22d0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: typing_ex-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 9.0 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1c359aaf31e610a4cffcb081ff48e9fcf648c7551bf1f2d118ff418f3b98d7f0
MD5 c4b3cdb096e905fa5528da340e0337e6
BLAKE2b-256 e8a3a9fb6ec562fb114d2d44ae0ce32bc444fd9b8f956ca1dbf2be703f622183

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