[Cdd-commits] r842 - in cdd/trunk/webtools: . templates

CDD Subversion Commit noreply at alioth.debian.org
Fri Jun 20 08:23:08 UTC 2008


Author: tille
Date: Fri Jun 20 08:23:08 2008
New Revision: 842

Modified:
   cdd/trunk/webtools/cddtasktools.py
   cdd/trunk/webtools/tasks.py
   cdd/trunk/webtools/templates/tasks.xhtml
   cdd/trunk/webtools/templates/tasks_idx.xhtml
Log:
extensive changes to handle meta package information equivalent to dependant package which enables using DDTP translations also for the meta package description which might lead to full translation of the pages.


Modified: cdd/trunk/webtools/cddtasktools.py
==============================================================================
--- cdd/trunk/webtools/cddtasktools.py	(original)
+++ cdd/trunk/webtools/cddtasktools.py	Fri Jun 20 08:23:08 2008
@@ -14,6 +14,7 @@
 # from tasks file about home page, license, WNPP etc.
 
 from sys import stderr, exit
+from subprocess import Popen, PIPE
 import os
 import urllib
 import StringIO
@@ -26,20 +27,20 @@
 from debian_bundle import deb822
 
 BASEURL  = 'http://ftp.debian.org/'
-#SVNHOST  = 'svn+ssh://svn.debian.org'
-SVNHOST  = 'svn://svn.debian.org'
-REPOS    = { 'debian-med'     : SVNHOST+"/svn/cdd/projects/med/trunk/debian-med/tasks/",
-             'debian-edu'     : SVNHOST+"/svn/debian-edu/trunk/src/debian-edu/tasks/",
-             'debian-gis'     : SVNHOST+"/pkg-grass/packages/debian-gis/tasks/",
-             'debian-junior' : SVNHOST+"/svn/cdd/projects/junior/trunk/debian-junior/tasks/",
-             'debian-science' : SVNHOST+"/svn/cdd/projects/science/trunk/debian-science/tasks/",
+SVNHOST  = 'svn+ssh://svn.debian.org'
+# SVNHOST  = 'svn://svn.debian.org'
+REPOS    = { 'debian-med'     : SVNHOST+"/svn/cdd/projects/med/trunk/debian-med",
+             'debian-edu'     : SVNHOST+"/svn/debian-edu/trunk/src/debian-edu",
+             'debian-gis'     : SVNHOST+"/pkg-grass/packages/debian-gis",
+             'debian-junior' : SVNHOST+"/svn/cdd/projects/junior/trunk/debian-junior",
+             'debian-science' : SVNHOST+"/svn/cdd/projects/science/trunk/debian-science",
            }
 HTMLBASE = "/var/lib/gforge/chroot/home/groups"
-DATADIR  = { 'debian-med'     : HTMLBASE+"/debian-med/data/",
-             'debian-edu'     : HTMLBASE+"/cdd/data/edu/",
-             'debian-gis'     : HTMLBASE+"/cdd/data/gis/",
-             'debian-junior'  : HTMLBASE+"/cdd/data/junior/",
-             'debian-science' : HTMLBASE+"/cdd/data/science/",
+DATADIR  = { 'debian-med'     : HTMLBASE+"/debian-med/data",
+             'debian-edu'     : HTMLBASE+"/cdd/data/edu",
+             'debian-gis'     : HTMLBASE+"/cdd/data/gis",
+             'debian-junior'  : HTMLBASE+"/cdd/data/junior",
+             'debian-science' : HTMLBASE+"/cdd/data/science",
            }
 KEYSTOIGNORE = ( 'Architecture', 'Leaf', 'NeedConfig', 'Note', 'Section' )
 GLOBALCACHE  = "/var/cache/cdd/"
@@ -56,20 +57,24 @@
     # In case you know another CDD that uses the meta package
     # technology make sure to include the location in the
     # REPOS dictionary
-    #
-    tasksdir = DATADIR[cddname] + 'tasks/'
-    if not os.access(tasksdir, os.W_OK):
-	try:
+
+    # tasks directory to obtain dependencies and debian/control to obtain meta
+    # information like the metapackage prefix
+    for dir in ('tasks', 'debian'):
+        tasksdir = DATADIR[cddname] + '/' + dir
+        if not os.access(tasksdir, os.W_OK):
+            try:
 		os.makedirs(tasksdir)
-	except:
+            except:
 		print >> stderr, "Unable to create data directory", tasksdir
-    # Checkout/Update tasks from SVN
-    if os.path.isdir(tasksdir+'/.svn'):
-        os.system("svn up %s %s >> /dev/null" % (REPOS[cddname], tasksdir))
-    else:
-        os.system("mkdir -p %s" % (tasksdir))
-        os.system("svn co %s %s >> /dev/null" % (REPOS[cddname], tasksdir))
-    return tasksdir
+        # Checkout/Update tasks from SVN
+        svncommand = "svn %%s %s/%s %s >> /dev/null" % (REPOS[cddname], dir, tasksdir)
+        if os.path.isdir(tasksdir+'/.svn'):
+            os.system(svncommand % 'up')
+        else:
+            os.system("mkdir -p %s" % (tasksdir))
+            os.system(svncommand % 'co')
+    return DATADIR[cddname] + '/tasks'
 
 def SplitDescription(description):
     # Split first line of Description value as short description
@@ -121,6 +126,8 @@
         self.cddname        = cddname  # CDD that includes the package in dependency list
         self.taskname       = taskname # Task which includes the Dependency
         self.pkg            = None # Name of dependant package
+        self.PrintedName    = None # Only for Meta package names - no use for a real dependant package
+                                   # FIXME -> object model
         self.dep_strength   = None # Values: 'Depends', 'Recommends', 'Suggests', 'Ignore', 'Avoid'
         self.dists          = []   # Values: 'stable', 'testing', 'unstable', etc.
         self.component      = {}   # Values: 'main', 'contrib', 'non-free', 'experimental'
@@ -172,8 +179,8 @@
 
         self.cddname         = cddname
         self.tasksdir        = InitTasksFiles(self.cddname)
-        self.tasks           = {}
-        self.tasknames       = []
+        self.tasks           = {} # Dictionary of TasksDependency objects
+        self.metapackagekeys = []
         self.available       = available
         self.alldeps_in_main = [] # sorted string list of package names with all packages
                                   # relevant for a CDD that are in main Debian (for use in DDTP)
@@ -183,17 +190,33 @@
                                   # -->
                                   # self.alldeps_in_main = self.alldeps_in_main_info.keys().sort()
 
-    def GetTasknames(self):
+
+    def _GetMetapackages(self):
         for task in os.listdir(self.tasksdir):
             if os.path.isfile("%s/%s" % (self.tasksdir, task)):
-                self.tasknames.append(task)
-        self.tasknames.sort()
+                self.metapackagekeys.append(task)
+        self.metapackagekeys.sort()
 
     def GetAllDependencies(self):
-        if self.tasknames == []:
-            self.GetTasknames()
-        for task in self.tasknames:
-            td = TaskDependencies(self.cddname, task=task, tasksdir=self.tasksdir)
+        if self.metapackagekeys == []:
+            self._GetMetapackages()
+
+        # Obtain the prefix of the meta packages of the CDD using cdd-dev tools cdd_get_names
+        if os.access('/usr/share/cdd-dev/cdd-get-names', os.X_OK):
+            cdd_get_names = '/usr/share/cdd-dev/cdd-get-names'
+        elif os.access(getcwd() + '/cdd-get-names', os.X_OK):
+            cdd_get_names = getcwd() + '/cdd-get-names'
+        else:
+            print >>stderr, "Please either install package cdd-dev or install a copy of devtools/cdd-get-names in your working directory"
+            exit(-1)
+
+        # The prefix is used to build the meta package name that belongs to the task
+        cmd = "cd %s; %s metapackageprefix" % (DATADIR[self.cddname], cdd_get_names)
+        pipe = Popen(cmd, shell=True, stdout=PIPE).stdout
+        prefix = pipe.read().strip() + '-'
+        pipe.close()
+        for task in self.metapackagekeys:
+            td = TaskDependencies(self.cddname, task=task, tasksdir=self.tasksdir, prefix=prefix)
             td.GetTaskDependencies()
             self.tasks[task] = td
 
@@ -213,7 +236,7 @@
             #              available in Debian any more (for instance this might happen if a
             #              name has changed)
             dependencytypes=('official', 'unofficial', 'prospective', 'unknown')
-        for task in self.tasknames:
+        for task in self.metapackagekeys:
             tdeps = self.tasks[task]
             list = []
             for dep in dependencytypes:
@@ -237,21 +260,8 @@
         return ret
 
     def GetTaskDescDict(self):
-        # David Paleino needs for his web tools a dictionary
-        # { taskname : { 'Task'      : task
-        #                'ShortDesc' : shortdesc
-        #                'LongDesc'  : longdesc }
-        # This will be prepared here from the main
-        # datastructure
-        ret = {}
-        for task in self.tasknames:
-            tdeps = self.tasks[task]
-            tdict = {}
-            tdict['Task']      = tdeps.taskPrintedName
-            tdict['ShortDesc'] = tdeps.taskShortDesc
-            tdict['LongDesc']  = tdeps.taskLongDesc
-            ret[task] = tdict
-        return ret
+        # Return dictionary with description information of all tasks of a CDD
+        return self.tasks
 
     def GetAllDependantPackagesOfCDD(self, dependencytypes=()):
         # David Paleino needs for his DDTP web tool a list of
@@ -273,7 +283,7 @@
             # Default is only official in this case because DDTP handles only
             # official packages
             dependencytypes=('official', )
-        for task in self.tasknames:
+        for task in self.metapackagekeys:
             tdeps = self.tasks[task]
             for dep in dependencytypes:
                 for tdep in tdeps.dependencies[dep]:
@@ -335,14 +345,14 @@
     def MarkupPreformatedStringsCDD(self):
         # Genshi does not touch strings that are marked with "Markup()" - so just
         # mark the strings that are ready formatted for the whole CDD
-        for task in self.tasknames:
+        for task in self.metapackagekeys:
             tdeps = self.tasks[task]
             tdeps.MarkupPreformatedStrings()
 
 
 class TaskDependencies:
     # List of depencencies defined in one Metapackage
-    def __init__(self, cddname, task, tasksdir=None):
+    def __init__(self, cddname, task, tasksdir=None, prefix=''):
         if cddname not in REPOS.keys():
             print >>stderr, "Unknown CDD."
             return None
@@ -369,9 +379,8 @@
         self.available = available
 
         # Main information for a task
-        self.taskPrintedName = None
-        self.taskShortDesc   = None
-        self.taskLongDesc    = None
+        self.metapkg             = DependantPackage(self.cddname, self.task)
+        self.metapkg.pkg         = prefix + task
 
         # If a CDD just bases on the meta package of an other CDD (this is the
         # case in Debian Science which bases on med-bio for biology and gis-workstation
@@ -402,10 +411,14 @@
             dep         = None
             for key in stanza:
                 if key == 'Task':
-                    self.taskPrintedName = stanza['task']
+                    self.metapkg.PrintedName = stanza['task']
                     continue
                 if key == 'Description':
-                    (self.taskShortDesc, self.taskLongDesc) = SplitDescription(stanza['description'])
+                    (short, long) = SplitDescription(stanza['description'])
+
+                    # Markup strings to enable verbatim output of preformatted text
+                    self.metapkg.desc['en']['short'] = MarkupString(short, self.metapkg.PrintedName, 'taskShortDesc')
+                    self.metapkg.desc['en']['long']  = MarkupString(long,  self.metapkg.PrintedName, 'taskLongDesc')
                     continue
                 if key == 'Meta-Depends':
                     self.metadepends = stanza['meta-depends']

Modified: cdd/trunk/webtools/tasks.py
==============================================================================
--- cdd/trunk/webtools/tasks.py	(original)
+++ cdd/trunk/webtools/tasks.py	Fri Jun 20 08:23:08 2008
@@ -23,9 +23,7 @@
 
 cdeps=CddDependencies(CDD)
 cdeps.GetAllDependencies()
-tasks        = cdeps.tasknames
 packages     = cdeps.GetNamesOnlyDict()
-task_details = cdeps.GetTaskDescDict()
 cdeps.GetTranslations(languages)
 cdeps.MarkupPreformatedStringsCDD()
 
@@ -51,7 +49,8 @@
 	       'projecturl'    : 'http://debian-med.alioth.debian.org/',
                'projectlist'   : 'debian-med at lists.debian.org',
 	       'logourl'       : 'http://people.debian.org/~tille/debian-med/logos/med-06.jpg',
-	       'tasks'         : task_details
+	       'tasks'         : cdeps.GetTaskDescDict(),
+	       'taskskeys'     : cdeps.metapackagekeys
        }
 
 CDD='debian-med'
@@ -61,9 +60,6 @@
               'debian-science' : HTMLBASE+"/cdd/htdocs/science/tasks/",
             }
 
