From b684b13445191847a7bc1d85617695210445ed68 Mon Sep 17 00:00:00 2001 From: hrfuller Date: Wed, 12 Jul 2017 22:37:38 +0000 Subject: [PATCH 1/3] Add method to translate const_ids to products. Remove test which asserts no public bands. fix one test. --- descarteslabs/services/metadata.py | 14 +++++++++++++- descarteslabs/tests/test_metadata.py | 11 +++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/descarteslabs/services/metadata.py b/descarteslabs/services/metadata.py index 0e60c37f..1c0612f0 100644 --- a/descarteslabs/services/metadata.py +++ b/descarteslabs/services/metadata.py @@ -58,9 +58,10 @@ def sources(self): r = self.session.get('/sources') return r.json() - def bands(self, limit=None, products=None, offset=None, wavelength=None, resolution=None, tags=None): + def bands(self, products=None, limit=None, offset=None, wavelength=None, resolution=None, tags=None): """Seach for imagery data bands that you have access to. + :param list(str) products: A list of product(s) to return bands for. :param int limit: Number of results to return. :param int offset: Index to start at when returning results. :param float wavelenth: A wavelength in nm e.g 700 that the band sensor must measure. @@ -118,6 +119,17 @@ def available_products(self): return r.json() + def translate(const_id): + """Translate a deprecated constellation identifier + into a new-style product identifier. + + :param string const_id: The constellation identifier to translate. + """ + + r = self.session.get('/products/translate/{}'.format(const_id)) + + return r.json() + def summary(self, products=None, const_id=None, sat_id=None, date='acquired', part=None, place=None, geom=None, start_time=None, end_time=None, cloud_fraction=None, cloud_fraction_0=None, fill_fraction=None, pixels=None, params=None, diff --git a/descarteslabs/tests/test_metadata.py b/descarteslabs/tests/test_metadata.py index b31644a5..7c46f033 100644 --- a/descarteslabs/tests/test_metadata.py +++ b/descarteslabs/tests/test_metadata.py @@ -61,6 +61,10 @@ def test_cloud_fraction(self): for feature in r['features']: self.assertEqual(feature['properties']['cloud_fraction'], 0.0) + def translate_to_product(self): + r = self.instance.translate('l8') + self.assertEqual(r['product'], 'landsat:LC08:PRE:TOAR') + def test_search_by_product(self): r = self.instance.search(start_time='2016-07-06', end_time='2016-07-07', products=['landsat:LC08:PRE:TOAR']) self.assertGreater(len(r['features']), 0) @@ -178,11 +182,6 @@ def test_search_products(self): r = self.instance.products(limit=1) self.assertEqual(len(r), 1) - def test_search_bands(self): - r = self.instance.bands() - # no bands are publicly available. - self.assertEqual(len(r), 0) - def test_products_get(self): product_id = 'landsat:LC08:PRE:TOAR' r = self.instance.get_product(product_id) @@ -191,7 +190,7 @@ def test_products_get(self): def test_bands_get(self): band_id = 'landsat:LC08:PRE:TOAR:red' try: - self.instance.get_product(band_id) + self.instance.get_band(band_id) except NotFoundError: pass From 0a2a57c89a1b71db3c953106baffa3901cb25830 Mon Sep 17 00:00:00 2001 From: hrfuller Date: Mon, 17 Jul 2017 22:56:33 +0000 Subject: [PATCH 2/3] add derived_bands methods --- descarteslabs/services/metadata.py | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/descarteslabs/services/metadata.py b/descarteslabs/services/metadata.py index 1c0612f0..d6c001d6 100644 --- a/descarteslabs/services/metadata.py +++ b/descarteslabs/services/metadata.py @@ -59,7 +59,7 @@ def sources(self): return r.json() def bands(self, products=None, limit=None, offset=None, wavelength=None, resolution=None, tags=None): - """Seach for imagery data bands that you have access to. + """Search for imagery data bands that you have access to. :param list(str) products: A list of product(s) to return bands for. :param int limit: Number of results to return. @@ -82,6 +82,26 @@ def bands(self, products=None, limit=None, offset=None, wavelength=None, resolut r = self.session.post('/bands/search', json=kwargs) return r.json() + def derived_bands(self, bands=None, limit=None, offset=None): + """Search for predefined derived bands that you have access to. + + :param list(str) bands: A list of source bands that must be part of + the derived band i.e ["nir"] + :param int limit: Number of results to return. + :param int offset: Index to start at when returning results. + """ + params = ['bands', 'limit', 'offset'] + + args = locals() + kwargs = { + param: args[param] + for param in params + if args[param] is not None + } + + r = self.session.post('/bands/derived/search', json=kwargs) + return r.json() + def products(self, bands=None, limit=None, offset=None): """Search products that are available on the platform. @@ -119,7 +139,7 @@ def available_products(self): return r.json() - def translate(const_id): + def translate(self, const_id): """Translate a deprecated constellation identifier into a new-style product identifier. @@ -525,3 +545,12 @@ def get_band(self, band_id): """ r = self.session.get('/bands/%s' % band_id) return r.json() + + def get_derived_band(self, derived_band_id): + """Get information about a single product. + + :param str derived_band_id: Derived band identifier. + + """ + r = self.session.get('/bands/derived/%s' % derived_band_id) + return r.json() From 6ccdbc62829a44f57884e105c2717d6dc2cad4da Mon Sep 17 00:00:00 2001 From: hrfuller Date: Tue, 18 Jul 2017 02:40:36 +0000 Subject: [PATCH 3/3] tests --- descarteslabs/tests/test_metadata.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/descarteslabs/tests/test_metadata.py b/descarteslabs/tests/test_metadata.py index 7c46f033..aa97907c 100644 --- a/descarteslabs/tests/test_metadata.py +++ b/descarteslabs/tests/test_metadata.py @@ -190,10 +190,23 @@ def test_products_get(self): def test_bands_get(self): band_id = 'landsat:LC08:PRE:TOAR:red' try: - self.instance.get_band(band_id) + band = self.instance.get_band(band_id) + self.assertEqual(band_id, band['id']) except NotFoundError: pass + def test_derived_bands_get(self): + band_id = 'derived:ndvi' + try: + d_band = self.instance.get_derived_band(band_id) + self.assertIn('bands', d_band) + except NotFoundError: + pass + + def test_derived_bands_search(self): + bands = ['red', 'nir'] + bands = self.instance.derived_bands(bands=bands) + if __name__ == '__main__': unittest.main()