tronpytool.common.datatypes API documentation

# Module `tronpytool.common.datatypes`

Expand source code

    # --------------------------------------------------------------------
    # Copyright (c) iEXBase. All rights reserved.
    # Licensed under the MIT License.
    # See License.txt in the project root for license information.
    # --------------------------------------------------------------------

    from tronpytool.common.formatters import apply_formatters_to_dict
    from tronpytool.common.toolz import (
        concat,
        curry,
    )

    @curry
    def verify_attr(class_name, key, namespace):
        if key not in namespace:
            raise AttributeError(
                "Property {0} not found on {1} class. "
                "`{1}.factory` only accepts keyword arguments which are "
                "present on the {1} class".format(key, class_name)
            )

    class PropertyCheckingFactory(type):
        def __init__(cls, name, bases, namespace, **kargs):
            # see PEP487.  To accept kwargs in __new__, they need to be
            # filtered out here.
            super().__init__(name, bases, namespace)

        def __new__(mcs, name, bases, namespace, normalizers=None):
            all_bases = set(concat(base.__mro__ for base in bases))
            for key in namespace:
                verify_key_attr = verify_attr(name, key)
                verify_key_attr(concat(base.__dict__.keys() for base in all_bases))

            if normalizers:
                processed_namespace = apply_formatters_to_dict(
                    normalizers,
                    namespace)
            else:
                processed_namespace = namespace

            return super().__new__(mcs, name, bases, processed_namespace)

## Functions

`def verify_attr(class_name='__no__default__', key='__no__default__', namespace='__no__default__')`

## Classes

`class PropertyCheckingFactory (name, bases, namespace, **kargs)`

  type(object_or_name, bases, dict) type(object) -> the object's type type(name, bases, dict) -> a new type

  Expand source code

      class PropertyCheckingFactory(type):
          def __init__(cls, name, bases, namespace, **kargs):
              # see PEP487.  To accept kwargs in __new__, they need to be
              # filtered out here.
              super().__init__(name, bases, namespace)

          def __new__(mcs, name, bases, namespace, normalizers=None):
              all_bases = set(concat(base.__mro__ for base in bases))
              for key in namespace:
                  verify_key_attr = verify_attr(name, key)
                  verify_key_attr(concat(base.__dict__.keys() for base in all_bases))

              if normalizers:
                  processed_namespace = apply_formatters_to_dict(
                      normalizers,
                      namespace)
              else:
                  processed_namespace = namespace

              return super().__new__(mcs, name, bases, processed_namespace)

  ### Ancestors

  - builtins.type