[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: