diff --git a/TODO.md b/TODO.md index 635d0a5..db804f9 100644 --- a/TODO.md +++ b/TODO.md @@ -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 \ No newline at end of file diff --git a/lib/ulib/support/deploydb.py b/lib/ulib/support/deploydb.py index 3846620..48d2b53 100755 --- a/lib/ulib/support/deploydb.py +++ b/lib/ulib/support/deploydb.py @@ -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'