Skip to main content

Client library to use the IBM Watson Services

Project description

Build Status Slack codecov.io Latest Stable Version

Python client library to quickly get started with the various Watson APIs services.

Installation

To install, use pip or easy_install:

pip install --upgrade watson-developer-cloud

or

easy_install --upgrade watson-developer-cloud

Note the following:

  1. If you run into permission issues try:

sudo -H pip install --ignore-installed six watson-developer-cloud

For more details see #225

  1. In case you run into problems installing the SDK in DSX, try

    !pip install --upgrade pip

    Restarting the kernel

For more details see #405

Examples

The examples folder has basic and advanced examples.

Getting the Service Credentials

Service credentials are required to access the APIs.

If you run your app in IBM Cloud, you don’t need to specify the username and password or IAM API key (apikey). In that case, the SDK uses the VCAP_SERVICES environment variable to load the credentials. To run locally or outside of IBM Cloud you need the username and password credentials or IAM API key (apikey) for each service. (Service credentials are different from your IBM Cloud account email and password.)

To create an instance of the service:

  1. Log in to IBM Cloud.

  2. Create an instance of the service:

  3. Click on Create Resource.

  4. In the IBM Cloud Catalog, select the Watson service you want to use. For example, select the Conversation service.

  5. Type a unique name for the service instance in the Service name field. For example, type my-service-name. Leave the default values for the other options.

  6. Click Create.

Authentication

To get your service credentials:

Copy your credentials from the Manage page. To find the Service details page for an existing service, navigate to your IBM Cloud dashboard and click the service name.

  1. On the Manage page, you will see a Credentials pane

  2. Depending on the service you will see use either:

  • 2.a: username, password, and url(optional) or apikey(for Visual Recognition).

  • 2.b: apikey which is the value for parameter iam_api_key when initializing the constructor.

Username and Password

from watson_developer_cloud import DiscoveryV1
# In the constructor
discovery = DiscoveryV1(version='2017-10-16', username='<username>', password='<password>')
# After instantiation
discovery = DiscoveryV1(version='2017-10-16')
discovery.set_username_and_password('<username>', '<password>')

API Key

Important: Instantiation with API key works only with Visual Recognition service instances created before May 23, 2018. Visual Recognition instances created after May 22 use IAM.

from watson_developer_cloud import VisualRecognitionV3
# In the constructor
visual_recognition = VisualRecognitionV3(version='2018-05-22', api_key='<api_key>')
# After instantiation
visual_recognition = VisualRecognitionV3(version='2018-05-22')
visual_recognition.set_api_key('<api_key>')

Using IAM

When authenticating with IAM, you have the option of passing in:

  • the IAM API key and, optionally, the IAM service URL

  • an IAM access token

Be aware that passing in an access token means that you’re assuming responsibility for maintaining that token’s lifecycle. If you instead pass in an IAM API key, the SDK will manage it for you.

# In the constructor, letting the SDK manage the IAM token
discovery = DiscoveryV1(version='2017-10-16',
                        iam_api_key='<iam_api_key>',
                        iam_url='<iam_url>') # optional - the default value is https://iam.ng.bluemix.net/identity/token
# after instantiation, letting the SDK manage the IAM token
discovery = DiscoveryV1(version='2017-10-16')
discovery.set_iam_api_key('<iam_api_key>')
# in the constructor, assuming control of managing IAM token
discovery = DiscoveryV1(version='2017-10-16',
                        iam_access_token='<iam_access_token>')
# after instantiation, assuming control of managing IAM token
discovery = DiscoveryV1(version='2017-10-16')
discovery.set_iam_access_token('<access_token>')

If at any time you would like to let the SDK take over managing your IAM token, simply override your stored IAM credentials with an IAM API key by calling the set_token_manager() method again.

Python Version

Tested on Python 2.7, 3.4, 3.5, and 3.6.

Changes for v1.0

Version 1.0 focuses on the move to programmatically-generated code for many of the services. See the changelog for the details.

Migration

This version includes many breaking changes as a result of standardizing behavior across the new generated services. Full details on migration from previous versions can be found here.

Configuring the http client (Supported from v1.1.0)

To set client configs like timeout use the with_http_config() function and pass it a dictionary of configs.

from watson_developer_cloud import AssistantV1

assistant = AssistantV1(
    username='xxx',
    password='yyy',
    version='2017-04-21')

assistant.set_http_config({'timeout': 100})
response = assistant.message(workspace_id=workspace_id, input={
    'text': 'What\'s the weather like?'})
print(json.dumps(response, indent=2))

Sending Request Headers

Custom headers can be passed in any request in the form of a dict as:

headers = {
    'Custom-Header': 'custom_value'
}

For example, to send a header called Custom-Header to a call in Watson Assistant, pass the headers parameter as:

from watson_developer_cloud import AssistantV1

assistant = AssistantV1(
    username='xxx',
    password='yyy',
    version='2017-04-21')

response = assistant.list_workspaces(headers={'Custom-Header': 'custom_value'})

Parsing HTTP Response Info

If you would like access to some HTTP response information along with the response model, you can set the set_detailed_response() to True

from watson_developer_cloud import AssistantV1

assistant = AssistantV1(
    username='xxx',
    password='yyy',
    version='2017-04-21')

assistant.set_detailed_response(True)
response = assistant.list_workspaces(headers={'Custom-Header': 'custom_value'})
print(response)

This would give an output of DetailedResponse having the structure:

{
    'result': <response returned by service>,
    'headers': { <http response headers> }
}

You can use the get_result() and get_headers() to return the result and headers respectively.

Dependencies

  • requests

  • python_dateutil >= 2.5.3

  • responses for testing

  • Following for web sockets support in speech to text

  • autobahn >= 0.10.9

  • Twisted >= 13.2.0

  • pyOpenSSL >= 16.2.0

  • service-identity >= 17.0.0

Contributing

See CONTRIBUTING.md.

License

This library is licensed under the Apache 2.0 license.

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

watson-developer-cloud-1.3.5.tar.gz (192.9 kB view hashes)

Uploaded Source

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