Skip to main content

Morpheus Data API Client

Project description

morpheus-data-client

Python client to Morpheus Data API

https://apidocs.morpheusdata.com/

Tests Codecov

Usage

import os
from morpheus_data_api import MorpheusDataApi

os.environ['MORPHEUS_HOST'] = 'somehost.com'
os.environ['MORPHEUS_TOKEN'] = 'foobar'

api = MorpheusDataApi()
type_data = {
    'optionType': {
        'name': 'foo',
        'type': 'text',
        'description': 'foo',
        'fieldLabel': 'foo',
        'fieldName': 'foo'
    }
}

def type_names():
    r = api.call(
        'library/option-types', transform='optionTypes[].name'
    )
    return r

assert 'foo' not in type_names()

api.upsert('library/option-types', 'foo', type_data)
assert 'foo' in type_names()

type_data['optionType']['description'] = 'FOO'
assert api.get('library/option-types', 'foo')['description'] == 'foo'

api.upsert('library/option-types', 'foo', type_data)
assert api.get('library/option-types', 'foo')['description'] == 'FOO'

api.delete('library/option-types', 'foo')
assert 'foo' not in type_names()

Deploy/Undeploy Config

Given a yaml config file tests/data/option_types/foo1.yaml:

$optionType:
  name: foo1
  fieldName: foo1
  type: select
  description: foo1
  fieldLabel: foo1
  optionList:
    id:
      $optionTypeList:
        name: foo1
        type: manual
        initialDataset:
          $dataset:
            - bar
            - baz

It can be deployed/undeployed like so:

import os
from morpheus_data_api import MorpheusDataApi

os.environ['MORPHEUS_HOST'] = 'somehost.com'
os.environ['MORPHEUS_TOKEN'] = 'foobar'

api = MorpheusDataApi()
api.deploy_files('option_types/foo1.yaml')
api.deploy_files('option_types/foo1.yaml', undeploy=True)

Or deployed through the morpheus-data-api console script

$ morpheus-data-api deploy tests/data/option_types/foo1.yaml
created optionTypeList foo1 [14]
created optionType foo1 [1766]
1/1] deployed foo1.yaml
deployed 1/1 file(s)

Then undeployed:

$ morpheus-data-api undeploy tests/data/option_types/foo1.yaml
deleted optionType foo1 [1766]
deleted optionTypeList foo1 [14]
1/1] undeployed foo1.yaml
undeployed 1/1 file(s)

This works by upserting or deleting nested entities in the expected order, and linking referential IDs to the parent object

See tests/data/catalog_items/item1.yaml for larger example

$ morpheus-data-api deploy tests/data/catalog_items/item1.yaml
created task task1 [9]
created optionType item1 [1767]
created optionTypeList item2 [15]
created optionType item2 [1768]
created taskSet item1 [5]
created catalogItemType item1 [3]
created schedule schedule1 [6]
created job job1 [11]
1/1] deployed item1.yaml
deployed 1/1 file(s)

Variables

The following variables are supported within the config file

variable description example
$createPath nested below an $api object, override the path used to create entity $createPath: /api/library/instance-types/${id:instanceTypes:blueprint1.instanceType1}/layouts
$dataset convert list of values to json optionType dataset $dataset: ['foo', 'bar']
$datasetCsv convert contents of local csv file to json optionType dataset $datasetCsv: data.csv
$deleteIds delete additional entities during undeploy $deleteIds: [${id:optionTypes:foo}]
$deletePath nested below an $api object, override the path used to delete entity $deletePath: /api/library/instance-types/${id:instanceTypes:blueprint1.instanceType1}/layouts
$entity nested below an $api object, override entity name $entity: instanceTypeLayout
$entityId nested below an $api object, override entity ID $entityId: key/128/foobar
$fileContent read contents of local file $fileContent: foo.py
$id lookup entity ID from ${id:path:name} expression id: ${id:optionTypes:foo}
$json convert value to JSON $json: [1,2,3]
$setName nested below an $api object, don't automatically set entity name if false $setName: false
$updatePath nested below an $api object, override the path used to update entity $updatePath: /api/library/instance-types/${id:instanceTypes:blueprint1.instanceType1}/layouts
$validate nested below an $api object, disable validation if false $validate: false

Console Script

The morpheus-data-api console script is installed as part of setup.py

usage: morpheus-data-api [-h] [--name NAME] [-q Q] [-y]
                         {deploy,undeploy,get,export} path

Query Morpheus data API and deploy config to it

positional arguments:
  {deploy,undeploy,get,export}
  path                  yaml file, dir of yaml files or api path

optional arguments:
  -h, --help            show this help message and exit
  --name NAME           export name
  -q Q                  jmespath query
  -y                    output in yaml format

MockMorpheusDataApi

Bundled into the package is mock.MockMorpheusDataApi() which provides full persistent mocking of Morpheus API. See tests/test_morpheus_data_api.py for examples how this is used.

License

The license is Apache 2.0, see LICENSE for the details.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

morpheus_data_api-0.0.2-py2.py3-none-any.whl (18.6 kB view hashes)

Uploaded Python 2 Python 3

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