Skip to main content

Block development toolkit for UP42

Project description

Block development toolkit for UP42.

Documentation   •   •   Support


  • 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.


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:


The package requires Python > 3.6.

pip install up42-blockutils


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(

        for feat in input_fc["features"]:
  "Processing {feat}...")
            input_path = Path("/tmp/input/") / Path(blockutils.datapath.get_data_path(feat))
            with as src:
                src_win =
                ) = blockutils.datapath.get_output_filename_and_path(
          , postfix="processed"
                dst_meta = src.meta.copy()
                with, "w", **dst_meta) as dst:
                    for win in src_win.windows_regular():
                        exp = ** 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)
      "Processed {out_feat}...")
            return output_fc



For any issues or help please contact us via Email

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

up42-blockutils-1.2.4.tar.gz (2.3 MB view hashes)

Uploaded source

Built Distribution

up42_blockutils-1.2.4-py3-none-any.whl (33.1 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page