Beispiel #1
0
def update_uik(context, request):
    uik = json.loads(request.POST['uik'])
    session = DBSession()
    from helpers import str_to_boolean
    session.query(Uik).filter(Uik.id == uik['id']).update({
        Uik.address_voting: uik['address_voting'],
        Uik.place_voting: uik['place_voting'],
        Uik.is_applied: str_to_boolean(uik['is_applied']),
        Uik.comment: uik['comment'],
        Uik.geocoding_precision_id: uik['geo_precision'],
        Uik.is_blocked: False,
        Uik.user_block_id: None
    }, synchronize_session=False)
    sql = 'UPDATE uiks SET point=ST_GeomFromText(:wkt, 4326) WHERE id = :uik_id'
    session.execute(sql, {
        'wkt': 'POINT(%s %s)' % (uik['geom']['lng'], uik['geom']['lat']),
        'uik_id': uik['id']
    })

    log = UikVersions()
    log.uik_id = uik['id']
    log.user_id = request.session['u_id']
    from datetime import datetime
    log.time = datetime.now()
    log.dump = log.to_json_binary_dump(uik)
    session.add(log)

    transaction.commit()
    return Response()
Beispiel #2
0
def update_stop(context, request):
    stop = json.loads(request.POST["stop"])
    session = DBSession()
    session.query(Stop).filter(Stop.id == stop["id"]).update(
        {
            Stop.name: stop["name"].encode("UTF-8"),
            Stop.is_bench: None if stop["is_bench"] == "None" else stop["is_bench"],
            Stop.is_shelter: None if stop["is_shelter"] == "None" else stop["is_shelter"],
            Stop.comment: stop["comment"].encode("UTF-8"),
            Stop.panorama_link: stop["panorama_link"],
            Stop.check_status_type_id: stop["is_check"],
            Stop.is_help: str_to_boolean(stop["is_help"]),
        },
        synchronize_session=False,
    )
    # raw sql about https://groups.google.com/forum/?fromgroups=#!topic/geoalchemy/vSAlsuhwWfo
    sql = "UPDATE stops SET geom=GeomFromText(:wkt, 4326) WHERE id = :stop_id"
    session.execute(sql, {"wkt": "POINT(%s %s)" % (stop["lon"], stop["lat"]), "stop_id": stop["id"]})

    sql_routes = sql_generate_for_many_to_many(
        session,
        stop["routes"],
        ["stop_id", "route_id"],
        {"col": "stop_id", "id": stop["id"]},
        "stops_routes",
        ["stop_id", "route_id"],
    )
    if sql_routes:
        session.execute(sql_routes)

    sql_types = sql_generate_for_many_to_many(
        session,
        stop["stop_types"],
        ["stop_id", "stop_type_id"],
        {"col": "stop_id", "id": stop["id"]},
        "stops_stop_types",
        ["stop_id", "stop_type_id"],
    )
    if sql_types:
        session.execute(sql_types)

    log = LogStops()
    log.stop_id = stop["id"]
    log.user_id = request.session["u_id"]
    log.time = datetime.now()
    session.add(log)

    transaction.commit()
    return Response(json.dumps(stop))
Beispiel #3
0
def update_stop(context, request):
    stop = json.loads(request.POST['stop'])
    session = DBSession()
    session.query(Stop).filter(Stop.id == stop['id']).update({
                                                             Stop.name: stop['name'].encode('UTF-8'),
                                                             Stop.is_bench: None if stop['is_bench'] == 'None' else
                                                             stop['is_bench'],
                                                             Stop.is_shelter: None if stop['is_shelter'] == 'None' else
                                                             stop['is_shelter'],
                                                             Stop.comment: stop['comment'].encode('UTF-8'),
                                                             Stop.panorama_link: stop['panorama_link'],
                                                             Stop.check_status_type_id: stop['is_check'],
                                                             Stop.is_help: str_to_boolean(stop['is_help'])
                                                             }, synchronize_session=False);
    # raw sql about https://groups.google.com/forum/?fromgroups=#!topic/geoalchemy/vSAlsuhwWfo
    sql = 'UPDATE stops SET geom=GeomFromText(:wkt, 4326) WHERE id = :stop_id'
    session.execute(sql, {
    'wkt': 'POINT(%s %s)' % (stop['lon'], stop['lat']),
    'stop_id': stop['id']
    })

    sql_routes = sql_generate_for_many_to_many(session, stop['routes'], ['stop_id', 'route_id'],
                                               {'col': 'stop_id', 'id': stop['id']}, 'stops_routes',
                                               ['stop_id', 'route_id'])
    if sql_routes:
        session.execute(sql_routes)

    sql_types = sql_generate_for_many_to_many(session, stop['stop_types'], ['stop_id', 'stop_type_id'],
                                              {'col': 'stop_id', 'id': stop['id']}, 'stops_stop_types',
                                              ['stop_id', 'stop_type_id'])
    if sql_types:
        session.execute(sql_types)

    log = LogStops()
    log.stop_id = stop['id']
    log.user_id = request.session['u_id']
    log.time = datetime.now()
    session.add(log)

    transaction.commit()
    return Response(json.dumps(stop))
