Requesting Resources¶
The next examples follow the order from the API documentation.
Credentials can be created via the Mopinion Suite at Integrations » Feedback API in the classic interface or in the Raspberry interface, provided your package includes API access.
You can also take a look at this
link
with the steps to get private_key
and public_key
General¶
API Docs for General.
After installation, open a python terminal and set the public_key
, and private_key
, you can set them as
environment vars.
>>> from mopinion import MopinionClient
>>> PUBLIC_KEY = os.environ.get("YOUR_PUBLIC_KEY")
>>> PRIVATE_KEY = os.environ.get("YOUR_PRIVATE_KEY")
>>> SIGNATURE_TOKEN = os.environ.get("YOUR_SIGNATURE_TOKEN")
A token signature is retrieved from the API and set to signature_token
attribute.
>>> client = MopinionClient(public_key=PUBLIC_KEY, private_key=PRIVATE_KEY)
>>> assert SIGNATURE_TOKEN == client.signature_token # client requests the signature token
To see the availability of the API you can call is_available()
.
>>> assert client.is_available()
>>> r = client.is_available(verbose=True)
>>> assert r["code"] == 200 and r["response"] == "pong" and r["version"] == "2.0.0"
Examples with mopinion_client.MopinionClient.resource
¶
This set of examples use the method resource
from the MopinionClient
.
Note
In case that deletion is available for a specific resource there is an option of simulating
the request, adding a query parameter dry-run
to the request URL.
The response will return the resources that would be affected by the request.
Resource Account¶
API Docs for Account.
Get your account.
>>> response = client.resource(resource_name=client.RESOURCE_ACCOUNT)
>>> assert response.json()["_meta"]["code"] == 200
>>> print(response.json())
{'name': 'Mopinion', 'package': 'Growth', 'enddate': '2021-02-13 00:00:00', 'number_users': 10, ...
Get your account in YAML format.
>>> import yaml
>>> response = client.resource("account", content_negotiation=client.CONTENT_YAML)
>>> r = yaml.safe_load(response.text)
>>> assert r["_meta"]["code"] == 200
When requesting with verbosity='quiet'
no _meta
info is returned.
>>> response = client.resource("account", verbosity=client.VERBOSITY_QUIET)
>>> assert "_meta" not in response.json()
Resource Deployments¶
API Docs for Deployments.
Getting deployments.
>>> response = client.resource(resource_name=client.RESOURCE_DEPLOYMENTS)
>>> assert response.json()["_meta"]["code"] == 200
>>> response.json()
{'0': {'key': 'defusvnns6mkl2vd3wc0wgcjh159uh3j', 'name': 'Web Feedback Deployment'}, '_meta':...
Add a new deployment to your account.
>>> body = {"key": "key", "name": "My Test Deployment"}
>>> response = client.resource("deployments", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
>>> response.json()
{'key': 'key', 'name': 'My Test Deployment', '_meta': {'co...
Deleting a deployment.
>>> response = client.resource(client.RESOURCE_DEPLOYMENTS, "abt34", method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> response.json()
{'executed': True, 'resources_affected': {'deployments': ['mydeploymentk...
>>> response = client.resource(client.RESOURCE_DEPLOYMENTS, "abt34", method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
{'executed': False, 'resources_affected': {'deployments': ['mydeploymentk...
Resource Datasets¶
API Docs for Datasets.
Getting a dataset.
>>> response = client.resource(resource_name=client.RESOURCE_DATASETS, resource_id=1234)
>>> assert response.json()["_meta"]["code"] == 200
Updating a dataset.
>>> body = {"name": "My updated name", "description": "My updated description"}
>>> response = client.resource("datasets", resource_id=1234, method="PUT", body=body)
>>> assert response.json()["_meta"]["code"] == 200
Deleting a dataset.
>>> response = client.resource("datasets", resource_id=1234, method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> assert response.json()["executed"]
>>> response = client.resource("datasets", resource_id=1234, method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
Add a new dataset to a report.
>>> body = {"name": "Web care performance", "report_id": "854", "description": "Historic data import"}
>>> response = client.resource("datasets", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
Get fields for a dataset.
>>> response = client.resource("datasets", 1234, "fields")
>>> assert response.json()["_meta"]["code"] == 200
Resource Fields¶
API Docs for Fields.
Get fields for a dataset.
>>> response = client.resource("datasets", 1234, "fields")
>>> assert response.json()["_meta"]["code"] == 200
Get fields for a report.
>>> response = client.resource("reports", 1234, "fields")
>>> assert response.json()["_meta"]["code"] == 200
Resource Feedback¶
API Docs for Feedback.
Note
There are three query parameters available for this resource.
limit (int <= 100) Maximum number of results in response/
page (int) Return result page.
filter (string) Filter feedback results. Click here for more info about filters.
Get feedback from a dataset.
>>> params = {"page": 1}
>>> response = client.resource("datasets", 1234, "feedback", "abt34", query_params=params)
>>> assert response.json()["_meta"]["code"] == 200
Get feedback for a report.
>>> params = {"limit": 50, "filter[ces]": "3"}
>>> response = client.resource("reports", 1234, "feedback", "abt34", query_params=params)
>>> assert response.json()["_meta"]["code"] == 200
Resource Reports¶
API Docs for Reports.
Get some basic info on a report.
>>> response = client.resource("reports", 1234)
>>> assert response.json()["_meta"]["code"] == 200
Update an existing report.
>>> body = {"name": "Customer Support", "description": "Support related", "language": "en_US"}
>>> response = client.resource("reports", resource_id=1234, method="PUT", body=body)
>>> assert response.json()["_meta"]["code"] == 200
And deleting a report.
>>> response = client.resource("reports", resource_id=1234, method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> assert response.json()["executed"]
>>> response = client.resource("reports", resource_id=1234, method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
Add a new report to the account.
>>> body = {"name": "Customer Support", "description": "Support related", "language": "en_US"}
>>> response = client.resource("reports", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
Examples with mopinion_client.MopinionClient.request
¶
This set of examples use the method request
from the MopinionClient
.
Note
In case that deletion is available for a specific resource there is an option of simulating
the request, adding a query parameter dry-run
to the request URL.
The response will return the resources that would be affected by the request.
Resource Account¶
API Docs for Account.
Get your account.
>>> response = client.request("/account")
>>> assert response.json()["_meta"]["code"] == 200
>>> print(response.json())
{'name': 'Mopinion', 'package': 'Growth', 'enddate': '2021-02-13 00:00:00', 'number_users': 10, ...
Get your account in YAML format.
>>> import yaml
>>> response = client.request("/account", content_negotiation=client.CONTENT_YAML)
>>> r = yaml.safe_load(response.text)
>>> assert r["_meta"]["code"] == 200
When requesting with verbosity='quiet'
no _meta
info is returned.
>>> response = client.request("/account", verbosity=client.VERBOSITY_QUIET)
>>> assert "_meta" not in response.json()
Resource Deployments¶
API Docs for Deployments.
Getting deployments.
>>> response = client.request("/deployments")
>>> assert response.json()["_meta"]["code"] == 200
>>> response.json()
Add a new deployment to your account.
>>> body = {"key": "key", "name": "My Test Deployment"}
>>> response = client.request("/deployments", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
>>> response.json()
Deleting a deployment.
>>> response = client.request("/deployments/abt34", method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> assert response.json()["executed"]
>>> response = client.request("/deployments/abt34", method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
Resource Datasets¶
API Docs for Datasets.
Getting a dataset.
>>> response = client.request("/datasets/1234")
>>> assert response.json()["_meta"]["code"] == 200
Updating a dataset.
>>> body = {"name": "My updated name", "description": "My updated description"}
>>> response = client.request("/datasets/1234", method="PUT", body=body)
>>> assert response.json()["_meta"]["code"] == 200
Deleting a dataset.
>>> response = client.request("/datasets/1234", method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> assert response.json()["executed"]
>>> response = client.request("/datasets/1234", method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
Add a new dataset to a report.
>>> body = {"name": "Web care performance", "report_id": "854", "description": "Historic data import"}
>>> response = client.request("/datasets", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
Get fields for a dataset.
>>> response = client.request("/datasets/1234/fields")
>>> assert response.json()["_meta"]["code"] == 200
Resource Fields¶
API Docs for Fields.
Get fields for a dataset.
>>> response = client.request("/datasets/1234/fields")
>>> assert response.json()["_meta"]["code"] == 200
Get fields for a report.
>>> response = client.request("/reports/1234/fields")
>>> assert response.json()["_meta"]["code"] == 200
Resource Feedback¶
API Docs for Feedback.
Note
There are three query parameters available for this resource.
limit (int <= 100) Maximum number of results in response/
page (int) Return result page.
filter (string) Filter feedback results. Click here for more info about filters.
Get feedback from a dataset.
>>> params = {"limit": 50, "filter[ces]": "3"}
>>> response = client.request("datasets/1234/feedback/abt34", query_params=params)
>>> assert response.json()["_meta"]["code"] == 200
Get feedback for a report.
>>> params = {"page": 1}
>>> response = client.request("reports/1234/feedback/abt34", query_params=params)
>>> assert response.json()["_meta"]["code"] == 200
Resource Reports¶
API Docs for Reports.
Get some basic info on a report.
>>> response = client.request("/reports/1234")
>>> assert response.json()["_meta"]["code"] == 200
Update an existing report.
>>> body = {"name": "Customer Support", "description": "Support related", "language": "en_US"}
>>> response = client.request("/reports/1234", method="PUT", body=body)
>>> assert response.json()["_meta"]["code"] == 200
And deleting a dataset.
>>> response = client.resource("reports/1234", method="DELETE")
>>> assert response.json()["_meta"]["code"] == 200
>>> assert response.json()["executed"]
>>> response = client.resource("reports/1234", method="DELETE", query_params={"dry-run": True})
>>> assert not response.json()["executed"]
Add a new report to the account.
>>> body = {"name": "Customer Support", "description": "Support related", "language": "en_US"}
>>> response = client.resource("/reports", method="POST", body=body)
>>> assert response.json()["_meta"]["code"] == 201
Examples with the iterator¶
When working with the API there is a limit of elements retrieved. The limit
parameters default to 10.
You can increase the limit, or you can request resources using the flag generator=True
.
This returns a Generator which traverses these pages for you
and yields each result on the current page before retrieving the next page.
>>> iterator = client.resource("deployments", iterator=True)
>>> response = next(iterator)
>>> assert response.json()["_meta"]["code"] == 200
Requesting fields for a dataset.
>>> iterator = client.resource("datasets", 1234, "fields", iterator=True)
>>> response = next(iterator)
>>> assert response.json()["_meta"]["code"] == 200
Also, for example, requesting fields for a report.
>>> iterator = client.resource("reports", 1234, "fields", iterator=True)
>>> response = next(iterator)
>>> assert response.json()["_meta"]["code"] == 200