python-lnp icon indicating copy to clipboard operation
python-lnp copied to clipboard

Incomplete extraction into Baselines

Open txtsd opened this issue 2 years ago • 1 comments

When a baseline does not exist, PyLNP downloads the appropriate zip to extract into the baselines folder.

However, I've found that it skips/fails to extract several important files like the .txt files in the init folder, even though they exist in the zip.

LNP/Baselines/df_47_05
λ tree -a LNP/Baselines 
LNP/Baselines
└── df_47_05
    ├── data
    │   ├── announcement
    │   ├── art
    │   │   ├── curses_640x300.bmp
    │   │   ├── curses_640x300.png
    │   │   ├── curses_800x600.bmp
    │   │   ├── curses_800x600.png
    │   │   ├── curses_square_16x16.bmp
    │   │   ├── curses_square_16x16.png
    │   │   ├── font license.txt
    │   │   ├── font.ttf
    │   │   ├── mouse.bmp
    │   │   └── mouse.png
    │   ├── dipscript
    │   │   └── text
    │   ├── help
    │   ├── init
    │   │   └── macros
    │   ├── initial_movies
    │   ├── movies
    │   ├── readme.txt
    │   ├── sound
    │   └── speech
    │       ├── ab_specific_hf_seeker.txt
    │       ├── animal_slayer.txt
    │       ├── arch_info_justification.txt
    │       ├── child_age_proclamation.txt
    │       ├── current_profession_no_year.txt
    │       ├── current_profession_year.txt
    │       ├── curse.txt
    │       ├── dwarf.txt
    │       ├── elf.txt
    │       ├── family_relationship_additional_dead.txt
    │       ├── family_relationship_additional.txt
    │       ├── family_relationship_no_spec_dead.txt
    │       ├── family_relationship_no_spec.txt
    │       ├── family_relationship_spec_dead.txt
    │       ├── family_relationship_spec.txt
    │       ├── general.txt
    │       ├── goodbye_worship_1.txt
    │       ├── goodbye_worship_2.txt
    │       ├── goodbye_worship_3.txt
    │       ├── greet_baby.txt
    │       ├── greet_reply_after_hero.txt
    │       ├── greet_reply_diff_language.txt
    │       ├── greet_reply.txt
    │       ├── greet_reply_unusual_first.txt
    │       ├── greet.txt
    │       ├── greet_worship.txt
    │       ├── guard_profession.txt
    │       ├── guard_warning.txt
    │       ├── hist_fig_slayer.txt
    │       ├── hunting_profession.txt
    │       ├── hunting_profession_year.txt
    │       ├── justification_antithetical.txt
    │       ├── justification_experience.txt
    │       ├── justification_proximity.txt
    │       ├── justification_reminder.txt
    │       ├── justification_representation.txt
    │       ├── lair_hunter_minotaur.txt
    │       ├── mercenary_profession.txt
    │       ├── mercenary_profession_year.txt
    │       ├── no_family.txt
    │       ├── past_hunting_profession.txt
    │       ├── past_mercenary_profession.txt
    │       ├── past_profession_no_year.txt
    │       ├── past_profession_year.txt
    │       ├── past_snatcher_profession.txt
    │       ├── past_thief_profession.txt
    │       ├── past_wandering_profession.txt
    │       ├── positive.txt
    │       ├── same_site_ab_specific_hf_seeker.txt
    │       ├── same_site_specific_hf_seeker.txt
    │       ├── site_specific_hf_seeker.txt
    │       ├── slayer.txt
    │       ├── snatcher_profession.txt
    │       ├── snatcher_profession_year.txt
    │       ├── soldier_profession.txt
    │       ├── task_recommendation.txt
    │       ├── temple_already_member.txt
    │       ├── temple_become_member.txt
    │       ├── thief_profession.txt
    │       ├── thief_profession_year.txt
    │       ├── threat.txt
    │       ├── unknown_hf_seeker.txt
    │       ├── wandering_profession.txt
    │       └── wandering_profession_year.txt
    ├── raw
    │   ├── graphics
    │   │   ├── example
    │   │   │   └── dwarves.bmp
    │   │   └── graphics_example.txt
    │   ├── interaction examples
    │   │   ├── example - bogeyman transformation.txt
    │   │   ├── example - shrine effects.txt
    │   │   ├── interaction_disturbance.txt
    │   │   ├── interaction_region.txt
    │   │   ├── interaction_secret.txt
    │   │   ├── interaction_underground_special.txt
    │   │   ├── interaction_vampire.txt
    │   │   └── interaction_werebeast.txt
    │   ├── objects
    │   │   ├── b_detail_plan_default.txt
    │   │   ├── body_default.txt
    │   │   ├── body_rcp.txt
    │   │   ├── building_custom.txt
    │   │   ├── creature_amphibians.txt
    │   │   ├── creature_annelids.txt
    │   │   ├── creature_birds_new.txt
    │   │   ├── creature_birds.txt
    │   │   ├── creature_bug_slug_new.txt
    │   │   ├── creature_desert_new.txt
    │   │   ├── creature_domestic.txt
    │   │   ├── creature_equipment.txt
    │   │   ├── creature_fanciful.txt
    │   │   ├── creature_insects.txt
    │   │   ├── creature_large_mountain.txt
    │   │   ├── creature_large_ocean.txt
    │   │   ├── creature_large_riverlake.txt
    │   │   ├── creature_large_temperate.txt
    │   │   ├── creature_large_tropical.txt
    │   │   ├── creature_large_tundra.txt
    │   │   ├── creature_mountain_new.txt
    │   │   ├── creature_next_underground.txt
    │   │   ├── creature_ocean_new.txt
    │   │   ├── creature_other.txt
    │   │   ├── creature_reptiles.txt
    │   │   ├── creature_riverlakepool_new.txt
    │   │   ├── creature_small_mammal_new.txt
    │   │   ├── creature_small_mammals.txt
    │   │   ├── creature_small_ocean.txt
    │   │   ├── creature_small_riverlake.txt
    │   │   ├── creature_standard.txt
    │   │   ├── creature_subterranean.txt
    │   │   ├── creature_temperate_new.txt
    │   │   ├── creature_tropical_new.txt
    │   │   ├── creature_tundra_taiga_new.txt
    │   │   ├── c_variation_default.txt
    │   │   ├── descriptor_color_standard.txt
    │   │   ├── descriptor_pattern_iris_eye.txt
    │   │   ├── descriptor_pattern_pupil_eye.txt
    │   │   ├── descriptor_pattern_special.txt
    │   │   ├── descriptor_shape_standard.txt
    │   │   ├── entity_default.txt
    │   │   ├── examples and notes
    │   │   │   ├── gaits.txt
    │   │   │   ├── item_instrument_example.txt
    │   │   │   └── reaction_instrument_example.txt
    │   │   ├── inorganic_metal.txt
    │   │   ├── inorganic_other.txt
    │   │   ├── inorganic_stone_gem.txt
    │   │   ├── inorganic_stone_layer.txt
    │   │   ├── inorganic_stone_mineral.txt
    │   │   ├── inorganic_stone_soil.txt
    │   │   ├── interaction_standard.txt
    │   │   ├── item_ammo.txt
    │   │   ├── item_armor.txt
    │   │   ├── item_food.txt
    │   │   ├── item_gloves.txt
    │   │   ├── item_helm.txt
    │   │   ├── item_pants.txt
    │   │   ├── item_shield.txt
    │   │   ├── item_shoes.txt
    │   │   ├── item_siegeammo.txt
    │   │   ├── item_tool.txt
    │   │   ├── item_toy.txt
    │   │   ├── item_trapcomp.txt
    │   │   ├── item_weapon.txt
    │   │   ├── language_DWARF.txt
    │   │   ├── language_ELF.txt
    │   │   ├── language_GOBLIN.txt
    │   │   ├── language_HUMAN.txt
    │   │   ├── language_SYM.txt
    │   │   ├── language_words.txt
    │   │   ├── material_template_default.txt
    │   │   ├── plant_crops.txt
    │   │   ├── plant_garden.txt
    │   │   ├── plant_grasses.txt
    │   │   ├── plant_new_trees.txt
    │   │   ├── plant_standard.txt
    │   │   ├── reaction_adv_carpenter.txt
    │   │   ├── reaction_other.txt
    │   │   ├── reaction_smelter.txt
    │   │   ├── text
    │   │   │   ├── book_art.txt
    │   │   │   ├── book_instruction.txt
    │   │   │   └── secret_death.txt
    │   │   └── tissue_template_default.txt
    │   └── readme.txt
    ├── readme.txt
    └── sdl

