A simple WITSML client with utilities.
Project description
Jeng
A simple WITSML client with utilities.
Installation
pip install jeng
Getting started
Jeng should be compatible with Python 3.8 and higher.
Client
-
To create and connect to WITSML Server:
from jeng.client import WitsmlClient client = WitsmlClient() # return True if success, else False status = client.connect( url=CONNECTION_URL, username=CONNECTION_USERNAME, password=CONNECTION_PASSWORD, )
-
To call wrapper API (make sure to connect to WTISML Server first):
# send query to WMLS_AddToStore API with open(f"{QUERY_PATH}/query.xml", "r") as query: reply = client.add_to_store( wml_type_in="well", xml_in=query.read(), ) # send query to WMLS_UpdateInStore API with open(f"{QUERY_PATH}/query.xml", "r") as query: reply = client.update_in_store( wml_type_in="well", xml_in=query.read(), ) # send query to WMLS_GetFromStore API with open(f"{QUERY_PATH}/query.xml", "r") as query: reply = client.get_from_store( wml_type_in="well", xml_in=query.read(), return_element="all", ) # send query to WMLS_DeleteFromStore API with open(f"{QUERY_PATH}/query.xml", "r") as query: reply = client.delete_from_store( wml_type_in="well", xml_in=query.read(), ) # string is expected for xml_in and you can # pass string query to all the wrapper API client.add_to_store( wml_type_in="well", xml_in=query_xml_str, )
-
To call other WITSML APIs than provided wrapper APIs (make sure to connect to WTISML Server first):
# send WMLS_GetVersion directly from Jeng client service reply = client.service().WMLS_GetVersion()
Log Query Generator
from jeng import model, generate
# set log basic info
log_basic_info = model.LogBasicInfoModel(
well_uid="WELL_001",
well_name="WELL 001",
wellbore_uid="WELLBORE_001",
wellbore_name="WELLBORE 001",
log_uid="LOG_001",
log_name="LOG 001",
)
# set log curve info
log_curve_info_list = [
model.LogCurveInfoModel(
uid="TIME",
mnemonic="TIME",
unit="s",
curve_description="Time",
type_log_data="date time",
is_index_curve=True,
),
...
]
...
# generate query (make sure to use mnemonic as column name)
query_xml = generate.generate_log_query(
log_basic_info=log_basic_info,
log_curve_info_list=log_curve_info_list,
dataframe=dataframe,
)
Log Reply Parser
from jeng import parse
...
# parse WITSML XMLout reply data into dataframe
dataframe = parse.parse_log_into_dataframe(
xml_out=reply["XMLout"],
)
Test
Make sure to have a WITSML server running for the test.
-
Clone the project:
git clone https://github.com/nazebzurati/jeng.git
-
Prepare environment:
# create environment and activate virtualenv env .\env\Scripts\activate # install development dependencies pip install -e .[dev]
-
Change the source code and test.
# run code formatter isort . --skip env black --line-length 120 . # run coverage and pytest coverage run -m pytest -v coverage run -m pytest -m integration -v # test with WITSML server integration coverage run -m pytest -m unit -v # test without WITSML server integration # run static code test coverage xml && sonar-scanner.bat -D"sonar.projectKey=<project-key>" -D"sonar.sources=." -D"sonar.host.url=<host-url>" -D"sonar.login=<project-token>"
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
jeng-0.0.4.tar.gz
(12.9 kB
view hashes)
Built Distribution
jeng-0.0.4-py3-none-any.whl
(8.3 kB
view hashes)