def build()

in src/aaz_dev/swagger/controller/_example_builder.py [0:0]


    def build(self, var_prefix, example_obj, disc=None):
        example_items = []
        if isinstance(example_obj, list):
            arg_var = f"{var_prefix}[]"
            item = ExampleItem.new_instance(
                command=self.command,
                cmd_operation=self.cmd_operation,
                arg_var=arg_var
            )
            if item:
                discs = item.discriminators
                for obj in example_obj:
                    for disc in discs:
                        if disc.property not in obj or obj[disc.property] != disc.value:
                            continue

                        example_items += self.build(arg_var, obj, disc)
                        break
                    else:
                        example_items += self.build(arg_var, obj)

        elif isinstance(example_obj, dict):
            disc_name = None
            if disc is not None:  # handle discriminator
                example_obj.pop(disc.property)  # ignore discriminator prop

                safe_value = self.get_safe_value(disc.value)
                disc_item = ExampleItem.new_instance(
                    command=self.command,
                    cmd_operation=self.cmd_operation,
                    arg_var=f"{var_prefix}.{safe_value}"
                )

                if disc_item and (disc_name := disc_item.arg_option):
                    example_obj[disc_name] = copy.deepcopy(example_obj)  # further trim (polymorphic or not)
                    example_items += self.build(disc_item.arg_var, example_obj[disc_name])

            for name, value in example_obj.copy().items():
                if name == disc_name:
                    continue

                item = ExampleItem.new_instance(
                    command=self.command,
                    cmd_operation=self.cmd_operation,
                    arg_var=f"{var_prefix}{{}}.{name}",
                    key=name,
                    val=value
                )
                if not item:
                    item = ExampleItem.new_instance(
                        command=self.command,
                        cmd_operation=self.cmd_operation,
                        arg_var=f"{var_prefix}.{name}",
                        key=name,
                        val=value
                    )

                if item:
                    example_obj.pop(name)  # will push back if arg_var valid

                    for disc in item.discriminators:
                        if disc.property not in value or value[disc.property] != disc.value:
                            continue

                        example_items += self.build(item.arg_var, value, disc)
                        break
                    else:
                        example_items += self.build(item.arg_var, value)

                    if item.is_top_level:
                        example_items.append((item.arg_option, value))

                    elif item.is_flatten:
                        for k, v in item.val.items():
                            example_obj[k] = v

                    elif item.arg_option:
                        example_obj[item.arg_option] = item.val

        return example_items