Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolve Cyclic Imports #1500

Closed
wants to merge 78 commits into from
Closed
Show file tree
Hide file tree
Changes from 77 commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
ec11df9
remove cyclic import
Yuyuutsu Sep 6, 2024
5943cc7
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Sep 6, 2024
625ddc6
remove trailing white spaces
Yuyuutsu Sep 6, 2024
fd4b580
remove type ignore labels
Yuyuutsu Sep 6, 2024
63a006e
remove trailing white space
Yuyuutsu Sep 6, 2024
aa2d551
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Sep 11, 2024
9827787
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 7, 2024
4618a71
Use imports inside function - Solution 1
Yuyuutsu Oct 8, 2024
9f21590
rempve cylic imports with reule evaluator and value source resolver
Yuyuutsu Oct 10, 2024
aa24fc7
revert import changes for placehodler and praser
Yuyuutsu Oct 11, 2024
6f22786
add new Abstract class for Evalutaor
Yuyuutsu Oct 11, 2024
951d42f
fix import linting for placeolder parser in rednerer
Yuyuutsu Oct 11, 2024
7f187f9
fix mpy issues about missing arguemnt rule ecaluator
Yuyuutsu Oct 11, 2024
012f3a4
fix missing rule evlauator paramters in VSR
Yuyuutsu Oct 11, 2024
170f0b9
update tests to use pass evalutaor in value source resolver
Yuyuutsu Oct 11, 2024
3c70289
revert type ignore for hub context
Yuyuutsu Oct 14, 2024
e527b92
update comment formatting for hub context
Yuyuutsu Oct 14, 2024
ca4e7f7
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 14, 2024
5b9220c
revmove trailing white space
Yuyuutsu Oct 14, 2024
2469d8b
add renderer abstract class
Yuyuutsu Oct 14, 2024
2acff21
Add Value Source Resolver as Paramter for Rule Evalator Class
Yuyuutsu Oct 14, 2024
0043e9a
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 15, 2024
d59afbb
fix function calling of pyfixtue
Yuyuutsu Oct 15, 2024
bb42b8c
update tests for rule evaluator
Yuyuutsu Oct 15, 2024
3151ce4
Update Rule Evaluator to have default answer true
Yuyuutsu Oct 16, 2024
52878b8
update valuesourceresolver objects that are passed into Rule Evaluato…
Yuyuutsu Oct 16, 2024
026c8cc
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 16, 2024
6b9b9e4
fix incorrect paramters in Rule Evaluator
Yuyuutsu Oct 16, 2024
62de00c
fix incorrect paramters in rule evaluator
Yuyuutsu Oct 16, 2024
6673b5b
remove defualt answer from Rule Eval Param
Yuyuutsu Oct 16, 2024
bf07a26
add a pylint disable for redefined outer name in confest.py
Yuyuutsu Oct 16, 2024
9de3d1c
Update Test Dynamic Answers pytest fixtures
Yuyuutsu Oct 16, 2024
4f7f443
update pytest coverage to ignore abstract classes
Yuyuutsu Oct 16, 2024
cfcaa2b
update renderer abstract class
Yuyuutsu Oct 16, 2024
1409742
remove renderer abstract class
Yuyuutsu Oct 17, 2024
5cb5bd8
re-add pylint ignore
Yuyuutsu Oct 23, 2024
9b56536
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 23, 2024
738da58
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 24, 2024
066670e
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 24, 2024
a394f86
Set assesed path to true when vsr is called by rule eval
Yuyuutsu Oct 24, 2024
1771ce9
Add Asses routing bath to when rule evaluator in path finder
Yuyuutsu Oct 24, 2024
528b500
fix incorrect paramters in VSR
Yuyuutsu Oct 24, 2024
d1e050e
update use_default_answer to equal true when initalised for RuleEvalu…
Yuyuutsu Oct 25, 2024
149626a
update get vsr function inside questionnaire form
Yuyuutsu Oct 25, 2024
4e592be
remove unnecessary paramerters in VSR
Yuyuutsu Oct 25, 2024
8775209
update VSR arguements being passed in
Yuyuutsu Oct 28, 2024
a4bf9e1
update Refactroing of VSR AND Resolver
Yuyuutsu Oct 28, 2024
0645c23
add assess routing path = true
Yuyuutsu Oct 28, 2024
e60816b
remove extra arguements in variants
Yuyuutsu Oct 28, 2024
ece8538
revert certain changes to VSR'
Yuyuutsu Oct 28, 2024
9de28d5
reformat modules related to VSR and Rule Evaluator
Yuyuutsu Oct 28, 2024
12c0071
remove list_item_id local variable and pass it straight through VSR
Yuyuutsu Oct 28, 2024
c638d8e
update logic in VSR
Yuyuutsu Oct 29, 2024
003fdca
Update VSR intiliastion
Yuyuutsu Oct 30, 2024
2350cbf
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 30, 2024
690e247
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Oct 31, 2024
9d84a27
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Nov 4, 2024
76d365c
remove routing blocks
Yuyuutsu Nov 7, 2024
685d565
update with use defualt answre
Yuyuutsu Nov 7, 2024
045bdc3
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Nov 11, 2024
a54b5c6
remove routing path blocks ids from VSR
Yuyuutsu Nov 11, 2024
568da7b
revert changes to VSR in Path Finder
Yuyuutsu Nov 11, 2024
880a566
Resolve Value Source Resolver by creating a new instance
Yuyuutsu Nov 12, 2024
51d98ef
update Path Finder
Yuyuutsu Nov 12, 2024
66625f8
remove two differnt vsr in questionaire form
Yuyuutsu Nov 14, 2024
f0c8fe0
Reformat changes in questiionaire form (linting)
Yuyuutsu Nov 14, 2024
21ce288
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Nov 15, 2024
61867f2
Remove Resolver Class
Yuyuutsu Nov 18, 2024
31584c5
update typehinting and update getvsr function
Yuyuutsu Nov 18, 2024
d172410
remove VSR from FieldHandler
Yuyuutsu Nov 18, 2024
7f793b9
update field handler tests to remove VSR
Yuyuutsu Nov 18, 2024
2b778b0
fix typo in test_date_handler
Yuyuutsu Nov 18, 2024
2f9d91f
remove vsr from field handler tests
Yuyuutsu Nov 18, 2024
016f091
fix test generate date form validates single date period
Yuyuutsu Nov 18, 2024
ae64bb2
removed post-init vsr
Yuyuutsu Nov 21, 2024
2e3f96e
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Nov 26, 2024
162ede8
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Nov 27, 2024
a7c6386
Merge branch 'main' into fix-cyclic-imports
Yuyuutsu Dec 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions app/forms/field_handlers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
from app.forms.field_handlers.string_handler import StringHandler
from app.forms.field_handlers.text_area_handler import TextAreaHandler
from app.questionnaire.rules.rule_evaluator import RuleEvaluator
from app.questionnaire.value_source_resolver import ValueSourceResolver

