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