Skip to content

Commit d602113

Browse files
committed
Add CLI image preview download
1 parent 743e6b6 commit d602113

3 files changed

Lines changed: 63 additions & 1 deletion

File tree

opus/cli/cli.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,17 @@ def metadata(argv=None, api=api):
7272
args, others = parser.parse_known_args(argv)
7373

7474
return api.metadata(args.ring_obs_id)
75+
76+
def image(argv=None, api=api):
77+
'''OPUS SETI API images/previews entry point'''
78+
parser = argparse.ArgumentParser(description='Get image for a single observation from OPUS-SETI API')
79+
parser.add_argument('ring_obs_id', help='Valid ring_obs_id')
80+
parser.add_argument('-s', '--size', help='Image size', default='med', choices=['thumb', 'small', 'med', 'full'])
81+
parser.add_argument('-d', '--download', help='Download the image', action='store_true')
82+
parser.add_argument('-o', '--output', help='Output folder/filename for download', default=None)
83+
args, others = parser.parse_known_args(argv)
84+
85+
img = api.image(args.ring_obs_id, size=args.size)
86+
if args.download or args.output is not None:
87+
return img.download(out=args.output)
88+
return img.url

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ addopts = -vv --cov-report term-missing --cov-report html --cov-report xml
3535
console_scripts =
3636
opus = opus.cli:data
3737
opus-meta = opus.cli:metadata
38+
opus-preview = opus.cli:image
3839
opus-vims = opus.cli.cassini:vims

tests/test_cli.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
import pytest
33
import responses
44
import six
5+
import os
56

67
from opus.api import API
7-
from opus.cli import read, data, metadata
8+
from opus.cli import read, data, metadata, image
89

910

1011
@pytest.fixture
@@ -101,3 +102,49 @@ def test_cli_metadata(api):
101102
assert responses.calls[0].response.text == json
102103

103104
assert resp.ring_obs_id == 'S_IMG_CO_ISS_1459551972_N'
105+
106+
107+
@responses.activate
108+
def test_cli_image(api):
109+
img = open('tests/api/image/med/S_IMG_CO_ISS_1459551972_N.json', 'r').read()
110+
responses.add(responses.GET,
111+
'http://localhost/image/med/S_IMG_CO_ISS_1459551972_N.json',
112+
body=img)
113+
114+
argv = ['S_IMG_CO_ISS_1459551972_N', '--size', 'med']
115+
resp = image(argv, api=api)
116+
117+
assert len(responses.calls) == 1
118+
assert responses.calls[0].request.url == 'http://localhost/image/med/S_IMG_CO_ISS_1459551972_N.json'
119+
assert responses.calls[0].response.text == img
120+
121+
assert resp == 'https://pds-rings.seti.org/holdings/previews/COISS_2xxx/COISS_2001/data/1459551663_1459568594/N1459551972_1_med.jpg'
122+
123+
124+
@responses.activate
125+
def test_cli_image_download(api):
126+
fname = 'N1459551972_1_med.jpg'
127+
jpg = 'https://pds-rings.seti.org/holdings/previews/COISS_2xxx/COISS_2001/data/1459551663_1459568594/N1459551972_1_med.jpg'
128+
129+
img = open('tests/api/image/med/S_IMG_CO_ISS_1459551972_N.json', 'r').read()
130+
responses.add(responses.GET,
131+
'http://localhost/image/med/S_IMG_CO_ISS_1459551972_N.json',
132+
body=img)
133+
134+
with open('tests/api/image/med/'+fname, 'rb') as img:
135+
responses.add(responses.GET, jpg,
136+
body=img.read(), status=200,
137+
content_type='image/jpeg',
138+
stream=True
139+
)
140+
141+
argv = ['S_IMG_CO_ISS_1459551972_N', '--output', 'tests/test.jpg']
142+
resp = image(argv, api=api)
143+
144+
assert len(responses.calls) == 2
145+
assert responses.calls[0].request.url == 'http://localhost/image/med/S_IMG_CO_ISS_1459551972_N.json'
146+
assert responses.calls[1].request.url == jpg
147+
148+
assert resp == 'tests/test.jpg'
149+
assert os.path.isfile('tests/test.jpg')
150+
os.remove('tests/test.jpg')

0 commit comments

Comments
 (0)