def merge_context()

in lib/ramble/ramble/context.py [0:0]


    def merge_context(self, in_context):
        """Merges another Context into this Context."""

        internal_sections = [
            namespace.custom_executables,
            namespace.executables,
            namespace.executable_injection,
        ]

        if in_context.variables:
            self.variables.update(in_context.variables)
        if in_context.variants:
            self.variants.update(in_context.variants)
        if in_context.env_variables:
            self.env_variables.append(in_context.env_variables)
        if in_context.internals:
            for internal_section in internal_sections:
                if internal_section in in_context.internals:
                    if isinstance(in_context.internals[internal_section], dict):
                        if internal_section not in self.internals:
                            self.internals[internal_section] = {}
                        section_dict = in_context.internals[internal_section]
                        for key, val in section_dict.items():
                            self.internals[internal_section][key] = val
                    elif isinstance(in_context.internals[internal_section], list):
                        if internal_section not in self.internals:
                            self.internals[internal_section] = []
                        self.internals[internal_section].extend(
                            in_context.internals[internal_section]
                        )
                    else:
                        self.internals[internal_section] = in_context.internals[internal_section]
        if in_context.chained_experiments:
            for chained_exp in in_context.chained_experiments:
                self.chained_experiments.append(chained_exp.copy())
        if in_context.modifiers:
            for modifier in in_context.modifiers:
                self.modifiers.append(modifier.copy())
        if in_context.templates is not None:
            self.is_template = in_context.templates
        if in_context.exclude:
            self.exclude = in_context.exclude
        if in_context.zips:
            self.zips.update(in_context.zips)
        if in_context.matrices:
            self.matrices = in_context.matrices
        if in_context.tags:
            self.tags.extend(in_context.tags)
        if in_context.n_repeats != 0:
            self.n_repeats = int(in_context.n_repeats)
        if in_context.formatted_executables:
            self.formatted_executables.update(in_context.formatted_executables)