mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-07-16 02:02:53 -07:00
Dependencies: * backports.functools-lru-cache 1.2.1 * jaraco.classes 1.3 * jaraco.collections 1.3.2 * jaraco.functools 1.11 * jaraco.structures 1.0 * jaraco.text 1.7 * jaraco.ui 1.4 * jaraco.windows 3.6 * more-itertools 2.2 * path.py 8.2.1 * six 1.10.0
40 lines
942 B
Python
40 lines
942 B
Python
"""
|
|
meta.py
|
|
|
|
Some useful metaclasses.
|
|
"""
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
class LeafClassesMeta(type):
|
|
"""
|
|
A metaclass for classes that keeps track of all of them that
|
|
aren't base classes.
|
|
"""
|
|
|
|
_leaf_classes = set()
|
|
|
|
def __init__(cls, name, bases, attrs):
|
|
if not hasattr(cls, '_leaf_classes'):
|
|
cls._leaf_classes = set()
|
|
leaf_classes = getattr(cls, '_leaf_classes')
|
|
leaf_classes.add(cls)
|
|
# remove any base classes
|
|
leaf_classes -= set(bases)
|
|
|
|
|
|
class TagRegistered(type):
|
|
"""
|
|
As classes of this metaclass are created, they keep a registry in the
|
|
base class of all classes by a class attribute, indicated by attr_name.
|
|
"""
|
|
attr_name = 'tag'
|
|
|
|
def __init__(cls, name, bases, namespace):
|
|
super(TagRegistered, cls).__init__(name, bases, namespace)
|
|
if not hasattr(cls, '_registry'):
|
|
cls._registry = {}
|
|
meta = cls.__class__
|
|
attr = getattr(cls, meta.attr_name, None)
|
|
if attr:
|
|
cls._registry[attr] = cls
|