本文整理汇总了Python中corehq.form_processor.interfaces.processor.FormProcessorInterface.populate方法的典型用法代码示例。如果您正苦于以下问题:Python FormProcessorInterface.populate方法的具体用法?Python FormProcessorInterface.populate怎么用?Python FormProcessorInterface.populate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类corehq.form_processor.interfaces.processor.FormProcessorInterface
的用法示例。
在下文中一共展示了FormProcessorInterface.populate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_related_cases
# 需要导入模块: from corehq.form_processor.interfaces.processor import FormProcessorInterface [as 别名]
# 或者: from corehq.form_processor.interfaces.processor.FormProcessorInterface import populate [as 别名]
def get_related_cases(initial_cases, domain, strip_history=False, search_up=True):
"""
Gets the flat list of related cases based on a starting list.
Walks all the referenced indexes recursively.
If search_up is True, all cases and their parent cases are returned.
If search_up is False, all cases and their child cases are returned.
"""
if not initial_cases:
return {}
# infer whether to wrap or not based on whether the initial list is wrapped or not
# initial_cases may be a list or a set
wrap = isinstance(next(iter(initial_cases)), CommCareCase)
# todo: should assert that domain exists here but this breaks tests
case_db = FormProcessorInterface(domain).casedb_cache(
domain=domain,
strip_history=strip_history,
deleted_ok=True,
wrap=wrap,
initial=initial_cases
)
def indices(case):
return case['indices'] if search_up else get_reverse_indices_json(domain, case['_id'])
relevant_cases = {}
relevant_deleted_case_ids = []
cases_to_process = list(case for case in initial_cases)
directly_referenced_indices = itertools.chain(
*[[index['referenced_id'] for index in indices(case)]
for case in initial_cases]
)
case_db.populate(directly_referenced_indices)
def process_cases(cases):
new_relations = set()
for case in cases:
if case and case['_id'] not in relevant_cases:
relevant_cases[case['_id']] = case
if case['doc_type'] == 'CommCareCase-Deleted':
relevant_deleted_case_ids.append(case['_id'])
new_relations.update(index['referenced_id'] for index in indices(case))
if new_relations:
case_db.populate(new_relations)
return [case_db.get(related_case) for related_case in new_relations]
while cases_to_process:
cases_to_process = process_cases(cases_to_process)
if relevant_deleted_case_ids:
logging.info('deleted cases included in footprint (restore): %s' % (
', '.join(relevant_deleted_case_ids)
))
return relevant_cases