SFTtech/openage

Asset conversion issue, AttributeError: 'NoneType' object has no attribute 'readable'

Closed this issue · 6 comments

Hello, using the program build from the latest commit on Arch Linux I wasn't able to convert the assets from 3 steam editions

I had only Age2HD installed, after the first try I performed a file check from steam, then downloaded the other 2 games but didn't work

I'm missing something?

(1) ~/.steam/steam/steamapps/common/Age2HD
(2) ~/.steam/steam/steamapps/common/AoE2DE
(3) ~/.steam/steam/steamapps/common/AoEDE
$ openage convert --force --source-dir /home/fabio/.steam/steam/steamapps/common/Age2HD
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 2: HD Edition
INFO [py] converting metadata
INFO [py] using cached wrapper: /tmp/HDEDITION_empires2_x1_p1.dat.pickle
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...
INFO [py] Creating requests for media export...
INFO [py] Starting export...
INFO [py] Dumping info file...
INFO [py] Dumping data files...
INFO [py] Exporting media files...
INFO [py] -- Exporting graphics files...
INFO [py] -- Exporting terrain files...
INFO [py] -- Exporting sound files...
INFO [py] Dumping metadata files...
INFO [py] asset conversion complete; asset version: 7
Traceback (most recent call last):
  File "/usr/sbin/openage", line 20, in <module>
    main()
  File "/usr/lib/python3.11/site-packages/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 263, in main
    convert_assets(outdir, args, srcdir)
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 129, in convert_assets
    with asset_locations_path.open("a") as file_obj:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/util/fslike/path.py", line 133, in open
    return TextIOWrapper(handle)
           ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'readable'
$ openage convert
  Do you want to convert assets? [Y/n]
> y

Please select an Age of Empires installation directory.
Insert the index of one of the proposals, or any path:
(0) 
(1) ~/.steam/steam/steamapps/common/Age2HD
(2) ~/.steam/steam/steamapps/common/AoE2DE
(3) ~/.steam/steam/steamapps/common/AoEDE
> 2
converting from '/home/fabio/.local/share/Steam/steamapps/common/AoE2DE'
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 2: Definitive Edition
INFO [py] converting metadata
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...
WARN [py] Could not create upgrade from unit 1755 to 330
WARN [py] Could not create upgrade from unit 1755 to 207
WARN [py] Could not create upgrade from unit 68 to 1734
WARN [py] Could not create upgrade from unit 129 to 1734
WARN [py] Could not create upgrade from unit 130 to 1734
WARN [py] Could not create upgrade from unit 131 to 1734
INFO [py] Creating requests for media export...
INFO [py] Starting export...
INFO [py] Dumping info file...
INFO [py] Dumping data files...
INFO [py] Exporting media files...
INFO [py] -- Exporting graphics files...
INFO [py] Dumping metadata files...
INFO [py] asset conversion complete; asset version: 7
Traceback (most recent call last):
  File "/usr/sbin/openage", line 20, in <module>
    main()
  File "/usr/lib/python3.11/site-packages/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 263, in main
    convert_assets(outdir, args, srcdir)
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 129, in convert_assets
    with asset_locations_path.open("a") as file_obj:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/util/fslike/path.py", line 133, in open
    return TextIOWrapper(handle)
           ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'readable'

$ openage convert
  Do you want to convert assets? [Y/n]
> y

Please select an Age of Empires installation directory.
Insert the index of one of the proposals, or any path:
(0) 
(1) ~/.steam/steam/steamapps/common/Age2HD
(2) ~/.steam/steam/steamapps/common/AoE2DE
(3) ~/.steam/steam/steamapps/common/AoEDE
> 3
converting from '/home/fabio/.local/share/Steam/steamapps/common/AoEDE'
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 1: Definitive Edition (Steam)
INFO [py] converting metadata
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...
INFO [py] Creating requests for media export...
INFO [py] Starting export...
INFO [py] Dumping info file...
INFO [py] Dumping data files...
INFO [py] Exporting media files...
INFO [py] -- Exporting graphics files...
INFO [py] -- Exporting sound files...
INFO [py] Dumping metadata files...
INFO [py] asset conversion complete; asset version: 7
Traceback (most recent call last):
  File "/usr/sbin/openage", line 20, in <module>
    main()
  File "/usr/lib/python3.11/site-packages/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 263, in main
    convert_assets(outdir, args, srcdir)
  File "/usr/lib/python3.11/site-packages/openage/convert/main.py", line 129, in convert_assets
    with asset_locations_path.open("a") as file_obj:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/openage/util/fslike/path.py", line 133, in open
    return TextIOWrapper(handle)
           ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'readable'

I think the file where we cache the paths may not be created yet when this is called, so the append operation fails.

I can't reproduce this on my machine, even when using the same commands as you. Maybe you could do some additional checks:

  • Can you run the tests with make test? This checks if file appending works correctly.
  • In the assets folder, can you check if the file assets/converted/assets_location.cache exists? This is the file that the converter is trying to write to. If it's not there, maybe creating it manually has an effect?
  • If the file exists, can you try to delete it and see if that changes anything?

Thanks for your reply

I have enabled tests but they haven't been found

==> Avvio di check() in corso...
Internal ctest changing into directory: /home/fabio/Dev/Github/PKGBUILD/openage-git/src/build
Test project /home/fabio/Dev/Github/PKGBUILD/openage-git/src/build
No tests were found!!!

and manually

$ make test
Running tests...
Test project /home/fabio/Dev/Github/PKGBUILD/openage-git/src/build
No tests were found!!!
[fabio@archlinux build]$ LANG=C make tests
make: *** No rule to make target 'tests'.  Stop.

exist assets/converted/assets_locations.cache, creating asset_location.cache change nothing

$ l
totale 4
-rw-r--r-- 1 fabio fabio    0  3 ott 23.52 asset_location.cache
-rw-r--r-- 1 fabio fabio    0  3 ott 23.52 asset_locations.cache
drwxr-xr-x 3 fabio fabio 4096  3 ott 23.52 hd_base

deleting all under assets/converted change nothing

@FabioLolix thanks for checking!

exist assets/converted/assets_locations.cache, creating asset_location.cache change nothing

I was looking for asset_locations.cache so I guess that filecould be created. Weird that it can't write to it then.

I think we could make the asset location cache optional as a temporary solution...

@FabioLolix Could you check if open("w") fixes the error?

Conversion now works, I only get a warning:

INFO [py] asset conversion complete; asset version: 7
WARN [py] Cannot access asset location cache file [Union(Path(Directory(/home/fabio/.local/share/openage), (b'assets',)) @ (), WriteBlocker(Directory(/usr/share/openage).root).root @ ())]:converted/asset_locations.cache
INFO [py] Skipped saving asset location

Still can't launch that there are other problems