def _proto_read(self, layer): """ Read features for the layer based on the self.request. """ proto = self._get_protocol_for_layer(layer) if layer.public: return proto.read(self.request) user = self.request.user if user is None: raise HTTPForbidden() cls = proto.mapped_class geom_attr = proto.geom_attr ras = DBSession.query(RestrictionArea.area, functions.srid(RestrictionArea.area)) ras = ras.join(RestrictionArea.roles) ras = ras.join(RestrictionArea.layers) ras = ras.filter(Role.id == user.role.id) ras = ras.filter(Layer.id == layer.id) collect_ra = [] use_srid = -1 for ra, srid in ras.all(): if ra is None: return proto.read(self.request) else: use_srid = srid collect_ra.append(wkb.loads(str(ra.geom_wkb))) if len(collect_ra) == 0: # pragma: no cover raise HTTPForbidden() ra = cascaded_union(collect_ra) filter_ = and_( create_filter(self.request, cls, geom_attr), functions.gcontains(func.st_geomfromtext(ra.wkt, use_srid), getattr(cls, geom_attr))) return proto.read(self.request, filter=filter_)
def get_president_uiks(context, request): page_size = 100 is_filter_applied = False filter = json.loads(request.GET['filter']) clauses = [] if 'filter' in request.GET: filter['uik_2012']['address'] = filter['uik_2012']['address'].encode('UTF-8').strip() filter['uik_2012']['number'] = filter['uik_2012']['number'].encode('UTF-8').strip() if filter['uik_2012']['address'] or filter['uik_2012']['number']: is_filter_applied = True if filter['uik_2012']['address'].__len__() > 3: address = '%' + filter['uik_2012']['address'] + '%' clauses.append(VotingStation.address.ilike(address)) if filter['uik_2012']['number']: number = filter['uik']['number'] clauses.append(VotingStation.name == number) bbox = json.loads(request.params.getall('bbox')[0]) box_geom = leaflet_bbox_to_polygon(bbox) uiks_for_json = {'points': { 'count': 0, 'layers': { 'uik_2012': {'elements': [], 'count': 0} }}} session = DBSession() if is_filter_applied: contains = functions.gcontains(box_geom, Location.point).label('contains') uiks_from_db = session.query(VotingStation, Location.point.x, Location.point.y) \ .join(VotingStation.location) \ .filter(*clauses) \ .order_by(contains.desc()) \ .limit(page_size) \ .all() if len(uiks_from_db) < page_size: uiks_for_json['points']['count'] = len(uiks_from_db) else: uiks_for_json['points']['count'] = session.query(VotingStation.id) \ .filter(*clauses) \ .count() else: uiks_from_db = session.query(VotingStation, Location.point.x, Location.point.y) \ .join(VotingStation.location) \ .filter(Location.point.within(box_geom)) \ .all() uiks_for_json['points']['count'] = len(uiks_from_db) for uik in uiks_from_db: uiks_for_json['points']['layers']['uik_2012']['elements'].append(_get_uik2012_from_uik_db(uik)) uiks_for_json['points']['layers']['uik_2012']['count'] = uiks_for_json['points']['count'] session.close() return Response(json.dumps(uiks_for_json), content_type='application/json')
def get_president_uiks(context, request): page_size = 100 is_filter_applied = False filter = json.loads(request.GET['filter']) clauses = [] if 'filter' in request.GET: filter['uik_2012']['address'] = filter['uik_2012']['address'].encode('UTF-8').strip() filter['uik_2012']['number'] = filter['uik_2012']['number'].encode('UTF-8').strip() if filter['uik_2012']['address'] or filter['uik_2012']['number']: is_filter_applied = True if filter['uik_2012']['address'].__len__() > 3: address = '%' + filter['uik_2012']['address'] + '%' clauses.append(VotingStation.address.ilike(address)) if filter['uik_2012']['number']: number = filter['uik']['number'] clauses.append(VotingStation.name == number) bbox = json.loads(request.params.getall('bbox')[0]) box_geom = leaflet_bbox_to_polygon(bbox) uiks_for_json = {'points': { 'count': 0, 'layers': { 'uik_2012': {'elements': [], 'count': 0} }}} session = DBSession() if is_filter_applied: contains = functions.gcontains(box_geom, Location.point).label('contains') uiks_from_db = session.query(VotingStation, Location.point.x, Location.point.y) \ .join(VotingStation.location) \ .filter(*clauses) \ .order_by(contains.desc()) \ .limit(page_size) \ .all() if len(uiks_from_db) < page_size: uiks_for_json['points']['count'] = len(uiks_from_db) else: uiks_for_json['points']['count'] = session.query(VotingStation.id) \ .filter(*clauses) \ .count() else: uiks_from_db = session.query(VotingStation, Location.point.x, Location.point.y) \ .join(VotingStation.location) \ .filter(Location.point.within(box_geom)) \ .all() uiks_for_json['points']['count'] = len(uiks_from_db) for uik in uiks_from_db: uiks_for_json['points']['layers']['uik_2012']['elements'].append(_get_uik2012_from_uik_db(uik)) uiks_for_json['points']['layers']['uik_2012']['count'] = uiks_for_json['points']['count'] return Response(json.dumps(uiks_for_json), content_type='application/json')
def _proto_read(self, layer): """ Read features for the layer based on the self.request. """ proto = self._get_protocol_for_layer(layer) if layer.public: return proto.read(self.request) user = self.request.user if user is None: raise HTTPForbidden() cls = proto.mapped_class geom_attr = proto.geom_attr ras = DBSession.query(RestrictionArea.area, functions.srid(RestrictionArea.area)) ras = ras.join(RestrictionArea.roles) ras = ras.join(RestrictionArea.layers) ras = ras.filter(Role.id == user.role.id) ras = ras.filter(Layer.id == layer.id) collect_ra = [] use_srid = -1 for ra, srid in ras.all(): if ra is None: return proto.read(self.request) else: use_srid = srid collect_ra.append(wkb.loads(str(ra.geom_wkb))) if len(collect_ra) == 0: # pragma: no cover raise HTTPForbidden() ra = cascaded_union(collect_ra) filter_ = and_( create_filter(self.request, cls, geom_attr), functions.gcontains( func.st_geomfromtext(ra.wkt, use_srid), getattr(cls, geom_attr) ) ) return proto.read(self.request, filter=filter_)
def get_all(context, request): page_size = 50 is_filter_applied = False filter = json.loads(request.GET['filter']) clauses = [] if filter['uik']: filter['uik']['address'] = filter['uik']['address'].encode('UTF-8').strip() filter['uik']['number'] = filter['uik']['number'].encode('UTF-8').strip() if filter['uik']['address'] or filter['uik']['number']: is_filter_applied = True if filter['uik']['address'].__len__() > 3: address = '%' + filter['uik']['address'] + '%' clauses.append(Uik.address_voting.ilike(address)) if filter['uik']['number']: number = filter['uik']['number'] clauses.append(Uik.number_official == number) bbox = json.loads(request.params.getall('bbox')[0]) box_geom = leaflet_bbox_to_polygon(bbox) uiks_for_json = {'points': { 'count': 0, 'layers': { 'checked': {'elements': [], 'count': 0}, 'unchecked': {'elements': [], 'count': 0}, 'blocked': {'elements': [], 'count': 0} }}} session = DBSession() if is_filter_applied: contains = functions.gcontains(box_geom, Uik.point).label('contains') uiks_from_db = session.query(Uik, Uik.point.x, Uik.point.y) \ .filter(*clauses) \ .order_by(contains.desc()) \ .limit(page_size) \ .all() if len(uiks_from_db) < page_size: uiks_for_json['points']['count'] = len(uiks_from_db) else: uiks_for_json['points']['count'] = session.query(Uik.id) \ .filter(*clauses) \ .count() else: uiks_from_db = session.query(Uik, Uik.point.x, Uik.point.y) \ .filter(Uik.point.within(box_geom)) \ .all() uiks_for_json['points']['count'] = len(uiks_from_db) for uik in uiks_from_db: if uik[0].is_blocked: uiks_for_json['points']['layers']['blocked']['elements'].append(_get_uik_from_uik_db(uik)) continue if uik[0].is_applied: uiks_for_json['points']['layers']['checked']['elements'].append(_get_uik_from_uik_db(uik)) continue uiks_for_json['points']['layers']['unchecked']['elements'].append(_get_uik_from_uik_db(uik)) uiks_for_json['points']['layers']['blocked']['count'] = len(uiks_for_json['points']['layers']['blocked']['elements']) uiks_for_json['points']['layers']['checked']['count'] = len(uiks_for_json['points']['layers']['checked']['elements']) uiks_for_json['points']['layers']['unchecked']['count'] = len(uiks_for_json['points']['layers']['unchecked']['elements']) uiks_result = {'data': uiks_for_json} return Response(json.dumps(uiks_result), content_type='application/json')