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