diff options
| author | jvoisin | 2019-10-12 16:13:49 -0700 |
|---|---|---|
| committer | jvoisin | 2019-10-12 16:13:49 -0700 |
| commit | 5f0b3beb46d09af26107fe5f80e63ddccb127a59 (patch) | |
| tree | f3d46e6e9dac60daa304d212bed62b17c019f7eb /libmat2/exiftool.py | |
| parent | 3cef7fe7fc81c1495a461a8594b1df69467536ea (diff) | |
Add a way to disable the sandbox
Due to bubblewrap's pickiness, mat2 can now be run
without a sandbox, even if bubblewrap is installed.
Diffstat (limited to 'libmat2/exiftool.py')
| -rw-r--r-- | libmat2/exiftool.py | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/libmat2/exiftool.py b/libmat2/exiftool.py index 024f490..89081e2 100644 --- a/libmat2/exiftool.py +++ b/libmat2/exiftool.py | |||
| @@ -2,10 +2,11 @@ import functools | |||
| 2 | import json | 2 | import json |
| 3 | import logging | 3 | import logging |
| 4 | import os | 4 | import os |
| 5 | import subprocess | ||
| 5 | from typing import Dict, Union, Set | 6 | from typing import Dict, Union, Set |
| 6 | 7 | ||
| 7 | from . import abstract | 8 | from . import abstract |
| 8 | from . import subprocess | 9 | from . import bubblewrap |
| 9 | 10 | ||
| 10 | # Make pyflakes happy | 11 | # Make pyflakes happy |
| 11 | assert Set | 12 | assert Set |
| @@ -19,9 +20,13 @@ class ExiftoolParser(abstract.AbstractParser): | |||
| 19 | meta_allowlist = set() # type: Set[str] | 20 | meta_allowlist = set() # type: Set[str] |
| 20 | 21 | ||
| 21 | def get_meta(self) -> Dict[str, Union[str, dict]]: | 22 | def get_meta(self) -> Dict[str, Union[str, dict]]: |
| 22 | out = subprocess.run([_get_exiftool_path(), '-json', self.filename], | 23 | if self.sandbox: |
| 23 | input_filename=self.filename, | 24 | out = bubblewrap.run([_get_exiftool_path(), '-json', self.filename], |
| 24 | check=True, stdout=subprocess.PIPE).stdout | 25 | input_filename=self.filename, |
| 26 | check=True, stdout=subprocess.PIPE).stdout | ||
| 27 | else: | ||
| 28 | out = subprocess.run([_get_exiftool_path(), '-json', self.filename], | ||
| 29 | check=True, stdout=subprocess.PIPE).stdout | ||
| 25 | meta = json.loads(out.decode('utf-8'))[0] | 30 | meta = json.loads(out.decode('utf-8'))[0] |
| 26 | for key in self.meta_allowlist: | 31 | for key in self.meta_allowlist: |
| 27 | meta.pop(key, None) | 32 | meta.pop(key, None) |
| @@ -48,9 +53,12 @@ class ExiftoolParser(abstract.AbstractParser): | |||
| 48 | '-o', self.output_filename, | 53 | '-o', self.output_filename, |
| 49 | self.filename] | 54 | self.filename] |
| 50 | try: | 55 | try: |
| 51 | subprocess.run(cmd, check=True, | 56 | if self.sandbox: |
| 52 | input_filename=self.filename, | 57 | bubblewrap.run(cmd, check=True, |
| 53 | output_filename=self.output_filename) | 58 | input_filename=self.filename, |
| 59 | output_filename=self.output_filename) | ||
| 60 | else: | ||
| 61 | subprocess.run(cmd, check=True) | ||
| 54 | except subprocess.CalledProcessError as e: # pragma: no cover | 62 | except subprocess.CalledProcessError as e: # pragma: no cover |
| 55 | logging.error("Something went wrong during the processing of %s: %s", self.filename, e) | 63 | logging.error("Something went wrong during the processing of %s: %s", self.filename, e) |
| 56 | return False | 64 | return False |
