32 lines
912 B
Python
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)
|