Mercurial > hg > pyloader
view pyloader/invoke.py @ 4:5ce55f6c8964
invokation works in the barest sense
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 10 May 2011 19:00:57 -0700 |
parents | 65d9a7c7ac63 |
children | a825f00fe062 |
line wrap: on
line source
import inspect import sys from cast import cast from cast import str2args def call(obj, *args, **kwargs): """call a thing with string arguments""" inspected = obj if inspect.isclass(obj): inspected = obj.__init__ # inspect the ctor try: argspec = inspect.getargspec(inspected) except TypeError: argspec = None if argspec is None: args = [cast(i) for i in args] kwargs = dict([(key, cast(value)) for key, value in kwargs.items()]) else: # TODO: get values from argspec args = [cast(i) for i in args] kwargs = dict([(key, cast(value)) for key, value in kwargs.items()]) return obj(*args, **kwargs) def main(args=sys.argv[1:]): """CLI entry point""" from loader import load from optparse import OptionParser usage = '%prog Object arg1=value1 arg2=value2 [...]' description = 'invoke an Object given string arguments' parser = OptionParser(usage=usage, description=description) if not args: parser.print_usage() parser.exit() obj = load(args[0]) obj_args, obj_kwargs = str2args(' '.join(args[1:])) print call(obj, *obj_args, **obj_kwargs) if __name__ == '__main__': main()