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

  ViewVC Help
Powered by ViewVC 1.1.5