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()
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))
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))
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()
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()