[lc_ldap._find_id] Dans le cas non strictement croissant des id, on utilise un set pour stocker les id déjà pris
En effet, en effectue ensuite un nombre important de fois l'opération i in nonfree. Avec des liste l'opération est en O(n) alors qu'elle est en O(1) avec des set
This commit is contained in:
parent
955a4f2820
commit
1312039a55
1 changed files with 17 additions and 17 deletions
34
lc_ldap.py
34
lc_ldap.py
|
@ -420,24 +420,10 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
# On récupère tous les id
|
# On récupère tous les id
|
||||||
res = self.search_s(variables.base_dn, ldap.SCOPE_SUBTREE, '%s=*' % attr, attrlist = [attr])
|
res = self.search_s(variables.base_dn, ldap.SCOPE_SUBTREE, '%s=*' % attr, attrlist = [attr])
|
||||||
|
|
||||||
# On extrait seulement les valeurs des id qui nous intêressent
|
|
||||||
nonfree = [ int(r[1].get(attr)[0]) for r in res if r[1].get(attr) ]
|
|
||||||
# On trie pour récupérer le dernier
|
|
||||||
nonfree.sort()
|
|
||||||
|
|
||||||
try:
|
|
||||||
last_id = nonfree[-1]
|
|
||||||
except IndexError:
|
|
||||||
last_id = 0
|
|
||||||
|
|
||||||
if plage is None:
|
|
||||||
# On écrit le nouveau dernier id connu
|
|
||||||
f=os.open('/tmp/lc_ldap_lastid_%s_%s' % (attr, os.getuid()), os.O_WRONLY | os.O_CREAT, 0600)
|
|
||||||
os.write(f, str(last_id))
|
|
||||||
os.close(f)
|
|
||||||
|
|
||||||
|
|
||||||
if plage != None:
|
if plage != None:
|
||||||
|
# On extrait seulement les valeurs des id qui nous intêressent, dans un set
|
||||||
|
# car on n'a pas besoin de trier et que et que i in set c'est O(1) contre O(n) pour les list
|
||||||
|
nonfree = set(int(r[1].get(attr)[0]) for r in res if r[1].get(attr))
|
||||||
for i in plage:
|
for i in plage:
|
||||||
if i in nonfree:
|
if i in nonfree:
|
||||||
continue
|
continue
|
||||||
|
@ -456,6 +442,20 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
raise EnvironmentError('Aucun %s libre dans la plage [%d, %d]' %
|
raise EnvironmentError('Aucun %s libre dans la plage [%d, %d]' %
|
||||||
(attr, plage[0], i))
|
(attr, plage[0], i))
|
||||||
else:
|
else:
|
||||||
|
# On extrait seulement les valeurs des id qui nous intêressent dans une liste
|
||||||
|
nonfree = [ int(r[1].get(attr)[0]) for r in res if r[1].get(attr) ]
|
||||||
|
# On trie pour récupérer le dernier
|
||||||
|
nonfree.sort()
|
||||||
|
try:
|
||||||
|
last_id = nonfree[-1]
|
||||||
|
except IndexError:
|
||||||
|
last_id = 0
|
||||||
|
|
||||||
|
# On écrit le nouveau dernier id connu
|
||||||
|
f=os.open('/tmp/lc_ldap_lastid_%s_%s' % (attr, os.getuid()), os.O_WRONLY | os.O_CREAT, 0600)
|
||||||
|
os.write(f, str(last_id))
|
||||||
|
os.close(f)
|
||||||
|
|
||||||
i = last_id + 1
|
i = last_id + 1
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue