/[debian-med]/trunk/community/infrastructure/scripts/update-tasks
ViewVC logotype

Contents of /trunk/community/infrastructure/scripts/update-tasks

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1505 - (hide annotations) (download)
Mon Mar 3 19:10:07 2008 UTC (5 years, 2 months ago) by tille
File size: 7788 byte(s)
inofficial -> unofficial
1 tille 1399 #!/usr/bin/python -W ignore
2    
3     #
4     # This Python script is:
5 tille 1505 # (C) 2007-2008, David Paleino <d.paleino@gmail.com>,
6     # Andreas Tille <tille@debian.org>
7 tille 1399 #
8     # It is licensed under the terms of GNU General Public License (GPL)
9     # v3, or any later revision.
10     #
11    
12     import apt
13     import apt_pkg
14     import apt_inst
15     import HTMLTemplate
16     import re
17 tille 1436 from sys import argv, exit, stderr
18 tille 1399 import time
19     from datetime import datetime
20     from email.Utils import formatdate
21    
22 tille 1436 from cddtasktools import CddDependencies, HTMLBASE, REPOS
23 tille 1399
24     CDD='debian-med'
25    
26     ###
27     # Template handlers
28     ###
29    
30 tille 1452 # Do not Encode our strings - we do it ourself and want to take over responsiblity
31     # for Links etc.
32     def myEncoder(txt):
33     # Used to HTML-encode value in 'node.content = value'.
34     return txt
35    
36     # Do not Decode our strings - we do it ourself and want to take over responsiblity
37     # for Links etc.
38     def myDecoder(txt):
39     # Used to HTML-encode value in 'node.content = value'.
40     return txt
41    
42    
43 tille 1399 def renderIndex(node, tasks):
44     node.tasks.repeat(renderTaskList, tasks)
45     t = datetime.now()
46     node.date.content = formatdate(time.mktime(t.timetuple()))
47    
48     def renderTaskList(node, task):
49 tille 1457 node.task.raw = """<a href="%s.php" name="%s" id="%s">%s</a>""" % (task, task, task, task.capitalize())
50 tille 1399
51     def renderTasks(node, task, packages, details):
52     global cdeps
53    
54     node.task.content = details['Task']
55     node.shortdesc.content = details['ShortDesc']
56     node.heading.content = details['ShortDesc']
57     node.longdesc.content = details['LongDesc']
58    
59     t = datetime.now()
60     node.date.content = formatdate(time.mktime(t.timetuple()))
61    
62     official = cdeps.GetNamesOnlyDict(('official',))
63     # for deppkg in cdeps.tasks[task].dependencies['official']:
64     node.official_head.raw = """<h2>
65     <a id="official-debs" name="official-debs"></a>
66     Official Debian packages
67     </h2>"""
68     # HTML_Template wants a list as argument so we provide a list of indizes to address
69     # the list of DependantPackage instances inside renderOfficial
70     list_of_dependencies = cdeps.GetListOfDepsForTask(task, dependencytypes=('official',))
71     node.official.repeat(renderOfficial,
72     range(len(list_of_dependencies)))
73    
74     # if task in todo:
75     # error = True
76     # else:
77     # error = False
78    
79     unofficial = cdeps.GetNamesOnlyDict(('unofficial',))
80     list_of_dependencies = cdeps.GetListOfDepsForTask(task, dependencytypes=('unofficial',))
81     if len(list_of_dependencies) > 0:
82     node.unofficial_head.raw = """<h2>
83 tille 1505 <a id="unofficial-debs" name="unofficial-debs"></a>
84     Experimental or unofficial Debian packages
85 tille 1399 </h2>"""
86     node.unofficial.repeat(renderUnofficial, range(len(list_of_dependencies)))
87     # error = False
88    
89     prospective = cdeps.GetNamesOnlyDict(('prospective',))
90     list_of_dependencies = cdeps.GetListOfDepsForTask(task, dependencytypes=('prospective',))
91     if len(list_of_dependencies) > 0:
92     node.unavailable_head.raw = """<h2>
93     <a id="debs-not-available" name="debs-not-available"></a>
94     Debian packages not available
95     </h2>"""
96     node.unavailable.repeat(renderProspective, range(len(list_of_dependencies)))
97     # error = False
98    
99     # if error:
100     # The package probably needs a proper prospective entry in the
101     # task files. Write it to stdout.
102     # print "Error: problems with %s" % task
103    
104     def renderOfficial(node, package_no):
105     # Here we parse just official packages
106     deppkg = cdeps.tasks[task].dependencies['official'][package_no]
107    
108     node.shortdesc.content = deppkg.pkgShortDesc
109     node.project.raw = "<table class=\"project\" summary=\"%s\">" % deppkg.pkg
110     node.anchor.atts['name'] = deppkg.pkg
111     node.anchor.atts['id'] = deppkg.pkg
112     node.name.content = deppkg.pkg.capitalize()
113     node.url.atts['href'] = deppkg.homepage
114     if deppkg.homepage == "#":
115     node.url.content = "Homepage not available"
116     else:
117     node.url.content = deppkg.homepage
118    
119     node.longdesc.raw = deppkg.pkgLongDesc
120     node.version.content = "Version: %s" % deppkg.version
121     if deppkg.license != None:
122     node.license.content = "License: %s" % deppkg.license
123 tille 1489 # In case some '&' made it up to this place
124 tille 1492 node.pkgurl.atts['href'] = deppkg.pkgURL ## .replace("&", "%26")
125 tille 1399 node.pkgurl.content = "Official Debian package"
126     node.deburl.atts['href'] = deppkg.filename
127     #~ node.deburl.content = "X" ### TODO: add a nice icon here to download the .deb package
128     node.deburl.raw = "<img src=\"/img/deb-icon.png\" />"
129 tille 1443 if deppkg.responsible:
130     node.responsible.content = deppkg.responsible
131     else:
132     node.responsible.raw = "no one"
133 tille 1399
134    
135     def renderUnofficial(node, package_no):
136     # Here we parse just unofficial packages
137     deppkg = cdeps.tasks[task].dependencies['unofficial'][package_no]
138    
139     node.shortdesc.content = deppkg.pkgShortDesc
140     node.longdesc.raw = deppkg.pkgLongDesc
141     node.project.raw = "<table class=\"project\" summary=\"%s\">" % deppkg.pkg
142     node.anchor.atts['name'] = deppkg.pkg
143     node.anchor.atts['id'] = deppkg.pkg
144     node.name.content = deppkg.pkg.capitalize()
145     node.url.atts['href'] = deppkg.homepage
146     node.url.content = deppkg.homepage
147     node.license.content = "License: %s" % deppkg.license
148 tille 1489 # In case some '&' made it up to this place
149 tille 1492 node.pkgurl.atts['href'] = deppkg.pkgURL ## .replace("&", "%26")
150 tille 1399 node.pkgurl.content = "Unofficial Debian package"
151 tille 1443 if deppkg.responsible:
152     node.responsible.content = deppkg.responsible
153     else:
154     node.responsible.raw = "no one"
155 tille 1399
156     # Let's try to get the version from the package name
157     # (following Debian standards: <name>_<ver>_<arch>.deb)
158     regex = ".*/%s_(?P<version>.*)_.*\.deb$" % deppkg.pkg
159     p = re.compile(regex)
160     m = p.search(deppkg.pkgURL)
161     if m:
162     node.version.content = "Version: %s" % m.group("version")
163     else:
164     node.version.content = "Version: N/A"
165    
166    
167     def renderProspective(node, package_no):
168     # Parsing unavailable packages :(
169     # PACKAGE THEM! :)
170     deppkg = cdeps.tasks[task].dependencies['prospective'][package_no]
171    
172     if deppkg.pkgShortDesc:
173     node.shortdesc.content = deppkg.pkgShortDesc
174     else:
175     node.shortdesc.content = "N/A"
176     if deppkg.pkgLongDesc:
177     node.longdesc.content = deppkg.pkgLongDesc
178     else:
179     node.longdesc.content = "N/A"
180     node.longdesc.raw = deppkg.pkgLongDesc
181     node.project.raw = "<table class=\"project\" summary=\"%s\">" % deppkg.pkg
182     if deppkg.responsible:
183     node.responsible.content = deppkg.responsible
184     else:
185     node.responsible.raw = "no one"
186     if deppkg.wnpp:
187     node.wnpp.raw = " &mdash; <a href=\"http://bugs.debian.org/%s\">wnpp</a>" % deppkg.wnpp
188     node.anchor.atts['name'] = deppkg.pkg
189     node.anchor.atts['id'] = deppkg.pkg
190     node.name.content = deppkg.pkg.capitalize()
191     if deppkg.homepage:
192     node.url.atts['href'] = deppkg.homepage
193     node.url.content = deppkg.homepage
194     else:
195     node.url.atts['href'] = "#"
196     node.url.content = "N/A"
197     if deppkg.license:
198     node.license.raw = "<?=_('License')?>: %s" % deppkg.license
199     else:
200     node.license.raw = "<?=_('License')?>: N/A"
201    
202 tille 1436 if len(argv) <= 1 :
203     print >>stderr, "Warning: No CDD name given as command line argument. Using %s." % CDD
204     else:
205     if argv[1] not in REPOS.keys():
206     print >>stderr, "Unknown CDD name: %s. Don't know what to do." % CDD
207     exit(-1)
208     CDD = argv[1]
209    
210     cdeps=CddDependencies(CDD)
211 tille 1399 cdeps.GetAllDependencies()
212    
213     base=HTMLBASE + '/' + CDD
214     # Let's render the Tasks Page index, first
215     f = open("%s/htdocs/tasks_idx.tmpl" % base)
216 tille 1452 tmpl = HTMLTemplate.Template(renderIndex, f.read(), codecs=(None,None)) ##myEncoder, myDecoder))
217 tille 1399 f.close()
218     f = open("%s/static/tasks/index.php" % base, "w")
219    
220     tasks = cdeps.tasknames
221     packages = cdeps.GetNamesOnlyDict()
222     task_details = cdeps.GetTaskDescDict()
223    
224     f.write(tmpl.render(tasks))
225     f.close()
226    
227     # Let's render single pages now.
228     f = open("%s/htdocs/tasks.tmpl" % base)
229     tmpl = HTMLTemplate.Template(renderTasks, f.read())
230     f.close()
231    
232     for task in tasks:
233     f = open("%s/static/tasks/%s.php" % (base, task), "w")
234    
235     # This is to avoid useless <br>eaks before closing the cell
236     source = tmpl.render(task, packages[task], task_details[task])
237     f.write(re.sub(r"<br /><br />[ ]*</td>", "</td>", source))
238    
239     f.close()
240    

  ViewVC Help
Powered by ViewVC 1.1.5