summaryrefslogtreecommitdiff
path: root/server/szurubooru/search/executor.py
diff options
context:
space:
mode:
authorrr- <rr-@sakuya.pl>2016-06-07 11:16:25 +0200
committerrr- <rr-@sakuya.pl>2016-06-08 22:38:35 +0200
commitdfb2e3d0274ada1ef171effced19ed8d91c19838 (patch)
treeffd0efb08cb25139797e7a9fdea4a192efa0db81 /server/szurubooru/search/executor.py
parentded89fee5f5d2d9ad5392149621e968771dc805c (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.py28
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