diff options
| author | rr- <rr-@sakuya.pl> | 2016-06-07 11:16:25 +0200 |
|---|---|---|
| committer | rr- <rr-@sakuya.pl> | 2016-06-08 22:38:35 +0200 |
| commit | dfb2e3d0274ada1ef171effced19ed8d91c19838 (patch) | |
| tree | ffd0efb08cb25139797e7a9fdea4a192efa0db81 /server/szurubooru/search/executor.py | |
| parent | ded89fee5f5d2d9ad5392149621e968771dc805c (diff) | |
server/posts: add getting posts around id
Leave undocumented since it add almost no value for the client
applications.
Diffstat (limited to 'server/szurubooru/search/executor.py')
| -rw-r--r-- | server/szurubooru/search/executor.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/server/szurubooru/search/executor.py b/server/szurubooru/search/executor.py index c024d94..6df508a 100644 --- a/server/szurubooru/search/executor.py +++ b/server/szurubooru/search/executor.py @@ -27,6 +27,34 @@ class Executor(object): self.config = search_config self.parser = parser.Parser() + def get_around(self, query_text, entity_id): + search_query = self.parser.parse(query_text) + self.config.on_search_query_parsed(search_query) + filter_query = self.config \ + .create_filter_query() \ + .options(sqlalchemy.orm.lazyload('*')) + filter_query = self._prepare_db_query(filter_query, search_query, False) + prev_filter_query = filter_query \ + .filter(self.config.id_column < entity_id) \ + .order_by(None) \ + .order_by(sqlalchemy.func.abs(self.config.id_column - entity_id).asc()) \ + .limit(1) + next_filter_query = filter_query \ + .filter(self.config.id_column > entity_id) \ + .order_by(None) \ + .order_by(sqlalchemy.func.abs(self.config.id_column - entity_id).asc()) \ + .limit(1) + return [ + next_filter_query.one_or_none(), + prev_filter_query.one_or_none()] + + def get_around_and_serialize(self, ctx, entity_id, serializer): + entities = self.get_around(ctx.get_param_as_string('query'), entity_id) + return { + 'next': serializer(entities[0]), + 'prev': serializer(entities[1]), + } + def execute(self, query_text, page, page_size): ''' Parse input and return tuple containing total record count and filtered |