Create and Edit a Configuration - Programatically

Specific use case:

  • Double all the formation strength UCS

Recommended work flow:

  • Create a scratch configuration in the web client to use as a data template to edit.
  • Get the configuration data from this scratch configuration via our API. For this case, we will use python alongside the openlab module.
  • Programmatically edit/make the desired changes to this configuration data.
  • Push the edited data to the API

Walkthrough

For the final code, jump to the bottom section

Create a scratch configuration

Go to https://live.openlab.app/ and login into your account.

Click the "New configuration" button on the homepage and a dialog box should appear. Choose the template that is most closely related to your configuration and name it. You will delete this configuration later.

Take note of the configuration id.

Retrieve configuration data

import openlab

# Auto-generated credentials from https://live.openlab.app
username="hols@norceresearch.no"
apikey=""
licenseguid=""

session = openlab.http_client()

Get the data and print it out to inspect it.

# Copy and paste this id from the web client url endpoint
config_id = ""

data = session.configuration_data(config_id)

print(data)

This outputs an unnavigable chunk of text, so we inspect the dictionaries keys to give us a clue and help navigate to where UCS might be.

print(data.keys())

output -> ['Rig', 'Fluids', 'GeoThermal', 'Trajectory', 'DrillString', 'GeoPressure', 'Architecture', 'FormationStrength']

Upon further investigation, we see that FormationStrength is a list of dictionaries, with each dictionary element consisting of a UCS key:value pair.

Let's print out the last element's UCS

# Get the last elements UCS
fs_last = data["FormationStrength"][-1]
ucs_last = fs_last["UCS"]

print(ucs_last)

Edit the data

Now that we have found the data we want to make changes to, we can update it. We will assign the original scratch config data a new value (double the original value).

# Double each UCS
for fs in data["FormationStrength"]:
    fs["UCS"] *= 2

Push the new configuration data

Finally, we create the new configuration by calling the create_configuration(name, data) method, passing in the newly manipulated configuration data.

# Create a new configuration with the edited data
name = "Doubled UCS"
session.create_configuration(name, data)

Now, we have created a new configuration which has double the UCS as the default template. You can verify this by going to the web client and viewing the new configuration.

Final Code

import openlab

# Initialize an openlab session
session = openlab.http_client()

# Get an existing configuration
config_id = "aee5eb03-f550-4c27-81d9-5673cd9b5876"
data = session.configuration_data(config_id)


# Double each UCS
for fs in data["FormationStrength"]:
    fs["UCS"] *= 2

# Create a new configuraition with the edited data
session.create_configuration("New Configuration", data)