Skip to content

Commit ea673ad

Browse files
committed
add clear image metadata option
1 parent 6fc5d49 commit ea673ad

File tree

5 files changed

+47
-1
lines changed

5 files changed

+47
-1
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ Options:
118118
--sentry-url TEXT Sentry URL [env var: SENTRY_URL]
119119
--metrics TEXT Metrics client, should be the full name of a
120120
python module [env var: METRICS_CLIENT]
121+
--clear-image-metadata Clears metadata when loading image
122+
[env var: CLEAR_IMAGE_METADATA]
121123
Memcached store arguments:
122124
--memcached-hosts TEXT Comma separated list of memcached hosts
123125
[env var: MEMCACHED_HOSTS]

remotecv/image.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from PIL import Image as PilImage
44

5+
from remotecv.utils import config
6+
57
PilImage.IGNORE_DECODING_ERRORS = True
68
PilImage.MAXBLOCK = 2**25
79

@@ -23,4 +25,20 @@ def parse_image(self, image_buffer):
2325
img.load()
2426
except IOError:
2527
pass
26-
return img
28+
29+
return self.clear_metadata(img)
30+
31+
def clear_metadata(self, image):
32+
if (
33+
not hasattr(config, "clear_image_metadata")
34+
or not config.clear_image_metadata
35+
):
36+
return image
37+
38+
if hasattr(image, "tag"):
39+
image.tag.clear()
40+
41+
if hasattr(image, "tag_v2"):
42+
image.tag_v2.clear()
43+
44+
return image

remotecv/worker.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,14 @@ def import_modules():
297297
default="remotecv.metrics.logger_metrics",
298298
help="Metrics client, should be the full name of a python module",
299299
)
300+
@optgroup.option(
301+
"--clear-image-metadata",
302+
envvar="CLEAR_IMAGE_METADATA",
303+
show_envvar=True,
304+
is_flag=True,
305+
default=False,
306+
help="Clears metadata when loading image",
307+
)
300308
@optgroup.group("Memcached store arguments")
301309
@optgroup.option(
302310
"--memcached-hosts",
@@ -335,6 +343,7 @@ def main(**params):
335343
config.timeout = params["timeout"]
336344
config.worker_ttl = params["worker_ttl"]
337345
config.prune_dead_members = params["prune_dead_members"]
346+
config.clear_image_metadata = params["clear_image_metadata"]
338347
config.server_port = params["server_port"]
339348
config.log_level = params["level"].upper()
340349
config.loader = import_module(params["loader"])

tests/fixtures/with_metadata.tiff

5.92 KB
Binary file not shown.

tests/test_images.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from preggy import expect
44

5+
from remotecv.utils import config
56
from tests import create_image
67

78

@@ -20,3 +21,19 @@ def test_when_image_is_pallete(self):
2021
image = create_image("pallete.png")
2122
expect(image).Not.to_be_null()
2223
expect(image.size).to_equal((3317, 2083))
24+
25+
def test_should_clear_image_metadata(self):
26+
config.clear_image_metadata = True
27+
image = create_image("with_metadata.tiff")
28+
expect(image).Not.to_be_null()
29+
expect(image.tag).to_equal({})
30+
expect(image.tag_v2).to_equal({})
31+
expect(image.size).to_equal((41, 48))
32+
33+
def test_should_not_clear_image_metadata(self):
34+
config.clear_image_metadata = False
35+
image = create_image("with_metadata.tiff")
36+
expect(image).Not.to_be_null()
37+
expect(image.tag).Not.to_equal({})
38+
expect(image.tag_v2).Not.to_equal({})
39+
expect(image.size).to_equal((41, 48))

0 commit comments

Comments
 (0)