21 directories, 171 files

This causes loading keybinds to fail like so:

λ python launch.py
INFO: Registering path root as .
INFO: Registering path lnp as ./LNP
INFO: Registering path keybinds as ./LNP/Keybinds
INFO: Registering path graphics as ./LNP/Graphics
INFO: Registering path utilities as ./LNP/Utilities
INFO: Registering path colors as ./LNP/Colors
INFO: Registering path embarks as ./LNP/Embarks
INFO: Registering path tilesets as ./LNP/Tilesets
INFO: Registering path baselines as ./LNP/Baselines
INFO: Registering path mods as ./LNP/Mods
INFO: Registering path df as ./Dwarf Fortress df_47_05_linux
INFO: Registering path data as ./Dwarf Fortress df_47_05_linux/data
INFO: Registering path init as ./Dwarf Fortress df_47_05_linux/data/init
INFO: Registering path save as ./Dwarf Fortress df_47_05_linux/data/save
INFO: Registering path extras as ./LNP/Extras
INFO: Registering path defaults as ./LNP/Defaults
INFO: Registering path dfhack_config as ./Dwarf Fortress df_47_05_linux/dfhack-config/init
WARNING: Field PRIESTHOOD_UNIT_COUNTS seems to be missing from file ./Dwarf Fortress df_47_05_linux/data/init/d_init.txt!
WARNING: Field GUILD_UNIT_COUNTS seems to be missing from file ./Dwarf Fortress df_47_05_linux/data/init/d_init.txt!
WARNING: Can't load or change keybinds with missing baseline!
INFO: Read installed graphics (Phoebus) from log
INFO: Extracting archives in baselines: ['./LNP/Baselines/df_47_05_win_s.zip']
INFO: Simplifying baselines: df_47_05
INFO: Loading keybinds:  ./LNP/Keybinds/Laptop with mouse.txt
Exception in Tkinter callback
Traceback (most recent call last):
  File "/home/txtsd/.pyenv/versions/3.7.14/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/home/txtsd/git/python-lnp/tkgui/options.py", line 129, in <lambda>
    self.keybinding_files.bind(seq, lambda e: self.load_keybinds())
  File "/home/txtsd/git/python-lnp/tkgui/options.py", line 283, in load_keybinds
    keybinds.load_keybinds(listbox.get(items[0]))
  File "/home/txtsd/git/python-lnp/core/keybinds.py", line 99, in load_keybinds
    _sdl_write_binds(target, _sdl_get_binds(filename), expanded=True)
  File "/home/txtsd/git/python-lnp/core/keybinds.py", line 51, in _sdl_get_binds
    van = _get_vanilla_binds()
  File "/home/txtsd/git/python-lnp/core/keybinds.py", line 81, in _get_vanilla_binds
    return _sdl_get_binds(vanfile, compressed=False)
  File "/home/txtsd/git/python-lnp/core/keybinds.py", line 41, in _sdl_get_binds
    with open(filename, encoding='cp437') as f:
FileNotFoundError: [Errno 2] No such file or directory: './LNP/Baselines/df_47_05/data/init/interface.txt'

This happens on master with Python 3.7.x as well as 3.10.x

txtsd avatar Nov 28 '22 15:11 txtsd

Seems like #163 and #186 are basically this same problem.

txtsd avatar Sep 05 '23 17:09 txtsd