FIELD_HANDLER_MAPPINGS = {
"Checkbox": SelectMultipleHandler,
Expand All @@ -45,15 +44,13 @@
def get_field_handler(
*,
answer_schema: dict,
value_source_resolver: ValueSourceResolver,
rule_evaluator: RuleEvaluator,
error_messages: ImmutableDict,
disable_validation: bool = False,
question_title: Optional[str] = None,
) -> FieldHandler:
return FIELD_HANDLER_MAPPINGS[answer_schema["type"]](
answer_schema=answer_schema,
value_source_resolver=value_source_resolver,
rule_evaluator=rule_evaluator,
error_messages=error_messages,
disable_validation=disable_validation,
Expand Down
4 changes: 1 addition & 3 deletions app/forms/field_handlers/field_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
from app.questionnaire.rules.rule_evaluator import RuleEvaluator
from app.questionnaire.value_source_resolver import (
ValueSourceEscapedTypes,
ValueSourceResolver,
ValueSourceTypes,
)

Expand All @@ -20,15 +19,14 @@ class FieldHandler(ABC):
def __init__(
self,
answer_schema: Mapping[str, Any],
value_source_resolver: ValueSourceResolver,
rule_evaluator: RuleEvaluator,
error_messages: Mapping[str, str],
disable_validation: bool = False,
question_title: Optional[str] = None,
):
self.answer_schema = answer_schema
self.value_source_resolver = value_source_resolver
self.rule_evaluator = rule_evaluator
self.value_source_resolver = rule_evaluator.value_source_resolver
self.error_messages = error_messages
self.disable_validation = disable_validation
self.question_title = str(question_title)
Expand Down
33 changes: 23 additions & 10 deletions app/forms/questionnaire_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,19 +314,19 @@ def _get_period_range_for_single_date(
data_stores=self.data_stores,
schema=self.schema,
location=self.location,
use_default_answer=True,
list_item_id=list_item_id,
escape_answer_values=False,
)

rule_evaluator = RuleEvaluator(
value_source_resolver=value_source_resolver,
data_stores=self.data_stores,
schema=self.schema,
location=self.location,
)

handler = DateHandler(
date_from, value_source_resolver, rule_evaluator, error_messages
)
handler = DateHandler(date_from, rule_evaluator, error_messages)

min_period_date = handler.get_date_value("minimum") or handler.get_date_value(
"maximum"
Expand Down Expand Up @@ -480,32 +480,47 @@ def get_answer_fields(
if block_ids_by_section:
block_ids = get_flattened_mapping_values(block_ids_by_section)

def _get_value_source_resolver(list_item: str | None = None) -> ValueSourceResolver:
def _get_value_source_resolver(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are still some inconsistencies taking this approach, as we seem to mix where we call rule evaluator and where we are calling value source resolver directly. For example here, if we were to do this we'd be better of getting the rule_evaluator as it already has a value source resolver.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably worth having a chat about this approach with the team anyway.

Copy link
Contributor

@petechd petechd Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this private method does not use vars from the higher scope of the class implicitly (is only passing parameters explicitly), there is no reason why to nest it inside and in the middle of another method of this class. Should be separated out from the parent method.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it still uses the higher scope of the function. If not I think the function would not be needed

list_item: str | None = None,
use_default_answer: bool = False,
assess_routing_path: bool = False,
) -> ValueSourceResolver:
return ValueSourceResolver(
data_stores=data_stores,
schema=schema,
location=location,
list_item_id=list_item,
escape_answer_values=False,
routing_path_block_ids=block_ids,
assess_routing_path=False,
assess_routing_path=assess_routing_path,
use_default_answer=use_default_answer,
)

rule_evaluator = RuleEvaluator(
value_source_resolver=_get_value_source_resolver(
list_item=location.list_item_id if location else None,
use_default_answer=True,
assess_routing_path=True,
),
schema=schema,
data_stores=data_stores,
location=location,
routing_path_block_ids=block_ids,
)

answer_fields = {}
question_title = question.get("title")

value_source_resolved_for_location = _get_value_source_resolver(list_item_id)
value_source_resolved_for_location = _get_value_source_resolver(
list_item=list_item_id
)
for answer in question.get("answers", []):
if "list_item_id" in answer:
value_source_resolver = _get_value_source_resolver(answer["list_item_id"])
rule_evaluator.value_source_resolver = _get_value_source_resolver(
list_item=answer["list_item_id"]
)
else:
value_source_resolver = value_source_resolved_for_location
rule_evaluator.value_source_resolver = value_source_resolved_for_location

for option in answer.get("options", []):
if "detail_answer" in option:
Expand All @@ -518,15 +533,13 @@ def _get_value_source_resolver(list_item: str | None = None) -> ValueSourceResol

answer_fields[option["detail_answer"]["id"]] = get_field_handler(
answer_schema=detail_answer,
value_source_resolver=value_source_resolver,
rule_evaluator=rule_evaluator,
error_messages=schema.error_messages,
disable_validation=disable_validation,
question_title=question_title,
).get_field()
answer_fields[answer["id"]] = get_field_handler(
answer_schema=answer,
value_source_resolver=value_source_resolver,
rule_evaluator=rule_evaluator,
error_messages=schema.error_messages,
question_title=question_title,
Expand Down
23 changes: 20 additions & 3 deletions app/questionnaire/path_finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from app.questionnaire.questionnaire_schema import QuestionnaireSchema
from app.questionnaire.routing_path import RoutingPath
from app.questionnaire.rules.rule_evaluator import RuleEvaluator, RuleEvaluatorTypes
from app.questionnaire.value_source_resolver import ValueSourceResolver
from app.utilities.types import LocationType


Expand Down Expand Up @@ -181,10 +182,18 @@ def _evaluate_routing_rules(
)

when_rule_evaluator = RuleEvaluator(
self.schema,
self.data_stores,
schema=self.schema,
data_stores=self.data_stores,
location=this_location,
routing_path_block_ids=block_ids_for_dependencies,
value_source_resolver=ValueSourceResolver(
Copy link
Contributor

@petechd petechd Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could probably call the same instance of VSR here and on line 245, if we initialised VSR when the PathFinder class instance is first created, but that requires some more thought as we would need to refactor how we initialise PathFinder class.

Copy link
Contributor Author

@Yuyuutsu Yuyuutsu Nov 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will bring this up in Tech Session once everyone has had a look

list_item_id=this_location.list_item_id if this_location else None,
schema=self.schema,
data_stores=self.data_stores,
location=this_location,
routing_path_block_ids=block_ids_for_dependencies,
use_default_answer=True,
),
)
for rule in routing_rules:
rule_valid = (
Expand Down Expand Up @@ -223,7 +232,7 @@ def evaluate_skip_conditions(
) -> RuleEvaluatorTypes:
if not skip_conditions:
return False

list_item_id = current_location.list_item_id if current_location else None
block_ids_for_dependencies = (
list(routing_path_block_ids) + when_rules_block_dependencies
)
Expand All @@ -233,6 +242,14 @@ def evaluate_skip_conditions(
data_stores=self.data_stores,
location=current_location,
routing_path_block_ids=block_ids_for_dependencies,
value_source_resolver=ValueSourceResolver(
list_item_id=list_item_id,
schema=self.schema,
data_stores=self.data_stores,
routing_path_block_ids=block_ids_for_dependencies,
location=current_location,
use_default_answer=True,
),
)

return when_rule_evaluator.evaluate(skip_conditions["when"])
Expand Down
6 changes: 2 additions & 4 deletions app/questionnaire/placeholder_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,13 @@
from app.utilities.mappings import get_flattened_mapping_values, get_values_for_key
from app.utilities.types import LocationType, SectionKey

TransformedValueTypes: TypeAlias = None | str | int | Decimal | bool
if TYPE_CHECKING:
from app.questionnaire.placeholder_renderer import ( # pragma: no cover
PlaceholderRenderer,
)


TransformedValueTypes: TypeAlias = None | str | int | Decimal | bool


class PlaceholderParser:
"""
Parses placeholder statements from a schema dict and returns a map of their
Expand All @@ -51,7 +49,7 @@ def __init__(
language: str,
data_stores: DataStores,
schema: QuestionnaireSchema,
renderer: PlaceholderRenderer,
renderer: "PlaceholderRenderer",
list_item_id: str | None = None,
location: LocationType | None = None,
placeholder_preview_mode: bool | None = False,
Expand Down
14 changes: 11 additions & 3 deletions app/questionnaire/router.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from app.questionnaire.return_location import ReturnLocation
from app.questionnaire.routing_path import RoutingPath
from app.questionnaire.rules.rule_evaluator import RuleEvaluator
from app.questionnaire.value_source_resolver import ValueSourceResolver
from app.utilities.types import LocationType


Expand Down Expand Up @@ -535,16 +536,23 @@ def _is_section_enabled(self, section: Mapping) -> bool:

enabled = section["enabled"]
section_id = section["id"]

location = Location(section_id=section_id)
routing_path_block_ids = self._path_finder.get_when_rules_block_dependencies(
section_id
)

list_item_id = location.list_item_id if location else None
when_rule_evaluator = RuleEvaluator(
data_stores=self._data_stores,
schema=self._schema,
location=Location(section_id=section_id),
location=location,
routing_path_block_ids=routing_path_block_ids,
value_source_resolver=ValueSourceResolver(
data_stores=self._data_stores,
schema=self._schema,
location=location,
list_item_id=list_item_id,
routing_path_block_ids=routing_path_block_ids,
),
)

return bool(when_rule_evaluator.evaluate(enabled["when"]))
Expand Down
37 changes: 16 additions & 21 deletions app/questionnaire/rules/rule_evaluator.py
Original file line number Diff line number Diff line change
@@ -1,46 +1,41 @@
from __future__ import annotations

from dataclasses import dataclass
from datetime import date
from decimal import Decimal
from typing import Generator, Iterable, Sequence, TypeAlias
from typing import TYPE_CHECKING, Generator, Iterable, Sequence, TypeAlias, Union

from app.data_models.data_stores import DataStores
from app.questionnaire import QuestionnaireSchema
from app.questionnaire.placeholder_renderer import PlaceholderRenderer
from app.questionnaire.questionnaire_schema import DEFAULT_LANGUAGE_CODE
from app.questionnaire.rules.operations import Operations
from app.questionnaire.rules.operator import Operator
from app.questionnaire.value_source_resolver import (
ValueSourceResolver,
ValueSourceTypes,
)
from app.utilities.types import LocationType

RuleEvaluatorTypes: TypeAlias = (
bool | date | list[str] | list[date] | int | float | Decimal | None
)
ResolvedOperand: TypeAlias = bool | date | ValueSourceTypes | None
if TYPE_CHECKING:
from app.questionnaire.value_source_resolver import ( # pragma: no cover
ValueSourceResolver,
ValueSourceTypes,
)

RuleEvaluatorTypes: TypeAlias = Union[
bool, date, list[str], list[date], int, float, Decimal, None
]
ResolvedOperand: TypeAlias = Union[bool, date, "ValueSourceTypes", None]


@dataclass
class RuleEvaluator:
schema: QuestionnaireSchema
data_stores: DataStores
location: LocationType | None
value_source_resolver: "ValueSourceResolver"
routing_path_block_ids: Iterable[str] | None = None
language: str = DEFAULT_LANGUAGE_CODE

# pylint: disable=attribute-defined-outside-init
def __post_init__(self) -> None:
list_item_id = self.location.list_item_id if self.location else None
self.value_source_resolver = ValueSourceResolver(
data_stores=self.data_stores,
schema=self.schema,
location=self.location,
list_item_id=list_item_id,
routing_path_block_ids=self.routing_path_block_ids,
use_default_answer=True,
)

renderer: PlaceholderRenderer = PlaceholderRenderer(
language=self.language,
data_stores=self.data_stores,
Expand Down Expand Up @@ -71,7 +66,7 @@ def _evaluate(self, rule: dict[str, Sequence]) -> bool | date | None:

return operator.evaluate(resolved_operands)

def _resolve_operand(self, operand: ValueSourceTypes) -> ResolvedOperand:
def _resolve_operand(self, operand: "ValueSourceTypes") -> ResolvedOperand:
if isinstance(operand, dict) and "source" in operand:
return self.value_source_resolver.resolve(operand)

Expand All @@ -81,7 +76,7 @@ def _resolve_operand(self, operand: ValueSourceTypes) -> ResolvedOperand:
return operand

def get_resolved_operands(
self, operands: Sequence[ValueSourceTypes]
self, operands: Sequence["ValueSourceTypes"]
) -> Generator[ResolvedOperand, None, None]:
for operand in operands:
yield self._resolve_operand(operand)
Expand Down
8 changes: 8 additions & 0 deletions app/questionnaire/value_source_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,14 @@ def _resolve_summary_with_calculation(
data_stores=self.data_stores,
location=self.location,
routing_path_block_ids=self.routing_path_block_ids,
value_source_resolver=ValueSourceResolver(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We definitely don't want to instantiate another ValueSourceResolver inside the ValueSourceResolver class instance.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with @berroar this probably needs some more thought and some kind of structured approach/plan/proposal.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this felt akward to do when refactoring, Will have a look

data_stores=self.data_stores,
schema=self.schema,
location=self.location,
list_item_id=self.list_item_id,
routing_path_block_ids=self.routing_path_block_ids,
use_default_answer=True,
),
)

return evaluator.evaluate(calculation["operation"]) # type: ignore
Expand Down
9 changes: 8 additions & 1 deletion app/questionnaire/variants.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from app.data_models.data_stores import DataStores
from app.questionnaire.questionnaire_schema import QuestionnaireSchema
from app.questionnaire.rules.rule_evaluator import RuleEvaluator
from app.questionnaire.value_source_resolver import ValueSourceResolver
from app.utilities.types import LocationType


Expand All @@ -22,11 +23,17 @@ def choose_variant( # type: ignore
return block[single_key] # type: ignore
for variant in block.get(variants_key, []):
when_rules = variant["when"]

when_rule_evaluator = RuleEvaluator(
schema,
data_stores=data_stores,
location=current_location,
value_source_resolver=ValueSourceResolver(
data_stores=data_stores,
schema=schema,
location=current_location,
use_default_answer=True,
list_item_id=current_location.list_item_id,
),
)

if when_rule_evaluator.evaluate(when_rules):
Expand Down
12 changes: 12 additions & 0 deletions app/views/contexts/calculated_summary_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,18 @@ def _get_evaluated_total(
For a calculation in the new style and the list of involved block ids (possibly across sections) evaluate the total
"""
evaluate_calculated_summary = RuleEvaluator(
value_source_resolver=ValueSourceResolver(
schema=self._schema,
data_stores=self._data_stores,
routing_path_block_ids=routing_path_block_ids,
location=self.current_location,
list_item_id=(
self.current_location.list_item_id
if self.current_location
else None
),
use_default_answer=True,
),
data_stores=self._data_stores,
schema=self._schema,
routing_path_block_ids=routing_path_block_ids,
Expand Down
Loading
Loading