diff -r d928d226cfad -r b0c5d58f9d3e app/soc/logic/models/base.py --- a/app/soc/logic/models/base.py Sat Nov 22 20:54:42 2008 +0000 +++ b/app/soc/logic/models/base.py Sat Nov 22 21:15:21 2008 +0000 @@ -295,135 +295,6 @@ return query.fetch(limit, offset) - def buildTypedQueryString(self): - """Returns a GQL query string compatible with PolyModel. - """ - return ''.join(self._buildTypedQueryParts()) - - def _buildTypedQueryParts(self): - if self._base_model: - return [ - 'SELECT * FROM ', self._base_model.__name__, - " WHERE inheritance_line = '", self.getFullModelClassName(), "'"] - - return ['SELECT * FROM ', self._model.__name__] - - def buildOrderedQueryString(self, order_by=None): - """Returns a an ordered GQL query string compatible with PolyModel. - - Args: - order_by: optional field name by which to order the query results; - default is None, in which case no ORDER BY clause is placed in - the query string - """ - return ''.join(self._buildOrderedQueryParts(order_by=order_by)) - - def _buildOrderedQueryParts(self, order_by=None): - query_str_parts = self._buildTypedQueryParts() - - if order_by: - query_str_parts.extend([' ORDER BY ', order_by]) - - return query_str_parts - - def getEntitiesForLimitAndOffset(self, limit, offset=0, order_by=None): - """Returns entities for given offset and limit or None if not found. - - Args: - limit: max amount of entities to return - offset: optional offset in entities list which defines first entity to - return; default is zero (first entity) - """ - query_string = self.buildOrderedQueryString(order_by=order_by) - query = db.GqlQuery(query_string) - - return query.fetch(limit, offset) - - def getNearestEntities(self, fields_to_try): - """Get entities just before and just after the described entity. - - Args: - fields_to_try: ordered list of key/value pairs that "describe" - the desired entity (which may not necessarily exist), where key is - the name of the field, and value is an instance of that field - used in the comparison; if value is None, that field is skipped - - Returns: - a two-tuple: ([nearest_entities], 'field_name') - - nearest_entities: list of entities being those just before and just - after the (possibly non-existent) entity identified by the first - of the supplied (non-None) fields - OR - possibly None if query had no results for the supplied field - that was used. - """ - # SELECT * FROM base_class WHERE inheritance_line = 'derived_class' - typed_query_parts = self._buildTypedQueryParts() - - if self._base_model: - typed_query_parts.append(' AND %s > :1') - else: - typed_query_parts.append(' WHERE %s > :1') - - typed_query_fmt = ''.join(typed_query_parts) - - for field, value in fields_to_try: - if value is None: - # skip this not-supplied field - continue - - query = db.GqlQuery(typed_query_fmt % field, value) - return query.fetch(1), field - - # all fields exhausted, and all had None values - return (None, None) - - def findNearestEntitiesOffset(width, fields_to_try): - """Finds offset of beginning of a range of entities around the nearest. - - Args: - width: the width of the "found" window around the nearest User found - fields_to_try: see getNearestEntities() - - Returns: - an offset into the list of entities that is width/2 less than the - offset of the first entity returned by getNearestEntities(), or zero - if that offset would be less than zero - OR - None if there are no nearest entities or the offset of the beginning of - the range cannot be found for some reason - """ - # find entity "nearest" to supplied fields - nearest_entities, field = self.getNearestEntities(fields_to_try) - - if not nearest_entities: - # no "nearest" entity, so indicate that with None - return None - - nearest_entity = nearest_entities[0] - - # start search for beginning of nearest Users range at offset zero - offset = 0 - entities = self.getEntitiesForLimitAndOffset(width, offset=offset) - - while True: - for entity in entities: - if getattr(nearest_entity, field) == getattr(entity, field): - # nearest User found in current search range, so return a range start - return max(0, (offset - (width/2))) - - offset = offset + 1 - - # nearest User was not in the current search range, so fetch the next set - entities = self.getEntitiesForLimitAndOffset(width, offset=offset) - - if not entities: - # nearest User never found, so indicate that with None - break - - return None - def updateModelProperties(self, model, model_properties): """Update existing model entity using supplied model properties.