def add_frame_of_elem(elem_id, date): # Добавляем "кадр" элемента session = db_session.create_session() date = list(map(int, date.split('.'))) obj = session.query(Map_Object).filter(Map_Object.id == elem_id).first() borders = list( [list(map(int, i[0].split('.'))), i[1].split(';')] for i in map(lambda x: x.split(':'), obj.borders.split('|'))) t = True for i in range(len(borders) - 1): # Определяем какой сейчас элемент мы видим... if date_equal(date, borders[i][0]): return if date_more(date, borders[i][0]) and date_less( date, borders[i + 1][0]): borders.insert(i + 1, [date, borders[i][1]]) t = False break if t: if date_equal(date, borders[-1][0]): return borders.insert(len(borders), [date, borders[-1][1]]) # ...и его копируем obj.borders = '|'.join(':'.join(['.'.join(map(str, i[0])), ';'.join(i[1])]) for i in borders) session.commit()
def add_name_of_elem(elem_id, date, name): # Добавляем название элементу session = db_session.create_session() date = list(map(int, date.split('.'))) obj = session.query(Map_Object).filter(Map_Object.id == elem_id).first() t = True if obj.names is None: # Если имён нет names_obj = [[list(map(int, obj.start_date.split('.'))), name]] t = False else: names_obj = list( [list(map(int, i[0].split('.'))), i[1]] for i in map(lambda x: x.split(':'), obj.names.split('|'))) for i in range(len(names_obj) - 1): # Определяем какой сейчас элемент мы видим... if date_equal(date, names_obj[i][0]): return if date_more(date, names_obj[i][0]) and date_less( date, names_obj[i + 1][0]): names_obj.insert(i + 1, [date, name]) # ...и добавляем ему название t = False break if t: if date_equal(date, names_obj[-1][0]): return names_obj.insert(len(names_obj), [date, name]) # ...и добавляем ему название obj.names = '|'.join(':'.join(['.'.join(map(str, i[0])), i[1]]) for i in names_obj) session.commit()
def check_date(date): date = list(map(int, date)) if date_less(date, [1931, 2, 20]): date = [1931, 2, 20] elif date_more(date, [1932, 12, 31]): date = [1932, 12, 31] date = list(map(str, map(int, date))) date[1] = '0' * (2 - len(date[1])) + date[1] date[2] = '0' * (2 - len(date[2])) + date[2] return date
def remove_point_of_elem(elem_id, point_id, date): # Удаление вершины session = db_session.create_session() date = list(map(int, date.split('.'))) obj = session.query(Map_Object).filter(Map_Object.id == elem_id).first() borders = list( [list(map(int, i[0].split('.'))), i[1].split(';')] for i in map(lambda x: x.split(':'), obj.borders.split('|'))) t = True for i in range(len(borders) - 1): # ...определяем нужную позицию и удаляем if date_more_or_equal(date, borders[i][0]) and date_less( date, borders[i + 1][0]): borders[i][1].pop(point_id) t = False break if t: borders[-1][1].pop(point_id) obj.borders = '|'.join(':'.join(['.'.join(map(str, i[0])), ';'.join(i[1])]) for i in borders) session.commit()
def insert_point_of_elem(elem_id, point_id, points, date): # Добавляем вершину session = db_session.create_session() date = list(map(int, date.split('.'))) obj = session.query(Map_Object).filter(Map_Object.id == elem_id).first() borders = list( [list(map(int, i[0].split('.'))), i[1].split(';')] for i in map(lambda x: x.split(':'), obj.borders.split('|'))) t = True for i in range(len(borders) - 1): # Находим подходящий "кадр" if date_more_or_equal(date, borders[i][0]) and date_less( date, borders[i + 1][0]): borders[i][1].insert(point_id, ','.join(map(str, points))) t = False # и добовляем в него вершину /\ break if t: # НЕ ОБРАЩАЙТЕ ВНИМАНИЕ НА PEP8. Если это "исправить", то будут возникать ошибки borders[-1][1].insert(point_id, ','.join(map(str, points))) obj.borders = '|'.join(':'.join(['.'.join(map(str, i[0])), ';'.join(i[1])]) for i in borders) session.commit()
def change_point_of_elem(elem_id, point_id, points, date): # Изменяем посицию вершины элемента session = db_session.create_session() date = list(map(int, date.split('.'))) obj = session.query(Map_Object).filter(Map_Object.id == elem_id).first() borders = list( [list(map(int, i[0].split('.'))), i[1].split(';')] for i in map(lambda x: x.split(':'), obj.borders.split('|'))) t = True # /\ получаем данные об элементе for i in range(len(borders) - 1): # Определяем по дате \/ if date_more_or_equal(date, borders[i][0]) and date_less( date, borders[i + 1][0]): borders[i][1][point_id] = ','.join(map( str, points)) # И меняем подходящий элемент t = False break if t: # Если ни что не подходит... borders[-1][1][point_id] = ','.join(map( str, points)) # ...то, меняем последний элемент obj.borders = '|'.join(':'.join(['.'.join(map(str, i[0])), ';'.join(i[1])]) for i in borders) session.commit()
def load_current_map(date): # Загрузка карты из базы данных session = db_session.create_session() date = list(map(int, date.split('.'))) # Дата пользователя objects_res, ids, colors, names = [], [], [], [] try: objs = session.query(Map_Object).all() except BaseException: # Если нет никаких элементов в базе данных то мы отправляем пустые данные return [[], [], [], []] for obj in list(objs): try: # У каждого объекта определяем начальную... obj_start = list(map(int, obj.start_date.split('.'))) except BaseException: obj_start = [1, 1, 1] try: # ... и конечную даты obj_end = list(map(int, obj.end_date.split('.'))) except BaseException: obj_end = [10000, 1, 1] # Если объект подходит по датам \/ if date_more_or_equal(date, obj_start) and date_less_or_equal( date, obj_end): borders = list( [list(map(int, i[0].split('.'))), i[1].split(';')] for i in map(lambda x: x.split(':'), obj.borders.split('|'))) t = True # /\ То мы определяем о нём информацию t_check = False for i in range(len(borders) - 1): # Смотрим каждый элемент if date_more_or_equal(date, borders[i][0]) and date_less( date, borders[i + 1][0]): if borders[i][1] not in [ '', None ]: # И если он подходит, то мы его добавляем ids.append(obj.id) colors.append(obj.color) res, t_check = check_shape( list( map(lambda x: list(map(float, x.split(','))), borders[i][1]))) if t_check: borders[i][1] = list( map(lambda x: ','.join(list(map(str, x))), res)) objects_res.append(res) t = False break if t and borders[-1][1] not in [ '', None ]: # Если ни кто не прошёл 1 условие, то ids.append(obj.id) # смотрим на последний элемент, если он colors.append(obj.color) # подходит, то его добавляем res, t_check = check_shape( list( map(lambda x: list(map(float, x.split(','))), borders[-1][1]))) if t_check: borders[-1][1] = list( map(lambda x: ','.join(list(map(str, x))), res)) objects_res.append(res) # Определяем имя объекта if obj.names is None: # Если имён нет names.append('') else: names_obj = list( [list(map(int, i[0].split('.'))), i[1]] for i in map(lambda x: x.split(':'), obj.names.split('|'))) t = True for i in range(len(names_obj) - 1): # Смотрим каждый элемент if date_more_or_equal(date, names_obj[i][0]) and date_less( date, names_obj[i + 1][0]): if names_obj[i][1] not in ['', None]: names.append(names_obj[i][1]) t = False break if t and names_obj[-1][1] not in ['', None]: names.append(names_obj[-1][1]) if t_check: obj.borders = '|'.join( ':'.join(['.'.join(map(str, i[0])), ';'.join(i[1])]) for i in borders) session.commit() return [objects_res, ids, colors, names]