# Buggy code
def _prepare_object_content(self, indent_depth, import_tree=None):
    """
    Returns a string containing the nyan object's content
    (members, nested objects).

    Subroutine of dump().
    """
    output_str = ""
    empty = True

    if len(self._inherited_members) > 0:
        for inherited_member in self._inherited_members:
            if inherited_member.has_value():
                empty = False
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    inherited_member.dump(import_tree=import_tree),
                )
        if not empty:
            output_str += "\n"

    if len(self._members) > 0:
        empty = False
        for member in self._members:
            if self.is_patch():
                # Patches do not need the type definition
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    member.dump_short(import_tree=import_tree),
                )
            else:
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    member.dump(import_tree=import_tree),
                )

        output_str += "\n"

    # Nested objects
    if len(self._nested_objects) > 0:
        empty = False
        for nested_object in self._nested_objects:
            output_str += "%s%s" % (
                (indent_depth + 1) * INDENT,
                nested_object.dump(indent_depth + 1, import_tree),
            )

        output_str += ""

    # Empty objects need a 'pass' line
    if empty:
        output_str += f"{(indent_depth + 1) * INDENT}pass\n\n"

    return output_str


# Traceback (KeyError)
INFO [py] launching openage v0.4.1-377-g2be30ba76
INFO [py] compiled by GNU 10.2.0
Do you want to convert assets? [Y/n]
Y
Should we call wine to determine an AOE installation? [Y/n]
n
Could not find any installation directory automatically.
Please enter an AOE2 install path manually.
/home/schatzi/nvme/Steam/steamapps/common/AoE2DE/
converting from '/home/schatzi/nvme/Steam/steamapps/common/AoE2DE'
INFO [py] Game edition detected:
INFO [py]  * Age of Empires 2: Definitive Edition
INFO [py] converting metadata
INFO [py] [0] palette
INFO [py] [1] empires.dat
INFO [py] Starting conversion...
INFO [py] Extracting Genie data...
INFO [py] Creating API-like objects...
INFO [py] Linking API-like objects...
INFO [py] Generating auxiliary objects...
INFO [py] Creating nyan objects...
Traceback (most recent call last):
File "/usr/bin/openage", line 15, in <module>
main()
File "/usr/lib/python3.9/site-packages/openage/__main__.py", line 132, in main
return args.entrypoint(args, cli.error)
File "/usr/lib/python3.9/site-packages/openage/game/main.py", line 71, in main
used_asset_path = convert_assets(
File "/usr/lib/python3.9/site-packages/openage/convert/main.py", line 100, in convert_assets
for current_item in convert(args):
File "/usr/lib/python3.9/site-packages/openage/convert/tool/driver.py", line 48, in convert
yield from convert_metadata(args)
File "/usr/lib/python3.9/site-packages/openage/convert/tool/driver.py", line 96, in convert_metadata
modpacks = args.converter.convert(gamespec,
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/processor.py", line 63, in convert
modpacks = cls._post_processor(dataset)
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/processor.py", line 153, in _post_processor
DE2NyanSubprocessor.convert(full_data_set)
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/nyan_subprocessor.py", line 38, in convert
cls._process_game_entities(gamedata)
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/nyan_subprocessor.py", line 120, in _process_game_entities
cls.tech_group_to_tech(tech_group)
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/nyan_subprocessor.py", line 596, in tech_group_to_tech
patches.extend(DE2TechSubprocessor.get_patches(tech_group))
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/tech_subprocessor.py", line 147, in get_patches
patches.extend(cls.resource_modify_effect(converter_group,
File "/usr/lib/python3.9/site-packages/openage/convert/processor/conversion/de2/tech_subprocessor.py", line 276, in resource_modify_effect
upgrade_func = DE2TechSubprocessor.upgrade_resource_funcs[resource_id]
KeyError:  208

# Fixed code
def _prepare_object_content(self, indent_depth, import_tree=None):
    """
    Returns a string containing the nyan object's content
    (members, nested objects).

    Subroutine of dump().
    """
    output_str = ""
    empty = True

    if len(self._inherited_members) > 0:
        for inherited_member in self._inherited_members:
            if inherited_member.has_value():
                empty = False
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    inherited_member.dump(
                        indent_depth + 1,
                        import_tree=import_tree,
                        namespace=self.get_fqon(),
                    ),
                )
        if not empty:
            output_str += "\n"

    if len(self._members) > 0:
        empty = False
        for member in self._members:
            if self.is_patch():
                # Patches do not need the type definition
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    member.dump_short(
                        indent_depth + 1,
                        import_tree=import_tree,
                        namespace=self.get_fqon(),
                    ),
                )
            else:
                output_str += "%s%s\n" % (
                    (indent_depth + 1) * INDENT,
                    member.dump(
                        indent_depth + 1,
                        import_tree=import_tree,
                        namespace=self.get_fqon(),
                    ),
                )

        output_str += "\n"

    # Nested objects
    if len(self._nested_objects) > 0:
        empty = False
        for nested_object in self._nested_objects:
            output_str += "%s%s" % (
                (indent_depth + 1) * INDENT,
                nested_object.dump(indent_depth + 1, import_tree=import_tree),
            )

        output_str += ""

    # Empty objects need a 'pass' line
    if empty:
        output_str += f"{(indent_depth + 1) * INDENT}pass\n\n"

    return output_str