cgilsxml.py: possibilité de classifier des fichiers au sein d'un groupe avec --break-on
This commit is contained in:
parent
3a9bf0492e
commit
0204a21aeb
|
@ -37,12 +37,14 @@ class Filter:
|
|||
re_allows = None
|
||||
ex_vars = None
|
||||
ex_group = None
|
||||
ex_break_on = None
|
||||
|
||||
def __init__(self, re_spec):
|
||||
self.re_spec = re.compile(re_spec)
|
||||
self.re_allows = []
|
||||
self.ex_vars = []
|
||||
self.ex_group = None
|
||||
self.ex_break_on = None
|
||||
|
||||
def allow_spec(self, re_allow):
|
||||
self.re_allows.append(re.compile(re_allow))
|
||||
|
@ -56,9 +58,15 @@ class Filter:
|
|||
def set_group(self, ex_group):
|
||||
self.ex_group = ex_group
|
||||
|
||||
def set_break_on(self, ex_break_on):
|
||||
self.ex_break_on = ex_break_on
|
||||
|
||||
def __repr__(self):
|
||||
return 'Filter<%s,%s,%s,%s>' % (self.re_spec, repr(self.re_allows),
|
||||
repr(self.ex_vars), self.ex_group)
|
||||
return 'Filter<%s,%s,%s,%s,%s>' % \
|
||||
(self.re_spec, repr(self.re_allows),
|
||||
repr(self.ex_vars),
|
||||
self.ex_group, self.ex_break_on,
|
||||
)
|
||||
|
||||
def match_fill(self, file):
|
||||
mo = self.re_spec.match(file.name)
|
||||
|
@ -70,7 +78,15 @@ class Filter:
|
|||
if self.ex_group is not None:
|
||||
group = mo.expand(self.ex_group)
|
||||
if '%' in group: group = group % file.vars
|
||||
file.group = group
|
||||
else:
|
||||
group = None
|
||||
file.group = group
|
||||
if self.ex_break_on is not None:
|
||||
break_on = mo.expand(self.ex_break_on)
|
||||
if '%' in break_on: break_on = break_on % file.vars
|
||||
else:
|
||||
break_on = None
|
||||
file.break_on = break_on
|
||||
return True
|
||||
|
||||
def match_allow(self, file):
|
||||
|
@ -265,8 +281,14 @@ def print_files(files, fgroups=None, select_group=None, script_name=None, xslt=N
|
|||
if fgroup == select_group:
|
||||
xfgroup.set('selected', 'selected')
|
||||
xfiles = ET.SubElement(xresult, "files")
|
||||
first = True
|
||||
last_classifier = (None, None)
|
||||
for file in files:
|
||||
if file.dontlist: continue
|
||||
current_classifier = (file.group, file.break_on)
|
||||
file.break_here = first or current_classifier != last_classifier
|
||||
last_classifier = current_classifier
|
||||
first = False
|
||||
xfile = ET.SubElement(xfiles, "file")
|
||||
if file.group is not None: xfile.set('group', file.group)
|
||||
for name, value in file.vars.items():
|
||||
|
@ -291,6 +313,9 @@ def run_cgilsxml():
|
|||
def set_group(option, opt_str, value, parser, *args, **kw):
|
||||
if env['filter'] is None: env['filter'] = default_filter
|
||||
env['filter'].set_group(value)
|
||||
def set_break_on(option, opt_str, value, parser, *args, **kw):
|
||||
if env['filter'] is None: env['filter'] = default_filter
|
||||
env['filter'].set_break_on(value)
|
||||
|
||||
from optparse import OptionParser
|
||||
OP = OptionParser(usage=u"\n\t%prog [options] /path/to/dir", description=__doc__)
|
||||
|
@ -301,10 +326,14 @@ def run_cgilsxml():
|
|||
OP.add_option('-E', '--allow-spec', dest='spec', action='callback', callback=allow_spec, type='string',
|
||||
help=u"Ajouter une spécification de fichier qui peut être demandé avec --cgi-path-info. Ces fichiers ne sont pas inclus dans la liste.")
|
||||
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."
|
||||
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 respectivement le groupe numéro N et le groupe nommé NAME de l'expression régulière --spec."
|
||||
+ u"\n Cette 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',
|
||||
help=u"Spécifier l'expression qui permet de construire des ensembles de fichiers sur la base des groupes définis dans l'expression régulière de l'option --spec. 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 ou \\g<NAME> pour inclure respective le groupe numéro N et le groupe nommé NAME de l'expression régulière --spec."
|
||||
help=u"Spécifier l'expression qui permet de construire des ensembles de fichiers sur la base des groupes définis dans l'expression régulière de l'option --spec. 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 ou \\g<NAME> pour inclure respectivement le groupe numéro N et le groupe nommé NAME de l'expression régulière --spec."
|
||||
+ u"\n Cette option ne peut être spécifiée qu'une seule fois par option --spec")
|
||||
OP.add_option('-b', '--break-on', dest='break_on', action='callback', callback=set_break_on, type='string',
|
||||
help=u"Spécifier une expression qui permet de partitionner la list des fichiers au sein d'un même groupe. 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 ou \\g<NAME> pour inclure respectivement le groupe numéro N et le groupe nommé NAME de l'expression régulière --spec."
|
||||
+ u"\n Bien que ce ne soit pas une obligation, il est logique de trier la liste sur cette expression pour que les groupes de fichiers soient ensembles dans la liste."
|
||||
+ u"\n Cette option ne peut être spécifiée qu'une seule fois par option --spec")
|
||||
OP.add_option('-s', '--sort', dest='sortby',
|
||||
help=u"Spécifier le champ sur lequel trier ainsi que le type de tri à utiliser. SORT_EXPR est de la forme FIELD:TYPE où FIELD est le nom du champ et TYPE est le type de tri: A, D, C et/ou N pour (A)scendant, (D)escendant, (C)haine, (N)numérique. Si un champ est spécifié mais que le type de tri ne l'est pas, la valeur par défaut est AC. Si cette option n'est pas spécifiée, le tri par défaut est 'mtime:DN'."
|
||||
|
|
Loading…
Reference in New Issue