Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
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
Esempio n. 4
0
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()
Esempio n. 5
0
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()
Esempio n. 6
0
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()
Esempio n. 7
0
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]