def query(self, constraint, sortby=None, typenames=None, maxrecords=10, startposition=0): ''' Query records from underlying repository ''' # run the raw query and get total if 'where' in constraint: # GetRecords with constraint LOGGER.debug('constraint detected') query = self.session.query(self.dataset).filter( constraint['where']) else: # GetRecords sans constraint LOGGER.debug('No constraint detected') query = self.session.query(self.dataset) total = query.count() if sortby is not None: # apply sorting LOGGER.debug('sorting detected') sortby_column = getattr(self.dataset, sortby['propertyname']) if sortby['order'] == 'DESC': # descending sort if 'spatial' in sortby and sortby['spatial']: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column).desc()) else: # aspatial sort query = query.order_by(sortby_column.desc()) else: # ascending sort if 'spatial' in sortby and sortby['spatial']: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column)) else: # aspatial sort query = query.order_by(sortby_column) # always apply limit and offset return [str(total), query.limit( maxrecords).offset(startposition).all()]
def query(self, constraint, sortby=None, typenames=None, maxrecords=10, startposition=0): """ Query records from underlying repository """ # run the raw query and get total if "where" in constraint: # GetRecords with constraint LOGGER.debug("constraint detected") query = ( self.session.query(self.dataset) .filter(text(constraint["where"])) .params(self._create_values(constraint["values"])) ) else: # GetRecords sans constraint LOGGER.debug("No constraint detected") query = self.session.query(self.dataset) total = query.count() if util.ranking_pass: # apply spatial ranking # TODO: Check here for dbtype so to extract wkt from postgis native to wkt LOGGER.debug("spatial ranking detected") LOGGER.debug( "Target WKT: %s", getattr(self.dataset, self.context.md_core_model["mappings"]["pycsw:BoundingBox"]) ) LOGGER.debug("Query WKT: %s", util.ranking_query_geometry) query = query.order_by( func.get_spatial_overlay_rank( getattr(self.dataset, self.context.md_core_model["mappings"]["pycsw:BoundingBox"]), util.ranking_query_geometry, ).desc() ) # trying to make this wsgi safe util.ranking_pass = False util.ranking_query_geometry = "" if sortby is not None: # apply sorting LOGGER.debug("sorting detected") # TODO: Check here for dbtype so to extract wkt from postgis native to wkt sortby_column = getattr(self.dataset, sortby["propertyname"]) if sortby["order"] == "DESC": # descending sort if "spatial" in sortby and sortby["spatial"]: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column).desc()) else: # aspatial sort query = query.order_by(sortby_column.desc()) else: # ascending sort if "spatial" in sortby and sortby["spatial"]: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column)) else: # aspatial sort query = query.order_by(sortby_column) # always apply limit and offset return [str(total), query.limit(maxrecords).offset(startposition).all()]
def query(self, constraint, sortby=None, typenames=None, maxrecords=10, startposition=0): ''' Query records from underlying repository ''' typename_column = getattr(self.dataset, \ self.context.md_core_model['mappings']['pycsw:Typename']) # run the raw query and get total if constraint.has_key('where'): # GetRecords with constraint if not typenames: # any typename query = self.session.query(self.dataset).filter( constraint['where']) else: query = self.session.query(self.dataset).filter( typename_column.in_(typenames)).filter( constraint['where']) total = query.count() else: # GetRecords sans constraint if not typenames: # any typename query = self.session.query(self.dataset) else: query = self.session.query(self.dataset).filter( typename_column.in_(typenames)) total = query.count() if sortby is not None: # apply sorting sortby_column = getattr(self.dataset, sortby['propertyname']) if sortby['order'] == 'DESC': # descending sort if sortby.has_key('spatial') and sortby['spatial'] is True: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column).desc()) else: # aspatial sort query = query.order_by(sortby_column.desc()) else: # ascending sort if sortby.has_key('spatial') and sortby['spatial'] is True: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column)) else: # aspatial sort query = query.order_by(sortby_column) # always apply limit and offset return [str(total), query.limit( maxrecords).offset(startposition).all()]
def query(self, constraint, sortby=None, typenames=None, maxrecords=10, startposition=0): ''' Query records from underlying repository ''' # run the raw query and get total if 'where' in constraint: # GetRecords with constraint LOGGER.debug('constraint detected') query = self.session.query(self.dataset).filter( text(constraint['where'])).params(self._create_values(constraint['values'])) else: # GetRecords sans constraint LOGGER.debug('No constraint detected') query = self.session.query(self.dataset) total = self._get_repo_filter(query).count() if util.ranking_pass: #apply spatial ranking #TODO: Check here for dbtype so to extract wkt from postgis native to wkt LOGGER.debug('spatial ranking detected') LOGGER.debug('Target WKT: %s', getattr(self.dataset, self.context.md_core_model['mappings']['pycsw:BoundingBox'])) LOGGER.debug('Query WKT: %s', util.ranking_query_geometry) query = query.order_by(func.get_spatial_overlay_rank(getattr(self.dataset, self.context.md_core_model['mappings']['pycsw:BoundingBox']), util.ranking_query_geometry).desc()) #trying to make this wsgi safe util.ranking_pass = False util.ranking_query_geometry = '' if sortby is not None: # apply sorting LOGGER.debug('sorting detected') #TODO: Check here for dbtype so to extract wkt from postgis native to wkt sortby_column = getattr(self.dataset, sortby['propertyname']) if sortby['order'] == 'DESC': # descending sort if 'spatial' in sortby and sortby['spatial']: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column).desc()) else: # aspatial sort query = query.order_by(sortby_column.desc()) else: # ascending sort if 'spatial' in sortby and sortby['spatial']: # spatial sort query = query.order_by(func.get_geometry_area(sortby_column)) else: # aspatial sort query = query.order_by(sortby_column) # always apply limit and offset return [str(total), self._get_repo_filter(query).limit( maxrecords).offset(startposition).all()]