Fantastic...that really did the trick! I actually made one
modification since p4python allows you to run Perforce commands by calling them
with obj.run_COMMAND(args) so the final solution was:
def _p4run(self, method,
*args):
'runs a Perforce command'
try:
if callable(method):
return method(*args)
elif hasattr(self._client, method) and callable(getattr(self._client, method)):
return getattr(self._client, method)(*args)
elif hasattr(self._client, 'run_'+method) and callable(getattr(self._client, 'run_'+method)):
return getattr(self._client, 'run_'+method)(*args)
elif hasattr(self._client, method):
raise TypeError(method) # not callable
else:
raise AttributeError(method) # no method/member with that name
except p4.P4Client.error:
raise
except:
if self._client.errors:
raise p4.P4Client.error('\n'.join(self._client.errors))
else:
raise
'runs a Perforce command'
try:
if callable(method):
return method(*args)
elif hasattr(self._client, method) and callable(getattr(self._client, method)):
return getattr(self._client, method)(*args)
elif hasattr(self._client, 'run_'+method) and callable(getattr(self._client, 'run_'+method)):
return getattr(self._client, 'run_'+method)(*args)
elif hasattr(self._client, method):
raise TypeError(method) # not callable
else:
raise AttributeError(method) # no method/member with that name
except p4.P4Client.error:
raise
except:
if self._client.errors:
raise p4.P4Client.error('\n'.join(self._client.errors))
else:
raise
Thanks,
Jeff
-----Original Message-----On 7/21/06, Smith, Jeff <[EMAIL PROTECTED]> wrote:
From: Michael P. Reilly [mailto:[EMAIL PROTECTED]
Sent: Friday, July 21, 2006 1:36 PM
To: Smith, Jeff
Cc: tutor@python.org
Subject: Re: [Tutor] Calling a function by string name--I have an object and I want to call a method that I have constructed the name for in a string.For example:str_method = 'myfun'obj.str_methodOf course, this fails. I know I could probably do this with exec but is there a better way?For context, the specific application is a wrapper to calling p4python. Note that the second return (under the else under the try) is where I want to call 'method' which is the string name of a method valid for self._client.def _p4runner(self, method, *args):
'runs a Perforce command'
try:
if callable(method):
return method(*args)
elif hasattr(self._client, method) and callable(getattr(self._client, method)):
return getattr(self._client, method)(*args)
elif hasattr(self._client, method):
raise TypeError(method) # not callable
else:
raise AttributeError(method) # no method/member with that name
else:
return self._client.method(*args)
except p4.P4Client.error:
raise
except:
if self._client.errors:
raise p4.P4Client.error('\n'.join(self._client.errors))
else:
raiseClear as mud?
Crystally murky.
-Arcege
There's so many different worlds,
So many different suns.
And we have just one world,
But we live in different ones.
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor