concurapi 0.0.2.1
Concur API Project
Keywords: concur api development

Concur API SDK
===============
The Concur API SDK is a Python client library designed to support Concur's Developer APIs.
You can read more about the Official API by accessing its `official documentation <http://developer.concur.com>`_.

System Requirements
--------------------

Concur API SDK depends on the following Python libraries:

* requests

Installation
------------
Install using `pip`:

::

  pip install concurapi.


Configuration
--------------
You'll need to register at `Concur's Administration site <https://www.concursolutions.com/>`_.
Before you create a partner application, make sure your user account has web service administrator access.
You can create a partner application by following these steps.

* Log on to Concur's Administration using your username and password

* Follow the links *Administration* -> *Company* -> *Web Services*

* Click on the link to register a partner application in the left navigation bar.

* In the next screen click on the **New** button to create a new application

* In the modal dialog, you can choose the permissions for the actions you need to automate.

Also, please note the system generated **Key** and **Secret**. These values are used by the sdk to make a call
to Concur's API.


Usage
-----
Before you use the sdk, you'll need to register a partner application and retrieve a Key/Secret. Please see Configuration_.
You'll also need to install the client sdk using ``pip``. Please see `System Requirements`_ and Installation_.

.. code-block:: python

     from concurapi.client import ConcurAPI
     from concurapi.models import Report
     api = ConcurAPI(client_key="Kq4qIqR3K3zgOJwdI2KLtQ",
                     client_secret="Kq4qIqR3K3zgOJwdI2KLtQ",
                     username="concuruser@xyz.com",
                     password="johndoe")
     report = Report(attributes=dict(Name="First Report",
                     Description="Report for a new Expense"), api=api)
     report.create()
     get_report = Report.find(report['ID'])


If the service is not available, the sdk throws a ``ServiceNotAvailable`` exception which can be handled like so:

.. code-block:: python

     from concurapi.client import ConcurAPI
     from concurapi.exceptions import ServiceNotAvailable
     import sys
     try:
         api = ConcurAPI(client_key="Kq4qIqR3K3zgOJwdI2KLtQ",
                            client_secret="Kq4qIqR3K3zgOJwdI2KLtQ",
                            username="concuruser@xyz.com",
                            password="johndoe")
     except ServiceNotAvailable as se:
          #handle ServiceNotAvailable exception
          sys.exit(se.message)


The sdk returns ``HTTPException`` when there is a REST exception from the API.
As an example, if a report with id - ``12345-abcde`` is not available, the service returns a ``404`` HTTP Exception

.. code-block:: python

    from concurapi.client import ConcurAPI
    from concurapi.exceptions import HTTPException
    from concurapi.models import Report
    import sys
    try:
     api = ConcurAPI(client_key="Kq4qIqR3K3zgOJwdI2KLtQ",
                        client_secret="Kq4qIqR3K3zgOJwdI2KLtQ",
                        username="concuruser@xyz.com",
                        password="johndoe")
     Report.find("1234-abcde")

    except HTTPException as he:
      #handle HTTPException exception
      sys.exit(he.message)


Contributions
-------------
Contributions are welcome! Please open a pull request.