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
* 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

View File

@ -302,6 +302,8 @@ class GenericLink(object):
for value in values:
self.modify_attr(name, value, method)
def invalid_match(self, match):
return ValueError("%s: invalid match type")
def match_profiles(self, profiles):
"""Tester si ce lien est dans l'un des profils spécifiés
@ -322,31 +324,60 @@ class GenericLink(object):
for profile in profiles:
if profile == self._profile: return True
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
match=='any' qui est la valeur par défaut)
"""
if not isseq(fos): fos = [fos]
for fo in fos:
if fo in self._fos: return True
return False
def match_tos(self, tos, match='any'):
if reverse: Yes, No = False, True
else: Yes, No = True, False
if 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
match=='any' qui est la valeur par défaut)
"""
if not isseq(tos): tos = [tos]
for to in tos:
if to in self._tos: return True
return False
def match_attrs(self, attrs, match='any'):
if reverse: Yes, No = False, True
else: Yes, No = True, False
if 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
(avec match=='any' qui est la valeur par défaut)
"""
for name, value in attrs.items():
values = self._attrs.get(name, None)
if values is not None:
if value in values: return True
return False
if reverse: Yes, No = False, True
else: Yes, No = True, False
if match == 'any':
for name, value in attrs.items():
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):
profile = self.profile or 'ALL'