-data['taskskeys'] = data['tasks'].keys()
-data['taskskeys'].sort()
-
 if not os.access(OUTPUTDIR[CDD], os.W_OK):
 	try:
 		os.mkdir(OUTPUTDIR[CDD])
@@ -122,8 +118,6 @@
 	VERBATIM=('projectadvertising', )
 	for verbatim in VERBATIM:
 		data[verbatim] = Markup(data[verbatim])
-	for task in data['tasks'].keys():
-    		data['tasks'][task]['LongDesc'] = Markup(data['tasks'][task]['LongDesc'])
 
 	template = loader.load('tasks_idx.xhtml')
 
@@ -136,7 +130,7 @@
 	print >> f, template.generate(**data).render('xhtml')
 	f.close()
 
-	for task in tasks:
+	for task in data['taskskeys']:
 		data['task']         = task
 		data['projectkeys']  = cdeps.GetListOfDepsForTask(task, dependencytypes=())
 		data['dependencies'] = []

Modified: cdd/trunk/webtools/templates/tasks.xhtml
==============================================================================
--- cdd/trunk/webtools/templates/tasks.xhtml	(original)
+++ cdd/trunk/webtools/templates/tasks.xhtml	Fri Jun 20 08:23:08 2008
@@ -24,9 +24,15 @@
 		<div class="section">
 			<div class="sectionTop"/>
 			<div class="row">
