Hi William, A quick style scan. Comments inline.
Thanks for writing this! No dia 14 de Abril de 2012 17:35, <wbon...@users.sourceforge.net> escreveu: > Revision: 17675 > http://gar.svn.sourceforge.net/gar/?rev=17675&view=rev > Author: wbonnet > Date: 2012-04-14 16:35:28 +0000 (Sat, 14 Apr 2012) > Log Message: > ----------- > Initial commit > > Added Paths: > ----------- > csw/mgar/gar/v2/lib/python/build_tier_list.py > > Added: csw/mgar/gar/v2/lib/python/build_tier_list.py > =================================================================== > --- csw/mgar/gar/v2/lib/python/build_tier_list.py > (rev 0) > +++ csw/mgar/gar/v2/lib/python/build_tier_list.py 2012-04-14 16:35:28 > UTC (rev 17675) > @@ -0,0 +1,158 @@ > +#!/opt/csw/bin/python > + > +import sys > +import os > +from optparse import OptionParser > + > +catalog = {}; > + > + > +# > --------------------------------------------------------------------------------------------------------------------- > +# > +# > +class CommandLineParser(object): > + """Command line parser. This class is a helper used to retrive options > from command line > + """ > + > + def __init__(self): > + # Create the option parser > + self.parser = OptionParser() > + > + # Add the different command line options to the parser > + self.parser.add_option("-c", "--catalog", help="Defines the catalog > to parse. Default is ./catalog", > + action="store", dest="catalog", > type="string") > + self.parser.add_option("-1", "--tier1-list", help="List of tier 1 > packages", > + action="store", dest="tier1", type="string") > + self.parser.add_option("-2", "--tier2-list", help="List of tier 2 > packages", > + action="store", dest="tier2", type="string") > + self.parser.add_option("-3", "--tier3-list", help="List of tier 3 > packages", > + action="store", dest="tier3", type="string") > + self.parser.add_option("-V", "--verbose", help="Activate verbose > mode", action="store_true", dest="verbose") > + > + def parse(self): > + (self.options, self.args) = self.parser.parse_args() > + return self.options, self.args > + > +# > --------------------------------------------------------------------------------------------------------------------- > +# > +# > +class ConfigurationParser(object): > + """This class is a helper providing getter and setter on the option from > command line > + """ > + > + def __init__(self, args): > + > + if args.verbose != None: > + self.verbose = args.verbose > + else: > + self.verbose = False You can use "default=..." option when defining the flag, and avoid this boilerplate code. > + if args.catalog != None: > + self.catalog = args.catalog > + else: > + self.catalog = "./catalog" > + > + if args.tier1 != None: > + self.tier1 = args.tier1 > + else: > + self.tier1 = "./tier1" > + > + if args.tier2 != None: > + self.tier2 = args.tier2 > + else: > + self.tier2 = "./tier2" > + > + if args.tier3 != None: > + self.tier3 = args.tier3 > + else: > + self.tier3 = "./tier3" > + > + # > ----------------------------------------------------------------------------------------------------------------- > + > + def getCatalog(self): > + return self.catalog > + > + def getTierInputFile(self, tier): > + if (tier == 1): > + return self.tier1 This could be replaced with a dictionary: tiers = { 1: self.tier1, ... } return tiers[tier] if tier in tiers else None (or maybe something less compressed, but still data driven) > + if (tier == 2): > + return self.tier2 > + > + if (tier == 3): > + return self.tier3 > + > + return None > + > + def getTierOutputFile(self, tier): > + return "%(filename)s.out" % { 'filename' : > self.getTierInputFile(tier) } > + > + def getVerbose(self): > + return self.verbose Looks like a javaism. Just let clients use youobject.verbose. If at any stage you want to control it, you can use @property. This is the beauty of Python! > +# > --------------------------------------------------------------------------------------------------------------------- > +# > +# > +class Package: > + """ Defines a package. A package has a name (CSWfoo), a list of > dependencies (same syntax as > + catalog (CSWfoo|CSWbar) and a tier (1, 2, 3 or None if undefined) > + """ > + def __init__(self, name=None, depends=None, tier=None): > + self.name = name > + if (depends != "none"): > + self.depends = depends > + else: > + self.depends = None > + self.tier = 3 > + > + def setTier(self, tier): > + # Access to the global variable storing the catalog > + global catalog > + > + # Check if tier is lower or undefined, then we need to do > something > + if self.tier > tier : > + # Set the new tier value > + self.tier = tier > + # And iterate the list of dependencies to recursivly > call the setTier method > + if (self.depends != None): The idiom is: self.depends is not None > + for pkg in self.depends.split('|'): > + catalog[pkg].setTier(tier) > + > +def main(): > + > + global catalog > + outputFile = {} > + > + # Parse command line > + cliParser = CommandLineParser() > + (opts, args) = cliParser.parse() > + configParser = ConfigurationParser(opts) > + > + # Read catalog content > + for line in open(configParser.getCatalog(), 'r'): For opening files, use the 'with' statement which takes care of closing the files afterwards: with open(..., 'r') as fd: for line in fd: ... > + pkgInfo = line.split(' ') > + name = pkgInfo[2] > + depends = pkgInfo[6] > + catalog[name] = Package(name,depends) > + > + for tier in (1 ,2 ,3): > + # Create the three files for outputing tier content > + outputFile[tier] = open(configParser.getTierOutputFile(tier), > 'w') > + > + # Check if the specific tier file exist > + if os.path.isfile(configParser.getTierInputFile(tier)): > + for line in open(configParser.getTierInputFile(tier) > , 'r'): same here > + name = line.split('\n') > + catalog[name[0]].setTier(tier) > + else: > + print "File %(filename)s does not exit. Skipping this > file" % { 'filename' : configParser.getTierInputFile(tier) } > + > + for pkg in catalog: > + outputFile[catalog[pkg].tier].write("%(name)s\n" % { 'name' : > catalog[pkg].name }) > + > + for tier in (1 ,2 ,3): > + outputFile[tier].close() > + > +# On sort en rendant le code de retour de main > +if __name__ == '__main__': > + sys.exit(main()) > > > Property changes on: csw/mgar/gar/v2/lib/python/build_tier_list.py > ___________________________________________________________________ > Added: svn:executable > + * > > This was sent by the SourceForge.net collaborative development platform, the > world's largest Open Source development site. > > _______________________________________________ > devel mailing list > devel@lists.opencsw.org > https://lists.opencsw.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel