Skip to content

Releases: dgelessus/python-rsrcfork

v1.8.0

18 Jul 15:45
Compare
Choose a tag to compare
  • Removed the old (non-subcommand-based) CLI syntax.
  • Added filtering support to the list subcommand.
  • Added a resource-info subcommand to display technical information about resources (more detailed than what is displayed by list and read).
  • Added a raw-compress-info subcommand to display technical header information about standalone compressed resource data.
  • Made the library PEP 561-compliant by adding a py.typed file.
  • Fixed an incorrect AssertionError when using the --no-decompress command-line options.

v1.7.0

17 Dec 11:15
Compare
Choose a tag to compare
  • Added a raw-decompress subcommand to decompress compressed resource data stored in a standalone file rather than as a resource.
  • Optimized lazy loading of Resource objects. Previously, resource data would be read from disk whenever a Resource object was looked up, even if the data itself is never used. Now the resource data is only loaded once the data (or data_raw) attribute is accessed.
    • The same optimization applies to the name attribute, although this is unlikely to make a difference in practice.
    • As a result, it is no longer possible to construct Resource objects without a resource file. This was previously possible, but had no practical use.
  • Fixed a small error in the 'dcmp' (0) decompression implementation.

v1.6.0

04 Dec 00:40
Compare
Choose a tag to compare
  • Added a new subcommand-based command-line syntax to the rsrcfork tool, similar to other CLI tools such as git or diskutil.

    • This subcommand-based syntax is meant to replace the old CLI options, as the subcommand structure is easier to understand and more extensible in the future.
    • Currently there are three subcommands: list to list resources in a file, read to read/display resource data, and read-header to read a resource file's header data. These subcommands can be used to perform all operations that were also available with the old CLI syntax.
    • The old CLI syntax is still supported for now, but it will be removed soon.
    • The new syntax no longer supports reading CLI arguments from a file (using @args_file.txt), abbreviating long options (e. g. --no-d instead of --no-decompress), or the short option -f instead of --fork. If you have a need for any of these features, please open an issue.

v1.5.0

22 Oct 08:21
Compare
Choose a tag to compare
  • Added stream-based decompression methods to the rsrcfork.compress module.

    • The internal decompressor implementations have been refactored to use streams.
    • This allows for incremental decompression of compressed resource data. In practice this has no noticeable effect yet, because the main rsrcfork API doesn't support incremental reading of resource data.
  • Fixed the command line tool always displaying an incorrect error "Cannot specify an explicit fork when reading from stdin" when using - (stdin) as the input file.

v1.4.0

29 Sep 17:25
Compare
Choose a tag to compare
  • Added length and length_raw attributes to Resource. These attributes are equivalent to the len of data`` and data_raw` respectively, but may be faster to access.

    • Currently, the only optimized case is length for compressed resources, but more optimizations may be added in the future.
  • Added a compressed_info attribute to Resource that provides access to the header information of compressed resources.

  • Improved handling of compressed resources when listing resource files with the command line tool.

    • Metadata of compressed resources is now displayed even if no decompressor implementation is available (as long as the compressed data header can be parsed).
    • Performance has been improved - the data no longer needs to be fully decompressed to get its length, this information is now read from the header.
    • The 'dcmp' ID used to decompress each resource is displayed.
  • Fixed an incorrect options.packages in setup.cfg, which made the library unusable except when installing from source using --editable.

  • Fixed ResourceFile.__enter__ returning None, which made it impossible to use ResourceFile properly in a with statement.

  • Fixed various minor errors reported by type checking with mypy.

v1.3.0.post1

25 Sep 00:30
Compare
Choose a tag to compare
  • Fixed an incorrect options.packages in setup.cfg, which made the library unusable except when installing from source using --editable.

v1.2.0.post1

25 Sep 00:24
Compare
Choose a tag to compare
  • Fixed an incorrect options.packages in setup.cfg, which made the library unusable except when installing from source using --editable.

v1.3.0

16 Sep 14:40
Compare
Choose a tag to compare
  • Added a --group command line option to group resources in list format by type (the default), ID, or with no grouping.
  • Added a dump-text output format to the command line tool. This format is identical to dump, but instead of a hex dump, it outputs the resource data as text. The data is decoded as MacRoman and classic Mac newlines (\r) are translated. This is useful for examining resources that contain mostly plain text.
  • Changed the command line tool to sort resources by type and ID, and added a --no-sort option to disable sorting and output resources in file order (which was the previous behavior).
  • Renamed the rsrcfork.Resource attributes resource_type and resource_id to type and id, respectively. The old names have been deprecated and will be removed in the future, but are still supported for now.
  • Changed --format=dump output to match hexdump -C's format - spacing has been adjusted, and multiple subsequent identical lines are collapsed into a single *.

v1.2.0

13 Sep 08:11
Compare
Choose a tag to compare
  • Added support for compressed resources.

    • Compressed resource data is automatically decompressed, both in the Python API and on the command line.
    • This is technically a breaking change, since in previous versions the compressed resource data was returned directly. However, this change will not affect end users negatively, unless one has already implemented custom handling for compressed resources.
    • Currently, only the three standard System 7.0 compression formats ('dcmp' IDs 0, 1, 2) are supported. Attempting to access a resource compressed in an unsupported format results in a DecompressError.
    • To access the raw resource data as stored in the file, without automatic decompression, use the res.data_raw attribute (for the Python API), or the --no-decompress option (for the command-line interface). This can be used to read the resource data in its compressed form, even if the compression format is not supported.
  • Improved automatic data/resource fork selection for files whose resource fork contains invalid data.

    • This fixes reading certain system files with resource data in their data fork (such as HIToolbox.rsrc in HIToolbox.framework, or .dfont fonts) on recent macOS versions (at least macOS 10.14, possibly earlier). Although these files have no resource fork, recent macOS versions will successfully open the resource fork and return garbage data for it. This behavior is now detected and handled by using the data fork instead.
  • Replaced the rsrcfork parameter of rsrcfork.open/ResourceFork.open with a new fork parameter. fork accepts string values (like the command line --fork option) rather than rsrcfork's hard to understand None/True/False.

    • The old rsrcfork parameter has been deprecated and will be removed in the future, but for now it still works as before.
  • Added an explanatory message when a resource filter on the command line doesn't match any resources in the resource file. Previously there would either be no output or a confusing error, depending on the selected --format.

  • Changed resource type codes and names to be displayed in MacRoman instead of escaping all non-ASCII characters.

  • Cleaned up the resource descriptions in listings and dumps to improve readability. Previously they included some redundant or unnecessary information - for example, each resource with no attributes set would be explicitly marked as "no attributes".

  • Unified the formats of resource descriptions in listings and dumps, which were previously slightly different from each other.

  • Improved error messages when attempting to read multiple resources using --format=hex or --format=raw.

  • Fixed reading from non-seekable streams not working for some resource files.

  • Removed the allow_seek parameter of ResourceFork.__init__ and the --read-mode command line option. They are no longer necessary, and were already practically useless before due to non-seekable stream reading being broken.

v1.1.3.post1

13 Jul 23:52
Compare
Choose a tag to compare
  • Fixed a formatting error in the README.rst to allow upload to PyPI.