Block development toolkit for UP42
Project description
Block development toolkit for UP42.
Documentation • UP42.com • Support
Highlights
- Python package with utilities to build blocks in UP42.
- For UP42 partners and customers interested in creating blocks!
- Base classes for data and processing blocks.
- Facilities to easily create tests, ensuring production ready blocks.
Overview
The UP42 blockutils
package provides several modules with specific concerns:
- Blocks: Base classes for data and processing blocks.
- Common: Directory and query/parameter input handling.
- Logging: Standard logging facility.
- Data Path: Input and output file handling.
- E2E: Utility class to create end-to-end tests.
- Exceptions: Shared exceptions between blocks.
- Format: Exotic file handling (DIMAP and NETCDF).
- Raster: Raster handling methods.
- Geometry: Generic recurrent geometry operations.
- Windows: Raster windowed read and write helper, useful for large file handling.
- STAC: Handling STAC type queries.
- WMTS: Helper for downloading, processing and merging tiles.
See the full code reference here.
Docker image
In order to make development of blocks easier, we have made available a public blockutils
base image that you can use in your Dockerfile
. Check out the
DockerHub page
for the up42/up42-blockutils-py37
image.
Template repositories
For your convenience, we have created two template repositories hosted on GitHub
that include this package and generic make
utilities for building and pushing blocks:
Install
The package requires Python > 3.6.
pip install up42-blockutils
Quickstart
The example below shows a minimal processing block that takes a raster file and returns
the raster values to the power of 2. In this example we make use of the logging
,
blocks
, exceptions
, datapath
and windows
modules.
from pathlib import Path
import rasterio as rio
from geojson import FeatureCollection, Feature
import blockutils
logger = blockutils.logging.get_logger(__name__)
class AProcessingBlock(blockutils.blocks.ProcessingBlock):
def process(self, input_fc: FeatureCollection) -> FeatureCollection:
output_fc = FeatureCollection([])
if not input_fc.features:
raise blockutils.exceptions.UP42Error(
blockutils.exceptions.SupportedErrors.NO_INPUT_ERROR
)
for feat in input_fc["features"]:
logger.info(f"Processing {feat}...")
input_path = Path("/tmp/input/") / Path(blockutils.datapath.get_data_path(feat))
with rio.open(input_path) as src:
src_win = blockutils.windows.WindowsUtil(src)
(
output_name,
output_path,
) = blockutils.datapath.get_output_filename_and_path(
input_path.name, postfix="processed"
)
dst_meta = src.meta.copy()
with rio.open(output_path, "w", **dst_meta) as dst:
for win in src_win.windows_regular():
exp = src.read(window=win) ** 2
dst.write(exp, window=win)
out_feat = Feature(bbox=feat.bbox, geometry=feat.geometry)
out_feat["properties"] = self.get_metadata(feat)
out_feat = blockutils.datapath.set_data_path(out_feat, output_name)
logger.info(f"Processed {out_feat}...")
output_fc.features.append(out_feat)
return output_fc
AProcessingBlock().run()
Support
For any issues or help please contact us via Email support@up42.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for up42-blockutils-1.2.0.dev1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f02412d721b49fa4026d7780766f4d1232bdef1f27daee47899c7a9ad8c4df1 |
|
MD5 | d9432c624a62bab40d9cc6f4a11e60ed |
|
BLAKE2b-256 | 735563ae98a52c2c3d6669a8ddc473f4803c51d816814b01f90cc86e6ffeb0c0 |
Hashes for up42_blockutils-1.2.0.dev1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ec48c01e671f42b582a7e9fb387314f8982815bd1c19909a6a343fbe2ab202d |
|
MD5 | cbb686fb32d014321978dc271b7e6a83 |
|
BLAKE2b-256 | 31d591d47596a896e1980a3d4d55e9c7b27b87306886e7315c6da8b19bb726e7 |