Skip to main content

A Python Wrapper for SurveyGizmo's restful API service.

Project description

A Python Wrapper for SurveyGizmo’s mostly restful API service.

Build Status codecov

Requirements

  • python: 2.7, 3.4, 3.5, 3.6

Installation

$ pip install SurveyGizmo

Usage

Start by instantiating the SurveyGizmo object and providing some configuration parameters. Options can also be set through the config property.

from surveygizmo import SurveyGizmo

client = SurveyGizmo(
    api_version='v4'

    # example token from SurveyGizmo docs
    api_token = "E4F796932C2743FEBF150B421BE15EB9"
    api_token_secret = "A9fGMkJ5pJF1k"
)

# Update client options through the config property.
client.config.api_token = "E4F796932C2743FEBF150B421BE15EB9"
client.config.api_token_secret = "A9fGMkJ5pJF1k"

Calls to the api are by object type then by function. For example,

client.api.survey.list()
client.api.survey.get('39501')
client.api.survey.copy('39501', 'New title boop')
client.api.surveyresponse.list('39501')

Most resources have the list, get, create, update, copy, and delete actions. If SurveyGizmo’s REST API does not implement an action, the client will raise a NotImplementedError.

Authentication

Token based authentication is the only currently supported authentication method. user:pass and user:md5 were deprecated on May 31, 2016. Oauth support is not currently a goal, but pull requests are welcome.

token

client.config.api_token = 'E4F796932C2743FEBF150B421BE15EB9'
client.config.api_token_secret = 'A9fGMkJ5pJF1k'

API Filtering

SurveyGizmo’s API supports filtering for list calls on surveys, survey campaigns, and survey responses. For more information, reference the SurveyGizmo filter documentation.

The filtering implementation contains no real magic and is simply a convenience wrapper around the awkward filtering semantics. There is no enforcement of which resources can perform filtering or what types of properties are being filtered for a resource.

To filter, simply

filtered = client.api.surveyresponse.filter('datesubmitted', '<=', '2013-07-01')
filtered.list('39501')

Filtering is also chainable.

client.api.survey.filter('createdon', '<=', '2013-04-01').list()
...

client.api.surveyresponse \
    .filter('datesubmitted', '<=', '2013-07-01') \
    .filter('datesubmitted', '>', '2013-06-01') \
    .list('39501')

Config paramaters

  • api_version - ‘v3’, ‘v4’, ‘head’. Defaults to ‘head’

  • api_token

  • api_token_secret

  • response_type - None, 'json', 'pson', 'xml', 'debug'. By default (using None), the API returns a JSON response which is parsed by the client into a python dictionary. Specifying a response_type will return an unparsed body of the specified format.

  • requests_kwargs - Additional arguments passed to requests.get. Useful for setting timeouts and otherwise configuring the requests library.

  • prepare_url - Force the client to return the url after being prepared instead of executing the api call. This is useful in cases where you need to call the api asynchronously. Defaults to ‘False’

  • handler52x - Handler for CloudFlare’s 52x errors. Expects a callable (e.g., surveygizmo.default_52xhandler). Defaults to ‘None’.

CloudFlare 52x Errors

After SurveyGizmo’s move to CloudFlare, it isn’t uncommon to see connectivity issues where the service is temporarily unreachable. These errors exist on the 52x range of HTTP status codes. To automatically handle 52x errors, set a callable for config.handler52x. A basic handler is provided under surveygizmo.default_52xhandler, which simply retries the request every second until a non-52x response is returned.

API Resources

Changelog

1.2.3

  • 21 Make the ‘base_url’ configurable.

  • Drop explicit python 3.3 support.

1.2.2

  • 17 Added basic pagination support. Thanks @WesleyBatista!

1.2.1

  • Added _prepare_url argument to API calls that overrides the configured setting for prepare_url.

1.2.0

  • Reimplmented API import as metaclass.

  • Reimplemented filtering, removed race condition.

1.1.0

  • Added required parameters various API calls (mostly create).

1.0.0

1.0.0 is a reimplementation of the entire API. Tests have been added and the package is basically stable.

  • Replace all authentication methods with only token based authentication.

  • Rewrite API to use class inheritance instead of module function wrapping.

  • Remove preserve_filters option.

  • Rename add_filter to just filter. Filters are chainable.

0.2.0

0.2.0 is a forwards incompatible release, but only minorly so.

Forwards incompatible changes:

  • Renamed the ‘change’ operations to ‘update’. This is consistent with SurveyGizmo’s API naming.

  • Removed the ‘keep’ kwarg for preserving filters bettween api funcion calls. This is now configured with ‘preserve_filters’. Filters are now cleared manually with api.clear_filters()

  • Removed the undocumented ‘url_fetch’ kwarg, which prevented api execution and instead returned the prepared url.

Backwards incompatible changes:

  • Modified ‘api_version’ to no longer has any effect on the client. SurveyGizmo provides no way to meaningfully differentiate between API versions, so this checking was unneeded and created code duplication

  • Added ‘prepare_url’ as a replacement for ‘url_fetch’. This forces the client to return the url after being prepared instead of executing the api call. This is useful in cases where you need to call the api asynchronously.

  • Added ‘requests_kwargs’. These are additional arguments passed to requests.get. Useful for setting timeouts and otherwise configuring the requests library.

  • Added handling for CloudFlare 52x errors

Release Process

  • Update package version in setup.py

  • Create git tag for version

  • Upload release to PyPI

    $ pip install -U pypandoc setuptools wheel
    $ rm -rf dist/ build/
    $ python setup.py sdist bdist_wheel upload

Project details


Download files

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

Source Distribution

SurveyGizmo-1.2.3.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

SurveyGizmo-1.2.3-py2.py3-none-any.whl (22.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file SurveyGizmo-1.2.3.tar.gz.

File metadata

  • Download URL: SurveyGizmo-1.2.3.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for SurveyGizmo-1.2.3.tar.gz
Algorithm Hash digest
SHA256 39835621036d2bc61243c65d4f34cd0df745db3538b5cf315d740a8c725f9964
MD5 9fdd1617ffe4e45bfa0e89f0d934fd12
BLAKE2b-256 6ca835a500992debb95a2425757fbec05182d1ff36f43d20bc98816c092fd3f3

See more details on using hashes here.

File details

Details for the file SurveyGizmo-1.2.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for SurveyGizmo-1.2.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a9aa5f8e56ac5811f04794eb479da6cef3bd38a2629dba91d4ee24e52eaaaf06
MD5 092bb61d52a1e7e82fc447473da98a60
BLAKE2b-256 b5bca9f1e8d6072c22c2a6ba4c154b1410a699d42876e2ed220e42b714733a7b

See more details on using hashes here.

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