def parsekodeks(kodeksfile, url_kod): strlist = readfile(kodeksfile) par_id = 0 # levels = {'ЧАСТЬ': 1, 'Раздел': 2, 'Глава': 3, 'Статья': 4} init_level = 0 readst = False kmst = KodeksModel() textlist = [] for ind, strline in enumerate(strlist): # Разбиение на части if (strline.find('ЧАСТЬ') == 0 or strline.find('Часть') == 0) and strlist[ind-1] == '\n' and strlist[ind+1] == '\n': strline = readtext(strlist, ind) km = create_kod_model(strline, ind) km.page_level = 1 if par_id == 0: init_level = 1 if init_level == 1: km.url_address = url_kod + doturl(km.short_name) + '/' km.parent_id = 0 par_id = ind+1 km.visible_left = False km.save() elif (strline.find('Раздел') == 0 or strline.find('РАЗДЕЛ') == 0) and strlist[ind-1] == '\n': strline = readtext(strlist, ind) km = create_kod_model(strline, ind) km.page_level = 2 if par_id == 0: init_level = 2 if init_level == 2: km.url_address = url_kod + doturl(km.short_name) + '/' km.parent_id = 0 par_id = ind+1 else: par_km = KodeksModel.objects.filter(page_id=par_id).first() while par_km.page_level >= 2: par_km = KodeksModel.objects.filter(page_id=par_km.parent_id).first() par_id = par_km.page_id km.url_address = par_km.url_address + doturl(km.short_name) + '/' km.parent_id = par_id par_id = ind+1 km.visible_left = True km.save() elif (strline.find('Глава') == 0 or strline.find('ГЛАВА') == 0) and strlist[ind-1] == '\n': strline = readtext(strlist, ind) km = create_kod_model(strline, ind) km.page_level = 3 if par_id == 0: init_level = 3 if init_level == 3: km.url_address = url_kod + doturl(km.short_name) + '/' km.parent_id = 0 par_id = ind+1 else: par_km = KodeksModel.objects.filter(page_id=par_id).first() while par_km.page_level >= 3: par_km = KodeksModel.objects.filter(page_id=par_km.parent_id).first() par_id = par_km.page_id km.url_address = par_km.url_address + doturl(km.short_name) + '/' km.parent_id = par_id par_id = ind+1 km.visible_left = False km.save() elif strline.find('Статья') >= 0 and strlist[ind-1] == '\n'and strlist[ind+1] == '\n': strline = readtext(strlist, ind) kmst = create_kod_model(strline, ind) kmst.visible_left = False kmst.page_level = 4 readst = True if par_id == 0: init_level = 4 if init_level == 4: kmst.url_address = url_kod + doturl(kmst.short_name) + '/' kmst.parent_id = 0 else: par_km = KodeksModel.objects.filter(page_id=par_id).first() kmst.url_address = par_km.url_address + doturl(kmst.short_name) + '/' kmst.parent_id = par_id if strline.find('Утратила силу') >= 0: kmst.save() readst = False textlist = [] # Если текст начался elif kmst.page_level == 4 and strline != '\n': textlist.append('<p>' + strline.rstrip('\n') + '</p><br>') readst = False # Если текст закончился elif kmst.page_level == 4 and strline == '\n' and not readst: kmst.text_doc = "\r\n".join(textlist) kmst.save()