From 8a32b55ce1c25580da379555b2c4a5f149cfd43b Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Thu, 4 Sep 2008 20:48:46 -0400 Subject: started work on a csv transformation tool --- defapp.py | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 defapp.py (limited to 'defapp.py') diff --git a/defapp.py b/defapp.py new file mode 100644 index 0000000..e459084 --- /dev/null +++ b/defapp.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +""" +A basic Python application shell, for copy&paste development. +""" + +import optparse +import cmd +import sys + +o = optparse.make_option + +class App(cmd.Cmd): + def __init__(self, opts=None, defaults=None, no_std_opts=False, + stdout=sys.stdout, stderr=sys.stderr, default_cmd=None): + cmd.Cmd.__init__(self, None, stdout, stderr) + self.default_cmd = default_cmd + if not opts: + opts = [] + if not defaults: + defaults = {} + defaults["_App_file"] = None + self.f = None + if not no_std_opts: + opts += [ o('-o', '--output', action='store', dest='_App_file', + help='store output in FILE', metavar='FILE')] + (self.options, self.args) = self.__parse(opts, defaults) + + def __parse(self, opts, defaults): + parser = optparse.OptionParser(option_list=opts) + parser.set_defaults(**defaults) + return parser.parse_args() + + def launch(self, args=None): + if args: + self.args = args + try: + if self.options._App_file: + self.f = open(self.options._App_file, 'w') + self.onecmd(' '.join(self.args)) + except IOError, msg: + self.err("I/O Error:", msg) + except KeyboardInterrupt: + self.err("Interrupted.") + if self.f: + self.f.close() + + def outfile(self): + if self.f: + return f + else: + return sys.stdout + + def emptyline(self): + if self.default_cmd: + self.onecmd(self.default_cmd) + + def default(self, line): + self.err("%s: Command not recognized." % line) + + def do_dump_config(self, key): + """Display the configuration as parsed on the console.""" + def is_private(k): return k[0] == '_' + def show(k): print "%20s : %10s" % (k, str(self.options.__dict__[k])) + if not key: + for x in sorted(self.options.__dict__.keys()): + if not is_private(x): + show(x) + elif not is_private(key) and key in self.options.__dict__: + show(key) + else: + self.err("%s: unknown option." % key) + + @staticmethod + def __write(stream, *args, **kargs): + stream.write(" ".join([str(a) for a in args])) + if not ('omit_newline' in kargs and kargs['omit_newline']): + stream.write("\n") + stream.flush() + + def err(self, *args, **kargs): + self.__write(sys.stderr, *args, **kargs) + + def msg(self, *args, **kargs): + self.__write(sys.stdout, *args, **kargs) + + def out(self, *args, **kargs): + if self.f: + self.__write(self.f, *args, **kargs) + else: + self.__write(sys.stdout, *args, **kargs) + +if __name__ == "__main__": + a = App() + a.launch() -- cgit v1.2.2