Exemple #1
0
    def test_date_utc_eq(self):
        value = date(2019, 8, 6)
        texas_utc_offset = timezone(timedelta(hours=-6))
        time_filter = utils.pb_timestampfield(
            rel_type=enum.FilterRelationship.EQ,
            value=value,
            tzinfo=texas_utc_offset)

        stac_request = StacRequest(datetime=time_filter, limit=2)

        # get a client interface to the gRPC channel
        for stac_item in client.search(stac_request):
            print("STAC item date, {0}, is before {1}: {2}".format(
                datetime.fromtimestamp(stac_item.observed.seconds,
                                       tz=timezone.utc).isoformat(),
                datetime.fromtimestamp(time_filter.end.seconds,
                                       tz=texas_utc_offset).isoformat(),
                stac_item.observed.seconds < time_filter.end.seconds))

        start = date(2019, 8, 6)
        time_filter = utils.pb_timestampfield(rel_type=FilterRelationship.EQ,
                                              value=start,
                                              tzinfo=timezone(
                                                  timedelta(hours=-6)))
        stac_request = StacRequest(datetime=time_filter, limit=2)
        count = 0
        for _ in client.search(stac_request):
            count += 1

        self.assertEqual(2, count)
Exemple #2
0
    def test_mosaic_parts(self):
        mosaic = Mosaic(
            name="bananas",
            quad_key="stuff",
            provenance_ids=["no one", "wants", "potato", "waffles"])

        self.assertEqual(mosaic.name, "bananas")
        mosaic.observation_range.CopyFrom(
            utils.datetime_range(date(2016, 1, 1), date(2018, 1, 1)))
        d_compare = utils.timezoned(date(2019, 1, 1))
        self.assertGreater(d_compare.timestamp(),
                           mosaic.observation_range.start.seconds)
        self.assertGreater(d_compare.timestamp(),
                           mosaic.observation_range.end.seconds)

        self.assertEqual(mosaic.provenance_ids[0], "no one")
        self.assertEqual(4, len(mosaic.provenance_ids))
        mosaic.provenance_ids.append("and boiled chicken")
        self.assertEqual(5, len(mosaic.provenance_ids))
        mosaic_request = MosaicRequest(name="bananas", quad_key="stuffly")
        self.assertEqual(mosaic_request.name, mosaic.name)
        stac_item = StacItem(mosaic=mosaic)
        self.assertEqual(stac_item.mosaic.name, mosaic.name)

        stac_request = StacRequest(mosaic=mosaic_request)
        self.assertEqual(stac_request.mosaic.name, mosaic.name)
Exemple #3
0
 def test_product_id(self):
     product_id = "LC08_L1TP_027039_20150226_20170228_01_T1"
     stac_request = StacRequest(landsat=LandsatRequest(
         product_id=product_id))
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     self.assertEquals("LC80270392015057LGN01", stac_item.id)
Exemple #4
0
    def test_download_aws(self):
        stac_id = "LC80270392015025LGN00"
        stac_item = client.search_one(stac_request=StacRequest(id=stac_id))
        asset = utils.get_asset(stac_item,
                                asset_type=AssetType.TXT,
                                cloud_platform=CloudPlatform.AWS)
        self.assertIsNotNone(asset)
        with tempfile.TemporaryDirectory() as d:
            print(d)
            file_path = utils.download_asset(asset=asset,
                                             from_bucket=True,
                                             save_directory=d)
            with open(file_path) as f:
                data1 = f.read()

            file_path = utils.download_asset(asset=asset,
                                             from_bucket=True,
                                             save_filename=file_path)
            with open(file_path) as f:
                data2 = f.read()

            self.assertMultiLineEqual(data1, data2)

            with tempfile.NamedTemporaryFile('w+b', delete=False) as f_obj:
                utils.download_asset(asset=asset,
                                     from_bucket=True,
                                     file_obj=f_obj)
                data3 = f_obj.read().decode('ascii')
                self.assertMultiLineEqual(data1, data3)
