Source code for parlay.protocols.meta_protocol
"""
Define the base Protocol classes and meta-classes.
For documentation on broker and common message types see parlay.protocols::
"""
class InvalidProtocolDeclaration(Exception):
"""
Raised when there was a problem with your protocol declaration
"""
pass
[docs]class ProtocolMeta(type):
"""
Meta-Class that will keep track of *all* message types declared
Also builds the message field lookups from the Django-model-style message class definitions
"""
protocol_registry = {}
def __init__(cls, name, bases, dct):
# register the message type
protocol_name = name if not hasattr(cls, 'name') else cls.name
cls._protocol_type_name = protocol_name
if protocol_name in ProtocolMeta.protocol_registry:
raise InvalidProtocolDeclaration(protocol_name + " has already been declared." +
"Please choose a different protocol name")
ProtocolMeta.protocol_registry[protocol_name] = cls
super(ProtocolMeta, cls).__init__(name, bases, dct)