When this class is first instantiated, it checks all the command line arguments. If they are valid, it returns an instance containing the digested command line arguments. If there are any problems, it prints a usage message and terminates execution.
The .ranksFileName attribute is the
effective name of the ranks file, whether explicit or
default.
The .basename attribute is the base
file name argument, which is required.
This class implements the Singleton pattern as described in
Design Patterns by Gamma et al.
In practice, this means that when the class is first
instantiated, all the command line arguments will be
checked and stored away in the instance (assuming they are
valid). Any subsequent instantiations of Args will retrieve that same instance.
To implement this behavior, this class inherits from the
Singleton base class from the author's logscan module; see Section 5, “Imported modules” for
a documentation link.
# - - - - - c l a s s A r g s
class Args(Singleton):
'''Check and digest the command line arguments.
Exports:
Args():
[ if the command line arguments are valid for this
program ->
return a singleton Args instance that represents
those arguments
else ->
sys.stderr +:= (usage message) + (error message)
stop execution ]
.ranksFileName:
[ if a ranks file was specified ->
that file name
else -> DEFAULT_RANKS_FILE ]
.basename:
[ the base file name argument as a string ]
.stdFileName: [ self.basename + STD_EXTENSION ]
.altFileName: [ self.basename + ALT_EXTENSION ]
.treeFileName: [ self.basename + TREE_EXTENSION ]
.abbrFileName: [ self.basename + ABBR_EXTENSION ]
.collFileName: [ self.basename + COLL_EXTENSION ]
.xmlFileName: [ self.basename + XML_EXTENSION ]
'''
Because the constructor may be called more than once, we
must use a class variable, everCalled, to
insure that the actual argument processing is done only on
the first call. This variable is set initially to False; the constructor sets it to True on the first instantiation.
everCalled = False