circup icon indicating copy to clipboard operation
circup copied to clipboard

UnicodeDecodeError when reading ANSI files

Open justmobilize opened this issue 9 months ago • 0 comments

If circup tries to find the version information in a .py file that has ANSI encoded characters like ‘’, it throws here:

Found device at D:\, running CircuitPython 9.1.0-beta.3.
Searching for dependencies for: ['Adafruit_CircuitPython_esp32spi']
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\dev\adafruit\envs\circup\Scripts\circup.exe\__main__.py", line 7, in <module>
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\click\decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\commands.py", line 347, in install
    device_modules = ctx.obj["backend"].get_device_versions()
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\backends.py", line 73, in get_device_versions
    return self.get_modules(os.path.join(self.device_location, self.LIB_DIR_PATH))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\backends.py", line 63, in get_modules
    return self._get_modules(device_url)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\backends.py", line 806, in _get_modules
    return _get_modules_file(device_lib_path, self.logger)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\shared.py", line 87, in _get_modules_file
    metadata = extract_metadata(source, logger)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\dev\adafruit\envs\circup\Lib\site-packages\circup\shared.py", line 121, in extract_metadata
    content = source_file.read()
              ^^^^^^^^^^^^^^^^^^
  File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 5007: invalid start byte

This could be changed from:

        with open(path, "r", encoding="utf-8") as source_file:
            content = source_file.read()

To:

        try:
            with open(path, "r", encoding="utf-8") as source_file:
                content = source_file.read()
        except UnicodeDecodeError:
            with open("a.txt", "r")  as source_file:
                content = source_file.read()

justmobilize avatar May 28 '24 23:05 justmobilize