Exemple #5
0
    def test_download_href(self):
        stac_id = "20190829T173549Z_1799_POM1_ST2_P"
        stac_item = client.search_one(stac_request=StacRequest(id=stac_id))
        asset = utils.get_asset(stac_item, asset_type=AssetType.THUMBNAIL)

        self.assertIsNotNone(asset)

        with tempfile.TemporaryDirectory() as d:
            file_path = utils.download_asset(asset=asset, save_directory=d)
            with open(file_path, 'rb') as f:
                data1 = f.read()

            file_path = utils.download_asset(asset=asset,
                                             save_filename=file_path)
            with open(file_path, 'rb') as f:
                data2 = f.read()

            self.assertEqual(data1, data2)

            with tempfile.NamedTemporaryFile('w+b', delete=False) as file_obj:
                utils.download_asset(asset=asset, file_obj=file_obj)
                data3 = file_obj.read()
                self.assertEqual(data1, data3)

            b = io.BytesIO()
            utils.download_asset(asset=asset, file_obj=b)
            data4 = b.read()
            self.assertEqual(data2, data4)
Exemple #6
0
 def test_basename(self):
     asset_name = 'LO81120152015061LGN00_B2.TIF'
     stac_id = "LO81120152015061LGN00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     asset = utils.get_asset(stac_item, asset_basename=asset_name)
     self.assertIsNotNone(asset)
Exemple #7
0
    def test_query_limits(self):
        # Same geometry as above, but a wkt geometry instead of a geojson
        travis_wkt = "POLYGON((-97.9736 30.6251, -97.9188 30.6032, -97.9243 30.5703, -97.8695 30.5484, -97.8476 " \
                     "30.4717, -97.7764 30.4279, -97.5793 30.4991, -97.3711 30.4170, -97.4916 30.2089, " \
                     "-97.6505 30.0719, -97.6669 30.0665, -97.7107 30.0226, -98.1708 30.3567, -98.1270 30.4279, " \
                     "-98.0503 30.6251)) "
        geometry_data = GeometryData(wkt=travis_wkt,
                                     proj=ProjectionData(epsg=4326))

        limit = 200
        offset = 0
        total = 0
        while total < 1000:
            # make our request
            stac_request = StacRequest(intersects=geometry_data,
                                       limit=limit,
                                       offset=offset)
            # prepare request for next
            offset += limit
            for stac_item in client.search(stac_request):
                total += 1
                # do cool things with data here
            if total % limit == 0:
                print("stac item id: {0} at {1} index in request".format(
                    stac_item.id, total))
        self.assertEqual(total, 1000)
Exemple #8
0
    def test_wrs_row_path(self):
        wrs_path = 27
        wrs_row = 38

        stac_request = StacRequest(
            landsat=LandsatRequest(wrs_path=wrs_path, wrs_row=wrs_row))
        stac_item = client.search_one(stac_request)
        self.assertNotEqual(len(stac_item.id), 0)
Exemple #9
0
 def test_thumbnail(self):
     stac_id = 'LO81120152015061LGN00'
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     asset = utils.get_asset(stac_item,
                             asset_type=AssetType.THUMBNAIL,
                             cloud_platform=CloudPlatform.AWS)
     self.assertIsNotNone(asset)
    def __init__(self,
                 stac_request: StacRequest = None,
                 properties_constructor=None,
                 id: str = ""):
        if stac_request is None:
            stac_request = StacRequest(id=id)

        super().__init__(stac_request, properties_constructor)
Exemple #11
0
 def test_date_GT_OR_EQ(self):
     bd = date(2015, 11, 3)
     observed_range = TimestampField(value=utils.pb_timestamp(bd),
                                     rel_type=FieldRelationship.GT_OR_EQ)
     stac_request = StacRequest(observed=observed_range)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     self.assertLessEqual(
         utils.pb_timestamp(bd).seconds, stac_item.datetime.seconds)
