This commit is contained in:
Jephté Clain 2017-07-18 22:58:35 +04:00
parent f7008c77f4
commit 2bf51dec9d
2 changed files with 38 additions and 22 deletions

View File

@ -41,5 +41,10 @@
* faire des outils d'interrogation base de données pour pouvoir commencer à
exploiter le code
* fonction qui transforme args en deux listes: une liste de valeurs et une
liste d'attributs de la forme name=value
* lors de la recherche, les liens devraient contenir les objets et non les
identifiants dans fos et tos. corriger le code de recherche match_fos et
match_tos pour utiliser les valeurs des objets.
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -26,6 +26,7 @@ def flatten(src, unique=True, clean=True, sep=','):
e.g flatten(['a , b', 'c,']) --> ['a', 'b', 'c']
"""
if src is None: return None
if not isseq(src): src = [src]
dest = []
for items in src:
@ -645,6 +646,7 @@ class Database(object):
est invalide. Si value ou attrs sont définis, filtrer sur ces valeurs.
"""
if otype is None:
#XXX faire un traitement récursif avec get_known_otypes
objects = []
for objects_ids in self._objects_ids_otype.values():
objects.extend(objects_ids.values())
@ -698,6 +700,7 @@ class Database(object):
XXX compléter la doc
"""
#XXX si ltype is None, faire un traitement récursif avec get_known_ltypes
links = self._links_ltype.get(ltype, None)
if links is None: return None
@ -1514,11 +1517,11 @@ def __resolve_format(o, query_type):
ovars = False
lvars = True
ofunc, lfunc = o.object_func, o.link_func
ivars = flatten(o.vars) or None
return format, ovars, lvars, ofunc, lfunc, ivars
avars = flatten(o.vars) or None
return format, ovars, lvars, ofunc, lfunc, avars
def print_var(name, values, format, ivars, is_values=False):
if ivars is not None and name not in ivars: return
def print_var(name, values, format, avars, is_values=False):
if avars is not None and name not in avars: return
if not isseq(values): values = [values]
if format == 'shell':
params = (name, " ".join(qshell(values)))
@ -1538,16 +1541,15 @@ def print_var(name, values, format, ivars, is_values=False):
else:
raise ValueError("%s: invalid format" % format)
def print_objects(objects, query_type, o):
def print_objects(objects, format, ovars, ofunc, avars):
if objects is None: return
format, ovars, lvars, ofunc, lfunc, ivars = __resolve_format(o, query_type)
if not ovars: return
for o in objects:
if o.is_defaults(): continue
print_var('otype', o.OTYPE, format, ivars)
print_var(o.VALUESNAME, o.values, format, ivars, True)
print_var('otype', o.OTYPE, format, avars)
print_var(o.VALUESNAME, o.values, format, avars, True)
for name, values in o.attrs.items():
print_var('%s%s' % (o.ATTRPREFIX, name), values, format, ivars)
print_var('%s%s' % (o.ATTRPREFIX, name), values, format, avars)
if ofunc and format == 'shell':
print ofunc
@ -1602,15 +1604,22 @@ def run_qdd(o):
if o.profile is not None: profile = o.profile or None
else: profile = UNDEF
args = o.args or UNDEF
format, ovars, lvars, ofunc, lfunc, avars = __resolve_format(o, query_type)
if query_type == 'object':
objects = db.get_objects(object_type, args)
print_objects(objects, query_type, o)
print_objects(objects, format, ovars, ofunc, avars)
elif query_type == 'source':
pass
tos, attrs = part_filter_args(args)
links = db.get_links(link_type, profile, to=tos, attrs=attrs)
links = filter_links(object_type)
print_links(links, format, ovars, lvars, ofunc, lfunc, avars)
elif query_type == 'dest':
pass
fos, attrs = part_filter_args(args)
links = db.get_links(link_type, profile, fo=fos, attrs=attrs)
links = filter_links(object_type)
print_links(links, format, ovars, lvars, ofunc, lfunc, avars)
elif query_type == 'link':
pass
pass #XXX
if __name__ == '__main__':
from argparse import ArgumentParser, HelpFormatter
@ -1660,15 +1669,15 @@ if __name__ == '__main__':
help=u"Spécifier le nom de la configuration à utiliser. Par défaut, utiliser le nom générique deploy.")
AP.add_argument('-q', '--query-type', dest='query_type',
help=u"""\
Spécifier le type d'information à afficher:
Spécifier le type d'information à afficher et donc le type d'information à chercher:
>>>
* object pour des informations sur les objets,
* 'object' pour des informations sur les objets. le filtre est la valeur de l'objet ou d'un de ses attributs.
>>>
* source pour des informations sur les objets sources d'un lien,
* 'source' pour des informations sur les objets sources d'un lien. le filtre est la valeur d'un objet destination ou de l'un de ses attributs.
>>>
* dest pour des informations sur les objets destinations d'un lien,
* 'dest' pour des informations sur les objets destinations d'un lien. le filtre est la valeur d'un objet source et de l'un de ses attributs.
>>>
* link pour des informations sur un lien.
* 'link' pour des informations sur un lien.
>>>
La valeur par défaut est '-q dest -j host'""")
AP.add_argument('-j', '--object-type', dest='object_type',
@ -1679,13 +1688,15 @@ La valeur par défaut est '-q dest -j host'""")
help=u"Spécifier le profil de déploiement pour -q source|dest|link. Utiliser une valeur vide pour ne sélectionner que les liens sans profils. Ne pas spécifier l'option pour afficher tous les profils définis.")
AP.add_argument('-F', '--format', dest='format',
help=u"""\
Spécifier le format pour la sortie. La valeur par défaut est shell.
Spécifier le format pour la sortie:
>>>
* shell affiche les définitions de variables
* 'shell' affiche les définitions de variables
>>>
* lines affiches les valeurs à raison d'une par lignes. les attributs ne sont pas affichés.
* 'lines' affiches les valeurs à raison d'une par lignes. les attributs ne sont pas affichés.
>>>
* spaces, path et comma affichent les valeurs séparées respectivement par un espace ' ', deux point ':' et une virgule ','. les attributs ne sont pas affichés.""")
* 'spaces', 'path' et 'comma' affichent les valeurs séparées respectivement par un espace ' ', deux point ':' et une virgule ','. les attributs ne sont pas affichés.
>>>
La valeur par défaut est shell""")
AP.add_argument('-v', '--include-vars', action='append', dest='vars', metavar='VARS...',
help=u"Spécifier les variables qui doivent être affichées. Par défaut, toutes les variables sont affichées.")
AP.add_argument('-o', '--object-vars', action='store_true', dest='object_vars',