Re: Please, stop abusing ddtss/DDTP
Le Sat, Nov 24, 2007 at 09:57:47PM +0100, David a écrit :
> >
> > David, do you have plans to disable/fix it?
>
> I'm actually not having any reliable internet connection; therefore
> cannot do anything :(
Hi everybody,
I found a script named update-ddtp in
/var/lib/gforge/chroot/home/groups/debian-med/scripts.
I do not know how to put something like Perl's `__END__' in the Python
script, so I just renamed it. I hope that it will not generate too much
error messages.
Here I attached the script. David, if you think we can substitute one
URL by the one suggested before, just let me know.
Have a nice day,
--
Charles Plessy
http://charles.plessy.org
Wakō, Saitama, Japan
#!/usr/bin/python
#
# This Python script is:
# (C) 2007, David Paleino <d.paleino@gmail.com>
#
# It is licensed under the terms of GNU General Public License (GPL)
# v3, or any later revision.
#
from urllib import urlopen, urlretrieve
import re
import HTMLTemplate
from datetime import datetime
from email.Utils import formatdate
import time
from Tools import parseTasks, grep
base = "/var/lib/gforge/chroot/home/groups/debian-med"
#base = "/home/neo/tmp/debmed"
ddtp_url = "http://ddtp.debian.net/debian/dists/sid/main/i18n/Translation-%s"
fetch_url = "http://kleptog.org/cgi-bin/ddtss2-cgi/%s/fetch?package=%s"
trans_url = "http://kleptog.org/cgi-bin/ddtss2-cgi/%s/translate/%s"
# Should we dinamically get this list from PO translations
# of the website?
langs = ["de", "fr", "it", "pt_BR", "es", "ja"]
langs.sort()
dict = {}
longs = {}
shorts = {}
#['adun.app', 'amap-align', 'amide', 'arb', 'bioimagesuite', 'bioperl', 'biosquid', 'blast2', 'boxshade', 'chemtool',
#'cimg-dev', 'clustalw', 'clustalw-mpi', 'clustalx', 'ctn', 'ctn-dev', 'ctsim', 'cycle', 'dcmtk', 'dialign',
#'dialign-t', 'dicomnifti', 'emboss', 'fastdnaml', 'fastlink', 'garlic', 'gdpc', 'gff2aplot', 'gff2ps', 'ghemical',
#'gnumed-client', 'gromacs', 'hmmer', 'imagej', 'kalign', 'libbio-ruby', 'libfslio0', 'libfslio0-dev',
#'libinsighttoolkit-dev', 'libmdc2-dev', 'libminc0-dev', 'libncbi6-dev', 'libniftiio0', 'libniftiio0-dev', 'loki',
#'mcl', 'medcon', 'melting', 'mencal', 'minc-tools', 'mipe', 'molphy', 'mummer', 'muscle', 'ncbi-epcr',
#'ncbi-tools-bin', 'ncbi-tools-x11', 'nifti-bin', 'njplot', 'octave', 'octave2.1', 'paw++', 'perlprimer', 'phylip',
#'poa', 'primer3', 'probcons', 'proda', 'pymol', 'python-biopython', 'python-nifti', 'r-base', 'r-base-core',
#'r-cran-qtl', 'rasmol', 'readseq', 'seaview', 'sibsim4', 'sigma-align', 'sim4', 't-coffee', 'tigr-glimmer',
#'tm-align', 'tree-ppuzzle', 'tree-puzzle', 'treetool', 'treeviewx', 'wise', 'xmedcon', 'zope-zms']
def force_fetch(packages, lang = langs):
global langs
# If it's a single language to be updated...
#
# NOT USED CURRENTLY.
if type(lang) == "str":
for name in packages:
urlopen(fetch_url % (lang, name))
else:
for lang_name in lang:
for pkg_name in packages:
#print "Fetching %s - %s" % (lang_name, pkg_name)
urlopen(fetch_url % (lang_name, pkg_name))
def get_status(package):
global dict
global langs
status = {}
for lang in langs:
# print "Parsing %s - %s" % (package, lang)
if grep("Package: %s\n" % package, "%s/data/ddtp/Translation-%s" % (base, lang)):
status[lang] = 1
else:
status[lang] = 0
dict[package] = status
def parse_description(package):
global dict
global longs
global shorts
tmp_long = {}
tmp_short = {}
for lang in langs:
if dict[package][lang]:
f = open("%s/data/ddtp/Translation-%s" % (base, lang), "r")
# Package: 9wm\nDescription-md5: (?P<md5sum>.{32})\nDescription-\w+: (?P<short>.*)\n(?P<long>.*\n)\n
# TODO: Fix the regex. (it worked in Kodos :()
regex = r"""Package: %s
Description-md5: (?P<md5sum>.{32})
Description-\w+: (?P<short>.*)
(?P<long>(^ .*$\n)+\n?)""" % package
p = re.compile(regex, re.MULTILINE)
m = p.search(f.read())
if m:
tmp_long[lang] = m.group("long").replace("\n ", "<br />").replace("<br />.<br />", "<br /><br />")
tmp_short[lang] = m.group("short")
f.close()
longs[package] = tmp_long
shorts[package] = tmp_short
def renderTemplate(node, langs, statuses):
node.langs.repeat(renderLangs, langs)
names = statuses.keys()
names.sort()
node.packages.repeat(renderStatuses, names, statuses)
t = datetime.now()
node.date.content = formatdate(time.mktime(t.timetuple()))
def renderLangs(node, lang):
node.code.raw = "<img src=\"/img/langs/%s.png\" alt=\"%s\" />" % (lang, lang)
def renderStatuses(node, package, status):
node.name.raw = '<a href="/ddtp/%s.php">%s</a>' % (package, package)
langs = dict[package].keys()
langs.sort()
node.translations.repeat(renderTrans, langs, package, dict[package])
def renderTrans(node, lang, package, status):
if status[lang] == 0:
node.status.raw = '<a href="%s"><img src="/img/no.png" alt="no" title="%s - <?=_("translation not available")?>" /></a>' % (trans_url % (lang, package), lang)
else:
node.status.raw = '<a href="%s"><img src="/img/ok.png" alt="<?=_("yes")?>" title="%s - <?=_("translated")?>" /></a><a href="%s"><img src="/img/go.png" alt="<?=_("edit")?>" title="%s - <?=_("edit translation")?>" /></a>' % ("/ddtp/%s.php" % package, lang, trans_url % (lang, package), lang)
#tem:
# con:package
# rep:langs
# con:name
# con:short
# con:long
def renderStatic(node, package):
node.package.content = package
node.langs.repeat(renderSingleTrans, dict[package], package)
t = datetime.now()
node.date.content = formatdate(time.mktime(t.timetuple()))
def renderSingleTrans(node, lang, package):
node.name.raw = '<img src="/img/langs/%s.png" alt="%s" title="%s"/>' % (lang, lang, lang)
if dict[package][lang]:
node.short.raw = shorts[package][lang]
node.long.raw = longs[package][lang]
else:
node.short.raw = '<?=_("untranslated")?>'
node.long.raw = '<?=_("untranslated")?><br /><?=_("Please follow the link below to start translating")?>:<br /><br /><a href="%s">%s</a>' % (trans_url % (lang, package), trans_url % (lang, package))
for lang in langs:
url = ddtp_url % lang
pos = url.rfind("/")
name = "%s/data/ddtp/%s" % (base, url[pos + 1:])
urlretrieve(url, name)
packages = parseTasks()
#packages = ["adun.app", "gcc", "emboss-explorer"]
packages.sort()
force_fetch(packages)
for item in packages:
get_status(item)
parse_description(item)
#print dict
#print longs
#print shorts
# Let's generate the overview page
f = open("%s/htdocs/ddtp.tmpl" % base)
tmpl = HTMLTemplate.Template(renderTemplate, f.read())
f.close()
f = open("%s/static/ddtp.php" % base, "w")
f.write(tmpl.render(langs, dict))
f.close()
# Let's generate nice static overview per-package pages
for name in packages:
outfile = "%s/static/ddtp/%s.php" % (base, name)
f = open("%s/htdocs/ddtp_details.tmpl" % base)
tmpl = HTMLTemplate.Template(renderStatic, f.read())
f.close()
# print tmpl.structure()
f = open(outfile, "w")
f.write(tmpl.render(name))
f.close()
Reply to: