This repository has been archived on 2024-05-09. You can view files and clone it, but cannot push or open issues/pull-requests.
ipodderx-core/objc/_protocols.py

32 lines
912 B
Python

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.
"""
name = unicode(name)
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():
for p in _objc.protocolsForClass(cls):
pname = p.__name__
PROTOCOL_CACHE.setdefault(pname, p)
if pname == name:
return p
raise ProtocolError("protocol %r does not exist" % (name,), name)