Skip to content

Commit

Permalink
wip stac reader
Browse files Browse the repository at this point in the history
  • Loading branch information
geospatial-jeff committed Sep 17, 2020
1 parent 76b064d commit 420bcd8
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions aiocogeo/stac.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import asyncio
from dataclasses import dataclass
from typing import List
from urllib.parse import urlsplit

import aiohttp

from .cog import COGReader


@dataclass
class STACReader:
filepath: str
readers: List[COGReader] = None

async def __aenter__(self):
splits = urlsplit(self.filepath)
if splits.scheme in {"http", "https"}:
async with aiohttp.ClientSession() as session:
async with session.get(self.filepath) as resp:
resp.raise_for_status()
item = await resp.json()
else:
# TODO: support s3
pass

reader_futs = []
for asset in item["assets"]:
if item["assets"][asset]["type"] == "image/x.geotiff":
reader = COGReader(item["assets"][asset]["href"]).__aenter__()
reader_futs.append(reader)
self.readers = await asyncio.gather(*reader_futs)
return self

async def __aexit__(self, exc_type, exc_val, exc_tb):
for reader in self.readers:
await reader._file_reader._close()

async def get_tile(self, x: int, y: int, z: int):
futs = [reader.get_tile(x, y, z) for reader in self.readers]
return await asyncio.gather(*futs)

0 comments on commit 420bcd8

Please sign in to comment.