Skip to content
Snippets Groups Projects

Handle recursive and element_type filters in cached list_transcriptions

Merged Eva Bardou requested to merge list-transcriptions-recursive into master
1 unresolved thread
2 files
+ 59
23
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -249,27 +249,30 @@ class TranscriptionMixin(object):
query_params["worker_version"] = worker_version
if self.use_cache:
elements_query = CachedElement.select().where(
CachedElement.id == element.id
)
type_attr = CachedElement.type
if recursive:
base_case = elements_query.cte("base", recursive=True)
if not recursive:
if element_type and element_type != element.type:
return CachedTranscription.select().where(False)
transcriptions = CachedTranscription.select().where(
CachedTranscription.element_id == element.id
)
else:
base_case = (
CachedElement.select()
.where(CachedElement.id == element.id)
.cte("base", recursive=True)
)
recursive = CachedElement.select().join(
base_case, on=(CachedElement.parent_id == base_case.c.id)
)
cte = base_case.union_all(recursive)
elements_query = cte.select_from(cte.c.id, cte.c.type)
type_attr = cte.c.type
if element_type:
elements_query = elements_query.where(type_attr == element_type)
transcriptions = (
CachedTranscription.select()
.join(cte, on=(CachedTranscription.element_id == cte.c.id))
.with_cte(cte)
)
elements_ids = [elem.id for elem in elements_query]
transcriptions = CachedTranscription.select().where(
CachedTranscription.element_id.in_(elements_ids)
)
if element_type:
transcriptions = transcriptions.where(cte.c.type == element_type)
if worker_version:
transcriptions = transcriptions.where(
Loading