fmu-sumo-uploader

Short introduction

A python class that can be used by Sumo client applications to upload to the Sumo core server.

This is primarily intended for Sumo developers.

The Sumo API is described at https://api.sumo.equinor.com/swagger-ui/

The data model and schema and the component used to create metadata is described at https://fmu-dataio.readthedocs.io/en/latest/datamodel.html

Information on Sumo can be found here

Preconditions

Access

For internal Equinor users: Apply for access to Sumo in Equinor AccessIT, search for Sumo.

Install

For internal Equinor users, this package is included in the Komodo distribution. For other use cases it can be pip installed:

pip install git+https://github.com/equinor/fmu-sumo-uploader.git@main#egg=fmu-sumo-uploader

Initialization

from fmu.sumo import uploader
sumo_connection = uploader.SumoConnection()

Dependencies

sumo-wrapper-python is used for the actual communication with the Sumo core server and handles authentication and network retries.

The fmu-dataio must be used upfront to create the metadata files for each blob file to be uploaded.

Concepts

SumoConnection: The SumoConnection object represents the connection to Sumo, and will handle authentication etc when initiated. This object uses the Sumo python wrapper under the hood.

CaseOnDisk: The CaseOnDisk object represents an ensemble of reservoir model realisations. The object relates to the case metadata. Individual files belonging to the case are represented as FileOnDisk objects.

FileOnDisk: The FileOnDisk object represents a single file in an FMU case, stored on the local disk.

CaseOnJob: Similar to CaseOnDisk, but does not refer to files on disk. Instead uses in-memory structures.

FileOnJob: Similar to FileOnDisk, but uses in-memory structures.

Usage and examples

Workflow for uploading during ERT runs:

HOOK (presim) workflow registering the case:

from fmu.sumo import uploader

# Establish connection to Sumo
connection = sumo.SumoConnection()

# Initiate the case object
case = sumo.CaseOnDisk(
   case_metadata_path="/path/to/case_metadata.yml",
   sumo_connection=sumo_connection
   )

# Register the case on Sumo
# This uploads case metadata to Sumo
case.register()

FORWARD_JOB uploading data (can be repeated multiple times during a workflow):

from fmu.sumo import uploader

# Establish connection to Sumo
connection = sumo.SumoConnection()

# Initiate the case object
case = sumo.CaseOnDisk(
   case_metadata_path="/path/to/case_metadata",
   sumo_connection=sumo_connection
   )

# Add file-objects to the case
case.add_files("/globable/path/to/files/*.gri")

# Upload case data objects (files)
case.upload()

Testing on top of Komodo

The uploader and sim2sumo are both installed under fmu/sumo/. This means that sim2sumo must also be installed to test a new version of the uploader on top of Komodo.

Example: Installing uploader from mybranch on top of Komodo bleeding

< Create a new komodo env from komodo bleeding >
< Activate the new env >

pip install git+https://github.com/equinor/fmu-sumo-uploader.git@mybranch
pip install git+https://github.com/equinor/fmu-sumo-sim2sumo.git

The Explorer is also installed under fmu/sumo. Meaning that if the testing scenario includes the Explorer then it should also be installed on top of Komodo.

pip install git+https://github.com/equinor/fmu-sumo.git