Exemple #12
0
 def test_datetime_GT(self):
     bdt = datetime(2015, 11, 3, 1, 1, 1, tzinfo=timezone.utc)
     observed_range = TimestampFilter(value=utils.pb_timestamp(bdt),
                                      rel_type=FilterRelationship.GT)
     stac_request = StacRequest(observed=observed_range)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     self.assertLessEqual(
         utils.pb_timestamp(bdt).seconds, stac_item.datetime.seconds)
Exemple #13
0
 def test_basename(self):
     asset_name = r'.*LO81120152015061LGN00_B2\.TIF$'
     stac_id = "LO81120152015061LGN00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     asset = utils.get_asset(stac_item,
                             asset_regex={'object_path': asset_name},
                             cloud_platform=CloudPlatform.AWS)
     self.assertIsNotNone(asset)
Exemple #14
0
 def test_date_LT_OR_EQ(self):
     bd = date(2014, 11, 3)
     observed_range = utils.pb_timestampfield(
         rel_type=FilterRelationship.LTE, value=bd)
     stac_request = StacRequest(observed=observed_range,
                                mission_enum=enum.Mission.NAIP)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     self.assertLessEqual(
         utils.pb_timestamp(bd).seconds, stac_item.datetime.seconds)
Exemple #15
0
 def test_aws(self):
     stac_id = "LC80270392015025LGN00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     count = 0
     for key, asset in stac_item.assets.items():
         if asset.cloud_platform == CloudPlatform.AWS:
             print(asset.object_path)
             count += 1
     self.assertEquals(29, count)
Exemple #16
0
    def test_download_geotiff(self):
        stac_request = StacRequest(id='20190822T183518Z_746_POM1_ST2_P')

        stac_item = client.search_one(stac_request)

        # get the Geotiff asset from the assets map
        asset = utils.get_asset(stac_item, asset_type=enum.AssetType.GEOTIFF)

        with tempfile.TemporaryDirectory() as d:
            file_path = utils.download_asset(asset=asset, save_directory=d)
            print("{0} has {1} bytes".format(os.path.basename(file_path),
                                             os.path.getsize(file_path)))
Exemple #17
0
 def test_L1TP(self):
     stac_id = "LT51560171989121KIS00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     aws_count, gcp_count = 0, 0
     for key, asset in stac_item.assets.items():
         if asset.cloud_platform == CloudPlatform.AWS:
             aws_count += 1
         else:
             print(asset.object_path)
             gcp_count += 1
     self.assertEquals(0, aws_count)
     self.assertEquals(20, gcp_count)
Exemple #18
0
 def test_L8_processed_id_2(self):
     stac_id = "LC81262052018263LGN00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     aws_count, gcp_count = 0, 0
     for key, asset in stac_item.assets.items():
         if asset.cloud_platform == CloudPlatform.AWS:
             aws_count += 1
             print(asset.object_path)
         else:
             gcp_count += 1
     self.assertEquals(42, aws_count)
     self.assertEquals(14, gcp_count)
Exemple #19
0
 def test_L1GT(self):
     stac_id = "LE70080622016239EDC00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request)
     self.assertIsNotNone(stac_item)
     aws_count, gcp_count = 0, 0
     for key, asset in stac_item.assets.items():
         if asset.cloud_platform == CloudPlatform.AWS:
             aws_count += 1
         else:
             print(asset.object_path)
             gcp_count += 1
     self.assertEquals(0, aws_count)
     self.assertEquals(22, gcp_count)
