RE: Suggested optparse enhancement

"Allan B. Wilson" <[email protected]> Tue, 27 Jul 2004 19:44:57 -0700
Newsgroups gmane.comp.python.optik.user
Message-ID <[email protected]>
Okay, I got all the NOs. Is there any interest in providing a facility that
accomplishes what I set out to do in the first place?

Thanks

Allan

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Greg Ward
Sent: Tuesday, July 27, 2004 18:15
To: Allan B. Wilson
Cc: [email protected]
Subject: Re: [optik] Suggested optparse enhancement

On 03 July 2004, Allan B. Wilson said:
> [I have submitted this as a feature request on sourceforge.net, but 
> wanted to solicit input from list members as well.]

Sorry for the long delay -- I was on vacation, then too busy enjoying the
summer to spend time on the computer, and then busy getting Optik
1.5a1 ready.  *Now* I can take a look at this.

> Of course, on Unix/Linux I could just define a shell alias that sets 
> particular options, but decided it would be more convenient to have 
> optparse set defaults from a .ini file (if it exists). This way I can 
> create a different .ini file as appropriate for each system (or 
> situation) and optparse will set "local" defaults.

Hmmm.  Afraid I don't like it -- it feels too much like it's imposing
policy, rather than providing mechanism.  What if I want my application to
use an environment variable instead?  Or a ~/.myapprc file?
Requiring a config file in the same directory as the script is a bad idea --
it means ordinary users can't customize the behaviour of
/usr/local/bin/myapp!  Imposing both location and syntax of the proposed
config file really bothers me.  (And I have a deep, ingrained loathing of
Python's ConfigParser module that I really cannot put my finger on.
Sigh.)

Oh, one other thing:

> 	def add_option(self, *args, **kwargs):
> 		if self.cp and kwargs.has_key("default") and
kwargs.has_key("dest") and self.cp.has_option("Defaults", kwargs["dest"]):
> 			argstring = self.cp.get("Defaults", kwargs["dest"])
> 			argtype = type(kwargs["default"])
> 			if argtype is bool: kwargs["default"] =
bool(argstring.capitalize() == "True" or argstring == "1" or
argstring.capitalize() == "Yes")
> 			elif argtype is float: kwargs["default"] =
float(argstring)
> 			elif argtype is int: kwargs["default"] =
int(argstring)
> 			elif argtype is long: kwargs["default"] =
long(argstring)
> 			elif argtype is str: kwargs["default"] =
str(argstring)
> 		OptionParser.add_option(self, *args, **kwargs)

This is wrong.  You should be digging through the option value converters in
self.option_class.TYPE_CHECKER to convert values.  Take a look at how
default values are handled in Optik 1.5 (or current CVS) -- see
OptionParser.get_default_values().

Oh, and finally: please don't post code with lines longer than 80 columns;
it's really ugly and hard to read.

        Greg
-- 
Greg Ward <[email protected]>                         http://www.gerg.ca/
I'm a lumberjack and I'm OK / I sleep all night and I work all day


-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise
J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
optik-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/optik-users



-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click