pyneric.meta¶
The pyneric.meta module contains helpers for metaclassing.
-
class
pyneric.meta.MetadataBehaviour(metadata_attr='__metadata__', propagate_attr='__propagate__', base_override_attr='__base_overrides__', validate_prefix='validate_', storage_attr='__metadata__', storage_class=<class 'dict'>, metadata_getter='_get_metadata', validate_transforms=False)[source]¶ Bases:
objectThe behaviour of a
Metaclass.This behaviour defines how the metadata in a
Metaclassis defined and managed. The default behaviour should work for most needs unless there are conflicting attributes or methods. Another reason to use non-default behaviour would be to applyMetaclassto an existing metadata management paradigm.-
metadata_attr¶ The name of a class attribute that may contain metadata.
The attribute may be a sequence of attribute names or a mapping of metadata values keyed by attribute name. The attribute names become identifiers of user metadata, as opposed to internally managed metadata such as
propagate_attrandstorage_attr.
-
propagate_attr¶ The attribute name that contains the propagated attribute names.
This is the name of an internally-managed metadata attribute that can be used to specify which user metadata attributes are also accessible from an instance of the metaclass.
If this is
None, then no propagation occurs.
-
base_override_attr¶ The attribute name that contains a mapping of overridden values.
This is the name of an internally-managed metadata attribute that can be used to specify user metadata values that should override values obtained from base metaclasses. If the metadata value is specified directly in the derived metaclass, then this has no effect.
If this is
None, then no metadata from bases are overridden.
-
storage_attr¶ The name of the attribute in which metadata is stored.
This is the name of a metadata behaviour attribute that is used to store the metadata in the metaclass.
This value is required because the metadata must be stored and accessed from somewhere.
-
storage_class¶ The class used to contain metadata.
The class specified must be able to accept user metadata arguments via its constructor and provide access to metadata values. If this is not a
Mapping, then the metadata values must be accessible as attributes.This value is required because the metadata must be stored and accessed somehow.
-
metadata_getter¶ The name of the class method used to retrieve metadata values.
This applies to both
Metaclassinstances and classes built with them.
-
storage_is_mapping¶ Return whether the
storage_classis aMapping.
-
define_property_if_not_descriptor(dict, attr)[source]¶ Define a property in
dictif it is not already a data descriptor.Parameters:
-
get_behavioural_data(cls)[source]¶ Return a three-tuple containing a class’s behavioural data.
Parameters: cls – The class from which to get the behavioural data. Returns: Three-tuple whose elements are metadata, propagated attributes, and base-override attributes. Return type: tuple
-
get_class_metadata(cls, bases, dict)[source]¶ Return the metadata defined in a class definition.
Parameters: Returns: All (user and internally-managed) metadata from the class (including those inherited from applicable base metaclasses)
Return type:
-
get_metadata(cls, attr=None)[source]¶ Return metadata from the given class.
Parameters: - cls (class) – The class from which to retrieve metadata.
- attr (str or None) – The attribute identifying which metadata to return.
Returns: A shallow copy of all metadata if
attrisNone; otherwise, the metadata value identified byattr.
-
-
class
pyneric.meta.Metaclass[source]¶ Bases:
typeA metaclass for managing metadata.
Metadata management can be customized by specifying a different
MetadataBehaviourinstance in the__metadata_behaviour__attribute.The following applies when default metadata behaviour is used. Metadata may be defined with in the
__metadata__attribute in the metaclass definition, which may be an iterable of attribute names or a mapping of values keys by attribute name. These defined metadata attributes can be set via attributes in the class definition and accessed via class attributes. Metadata may be propagated (as properties) to instances by specifying their attribute names in the__propagate__attribute when access to metadata from the class’s instances is desired. The__base_overrides__attribute may be set to a mapping of metadata values keyed by attribute name to automatically set those metadata values in derived metaclasses when it has not defined the metadata value itself.