Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
283 commits
Select commit Hold shift + click to select a range
64a5117
Merge branch 'support-w' of https://github.com/ickc/pyexiftool into i…
sylikc Feb 2, 2020
8085f82
Merge branch 'ickc-support-w'
sylikc Feb 2, 2020
79c17cd
version bump because of the merged PRs
sylikc Feb 2, 2020
58eaf2a
Fix NoneType error in common args check
csparker247 Feb 7, 2020
8eabe6c
Revert "0.4.0 rename to pyexiftool and make sure tests pass"
sylikc Apr 9, 2020
44e2e4e
Merge branch 'fix-nonetype-exception' of https://github.com/csparker2…
sylikc Apr 9, 2020
ed49d96
Merge branch 'csparker247-fix-nonetype-exception'
sylikc Apr 9, 2020
e77ef5e
start the initial legwork of breaking the single exiftool.py into log…
sylikc Apr 9, 2020
d5971eb
add a comment at this line which uses a Python 3.3+ exclusive feature…
sylikc Apr 12, 2020
94e65a5
put an extra TODO as we were debugging the code... might also need to…
sylikc Apr 12, 2020
fa7539f
Added support for config files as outlined here: https://exiftool.org…
asielen Jan 5, 2021
91b81e1
Added support for config files as outlined here: https://exiftool.org…
asielen Jan 5, 2021
cb4d0e5
v0.4.4 - ready for release to PyPI
sylikc Mar 12, 2021
5d37a91
fix formatting error in README.rst ... I'm new to a non .md format!
sylikc Mar 12, 2021
a373927
v0.4.5 more setup changes to get PyPI package in order
sylikc Mar 13, 2021
bec818c
v0.5.0-alpha.0 new branch for upcoming changes. See CHANGELOG.md for…
sylikc Mar 13, 2021
b565c53
breaks compatibility of constructor. executable_ -> executable
sylikc Mar 17, 2021
efbf835
get the tests to pass in the way that makes sense
sylikc Mar 17, 2021
52d60ca
be explicit in the warning returned in start()
sylikc Mar 17, 2021
beb2085
make the rest of the class consistently named for now
sylikc Mar 17, 2021
64d44de
add some TODOs to check code and consider whether to refactor later
sylikc Mar 17, 2021
f414057
make block_size a property which can be set to define a read block size
sylikc Apr 1, 2021
51837da
as per comment https://gist.github.com/techtonik/4368898#gistcomment-…
sylikc Apr 1, 2021
85e9d3a
change the targeting of Python version to 3.6+
sylikc Apr 1, 2021
46711d4
as per discussion https://github.com/sylikc/pyexiftool/discussions/10…
sylikc Apr 1, 2021
e94eccf
(temporary until decided) return None right now when JSON result come…
sylikc Apr 2, 2021
05986d5
make the execute() work with a synchronization number.
sylikc Apr 2, 2021
56af0a9
added code to read from stderr as well. I think I'll be able to dete…
sylikc Apr 2, 2021
5a87388
change how terminate() works on Windows when __del__ is in progress. …
sylikc Apr 6, 2021
7a28188
change the function signature of terminate() to match subprocess API,…
sylikc Apr 6, 2021
c8167e8
change the way ExifTool.running is detected. In the event that exift…
sylikc Apr 7, 2021
8700d32
fixed the bug that freezes on windows because stderr is empty on os.r…
sylikc Apr 8, 2021
1cff835
extracted all high-level functionality out of the ExifTool class. th…
sylikc Apr 8, 2021
06a8fac
consolidate the get_metadata functionality to take either a str or a …
sylikc Apr 8, 2021
f36acb2
fixed a bug where if the filename is a number (it doesn't happen ofte…
sylikc Apr 8, 2021
ca5141b
remove get_tags and rename get_tags_batch to get_tags, similar to the…
sylikc Apr 8, 2021
a4b5710
fix tests to isolate the ExifTool and ExifToolHelper tests
sylikc Apr 8, 2021
dbc4c18
moved for extraneous functionality over from exiftool to helper
sylikc Apr 8, 2021
46411dc
fixed the tests and now it's entirely working on Windows with the kill()
sylikc Apr 8, 2021
17cf6ea
merge the handling of of get_metadata and get_tags... since they esse…
sylikc Apr 8, 2021
370b7a7
fix the warning on helper_test so it doesn't terminate if not running
sylikc Apr 8, 2021
44d9a6a
Merge pull request #7 from asielen/master
sylikc Apr 8, 2021
7bf3c17
fix the bug as discussed on Pull request #7
sylikc Apr 8, 2021
b6e1904
Merge branch 'master' into v0.5.x-py3-refactor
sylikc Apr 8, 2021
3197049
fix small bugs in the merging and make sure all tests pass
sylikc Apr 9, 2021
e65775f
add the test that warns when the process dies after it was detected a…
sylikc Apr 9, 2021
b85ac1a
added the config_file property to do error checking
sylikc Apr 17, 2021
9ad8706
commented out the fscodec() code that was first introduced in commit …
sylikc Apr 17, 2021
8abc387
as per recommendations in consistent testing, I wrote some Windows ba…
sylikc Apr 17, 2021
42c794b
start with legwork of getting annotations and such working with mypy,…
sylikc Apr 17, 2021
00df51b
mypy helped fix a bug in terminate() referring to a bad variable in T…
sylikc Apr 17, 2021
fc234d5
simplify the format of the sequences with Python 3.6 f-strings
sylikc Apr 18, 2021
ed07bbd
more type hints
sylikc Apr 18, 2021
7488436
added stub for logging
sylikc Apr 18, 2021
738b00c
add in empty placeholder for the tests/tmp dir
sylikc Apr 19, 2021
18519b6
update gitignore for the tests/tmp/ dir
sylikc Apr 19, 2021
5db3efd
convert helper to using pathlib.Path for better clarity.
sylikc Apr 19, 2021
9531777
update tests for more coverage
sylikc Apr 19, 2021
8281a5e
fix pytest-cov script to only show coverage for exiftool, and not oth…
sylikc Apr 19, 2021
ebbc465
exiftool logger is still a WIP, not really implemented yet
sylikc Apr 19, 2021
6ecb2f7
add support for lists in tags.items in set_tags_batch()
sylikc Apr 19, 2021
64371d5
Merge branch 'master' into v0.5.x-py3-refactor
sylikc Apr 19, 2021
d2f43ef
pulled out the @staticmethod to the module-level since it's really no…
sylikc Apr 19, 2021
7fc5857
fixed an indent bug (from the merge) and annotation bug in helper.py
sylikc Apr 20, 2021
ee4bbab
exiftool.py:
sylikc Apr 20, 2021
f85c215
rename the 'doc' to 'docs' to follow more with the convention of the …
sylikc Apr 20, 2021
500f758
trying to get documentation working again, need to document as we mov…
sylikc Apr 20, 2021
fb8b4f9
added the version and version_tuple properties which is the exiftool …
sylikc Apr 22, 2021
4597b54
adjust copyright
sylikc Apr 22, 2021
2f2872b
add some rudimentary logging into ExifTool class
sylikc Apr 22, 2021
590bfe2
put in some stub for Logger testing, but I encountered a freeze when …
sylikc Apr 24, 2021
8ecb707
update url for documentation
Apr 27, 2021
1e9b4b3
Merge pull request #16 from beng/master
sylikc Apr 28, 2021
63de62f
Merge branch 'master' into v0.5.x-py3-refactor
sylikc Apr 29, 2021
ad85272
added some other extensions to sphinx to generate cooler documentatio…
sylikc May 5, 2021
da8827d
created a little private method that just unsets all the variables pe…
sylikc May 5, 2021
98357b7
Encode parameters
jangop May 5, 2021
d54af01
removing now-defunct devnull code, since we now read from stderr and …
sylikc May 5, 2021
f5d5ca3
remove the logging.debug()
sylikc May 5, 2021
7aa1482
unified the call to subprocess.Popen so it's clearer in someways that…
sylikc May 5, 2021
57b72cd
super duper hacky fix to some Python interpreter vs exiftool interact…
sylikc May 6, 2021
cc91b7e
Test copying of tags
jangop May 6, 2021
b4ab5f9
removed unnecessary check, as get_tags() has this parameter checking …
sylikc May 6, 2021
93bfb15
Test basic functionality
jangop May 11, 2021
5a8fa62
Merge pull request #19 from jangop/master
sylikc May 20, 2021
8896d6b
v0.4.9 update changelog and setup.py to reflect the previous two PR t…
sylikc May 20, 2021
a66c4b1
Merge branch 'master' into v0.5.x-py3-refactor
sylikc May 20, 2021
c1a52a9
I messed up when merging PRs from GitHub... working with multiple rem…
sylikc May 20, 2021
1089e24
move the TestTagCopying to ExifToolHelper test script
sylikc May 20, 2021
956f1c9
decided that execute_json() will return None if no output came back f…
sylikc May 26, 2021
2e8f26b
add in last_status. This is the exit status from the previous comman…
sylikc May 26, 2021
578e899
update copyright on LICENSE file to reflect years as per standard
sylikc May 26, 2021
d4d57f3
make the python.exe call explicit with .EXE extension in the batch files
sylikc May 28, 2021
0d7b3ff
add in a README which shows the requirements file for existing ones
sylikc May 28, 2021
854cc7f
exiftool.py fix all the:
sylikc May 28, 2021
2eefce0
fix the DeprecationWarning: Please use assertEqual instead.
sylikc May 28, 2021
b3a279d
fix all: E261 at least two spaces before inline comment
sylikc May 28, 2021
09b43f2
changed ExifTool common_args=None means that an empty list is set. A…
sylikc May 28, 2021
452f50a
fix most of the: E265 block comment should start with '# '
sylikc May 28, 2021
bb3783e
fix some more PEP8 stuff and other things caught in static analysis b…
sylikc May 28, 2021
dd31ca1
adding restore of config file before doing the create/test/set that w…
sylikc May 28, 2021
0c7c01c
adding current flake8 configuration as per discussion on PEP8 coding …
sylikc May 28, 2021
9c8622f
doesn't use root logger
nyoungstudios May 28, 2021
ee2b01a
Create lint-and-test.yml
jangop May 29, 2021
d7ceb0c
made changes back in May, some extra comments and optimizing a few th…
sylikc Aug 19, 2021
bec1765
as per https://github.com/sylikc/pyexiftool/pull/24 , loguru is a pos…
sylikc Aug 23, 2021
5f4b9aa
move the logger into the __init__ instead of global to exiftool.py
sylikc Aug 23, 2021
8b9306d
Merge branch 'nyoungstudios-master'
sylikc Aug 23, 2021
eaa4807
v0.4.11 changed documentation link to point to the right place in PyPI
sylikc Aug 23, 2021
96b4759
v0.4.12 regarding pull request https://github.com/sylikc/pyexiftool/p…
sylikc Aug 23, 2021
fa4a1a1
Merge branch 'master' into v0.5.x-py3-refactor
sylikc Aug 23, 2021
4bf2ccf
ExifToolHelper - add auto_start feature. Demonstrate overriding exec…
sylikc Aug 23, 2021
e6f7b90
ExifToolHelper - fix bug that if you pass in common_args=[] it breaks…
sylikc Aug 23, 2021
8325f64
ExifToolHelper - changed the way the constructor works
sylikc Sep 11, 2021
ec028a5
ExifToolHelper - support Path-like objects in get_tags()
sylikc Sep 11, 2021
7b61701
Exiftool main class code cleanup.
sylikc Oct 3, 2021
1beaaad
ExifToolHelper() - added terminate() overload
sylikc Oct 3, 2021
53eb0a7
ExifTool main class
sylikc Oct 3, 2021
7b3f384
ExifToolHelper - fix technically incorrect comment... overload -> ove…
sylikc Oct 3, 2021
d88fef9
Merge branch 'sylikc:master' into master
jangop Oct 3, 2021
1a84195
Install exiftool
jangop Oct 3, 2021
bc21c4c
Use apt-get instead of apt
jangop Oct 3, 2021
fe3500a
Install as root
jangop Oct 3, 2021
ecbd420
Assign IOError
jangop Oct 3, 2021
416c633
Merge branch 'master' of github.com:jangop/pyexiftool
jangop Oct 3, 2021
b03c373
ExifTool - fix some bugs that caused actual use error... also, appare…
sylikc Oct 3, 2021
15792bd
IMPORTANT: API signature of get_tags() has been changed.. `files` and…
sylikc Oct 3, 2021
ead8c46
Represent all “files” as strings
jangop Oct 3, 2021
f4c62a9
Merge branch 'jangop-v0.5.x-py3-refactor' into v0.5.x-py3-refactor
sylikc Oct 3, 2021
137c0e2
ExifTool() - added `encoding` constructor parameter (requires Python …
sylikc Oct 3, 2021
78ec074
Tests tests tests
sylikc Oct 3, 2021
4420cb6
Parse and compare versions of exiftool
jangop Oct 4, 2021
1e33d76
* update documentation in ExifTool() class.
sylikc Jan 31, 2022
314427c
ExifTool - add comment that ${status} only supported on exiftool v12.10+
sylikc Jan 31, 2022
873eece
Examine PR https://github.com/sylikc/pyexiftool/pull/20
sylikc Jan 31, 2022
b20fa3c
Merge Pull request which adds some basic tests to the ExifToolHelper
sylikc Jan 31, 2022
6e08c1c
Merge branch 'v0.5.x-py3-refactor' of github.com:sylikc/pyexiftool in…
sylikc Jan 31, 2022
09c3279
Github workflows to do testing... check required and warn on others
sylikc Feb 12, 2022
8cad1b3
merged jangop changes but reverted some of the removed comments. kep…
sylikc Feb 14, 2022
73a57f2
Merge PR https://github.com/sylikc/pyexiftool/pull/32 by https://gith…
sylikc Feb 14, 2022
0fe2ab0
Pull the latest changes (GitHub workflows lint-and-test) from master …
sylikc Feb 14, 2022
d94ff05
Add versioning information __version__ to the package.
sylikc Feb 14, 2022
8c5a3c2
invalid syntax fix
sylikc Feb 14, 2022
0bdbc81
* was in the process of adding a version check, but realized it may n…
sylikc Feb 15, 2022
5a5cf0b
update README.rst to prepare for initial Python3 release. Removed ou…
sylikc Feb 15, 2022
69a34fc
test_helper.py
sylikc Feb 15, 2022
b30f01a
Adding a GitHub workflow to make sure the minimum required version of…
sylikc Feb 15, 2022
3889b77
GitHub action - try again to get the PATH variable to the test steps
sylikc Feb 15, 2022
165dac8
v0.4.13 - added a comment in CHANGELOG.md for the changes. This was …
sylikc Feb 15, 2022
10a4578
v0.4.13 - forgot to bump the version on setup.py
sylikc Feb 15, 2022
7b64b19
merge the v0.4.13 changelog in from master one last time
sylikc Feb 15, 2022
608c1f3
Update year on LICENSE
sylikc Feb 15, 2022
1c57f25
Add a "Brief History" section to README for some insight to how all o…
sylikc Feb 15, 2022
4297399
ExifTool - changed the win_shell default (I actually am not sure this…
sylikc Feb 15, 2022
6bc95c0
updated COMPATABILITY.txt with some of the changed features. It's no…
sylikc Feb 15, 2022
a65abbe
Update README.rst
sylikc Feb 15, 2022
c86b269
more refinements to README.rst
sylikc Feb 15, 2022
715cfc8
ExifToolHelper - changed files invalid files parameter to a ValueError
sylikc Feb 15, 2022
dc27b77
test_exiftool.py - added a few tests to increase code coverage
sylikc Feb 15, 2022
3bdf346
update .gitignore as per https://github.com/sylikc/pyexiftool/pull/39
sylikc Feb 27, 2022
4ff74af
ExifTool
sylikc Feb 28, 2022
7460296
.gitignore changed again... not sure why /tmp/ was added in the PR
sylikc Feb 28, 2022
fb23490
ExifTool / ExifToolHelper
sylikc Feb 28, 2022
0d023ce
forgot to import xceptions into helper
sylikc Feb 28, 2022
aa6e4f3
ExifTool
sylikc Feb 28, 2022
48da066
TestExifToolHelper
sylikc Feb 28, 2022
cbca475
* ExifTool - add some typing and documentation updates (better docstr…
sylikc Feb 28, 2022
3e097bb
Merge the Python3 Refactor code. Almost a complete re-write of non-c…
sylikc Feb 28, 2022
353872e
Fix README.rst to make it compatible with twine
sylikc Feb 28, 2022
1bcef49
Documentation update. Every single docstring was touched (except Exi…
sylikc Mar 2, 2022
ff9020f
add the inheritance diagram to the Class pages, and tweaked the outpu…
sylikc Mar 2, 2022
51f77c6
Tweaked the README a bit and now there's one less duplicate blurb in …
sylikc Mar 3, 2022
bd83b57
added a new exception ExifToolExecuteError() which will be returned o…
sylikc Mar 3, 2022
6a25680
ExifTool - no functional changes
sylikc Mar 3, 2022
0ba07f7
ExifToolAlpha
sylikc Mar 3, 2022
f85b0c2
updated tests for ExifToolHelper and ExifToolAlpha for coverage of th…
sylikc Mar 3, 2022
fd4e9ea
README.rst - adding some badges to make it look cooler
sylikc Mar 4, 2022
7c9493d
add a Windows batch file to the scripts directory so I can get consis…
sylikc Mar 4, 2022
431a570
ExifToolExecuteError - add a better docstring to indicate that there …
sylikc Mar 4, 2022
34bf168
update the scripts README.txt file so it better reflects the current …
sylikc Mar 4, 2022
1de5e88
ExifToolHelper
sylikc Mar 4, 2022
1a198f5
* moved some tests from test_alpha to test_helper
sylikc Mar 4, 2022
7568877
docs changes
sylikc Mar 4, 2022
2a803be
__init__.py removed the DEFAULT_EXECUTABLE from the main namespace. …
sylikc Mar 4, 2022
ea9747b
setup.py bugfix - forgot to change the variable to the function
sylikc Mar 4, 2022
295db4d
ExifToolHelper - fixed a typo in the docstring and changed the wordin…
sylikc Mar 4, 2022
b0ddd80
no functional changes
sylikc Mar 4, 2022
4523df3
no functional changes
sylikc Mar 4, 2022
0afa79c
* Update tests to use a common method to create the temp_dir (central…
sylikc Mar 4, 2022
8ad601a
README.rst add table of contents ... the text has gotten long and dif…
sylikc Mar 4, 2022
a801aed
REAMDE.rst remove the backlinks, and tweak slightly. This should mak…
sylikc Mar 4, 2022
c660cd6
README.rst Looks like I have to explicitly disable backlinks
sylikc Mar 4, 2022
64fc0c3
* setup.py - add some classifiers + change project status from Alpha …
sylikc Mar 5, 2022
f94e0f9
ExifToolAlpha - made the get_tag way more robust with checks... left …
sylikc Mar 6, 2022
d76663e
* exceptions - added ExifToolTagNameError
sylikc Mar 6, 2022
be093f9
ExifTool
sylikc Mar 11, 2022
7fb43ca
All tests pass again
sylikc Mar 11, 2022
38d87d8
refactor the tests directory to break down by files, so imports are c…
sylikc Mar 11, 2022
97fa2a3
tests - add a few more statements to get coverage, and move a set_tag…
sylikc Mar 11, 2022
1b9ebbf
trying to update the GitHub Action to use a cache for the exiftool do…
sylikc Mar 15, 2022
4e98768
forgot to end the if with fi
sylikc Mar 15, 2022
1173438
the job at least ran successfully... so turn on caching for pip as well
sylikc Mar 15, 2022
d1ace55
I <3 tabs... github doesn't though
sylikc Mar 15, 2022
ca76e4b
can't enable python cache without using a requirements file
sylikc Mar 15, 2022
7631e87
Merge in the github actions which now cache the downloaded ExifTool s…
sylikc Mar 15, 2022
d78d2fd
no functional changes. some docstring updates.
sylikc Mar 17, 2022
169e8be
no functional changes. Added a "Docs" badge as per suggestion https:…
sylikc Mar 26, 2022
7341fcc
Fixed ujson compatibility. ujson isn't a "drop-in" replacement after…
sylikc Mar 26, 2022
26f9dd7
no functional changes. Update documentation slightly, and preparing …
sylikc Mar 26, 2022
afa68e4
no functional changes. Updated some docstrings. Added Examples and …
sylikc Mar 27, 2022
c8ae045
no functional changes. A few minor adjustments to examples documenta…
sylikc Mar 27, 2022
d2978df
no functional changes. Added docs that execute() can throw UnicodeDe…
sylikc Apr 11, 2022
4b54374
tweaked the conversion of params to text, the logging doesn't need to…
sylikc Apr 14, 2022
e36f8b4
remove the `encoding` parameter to the call of Popen()
sylikc Apr 15, 2022
3e99c47
rename the "images" folder to "files" folder as we're going to create…
sylikc Apr 16, 2022
aa12b9a
adjust the static typing for the new possible return types from the u…
sylikc Apr 16, 2022
957757f
ExifTool fix bug that was introduced in status code checking when raw…
sylikc Apr 28, 2022
60d793f
added a ExifTool bytes read/write test
sylikc Apr 28, 2022
2a8d918
ExifTool - optimized memory of params... instead of creating the copy…
sylikc Apr 28, 2022
87f40b8
ExifToolHelper - add in a helper at the cost of making another copy o…
sylikc Apr 28, 2022
b6c071a
ExifToolHelper - fixed bug that the params didn't all get str()'d pro…
sylikc Apr 28, 2022
0984870
Docstring updates, and examples and FAQ updates
sylikc Apr 28, 2022
6471ebc
Write a coverage test (and test that the last_stdout and last_stderr)…
sylikc Apr 28, 2022
f41595c
ExifToolHelper
sylikc Apr 28, 2022
84885b8
fix the wrong path in the FAQ due to the restructuring
sylikc Aug 28, 2022
ab92b03
no functional changes. bump version for 0.5.4 release. update chang…
sylikc Aug 28, 2022
0294842
fix documentation about "utf-8" reported in issue #58
sylikc Nov 2, 2022
2026c75
Speed operations on large responses
prutschman Nov 30, 2022
7689db1
modified a bit of the styling using double-quotes instead of single-q…
sylikc Dec 30, 2022
9ab9d77
Change workflow to explicitly use ubuntu-20.04 instead of ubuntu-late…
sylikc Dec 30, 2022
9f053b1
add in python 3.10 and 3.11 into the test, since it should be supported
sylikc Dec 30, 2022
53f552d
Speed operations on large responses.
sylikc Dec 30, 2022
846e755
Attempt to fix the github action for 3.10 becoming 3.1 by using quotes
sylikc Dec 30, 2022
a2bc2d8
Wrong indent level for the example in README.rst
sylikc Dec 30, 2022
6716ee8
update typing for execute_json() and some documentation changes relat…
sylikc Dec 30, 2022
7c59336
Update version to 0.5.5 and update CHANGELOG to reflect changes.
sylikc Dec 30, 2022
7dd0553
ExifTool - remove automatic ujson support, but support setting a cust…
sylikc Oct 21, 2023
b8278e8
some light cleanup on ExifToolAlpha
sylikc Oct 22, 2023
e9c1201
workflow add in [json] to install "supported" processors
sylikc Oct 22, 2023
5ceea6a
add test for float in tags testing, which uses the set_json_loads() m…
sylikc Oct 22, 2023
765b42c
no functional changes:
sylikc Oct 22, 2023
84bf601
Fix a few typing errors and made sure unittest runs properly
sylikc Oct 22, 2023
31800e7
add additional test cases to the float test
sylikc Oct 22, 2023
d3cc6c0
update documentation and write two FAQ articles as to how to use the …
sylikc Oct 22, 2023
d510a94
no functional changes
sylikc Oct 22, 2023
5c3bbbf
Merge the changes to support ExifTool.set_json_loads() for final 0.5.…
sylikc Oct 22, 2023
ce77f6d
in CPython 3.12, instead of freezing in ExifTool.terminate(), it cras…
sylikc Nov 13, 2023
a9f8af8
Documentation updates only. No functional changes.
sylikc Nov 17, 2023
c2d7b9d
Documentation and formatting updates. No functional changes.
sylikc Nov 17, 2023
e54f96c
add Python 3.12 to GitHub actions
sylikc Nov 17, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/lint-and-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Lint and Test

on: [push, pull_request]

jobs:
build:

runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: [3.6, 3.7, 3.8, 3.9, '3.10', 3.11, 3.12]

env:
exiftool_version: 12.15

steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
# while https://github.com/actions/setup-python recommends using a specific dependency version to use cache
# we'll see if this just uses it in default configuration
# this can't be enabled unless a requirements.txt file exists. PyExifTool doesn't have any hard requirements
#cache: 'pip'
- name: Cache Perl ExifTool Download
# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows
uses: actions/cache@v2
env:
cache-name: cache-perl-exiftool
with:
# path where we would extract the ExifTool source files
path: Image-ExifTool-${{ env.exiftool_version }}
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.exiftool_version }}

- name: Install dependencies
run: |
# don't have to do this on the GitHub runner, it's going to always be the latest
#python -m pip install --upgrade pip
# the setup-python uses it this way instead of calling it via module, so maybe this will cache ...
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

# latest version not yet available on Ubuntu Focal 20.04 LTS, but it's better to install it with all dependencies first
sudo apt-get install -qq libimage-exiftool-perl
# print this in the log
exiftool -ver

# get just the minimum version to build and compile, later we can go with latest version to test
# working with cache: only get if the directory doesn't exist
if [ ! -d Image-ExifTool-${{ env.exiftool_version }} ]; then wget http://backpan.perl.org/authors/id/E/EX/EXIFTOOL/Image-ExifTool-${{ env.exiftool_version }}.tar.gz; fi
# extract if it was downloaded
if [ -f Image-ExifTool-${{ env.exiftool_version }}.tar.gz ]; then tar xf Image-ExifTool-${{ env.exiftool_version }}.tar.gz; fi

cd Image-ExifTool-${{ env.exiftool_version }}/

# https://exiftool.org/install.html#Unix
perl Makefile.PL
make test

export PATH=`pwd`:$PATH
cd ..
exiftool -ver

# save this environment for subsequent steps
# https://brandur.org/fragments/github-actions-env-vars-in-env-vars
echo "PATH=`pwd`:$PATH" >> $GITHUB_ENV
- name: Install pyexiftool
run: |
# install all supported json processors for tests
python -m pip install .[json,test]
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
pytest
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,14 @@ __pycache__/
build/
dist/
MANIFEST

*.egg-info/

# pytest-cov db
.coverage

# tests will be made to write to temp directories with this prefix
tests/exiftool-tmp-*

# IntelliJ
.idea
71 changes: 71 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

55 changes: 55 additions & 0 deletions COMPATIBILITY.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
PyExifTool does not guarantee source-level compatibility from one release to the next.

That said, efforts will be made to provide well-documented API-level compatibility,
and if there are major API changes, migration documentation will be provided, when
possible.

----

v0.1.x - v0.2.0 = smarnach code, API compatible
v0.2.1 - v0.4.13 = original v0.2 code with all PRs, a superset of functionality on Exiftool class
v0.5.0 - = not API compatible with the v0.4.x series. Broke down functionality stability by classes. See comments below:


----
API changes between v0.4.x and v0.5.0:

PYTHON CHANGE: Old: Python 2.6 supported. New: Python 3.6+ required

CHANGED: Exiftool constructor:
RENAME: "executable_" parameter to "executable"
DEFAULT BEHAVIOR: "common_args" defaults to ["-G", "-n"] instead of None. Old behavior set -G and -n if "common_args" is None. New behavior "common_args" = [] if common_args is None.
DEFAULT: Old: "win_shell" defaults to True. New: "win_shell" defaults to False.
NEW: "encoding" parameter
NEW: "logger" parameter

NEW PROPERTY GET/SET: a lot of properties were added to do get/set validation, and parameters can be changed outside of the constructor.

METHOD RENAME: starting the process was renamed from "start" to "run"

MINIMUM TOOL VERSION: exiftool command line utility minimum requirements. Old: 8.60. New: 12.15

ENCODING CHANGE: execute() and execute_json() no longer take bytes, but is guided by the encoding set in constructor/property

ERROR CHANGE: execute_json() when no json was not returned (such as a set metadata operation) => Old: raised an error. New: returns custom ExifToolException

FEATURE REMOVAL: execute_json() no longer detects the '-w' flag being passed used in common_args.
If a user uses this flag, expect no output.
(detection in common_args was clunky anyways because -w can be passed as a per-run param for the same effect)


all methods other than execute() and execute_json() moved to ExifToolHelper or ExifToolAlpha class.

ExifToolHelper adds methods:
get_metadata()
get_tags()

NEW CONVENTION: all methods take "files" first, "tags" second (if needed) and "params" last


ExifToolAlpha adds all remaining methods in an alpha-quality way

NOTE: ExifToolAlpha has not been updated yet to use the new convention, and the edge case code may be removed/changed at any time.
If you depend on functionality provided by ExifToolAlpha, please submit an Issue to start a discussion on cleaning up the code and moving it into ExifToolHelper
----

2 changes: 1 addition & 1 deletion COPYING.BSD
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright 2012 Sven Marnach
Copyright 2012 Sven Marnach, 2019-2023 Kevin M (sylikc)
All rights reserved.

Redistribution and use in source and binary forms, with or without
Expand Down
15 changes: 15 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
PyExifTool <http://github.com/sylikc/pyexiftool>

Copyright 2019-2023 Kevin M (sylikc)
Copyright 2012-2014 Sven Marnach

PyExifTool is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the licence, or
(at your option) any later version, or the BSD licence.

PyExifTool is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See COPYING.GPL or COPYING.BSD for more details.
Loading