Skip to main content

Python type enforcer

Project description

Supported Python Versions pypi version Last commit Downloads

What do I need?

  • Python (3.5+)

Description

With py-strongly-typed, now typing annotations metters! Use this lib to validate provided args typing.

Be free to contribute with our GitHub project.

Get Started

  • Install

      pip install py-strongly-typed
    

Usage

  • Typing classes

     from py_strongly_typed import TypedClass
    
    
     class SomeClass(TypedClass):
         def __init__(self, first_arg: str, second_arg: int):
             self.first_arg = first_arg
             self.second_arg = second_arg
         
         def some_method(*, method_arg: list):
             pass
    
    
     instance_class = SomeClass('arg_value', second_arg=1)
     istance_class.some_method(method_arg=[1])
    

    You can also to set only __init__ method to be typed doing:

     from py_strongly_typed import TypedClass
    
    
     class SomeClass(TypedClass):
         type_all_methods: bool = False
    
         def __init__(self, first_arg: str, second_arg: int):
             self.first_arg = first_arg
             self.second_arg = second_arg
         
         def some_method(*, method_arg: list):
             pass
    
    
     instance_class = SomeClass('arg_value', second_arg=1)
     istance_class.some_method(method_arg=[1])
    

    or:

     from py_strongly_typed import TypedInit
    
    
     class SomeClass(TypedInit):
         def __init__(self, first_arg: str, second_arg: int):
             self.first_arg = first_arg
             self.second_arg = second_arg
         
         def some_method(*, method_arg: list):
             pass
    
    
     instance_class = SomeClass('arg_value', second_arg=1)
     istance_class.some_method(method_arg=[1])
    

 

  • Typing function or methods

    You can also use decorators for methods or functions typing:

      from py_strongly_typed import typed_function
    
      @typed_function
      def some_function(arg: str):
          pass
    

Objects

  • TypedClass class Used to set a class to has typing annotations validated.

    • TypedInit class Used to set a class to has typing annotations validated on __init__ only.
  • typed_function decorator Used to set a function or method to has typing annotations validated.

  • IValidateAnnotationsUseCase abstract class Interface that should be used to implement custom typing validations.

  • ValidateAnnotationsUseCase class (inherit IValidateAnnotationsUseCase) Default typing validation core.

Argument options

  • TypedClass and TypedInit

    • typing_validator [Type[IValidateAnnotationsUseCase]] [default=ValidateAnnotationsUseCase]: You can provide an custom class that validates typing.

    • type_all_methods [bool] [default=True]: Defines if all methods of the class will be type validated or only __init__.

    • ignore_float_and_integer_difference [bool] [default=True]: If True, providing an integer on a float expected or inverse will be ignored.

  • @typed_function decorator

    • typing_validator [Type[IValidateAnnotationsUseCase]]: You can provide an custom class that validates typing.

    • ignore_float_and_integer_difference [bool]: If True, providing an integer on a float expected or inverse will be ignored.

  • IValidateAnnotationsUseCase

    • func [Callable]: Function that will has be called after typing validation.
    • ignore_float_and_integer_difference [bool]: If True, providing an integer on a float expected or inverse will be ignored.

Behavior

  • When an invalid value type is provided, WrongType exception will be raised.
  • When function or method is defined with any argument missing annotation, MissingAnnotation will be raised.

Limitations

  • Generics (example: List[str]) are not supported yet.
  • Typing using or operator will validate only first one. Example: providing str or int, only str will be considered. To provide more than one expected type, use | operator or Union.
  • *args and **kwargs are not supported due to be impossible to provide typing annotations for them without Generics.

License

MIT

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

py-strongly-typed-1.1.5.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

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

py_strongly_typed-1.1.5-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file py-strongly-typed-1.1.5.tar.gz.

File metadata

  • Download URL: py-strongly-typed-1.1.5.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for py-strongly-typed-1.1.5.tar.gz
Algorithm Hash digest
SHA256 6781a9ba02ff79d807046d602ea3147589347755966c5cb699278f00ed1f1ab0
MD5 c9f57a0121f399b2ccc37902725748f1
BLAKE2b-256 e61b1c56080e6c1e77acf6941438e929e5567e7e694a60f5d9ae70207c6890f2

See more details on using hashes here.

File details

Details for the file py_strongly_typed-1.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for py_strongly_typed-1.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f7b48c577d424987bdb8ef895bced197b5c77da5b12dac44b52efc3117a4a504
MD5 8b279339c7c952c9d314d2d651c72692
BLAKE2b-256 f97e8456ebd671874df2409967dfe4cba537a5650cb6cdb2f89ea75f2d854a98

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