Skip to content

Commit 778b735

Browse files
committed
add download_assets functions + tests
1 parent 8b449d4 commit 778b735

File tree

4 files changed

+44
-4
lines changed

4 files changed

+44
-4
lines changed

satstac/item.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,15 @@ def substitute(self, string):
123123
subs[key] = self[key.replace('_colon_', ':')]
124124
return Template(string).substitute(**subs)
125125

126+
def download_assets(self, keys=None, **kwargs):
127+
""" Download multiple assets """
128+
if keys is None:
129+
keys = self.data['assets'].keys()
130+
filenames = []
131+
for key in keys:
132+
filenames.append(self.download(key, **kwargs))
133+
return filenames
134+
126135
def download(self, key, overwrite=False, path='', filename='${id}', requestor_pays=False):
127136
""" Download this key (e.g., a band, or metadata file) from the scene """
128137
asset = self.asset(key)

satstac/items.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ def filter(self, key, values):
118118
items += list(filter(lambda x: x[key] == val, self._items))
119119
self._items = items
120120

121+
def download_assets(self, *args, **kwargs):
122+
filenames = []
123+
for i in self._items:
124+
fnames = i.download_assets(*args, **kwargs)
125+
if len(fnames) > 0:
126+
filenames.append(fnames)
127+
return filenames
128+
121129
def download(self, *args, **kwargs):
122130
""" Download all Items """
123131
dls = []

test/test_item.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,13 @@ def test_download(self):
9797
fname = item.download(key='MTL', path=self.path)
9898
assert(os.path.exists(fname))
9999

100+
def test_download_assets(self):
101+
""" Retrieve multiple data files """
102+
item = Item.open(self.filename)
103+
fnames = item.download_assets(keys=['MTL', 'ANG'], path=self.path)
104+
for f in fnames:
105+
assert(os.path.exists(f))
106+
100107
def test_download_nonexist(self):
101108
""" Test downloading of non-existent file """
102109
item = Item.open(self.filename)

test/test_items.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@
22
import unittest
33

44
from satstac import Items, Item
5+
from shutil import rmtree
56

67
testpath = os.path.dirname(__file__)
78

89

910
class Test(unittest.TestCase):
1011

12+
path = os.path.join(testpath, 'test-item')
13+
14+
@classmethod
15+
def tearDownClass(cls):
16+
""" Remove test files """
17+
if os.path.exists(cls.path):
18+
rmtree(cls.path)
19+
1120
def load_items(self):
1221
return Items.load(os.path.join(testpath, 'items.json'))
1322

@@ -89,14 +98,21 @@ def test_filter(self):
8998
items.filter('eo:cloud_cover', [100])
9099
assert(len(items) == 1)
91100

101+
def test_download_assets(self):
102+
""" Download multiple assets from all items """
103+
items = self.load_items()
104+
filenames = items.download_assets(keys=['MTL', 'ANG'], path=self.path)
105+
assert(len(filenames) == 2)
106+
for fnames in filenames:
107+
assert(len(fnames) == 2)
108+
for f in fnames:
109+
assert(os.path.exists(f))
110+
92111
def test_download(self):
93112
""" Download a data file from all items """
94113
items = self.load_items()
95114

96-
fnames = items.download(key='MTL')
115+
fnames = items.download(key='MTL', path=self.path)
97116
assert(len(fnames) == 2)
98117
for f in fnames:
99118
assert(os.path.exists(f))
100-
os.remove(f)
101-
assert(not os.path.exists(f))
102-
#shutil.rmtree(os.path.join(testpath, 'landsat-8-l1'))

0 commit comments

Comments
 (0)