[csw-devel] SF.net SVN: gar:[17675] csw/mgar/gar/v2/lib/python/build_tier_list.py

wbonnet at users.sourceforge.net wbonnet at users.sourceforge.net
Sat Apr 14 18:35:29 CEST 2012


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
+
+        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
+
+	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
+
+# ---------------------------------------------------------------------------------------------------------------------
+#
+#
+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):
+				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'):
+		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'):
+				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.



More information about the devel mailing list