ajouter le type de recherche all

This commit is contained in:
Jephté Clain 2017-07-18 17:47:58 +04:00
parent be0ec1c3ab
commit 38fdb21f91
2 changed files with 48 additions and 14 deletions

View File

@ -39,4 +39,7 @@
* pldef2 est un attribut global à tous les liens du groupe #1 dans le profil PROFILE * pldef2 est un attribut global à tous les liens du groupe #1 dans le profil PROFILE
* lvar est spécifique au lien MyModule --> dh * lvar est spécifique au lien MyModule --> dh
* faire des outils d'interrogation base de données pour pouvoir commencer à
exploiter le code
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -302,6 +302,8 @@ class GenericLink(object):
for value in values: for value in values:
self.modify_attr(name, value, method) self.modify_attr(name, value, method)
def invalid_match(self, match):
return ValueError("%s: invalid match type")
def match_profiles(self, profiles): def match_profiles(self, profiles):
"""Tester si ce lien est dans l'un des profils spécifiés """Tester si ce lien est dans l'un des profils spécifiés
@ -322,31 +324,60 @@ class GenericLink(object):
for profile in profiles: for profile in profiles:
if profile == self._profile: return True if profile == self._profile: return True
return False return False
def match_fos(self, fos, match='any'): def match_fos(self, fos, match='any', reverse=False):
"""Tester si ce lien a l'un des objets spécifiés dans ses objets de départ (avec """Tester si ce lien a l'un des objets spécifiés dans ses objets de départ (avec
match=='any' qui est la valeur par défaut) match=='any' qui est la valeur par défaut)
""" """
if not isseq(fos): fos = [fos] if not isseq(fos): fos = [fos]
for fo in fos: if reverse: Yes, No = False, True
if fo in self._fos: return True else: Yes, No = True, False
return False if match == 'any':
def match_tos(self, tos, match='any'): for fo in fos:
if fo in self._fos: return Yes
return No
elif match == 'all':
for fo in fos:
if fo not in self._fos: return No
return Yes
else:
raise self.invalid_match(match)
def match_tos(self, tos, match='any', reverse=False):
"""Tester si ce lien a l'un des objets spécifiés dans ses objets d'arrivée (avec """Tester si ce lien a l'un des objets spécifiés dans ses objets d'arrivée (avec
match=='any' qui est la valeur par défaut) match=='any' qui est la valeur par défaut)
""" """
if not isseq(tos): tos = [tos] if not isseq(tos): tos = [tos]
for to in tos: if reverse: Yes, No = False, True
if to in self._tos: return True else: Yes, No = True, False
return False if match == 'any':
def match_attrs(self, attrs, match='any'): for to in tos:
if to in self._tos: return Yes
return No
elif match == 'all':
for to in tos:
if to not in self._tos: return No
return Yes
else:
raise self.invalid_match(match)
def match_attrs(self, attrs, match='any', reverse=False):
"""Tester si ce lien a un des attributs correspondant aux valeurs spécifiées """Tester si ce lien a un des attributs correspondant aux valeurs spécifiées
(avec match=='any' qui est la valeur par défaut) (avec match=='any' qui est la valeur par défaut)
""" """
for name, value in attrs.items(): if reverse: Yes, No = False, True
values = self._attrs.get(name, None) else: Yes, No = True, False
if values is not None: if match == 'any':
if value in values: return True for name, value in attrs.items():
return False values = self._attrs.get(name, None)
if values is None: continue
if value in values: return Yes
return No
elif match == 'all':
for name, value in attrs.items():
values = self._attrs.get(name, None)
if values is None: return No
if value not in values: return No
return Yes
else:
raise self.invalid_match(match)
def _dump_profile(self, indent): def _dump_profile(self, indent):
profile = self.profile or 'ALL' profile = self.profile or 'ALL'