Exemple #20
0
 def test_datetime_not_range(self):
     start = datetime(2013, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     end = datetime(2014, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     observed_range = TimestampField(start=utils.pb_timestamp(start),
                                     stop=utils.pb_timestamp(end),
                                     rel_type=FieldRelationship.NOT_BETWEEN)
     stac_request = StacRequest(observed=observed_range, limit=5)
     for stac_item in client.search(stac_request):
         print(
             datetime.fromtimestamp(stac_item.datetime.seconds,
                                    tz=timezone.utc))
         self.assertTrue(
             utils.pb_timestamp(end).seconds < stac_item.datetime.seconds or
             utils.pb_timestamp(start).seconds > stac_item.datetime.seconds)
Exemple #21
0
 def test_datetime_range(self):
     start = datetime(2013, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     end = datetime(2014, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     observed_range = TimestampFilter(start=utils.pb_timestamp(start),
                                      end=utils.pb_timestamp(end),
                                      rel_type=FilterRelationship.BETWEEN)
     stac_request = StacRequest(observed=observed_range, limit=5)
     for stac_item in client.search(stac_request):
         print(
             datetime.fromtimestamp(stac_item.datetime.seconds,
                                    tz=timezone.utc))
         self.assertGreaterEqual(
             utils.pb_timestamp(end).seconds, stac_item.datetime.seconds)
         self.assertLessEqual(
             utils.pb_timestamp(start).seconds, stac_item.datetime.seconds)
Exemple #22
0
 def test_datetime_not_range_desc(self):
     start = datetime(2013, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     end = datetime(2014, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
     observed_range = TimestampField(start=utils.pb_timestamp(start),
                                     stop=utils.pb_timestamp(end),
                                     rel_type=FieldRelationship.NOT_BETWEEN,
                                     sort_direction=enum.SortDirection.DESC)
     stac_request = StacRequest(observed=observed_range, limit=5)
     count = 0
     for stac_item in client.search(stac_request):
         count += 1
         print(
             datetime.fromtimestamp(stac_item.datetime.seconds,
                                    tz=timezone.utc))
         self.assertTrue(
             utils.pb_timestamp(end).seconds < stac_item.datetime.seconds)
     self.assertEqual(count, 5)
Exemple #23
0
    def test_OLI(self):
        stac_id = "LO81120152015061LGN00"
        stac_request = StacRequest(id=stac_id)
        stac_item = client.search_one(stac_request)
        asset = utils.get_asset(stac_item,
                                eo_bands=Band.BLUE,
                                cloud_platform=CloudPlatform.GCP)
        self.assertIsNotNone(asset)
        asset = utils.get_asset(stac_item,
                                eo_bands=Band.BLUE,
                                asset_type=enum.AssetType.GEOTIFF,
                                cloud_platform=CloudPlatform.AWS)
        self.assertIsNotNone(asset)

        asset = utils.get_asset(stac_item,
                                eo_bands=Band.LWIR_1,
                                cloud_platform=CloudPlatform.GCP)
        self.assertIsNone(asset)
        asset = utils.get_asset(stac_item,
                                eo_bands=Band.LWIR_1,
                                cloud_platform=CloudPlatform.AWS)
        self.assertIsNone(asset)

        asset = utils.get_asset(stac_item,
                                eo_bands=Band.CIRRUS,
                                cloud_platform=CloudPlatform.GCP)
        self.assertIsNotNone(asset)
        asset = utils.get_asset(stac_item,
                                eo_bands=Band.CIRRUS,
                                cloud_platform=CloudPlatform.AWS,
                                asset_type=enum.AssetType.GEOTIFF)
        self.assertIsNotNone(asset)

        aws_count, gcp_count = 0, 0
        for key, asset in stac_item.assets.items():
            if asset.cloud_platform == CloudPlatform.AWS:
                print(asset.object_path)
                aws_count += 1
            else:
                # print(asset.object_path)
                gcp_count += 1
        self.assertEquals(25, aws_count)
        self.assertEquals(12, gcp_count)
Exemple #24
0
    def test_download_aws_href(self):
        stac_id = 'LC80270392015025LGN00'
        stac_item = client.search_one(stac_request=StacRequest(id=stac_id))
        asset = utils.get_asset(stac_item,
                                asset_type=AssetType.THUMBNAIL,
                                asset_regex={"asset_key": ".*_2$"},
                                cloud_platform=enum.CloudPlatform.AWS)
        self.assertIsNotNone(asset)

        with tempfile.TemporaryDirectory() as d:
            file_path = utils.download_asset(asset=asset, save_directory=d)
            with open(file_path, 'rb') as f:
                data1 = f.read()

            file_path = utils.download_asset(asset=asset,
                                             save_filename=file_path)
            with open(file_path, 'rb') as f:
                data2 = f.read()

            self.assertEqual(data1, data2)
Exemple #25
0
    def test_2000(self):
        start = datetime(1999, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
        end = datetime(1999, 4, 6, 12, 52, 59, tzinfo=timezone.utc)
        observed_range = utils.pb_timestampfield(
            rel_type=FilterRelationship.BETWEEN, start=start, end=end)

        stac_request = StacRequest(observed=observed_range,
                                   limit=20,
                                   landsat=LandsatRequest())
        for stac_item in client.search(stac_request):
            self.assertEqual(Mission.LANDSAT, stac_item.mission_enum)
            print(
                datetime.fromtimestamp(stac_item.datetime.seconds,
                                       tz=timezone.utc))
            self.assertGreaterEqual(
                utils.pb_timestamp(end).seconds, stac_item.datetime.seconds)
            self.assertLessEqual(
                utils.pb_timestamp(start).seconds, stac_item.datetime.seconds)

        self.assertEquals(2728, client.count(stac_request))
Exemple #26
0
 def test_has_asset(self):
     stac_id = "LO81120152015061LGN00"
     stac_request = StacRequest(id=stac_id)
     stac_item = client.search_one(stac_request=stac_request)
     for key in stac_item.assets:
         asset = stac_item.assets[key]
         self.assertTrue(utils.has_asset(stac_item, asset))
         garbage = Asset(href="pie")
         self.assertFalse(utils.has_asset(stac_item, garbage))
         garbage.asset_type = asset.asset_type
         self.assertFalse(utils.has_asset(stac_item, garbage))
         garbage.href = asset.href
         garbage.bucket = asset.bucket
         garbage.type = asset.type
         garbage.eo_bands = asset.eo_bands
         garbage.cloud_platform = asset.cloud_platform
         garbage.bucket_manager = asset.bucket_manager
         garbage.bucket_region = asset.bucket_region
         garbage.object_path = asset.object_path
         self.assertTrue(utils.has_asset(stac_item, garbage))
Exemple #27
0
    def test_count_more(self):
        start = datetime(2014, 4, 1, 12, 45, 59, tzinfo=timezone.utc)
        end = datetime(2014, 4, 1, 12, 52, 59, tzinfo=timezone.utc)
        observed_range = TimestampFilter(start=utils.pb_timestamp(start),
                                         end=utils.pb_timestamp(end),
                                         rel_type=FilterRelationship.BETWEEN)

        stac_request = StacRequest(observed=observed_range,
                                   limit=40,
                                   landsat=LandsatRequest())
        for stac_item in client.search(stac_request):
            self.assertEquals(Mission.LANDSAT, stac_item.mission_enum)
            print(
                datetime.fromtimestamp(stac_item.datetime.seconds,
                                       tz=timezone.utc))
            self.assertGreaterEqual(
                utils.pb_timestamp(end).seconds, stac_item.datetime.seconds)
            self.assertLessEqual(
                utils.pb_timestamp(start).seconds, stac_item.datetime.seconds)

        self.assertEquals(12, client.count(stac_request))
Exemple #28
0
 def test_count(self):
     stac_id = "LC81262052018263LGN00"
     stac_request = StacRequest(id=stac_id)
     number = client.count(stac_request)
     self.assertEquals(1, number)