Date (Timezone) | Version | Comment |
---|---|---|
03/13/2021 01:54:44 PM (PST) | 0.5.0a0 | no functional code changes ... yet. this is currently on a separate branch referring to Break down Exiftool into 2+ classes, a raw Exiftool, and helper classes and Deprecating Python 2.x compatibility . In time this refactor will be the future of PyExifTool, once it stabilizes. I'll make code-breaking updates in this branch from build to build and take comments to make improvements. Consider the 0.5.0 "nightly" quality. Also, changelog versions were modified because I noticed that the LAST release from smarnach is tagged with v0.2.0 |
02/28/2022 12:39:57 PM (PST) | 0.5.0 | complete refactor of the PyExifTool code. Lots of changes. Some code breaking changes. Not directly backwards-compatible with v0.4.x. See COMPATIBILITY.TXT to understand all the code-breaking changes. |
03/02/2022 07:07:26 AM (PST) | 0.5.1 | v0.5 Sphinx documentation generation finally working. Lots of reStructuredText written to make the documentation better! There's no functional changes to PyExifTool, but after several days and hours of effort, every single docstring in ExifTool and ExifToolHelper was updated to reflect all v0.5.0 changes. ExifToolAlpha was largely untouched because the methods exposed haven't really been updated this time. |
03/03/2022 06:49:31 PM (PST) | 0.5.2 | Predicting the next most requested method: ExifToolHelper now has a set_tags() method similar to the get_tags() method. This was pulled from ExifToolAlpha, combining the old set_tags/set_tags_batch into one method. Added a new constructor/property to ExifToolHelper: check_execute, which (by default) will raise ExifToolExecuteError when the exit status code from exiftool subprocess is non-zero. This should help users debug otherwise silent errors. Also updated more docstrings and added maintenance script to generate docs. |
03/26/2022 06:48:01 AM (PDT) | 0.5.3 | Quite a few docstring changes ExifToolHelper's get_tags() and set_tags() checks tag names to prevent inadvertent write behavior Renamed a few of the errors to make sure the errors are explicit ExifToolHelper() has some static helper methods which can be used when extending the class (ExifToolAlpha.set_keywords_batch() demonstrates a sample usage). setup.py tweaked to make it Beta rather than Alpha ExifToolAlpha.get_tag() updated to make it more robust. Fixed ujson compatibility Cleaned up and refactored testing. |
08/27/2022 06:06:32 PM (PDT) | 0.5.4 | New Feature: added raw_bytes parameter to ExifTool.execute() to return bytes only with no decoding conversion. Changed: ExifTool.execute() now accepts both [str,bytes]. When given str, it will encode according to the ExifTool.encoding property. Changed: ExifToolHelper.execute() now accepts Any type, and will do a str() on any non-str parameter. Technical change: Popen() no longer uses an -encoding parameter, therefore working with the socket is back to bytes when interfacing with the exiftool subprocess. This should be invisible to most users as the default behavior will still be the same. Tests: Created associated test with a custom makernotes example to write and read back bytes. Docs: Updated documentation with comprehensive samples, and a better FAQ section for common problems. |
12/30/2022 02:35:18 PM (PST) | 0.5.5 | No functional changes, only a huge speed improvement with large operations :: Update: Speed up large responses from exiftool. Instead of using + string concatenation, uses list appends and reverse(), which results in a speedup of 10x+ for large operations. See more details from the reported issue and PR 61 by prutschman |
10/22/2023 03:21:46 PM (PDT) | 0.5.6 | New Feature: added method ExifTool.set_json_loads() which allows setting a method to replace the json.loads() called in ExifTool.execute_json(). Changed: ujson is no longer used by default when available. Use the set_json_loads() to enable manually This permits passing additional configuration parameters to address the reported issue. All documentation has been updated and two accompanying FAQ entries have been written to describe the new functionality. Test cases have been written to test the new functionality and some baseline exiftool tests to ensure that the behavior remains consistent across tests. |
Follow maintenance/release-process.html when releasing a version.
Date (Timezone) | Version | Comment |
---|---|---|
07/17/2019 12:26:16 AM (PDT) | 0.2.0 | Source was pulled directly from https://github.com/smarnach/pyexiftool with a complete bare clone to preserve all history. Because it's no longer being updated, I will pull all merge requests in and make updates accordingly |
07/17/2019 12:50:20 AM (PDT) | 0.2.1 | Convert leading spaces to tabs. (I'm aware of PEP 8 recommending spaces over tabs, but I <3 tabs) |
07/17/2019 12:52:33 AM (PDT) | 0.2.2 | Merge Pull request #10 "add copy_tags method" by Maik Riechert (letmaik) Cambridge, UK on May 28, 2014 This adds a small convenience method to copy any tags from one file to another. I use it for several month now and it works fine for me. |
07/17/2019 01:05:37 AM (PDT) | 0.2.3 | Merge Pull request #25 "Added option for keeping print conversion active. #25" by Bernhard Bliem (bbliem) on Jan 17, 2019 For some tags, disabling print conversion (as was the default before) would not make much sense. For example, if print conversion is deactivated, the value of the Composite:LensID tag could be reported as something like "8D 44 5C 8E 34 3C 8F 0E". It is doubtful whether this is useful here, as we would then need to look up what this means in a table supplied with exiftool. We would probably like the human-readable value, which is in this case "AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED". Disabling print conversion makes sense for a lot of tags (e.g., it's nicer to get as the exposure time not the string "1/2" but the number 0.5). In such cases, even if we enable print conversion, we can disable it for individual tags by appending a # symbol to the tag name. |
07/17/2019 01:20:15 AM (PDT) | 0.2.4 | Merge with slight modifications to variable names for clarity (sylikc) Pull request #27 "Add "shell" keyword argument to ExifTool initialization" by Douglas Lassance (douglaslassance) Los Angeles, CA on 5/29/2019 On Windows this will allow to run exiftool without showing the DOS shell. This might break Linux but I don't know for sure Alternative source location with only this patch: https://github.com/blurstudio/pyexiftool/tree/shell-option |
07/17/2019 01:24:32 AM (PDT) | 0.2.5 | Merge Pull request #19 "Correct dependency for building an RPM." by Achim Herwig (Achimh3011) Munich, Germany on Aug 25, 2016 I'm not sure if this is entirely necessary, but merging it anyways |
07/17/2019 02:09:40 AM (PDT) | 0.2.6 | Merge Pull request #15 "handling Errno:11 Resource temporarily unavailable" by shoyebi on Jun 12, 2015 |
07/18/2019 03:40:39 AM (PDT) | 0.2.7 | set_tags and UTF-8 cmdline - Merge in the first set of changes by Leo Broska related to Pull request #5 "add set_tags_batch, set_tags + constructor takes added options" by halloleo on Aug 1, 2012 but this is sourced from jmathai/elodie's 6114328 Jun 22,2016 commit |
07/18/2019 03:59:02 AM (PDT) | 0.2.8 | Merge another commit fromt he jmathai/elodie zserg on Mar 12, 2016 seems to do UTF-8 encoding on set_tags |
07/18/2019 04:01:18 AM (PDT) | 0.2.9 | minor change it looks like a rename to match PEP8 coding standards by zserg on Aug 21, 2016 |
07/18/2019 04:05:36 AM (PDT) | 0.2.10 | Fallback to latin if utf-8 decode fails in pyexiftool.py by jmathai on Sep 7, 2016 |
07/18/2019 04:14:32 AM (PDT) | 0.2.11 | Merge the test cases from the Pull request #5 "add set_tags_batch, set_tags + constructor takes added options" by halloleo on Aug 1, 2012 |
07/18/2019 04:34:46 AM (PDT) | 0.3.0 | changed the setup.py licensing and updated the version numbering as in changelog changed the version number scheme, as it appears the "official last release" was 0.2.0 tagged. There's going to be a lot of things broken in this current build, and I'll fix it as they come up. I'm going to start playing with the library and the included tests and such. There's one more pull request #11 which would be pending, but it duplicates the extra arguments option. I'm also likely to remove the print conversion as it's now covered by the extra args. I'll also rename some variable names with the addedargs patch for my changes (sylikc), I can only guarantee they will work on Python 3.7, because that's my environment... and while I'll try to maintain compatibility, there's no guarantees |
07/18/2019 05:06:19 AM (PDT) | 0.3.1 | make some minor tweaks to the naming of the extra args variable. The other pull request 11 names them params, and when I decide how to merge that pull request, I'll probably change the variable names again. |
07/19/2019 12:01:22 AM (PDT) | 0.3.2 | fix the select() problem for windows, and fix all tests |
07/19/2019 12:54:39 AM (PDT) | 0.3.3 | Merge a piece of Pull request #11 "Robustness enhancements by Matthias Kiefer (kiefermat) on Oct 27, 2014 On linux call prctl in subprocess to be sure that the exiftool child process is killed even if the parent process is killed by itself also removed print_conversion also merged the common_args and added_args into one args list |
07/19/2019 01:18:26 AM (PDT) | 0.3.4 | Merge the rest of Pull request #11. Added the other pieces, however, I added them as "wrappers" instead of modifying the interface of the original code. I feel like the additions here are overly done, and as I understand the code more, I'll either remove it or incorporate it into single functions from #11 When getting json results, verify that the results returned by exiftool actually belong to the correct file by checking the SourceFile property of the returned result and also Added possibility to provide different exiftools params for each file separately |
07/19/2019 01:22:48 AM (PDT) | 0.3.5 | changed a bit of the test_exiftool so all the tests pass again |
01/04/2020 11:59:14 AM (PST) | 0.3.6 | made the tests work with the latest output of ExifTool. This is the final version which is named "exiftool" |
01/04/2020 12:16:51 PM (PST) | 0.4.0 | pyexiftool rename (and make all tests work again) ... I also think that the pyexiftool.py has gotten too big. I'll probably break it out into a directory structure later to make it more maintainable |
02/01/2020 05:09:43 PM (PST) | 0.4.1 | incorporated pull request #2 and #3 by ickc which added a "no_output" feature and an import for ujson if it's installed. Thanks for the updates! |
04/09/2020 04:25:31 AM (PDT) | 0.4.2 | roll back 0.4.0's pyexiftool rename. It appears there's no specific PEP to have to to name PyPI projects to be py. The only convention I found was https://www.python.org/dev/peps/pep-0423/#use-standard-pattern-for-community-contributions which I might look at in more detail |
04/09/2020 05:15:40 AM (PDT) | 0.4.3 | initial work of moving the exiftool.py into a directory preparing to break it down into separate files to make the codebase more manageable |
03/12/2021 01:37:30 PM (PST) | 0.4.4 | no functional code changes. Revamped the setup.py and related files to release to PyPI. Added all necessary and recommended files into release |
03/12/2021 02:03:38 PM (PST) | 0.4.5 | no functional code changes. re-release with new version because I accidentally included the "test" package with the PyPI 0.4.4 release. I deleted it instead of yanking or doing a post release this time... just bumped the version. "test" folder renamed to "tests" as per convention, so the build will automatically ignore it |
04/08/2021 03:38:46 PM (PDT) | 0.4.6 | added support for config files in constructor -- Merged pull request #7 from @asielen and fixed a bug referenced in the discussion #7 |
04/19/2021 02:37:02 PM (PDT) | 0.4.7 | added support for writing a list of values in set_tags_batch() which allows setting individual keywords (and other tags which are exiftool lists) -- contribution from @davidorme referenced in issue #12 (comment) |
04/28/2021 01:50:59 PM (PDT) | 0.4.8 | no functional changes, only a minor documentation link update -- Merged pull request #16 from @beng |
05/19/2021 09:37:52 PM (PDT) | 0.4.9 | test_tags() parameter encoding bugfix and a new test case TestTagCopying -- Merged pull request #19 from @jangop I also added further updates to README.rst to point to my repo and GH pages I fixed the "previous versions" naming to match the v0.2.0 start. None of them were published, so I changed the version information here just to make it less confusing to a casual observer who might ask "why did you have 0.1 when you forked off on 0.2.0?" Sven Marnach's releases were all 0.1, but he tagged his last release v0.2.0, which is my starting point |
08/22/2021 08:32:30 PM (PDT) | 0.4.10 | logger changed to use logging.getLogger(name) instead of the root logger -- Merged pull request #24 from @nyoungstudios |
08/22/2021 08:34:45 PM (PDT) | 0.4.11 | no functional code changes. Changed setup.py with updated version and Documentation link pointed to sylikc.github.io -- as per issue #27 by @derMart |
08/22/2021 09:02:33 PM (PDT) | 0.4.12 | fixed a bug ExifTool.terminate() where there was a typo. Kept the unused outs, errs though. -- from suggestion in pull request #26 by @aaronkollasch |
02/13/2022 03:38:45 PM (PST) | 0.4.13 | (NOTE: Barring any critical bug, this is expected to be the LAST Python 2 supported release!) added GitHub actions. fixed bug in execute_json_wrapper() 'error' was not defined syntactically properly -- merged pull request #30 by https://github.com/jangop |
Check for changes at the following resources to see if anyone has added some nifty features. While we have the most active fork, I'm just one of the many forks, spoons, and knives!
We can also direct users here or answer existing questions as to how to use the original version of ExifTool.
(last checked 10/23/2023 all)
search "pyexiftool github" to see if you find any more random ports/forks check for updates https://github.com/smarnach/pyexiftool/pulls check for new open issues https://github.com/smarnach/pyexiftool/issues?q=is%3Aissue+is%3Aopen
answer relevant issues on stackoverflow (make sure it's related to the latest version) https://stackoverflow.com/search?tab=newest&q=pyexiftool&searchOn=3