merging with the wiki trunk development
bzr revid: mga@tinyerp.com-20081203120939-pd53a750ppsf8y4k
This commit is contained in:
@@ -39,11 +39,50 @@ def wiki_do_index(self, cr, uid, data, context):
|
||||
iid = ','.join([str(x) for x in ids])
|
||||
sSQL = "Select id, section from wiki_wiki where id in (%s) order by section " % (iid)
|
||||
cr.execute(sSQL)
|
||||
wiki = cr.fetchall()
|
||||
i = 1
|
||||
for wk in wiki:
|
||||
wiki_pool.write(cr, uid, [wk[0]], {'section':i})
|
||||
i+=1
|
||||
lst0 = cr.fetchall()
|
||||
lst = []
|
||||
ids = {}
|
||||
for l in lst0:
|
||||
ids[l[1]] = l[0]
|
||||
lst.append(l[1])
|
||||
|
||||
lst.sort()
|
||||
val = None
|
||||
def toint(x):
|
||||
try:
|
||||
return int(x)
|
||||
except:
|
||||
return 1
|
||||
|
||||
lst = map(lambda x: map(toint, x.split('.')), lst)
|
||||
|
||||
result = []
|
||||
current = ['0']
|
||||
current2 = []
|
||||
|
||||
for l in lst:
|
||||
for pos in range(len(l)):
|
||||
if pos >= len(current):
|
||||
current.append('1')
|
||||
continue
|
||||
if (pos == len(l) - 1) or (pos >= len(current2)) or (toint(l[pos]) > toint(current2[pos])):
|
||||
current[pos] = str(toint(current[pos]) + 1)
|
||||
current = current[:pos + 1]
|
||||
if pos == len(l) - 1:
|
||||
break
|
||||
|
||||
key = ('.'.join([str(x) for x in l]))
|
||||
id = ids[key]
|
||||
val = ('.'.join([str(x) for x in current[:]]), id)
|
||||
|
||||
if val:
|
||||
result.append(val)
|
||||
current2 = l
|
||||
|
||||
print 'OLD', lst
|
||||
print 'NEW', result
|
||||
for rs in result:
|
||||
wiki_pool.write(cr, uid, [rs[1]], {'section':rs[0]})
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
def sort(data, index):
|
||||
for i in range(len(data)):
|
||||
j = i + 1
|
||||
for j in range(len(data)-1):
|
||||
d1 = data[i].split('.')
|
||||
d2 = data[j].split('.')
|
||||
|
||||
l1 = len(d1)
|
||||
l2 = len(d2)
|
||||
max = 0
|
||||
if l1 < l2:
|
||||
max = l1
|
||||
elif l2 < l1:
|
||||
max = l2
|
||||
else:
|
||||
max = l1
|
||||
|
||||
if max == 1:
|
||||
if int(d1[0]) == int(d2[0]):
|
||||
if len(d1) < len(d2):
|
||||
tmp = data[i]
|
||||
data[i] = data[j]
|
||||
data[j] = tmp
|
||||
continue
|
||||
|
||||
for p in range(0, max):
|
||||
val1 = val2 = 0
|
||||
try:
|
||||
val1 = int(d1[p])
|
||||
except:
|
||||
val1 = 0
|
||||
|
||||
try:
|
||||
val2 = int(d2[p])
|
||||
except:
|
||||
val2 = 0
|
||||
|
||||
if val1 < val2:
|
||||
tmp = data[i]
|
||||
data[i] = data[j]
|
||||
data[j] = tmp
|
||||
if data[i].startswith(data[j]):
|
||||
tmp = data[i]
|
||||
tmp = tmp.replace(data[j],'')
|
||||
|
||||
def group(data):
|
||||
gp = {}
|
||||
for i in range(len(data)):
|
||||
d1 = data[i].split('.')[0]
|
||||
if gp.has_key(d1):
|
||||
gp[d1].append(data[i])
|
||||
else:
|
||||
gp[d1] = [data[i]]
|
||||
return gp
|
||||
|
||||
def max(data):
|
||||
max = 0
|
||||
for i in range(len(data)):
|
||||
d = str(data[i]).split('.')
|
||||
if len(d) > max:
|
||||
max = len(d)
|
||||
|
||||
return max
|
||||
|
||||
def toint(data):
|
||||
for i in range(len(data)):
|
||||
data[i] = int(data[i])
|
||||
|
||||
def rearrange(key, groups):
|
||||
i = 1
|
||||
new = {}
|
||||
for ky in key:
|
||||
new[i] = groups[str(ky)]
|
||||
i += 1
|
||||
return new
|
||||
|
||||
def reindex(key, groups):
|
||||
if groups[0] != key:
|
||||
groups[0] = key
|
||||
|
||||
lvl_group = {}
|
||||
level = max(groups)
|
||||
for i in range(len(groups)):
|
||||
dg = str(groups[i]).split('.')
|
||||
index = len(dg)
|
||||
if lvl_group.has_key(str(index)):
|
||||
lvl_group[str(index)].append(groups[i])
|
||||
else:
|
||||
lvl_group[str(index)] = [groups[i]]
|
||||
|
||||
for i in range(2, level+1):
|
||||
ixd = 1
|
||||
gps = lvl_group[str(i)]
|
||||
for j in range(len(gps)):
|
||||
dt = gps[j].split('.')
|
||||
new =""
|
||||
for k in range(i-1):
|
||||
new += str(dt[k])
|
||||
new += '.'
|
||||
|
||||
new += str(ixd)
|
||||
ixd += 1
|
||||
gps[j] = new
|
||||
|
||||
print lvl_group
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
data = ['1', '10.1', '10.3', '1.1', '1.2.3', '1.7', '3.1.8', '1.2.2', '1.2.10', '1.3', '1.4', '2', '20.2', '2.1', '2.2', '3', '3.1', '1.2.1', '2.1.2']
|
||||
|
||||
sort(data, 0)
|
||||
|
||||
grp = group(data)
|
||||
|
||||
for gp in grp:
|
||||
loop = max(grp[gp])
|
||||
for lp in range(1, loop):
|
||||
sort(grp[gp],lp)
|
||||
|
||||
key = grp.keys()
|
||||
toint(key)
|
||||
key.sort()
|
||||
|
||||
groups = rearrange(key, grp)
|
||||
|
||||
new_data = []
|
||||
for key in groups:
|
||||
new_data.extend(groups[key])
|
||||
#print groups[key]
|
||||
|
||||
print 'XXXXXXXXXXXXXXXXX : ', new_data
|
||||
# print groups
|
||||
#
|
||||
Reference in New Issue
Block a user