teams-bots/write-message/venv/lib/python3.10/site-packages/objc/_protocols.py

35 lines
902 B
Python

from objc import _objc
__all__ = ["protocolNamed", "ProtocolError"]
class ProtocolError(_objc.error):
__module__ = "objc"
PROTOCOL_CACHE = {}
def protocolNamed(name):
"""
Returns a Protocol object for the named protocol. This is the
equivalent of @protocol(name) in Objective-C.
Raises objc.ProtocolError when the protocol does not exist.
"""
try:
return PROTOCOL_CACHE[name]
except KeyError:
pass
for p in _objc.protocolsForProcess():
pname = p.__name__
PROTOCOL_CACHE.setdefault(pname, p)
if pname == name:
return p
for cls in _objc.getClassList(True):
for p in _objc.protocolsForClass(cls):
pname = p.__name__
PROTOCOL_CACHE.setdefault(pname, p)
if pname == name:
return p
raise ProtocolError(f"protocol {name!r} does not exist", name)