cgilsxml: ajouter les variables dlname, size, Y, m, d, H, M, S. maj doc

This commit is contained in:
Jephté Clain 2015-12-07 14:59:20 +04:00
parent eac94a7f32
commit d7b468d9fd
1 changed files with 11 additions and 4 deletions

View File

@ -1,7 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 mode: python -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
"""Ce script est prévu pour être utilisé dans un script CGI.
u"""Ce script est prévu pour être utilisé dans un script CGI.
Il permet de lister le contenu d'un répertoire au format XML, et de télécharger les fichiers trouvés.
"""
@ -83,15 +84,19 @@ class File:
self.dir = dir
self.name = name
self.dlname = name
self.size = stat.st_size
self.mtime = mtime
self.date = datef(DATE_DATEF, mtime)
self.time = datef(TIME_DATEF, mtime)
self.Y, self.m, self.d, self.H, self.M, self.S = datef('%Y %m %d %H %M %S', mtime).split(' ')
def isfile(self):
return path.isfile(self.pf)
def __getitem__(self, name): return self.vars[name]
def __setitem__(self, name, value): self.vars[name] = value
def has_key(self, name): return self.vars.has_key(name)
def __getattr__(self, name): return self.vars[name]
def __setattr__(self, name, value):
if self.__dict__.has_key(name):
@ -211,7 +216,7 @@ def run_cgilsxml():
OP.add_option('-t', '--xslt', dest='xslt',
help=u"Ajouter le chemin vers la feuille de style XSLT dans le flux XML généré")
OP.add_option('-e', '--spec', dest='spec', action='callback', callback=add_spec, type="string",
help=u"Spécifier l'expression régulière permettant de sélectionner les fichiers à lister. L'expression régulière peut définir des groupes qui sont utilisées pour l'extraction des variables.\nIl est possible de spécifier cette option plusieurs fois.")
help=u"Spécifier l'expression régulière permettant de sélectionner les fichiers à lister. L'expression régulière peut définir des groupes qui sont utilisées pour l'extraction des variables.\nIl est possible de spécifier cette option plusieurs fois.\nNote: TOUTES les expressions régulières sont testées par rapport au nom du fichier, et pour celles qui correspondent, les variables correspondantes sont définies. Il faut donc ordonner les expressions régulières de la plus générale à la plus spécifique, contrairement à ce qui se fait d'habitude.")
OP.add_option('-v', '--var', dest='var', action='callback', callback=add_var, type="string",
help=u"Définir la variable NAME à la valeur de l'expression VAR_EXPR. Dans cette expression, il est possible d'utiliser des expressions de la forme %%(var)s pour inclure des variables déjà définies, ou \\N et \\g<NAME> pour inclure respective le groupe numéro N et le groupe nommé NAME de l'expression régulière --spec.\nCette option peut être spécifiée plusieurs fois. Elle s'applique à l'expression régulière définie par la dernière option --spec")
OP.add_option('-g', '--group', dest='group', action='callback', callback=set_group, type="string",
@ -279,10 +284,12 @@ def run_cgilsxml():
print "Impossible de trouver le fichier %s" % cgi_path_info
else:
if cgi_mode:
ctype, encoding = mimetypes.guess_type(file.name, False)
dlname = file.dlname or file.name
ctype = file.has_key('type') and file.type or None
if ctype is None: ctype, encoding = mimetypes.guess_type(dlname, False)
if ctype is None: ctype = "application/octet-stream"
print "Content-Type: %s; charset=utf-8" % ctype
print "Content-Disposition: attachment; filename=\"%s\"" % file.name
print "Content-Disposition: attachment; filename=\"%s\"" % dlname
print
inf = open(file.pf, 'rb')
try: shutil.copyfileobj(inf, sys.stdout)