Skip to main content
Skip table of contents

CLI to Python transition

This topic describes using the CLI to understand the Python APIs.

The command-line interface is a direct translation of the web services API to an interactive environment. This allows you to use the CLI to explore functionality with tab completion, integrated help, stronger type checking, and indication of expected types and required fields. When trying to determine how to invoke an operation through the Python API or interpret the results, it is recommended that you first learn how to do the same through the CLI, and then use the provided tools to translate that into Python calls.

Installation

The Delphix Python API is available through PyPI and you may install it with pip.

CODE

pip install delphixpy

Minimum python version

Requiring Version 2.7 and above

Connecting to the Delphix engine

In the Delphix Python API, all operations take an engine object which represents your connection to a Delphix Engine. Here is how you connect to the Delphix Engine using the Python API and acquire the engine object.

CODE

from delphixpy.delphix_engine import DelphixEngineengine = DelphixEngine("delphix-address", "delphix-user", "delphix-password", "DOMAIN")  # Instead of DOMAIN, use SYSTEM if you are using the sysadmin user.

CLI translation to Python

For backward compatibility purposes, delphixpy provides the ability to write integrations against a specific API version. The latest version is always in the root of the package. Writing against the latest version requires you to update your integrations if the API changes in future versions of the API.

Specific API versions can be used by importing the corresponding sub-package. The sub-packages are named after the API versions in the format v<major>_<minor>_<micro> . For example, if you want to look into API 1.5.0, you should be using modules from delphixpy.v1_5_0. Modules from different sub-package versions cannot interact with each other so be careful if you wish to mix API versions in the same code base.

All CLI namespaces have a corresponding Python package in which operations can be accessed. The main Python package is called web. All value objects which can be manipulated or read through the CLI can be found in web.vo.

CODE

delphix> database provision

Is equivalent to:

CODE

from delphixpy.web import databasedatabase.provision(engine, provision_parameters)

The provision_parameters object in this example is an instance of ProvisionParameters which can be found in delphixpy.web.vo. The properties of the object map to the parameters you would need to specify before doing a commit in the CLI provision context.

This is an example of an "operation", as they are invoked on an object. Operations that are invoked on a particular object take a reference to that object.

CODE

delphix> database "dexample" refresh

Is equivalent to (connection code omitted):

CODE

from delphixpy.web import databasedatabase.refresh(engine, "ORACLE_DB_CONTAINER-3", RefreshParameters)

While the CLI uses names to refer to objects, the Python API, just like the web services, use references (ORACLE_DB_CONTAINER-3). Persistent objects (those with a permanent unique identity) have a reference field that is used in all cases to refer to the object. This allows references to remain constant even if objects are renamed.

For the standard CRUD (create, read, update, delete) operations, the mapping is slightly different:

CLI operation

Python API

group list

group.get_all(engine)

group create

group.create(engine, group=

group "dexample" get

group.get(engine, 

group "dexample" update

group.update(engine, , group=)

group "dexample" delete

group.delete(engine, 

Example: creating a group

This is how you can create a group as a fully working example.

CODE

from delphixpy.web import groupfrom delphixpy.web.vo import Groupfrom delphixpy.delphix_engine import DelphixEngineengine = DelphixEngine("delphix-address", "delphix-user", "delphix-password", "DOMAIN")my_group = Group()my_group.name = "My Group"my_group.description = "This is my new group!"group.create(engine, my_group)

Asynchronous mode

The Python API runs by default in synchronous mode. If you would wish to perform operations asynchronously there is a context manager that allows you to do that. If you need to track job progress in asynchronous mode, you can get the reference of the last job started from engine.last_job. When exiting the async context manager, it will wait for all jobs started within the context to finish. You can also clear the job from the context so that you do not wait for its completion or status when exiting the context manager. If a job fails, exceptions.JobError will be thrown.

Here is how you would perform a sync operation on all databases asynchronously.

CODE

from delphixpy.delphix_engine import DelphixEnginefrom delphixpy import job_contextfrom delphixpy.web import databaseengine = DelphixEngine("delphix-address", "delphix-user", "delphix-password", "DOMAIN")all_databases = database.get_all(engine)with job_context.asyncly(engine):    for db in all_databases:        database.sync(engine, db.reference)
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.