Beispiel #4
0
def update_entity(context, request):
    entity_from_client = json.loads(request.POST['entity'])

    with transaction.manager:
        session = DBSession()
        from helpers import str_to_boolean

        if ('id' in entity_from_client) and entity_from_client['id']:
            entity = session.query(Entity).filter(Entity.id == entity_from_client['id'])\
                .options(joinedload(Entity.values))
            entity.update({
                  Entity.approved: str_to_boolean(entity_from_client['is_applied']),
                  Entity.blocked: False,
                  Entity.user_block_id: None
            }, synchronize_session=False)
            entity = entity.one()
        else:
            entity = Entity(
                approved=str_to_boolean(entity_from_client['is_applied']),
                blocked=False,
                user_block_id=None
            )
            session.add(entity)
            session.flush()
            session.refresh(entity)


        sql = 'UPDATE entities SET point=ST_GeomFromText(:wkt, 4326) WHERE id = :entity_id'
        session.execute(sql, {
            'wkt': 'POINT(%s %s)' % (entity_from_client['geom']['lng'], entity_from_client['geom']['lat']),
            'entity_id': entity.id
        })

        entity_properties = session.query(EntityProperty)
        current_values = entity.values

        for entity_property in entity_properties:
            if next((x for x in current_values if x.entity_property_id == entity_property.id), None) is None:
                session.add(EntityPropertyValue(
                    entity_property_id=entity_property.id,
                    entity_id=entity.id
                ))

            entity_value = session.query(EntityPropertyValue)\
                .filter(and_(EntityPropertyValue.entity_id == entity.id,
                             EntityPropertyValue.entity_property_id == entity_property.id))

            if entity_property.type == 'text':
                entity_value.update({
                        EntityPropertyValue.text: entity_from_client['ep_' + str(entity_property.id)]
                    }, synchronize_session=False)
            elif entity_property.type == 'int':
                entity_value.update({
                        EntityPropertyValue.int: int(entity_from_client['ep_' + str(entity_property.id)])
                    }, synchronize_session=False)
            elif entity_property.type == 'reference_book':
                entity_value.update({
                        EntityPropertyValue.reference_book_id: int(entity_from_client['ep_' + str(entity_property.id)])
                    }, synchronize_session=False)

        log = EntityVersions()
        log.entity_id = entity.id
        log.user_id = request.session['u_id']
        from datetime import datetime

        log.time = datetime.now()
        log.dump = log.to_json_binary_dump(entity_from_client)
        session.add(log)

    return Response()
Beispiel #5
0
def update_entity(context, request):
    entity_from_client = json.loads(request.POST['entity'])

    with transaction.manager:
        session = DBSession()
        from helpers import str_to_boolean

        if ('id' in entity_from_client) and entity_from_client['id']:
            entity = session.query(Entity).filter(Entity.id == entity_from_client['id'])\
                .options(joinedload(Entity.values))
            entity.update(
                {
                    Entity.approved:
                    str_to_boolean(entity_from_client['is_applied']),
                    Entity.blocked:
                    False,
                    Entity.user_block_id:
                    None
                },
                synchronize_session=False)
            entity = entity.one()
        else:
            entity = Entity(approved=str_to_boolean(
                entity_from_client['is_applied']),
                            blocked=False,
                            user_block_id=None)
            session.add(entity)
            session.flush()
            session.refresh(entity)

        sql = 'UPDATE entities SET point=ST_GeomFromText(:wkt, 4326) WHERE id = :entity_id'
        session.execute(
            sql, {
                'wkt':
                'POINT(%s %s)' % (entity_from_client['geom']['lng'],
                                  entity_from_client['geom']['lat']),
                'entity_id':
                entity.id
            })

        entity_properties = session.query(EntityProperty)
        current_values = entity.values

        for entity_property in entity_properties:
            if next(
                (x for x in current_values
                 if x.entity_property_id == entity_property.id), None) is None:
                session.add(
                    EntityPropertyValue(entity_property_id=entity_property.id,
                                        entity_id=entity.id))

            entity_value = session.query(EntityPropertyValue)\
                .filter(and_(EntityPropertyValue.entity_id == entity.id,
                             EntityPropertyValue.entity_property_id == entity_property.id))

            if entity_property.type == 'text':
                entity_value.update(
                    {
                        EntityPropertyValue.text:
                        entity_from_client['ep_' + str(entity_property.id)]
                    },
                    synchronize_session=False)
            elif entity_property.type == 'int':
                entity_value.update(
                    {
                        EntityPropertyValue.int:
                        int(entity_from_client['ep_' +
                                               str(entity_property.id)])
                    },
                    synchronize_session=False)
            elif entity_property.type == 'reference_book':
                entity_value.update(
                    {
                        EntityPropertyValue.reference_book_id:
                        int(entity_from_client['ep_' +
                                               str(entity_property.id)])
                    },
                    synchronize_session=False)

        log = EntityVersions()
        log.entity_id = entity.id
        log.user_id = request.session['u_id']
        from datetime import datetime

        log.time = datetime.now()
        log.dump = log.to_json_binary_dump(entity_from_client)
        session.add(log)

    return Response()