diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index a1a6068a..13032586 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -2055,17 +2055,63 @@ class machine(base_classes_crans) : return clef - def canal(self,new=None) : + def canal(self,new=None,raw=False) : """ Attribution ou visualisation du canal d'une borne wifi """ if self.__typ != 'borne' : return None - if not new : - return self._data.get('canal',[''])[0] + if not new: + canaux = self._data.get('canal',[''])[0] + if raw: + return canaux + else: + canaux = int(canaux) + if canaux < 14: + # Compatibilité ascendante + return str(canaux) + lcanal1 = [] + for i in range(1,14): + found = False + if canaux & (1 << (i - 1)): + lcanal2 = [] + for c in lcanal1: + if c[1] == i - 1: + lcanal2.append((c[0], i)) + found = True + else: + lcanal2.append(c) + if not found: + lcanal2.append((i,i)) + lcanal1 = lcanal2 + lcanal3 = [] + for c in lcanal1: + if c[0] == c[1]: + lcanal3.append("%d" % c[0]) + else: + lcanal3.append("%d-%d" % (c[0],c[1])) + return ",".join(lcanal3) + try : new = int(new) - if new < 0 or new > 14 : raise + if new < 0 or new > 13 : raise except : - raise ValueError(u'Canal invalide : doit être entre 0 et 14') + # Nouveau système, il doit s'agir d'une liste de canaux + try: + lcanal3 = str(new).split(",") + lcanal = [] + for c in lcanal3: + c2 = c.split("-") + if len(c2) == 1: + lcanal.append(int(c2[0])) + else: + for i in range(int(c2[0]), int(c2[1]) + 1): + lcanal.append(i) + new = 0 + for c in lcanal: + if c not in range(0,14): + raise + new = new + (1 << (c - 1)) + except: + raise ValueError(u'Canal invalide : doit être entre 0 et 13 ou une liste de canaux') self._set('canal',[str(new)]) return new