-				<strong>$task</strong><br/>
-				<em>${tasks[task]['ShortDesc']}</em><br/>
-				<p>${tasks[task]['LongDesc']}</p>
+				<strong>${tasks[task].metapkg.PrintedName}</strong><br/>
+				<em><span py:choose="">
+	           <span py:when="tasks[task].metapkg.desc.has_key(lang)">${tasks[task].metapkg.desc[lang]['short']}</span>
+	           <span py:otherwise="">${tasks[task].metapkg.desc['en']['short']}</span>
+                 </span></em><br/>
+				<p><span py:choose="">
+	           <span py:when="tasks[task].metapkg.desc.has_key(lang)">${tasks[task].metapkg.desc[lang]['long']}</span>
+	           <span py:otherwise="">${tasks[task].metapkg.desc['en']['long']}</span>
+                 </span></p>
 			</div>
 			<div class="row">
 				<p>

Modified: cdd/trunk/webtools/templates/tasks_idx.xhtml
==============================================================================
--- cdd/trunk/webtools/templates/tasks_idx.xhtml	(original)
+++ cdd/trunk/webtools/templates/tasks_idx.xhtml	Fri Jun 20 08:23:08 2008
@@ -36,9 +36,14 @@
 			</p>
 			<dl>
                              <py:for each="task in taskskeys">
-                                <dt><a href="${task}_${lang}.html" name="${task}" id="${task}">${tasks[task]['Task']} - ${tasks[task]['ShortDesc']}</a></dt>
-				<dd>${tasks[task]['LongDesc']}
-				</dd>
+                                <dt><a href="${task}_${lang}.html" name="${task}" id="${task}">${tasks[task].metapkg.PrintedName} - <span py:choose="">
+	           <span py:when="tasks[task].metapkg.desc.has_key(lang)">${tasks[task].metapkg.desc[lang]['short']}</span>
+	           <span py:otherwise="">${tasks[task].metapkg.desc['en']['short']}</span>
+                 </span></a></dt>
+				<dd><span py:choose="">
+	           <span py:when="tasks[task].metapkg.desc.has_key(lang)">${tasks[task].metapkg.desc[lang]['long']}</span>
+	           <span py:otherwise="">${tasks[task].metapkg.desc['en']['long']}</span>
+                 </span></dd>
                              </py:for>
 			</dl>
 		</div>



More information about the Cdd-commits mailing list