Obsolete source file -- command options are actually implemented in

a much less formalistic way.  Just keeping this around for possible
future reference.
This commit is contained in:
Greg Ward 1999-03-22 14:54:09 +00:00
parent 2689e3ddce
commit 03f8c3cdd0
1 changed files with 0 additions and 111 deletions

View File

@ -1,111 +0,0 @@
# XXX this is ridiculous! if commands need to pass options around,
# they can just pass them via the 'run' method... what we REALLY need
# is a way for commands to get at each other, via the Distribution!
class Options:
"""Used by Distribution and Command to encapsulate distribution
and command options -- parsing them from command-line arguments,
passing them between the distribution and command objects, etc."""
# -- Creation/initialization methods -------------------------------
def __init__ (self, owner):
# 'owner' is the object (presumably either a Distribution
# or Command instance) to which this set of options applies.
self.owner = owner
# The option table: maps option names to dictionaries, which
# look something like:
# { 'longopt': long command-line option string (optional)
# 'shortopt': short option (1 char) (optional)
# 'type': 'string', 'boolean', or 'list'
# 'description': text description (eg. for help strings)
# 'default': default value for the option
# 'send': list of (cmd,option) tuples: send option down the line
# 'receive': (cmd,option) tuple: pull option from upstream
# }
self.table = {}
def set_basic_options (self, *options):
"""Add very basic options: no separate longopt, no fancy typing, no
send targets or receive destination. The arguments should just
be {1..4}-tuples of
(name [, shortopt [, description [, default]]])
If name ends with '=', the option takes a string argument;
otherwise it's boolean."""
for opt in options:
if not (type (opt) is TupleType and 1 <= len (opt) <= 4):
raise ValueError, \
("invalid basic option record '%s': " + \
"must be tuple of length 1 .. 4") % opt
elements = ('name', 'shortopt', 'description', 'default')
name = opt[0]
self.table[name] = {}
for i in range (1,4):
if len (opt) >= i:
self.table[name][elements[i]] = opt[i]
else:
break
# set_basic_options ()
def add_option (self, name, **args):
# XXX should probably sanity-check the keys of args
self.table[name] = args
# ------------------------------------------------------------------
# These are in the order that they will execute in to ensure proper
# prioritizing of option sources -- the default value is the most
# basic; it can be overridden by "client options" (the keyword args
# passed from setup.py to the 'setup' function); they in turn lose to
# options passed in "from above" (ie. from the Distribution, or from
# higher-level Commands); these in turn may be overridden by
# command-line arguments (which come from the end-user, the runner of
# setup.py). Only when all this is done can we pass options down to
# other Commands.
# Hmmm, it also matters in which order Commands are processed: should a
# command-line option to 'make_blib' take precedence over the
# corresponding value passed down from its boss, 'build'?
def set_defaults (self):
pass
def set_client_options (self, options):
# 'self' should be a Distribution instance for this one --
# this is to process the kw args passed to 'setup'
pass
def receive_option (self, option, value):
# do we need to know the identity of the sender? don't
# think we should -- too much B&D
# oh, 'self' should be anything *but* a Distribution (ie.
# a Command instance) -- only Commands take orders from above!
# (ironically enough)
pass
def parse_command_line (self, args):
# here, 'self' can usefully be either a Distribution (for parsing
# "global" command-line options) or a Command (for "command-specific"
# options)
pass
def send_option (self, option, dest):
# perhaps this should not take a dest, but send the option
# to all possible receivers?
pass
# ------------------------------------------------------------------
# class Options