https://github.com/accenture/morpheus-data-api
Python client to Morpheus Data API https://apidocs.morpheusdata.com
https://github.com/accenture/morpheus-data-api
Last synced: 11 months ago
JSON representation
Python client to Morpheus Data API https://apidocs.morpheusdata.com
- Host: GitHub
- URL: https://github.com/accenture/morpheus-data-api
- Owner: Accenture
- License: apache-2.0
- Created: 2021-07-22T19:03:09.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-23T01:26:12.000Z (about 3 years ago)
- Last Synced: 2025-04-06T11:51:44.069Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 38.1 KB
- Stars: 2
- Watchers: 7
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# morpheus-data-client
Python client to Morpheus Data API
https://apidocs.morpheusdata.com/
[](https://github.com/Accenture/morpheus-data-api/actions/workflows/tests.yml/)
[](https://codecov.io/gh/Accenture/morpheus-data-api/branch/master)
## Usage ##
```python
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](./tests/data/option_types/foo1.yaml):
```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:
```python
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
```console
$ 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:
```console
$ 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](./tests/data/catalog_items/item1.yaml) for larger example
```console
$ 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
```console
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](./tests/test_morpheus_data_api.py) for examples how this is used.
## License
The license is Apache 2.0, see [LICENSE](./LICENSE) for the details.