def save_features(self): try: map_id = self.request.matchdict.get("map_id") map = DBSession.query(Map).get(map_id) if map is None: return HTTPNotFound() if not self.has_permission(self.request.user, map): return HTTPUnauthorized() if 'features' not in self.request.params: return HTTPBadRequest() features = self.request.params.get('features').\ replace(u'\ufffd', '?') feature_collection = geojson.\ loads(features, object_hook=geojson.GeoJSON.to_instance) for feature in feature_collection['features']: feature_id = feature.properties.get('fid') if feature_id: cur_feature = DBSession.query(Feature).get(feature_id) DBSession.delete(cur_feature) obj = Feature(feature) map.features.append(obj) DBSession.commit() return {'success': True} except: DBSession.rollback() traceback.print_exc(file=sys.stdout) return {'success': False}
def delete_all_features(self): id = self.request.matchdict.get("map_id") map = DBSession.query(Map).get(id) if map is None: return HTTPNotFound() if not self.has_permission(self.request.user, map): return HTTPUnauthorized() # remove the features associated to the map features = DBSession.query(Feature).filter( Feature.map_id == map.uuid).all() for f in features: DBSession.delete(f) DBSession.commit() return {'success': True}
def delete_feature(self): id = self.request.matchdict.get("feature_id") feature = DBSession.query(Feature).get(id) if feature is None: return HTTPNotFound() map = DBSession.query(Map).get(feature.map_id) if map is None: return HTTPNotFound() if not self.has_permission(self.request.user, map): return HTTPUnauthorized() DBSession.delete(feature) DBSession.commit() return {'success': True}