Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/they4kman/infusionsoft-client
Sexy Infusionsoft XML-RPC API client
https://github.com/they4kman/infusionsoft-client
infusionsoft python
Last synced: about 1 month ago
JSON representation
Sexy Infusionsoft XML-RPC API client
- Host: GitHub
- URL: https://github.com/they4kman/infusionsoft-client
- Owner: theY4Kman
- License: apache-2.0
- Created: 2017-04-10T20:01:31.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-10-23T00:01:18.000Z (about 5 years ago)
- Last Synced: 2024-10-11T09:29:02.720Z (about 1 month ago)
- Topics: infusionsoft, python
- Language: Python
- Homepage: https://pypi.python.org/pypi/infusionsoft-client
- Size: 48.8 KB
- Stars: 7
- Watchers: 3
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.txt
- License: LICENSE
Awesome Lists containing this project
README
infusionsoft-client
===================.. image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
:target: https://github.com/theY4Kman/infusionsoft-client/blob/master/LICENSE
.. image:: https://badges.gitter.im/they4kman/infusionsoft-client.png
:target: https://gitter.im/infusionsoft-client/Lobby
.. image:: https://badge.fury.io/py/infusionsoft-client.svg
:target: https://badge.fury.io/py/infusionsoft-clientA simple-to-use `Infusionsoft XML-RPC API `_ client, with included stubs for code sense. Python 3.5+ only (but pull requests welcome :smirk:).
Installation
------------.. code-block:: bash
pip install infusionsoft-client
Quickstart
----------First, initialize the client with your app name and API key:
.. code-block:: python
import infusionsoft
infusionsoft.initialize('myapp', '098f6bcd4621d373cade4e832627b4f6')And use the ``infusionsoft`` like a regular `xmlrpc.client.ServerProxy `_:
.. code-block:: python
import infusionsoft
contact_id = infusionsoft.ContactService.add({'FirstName': 'Johnny'})Setting XML-RPC Client Options
------------------------------Any extra kwargs passed to ``initialize()`` will be passed along to ``xmlrpc.client.ServerProxy``.
.. code-block:: python
import infusionsoft
infusionsoft.initialize('myapp', '098f6bcd4621d373cade4e832627b4f6', use_builtin_types=True)Some kwargs of interest are:
- ``use_builtin_types``: whether to utilize native Python types, rather than wrappers such as ``xmlrpc.client.DateTime`` or ``xmlrpc.client.Binary``. **I recommend turning this on**. It will be turned on by default in the next major/breaking release.
- ``verbose``: set to ``True`` to print out the request and response bodies for each RPC call.
- ``allow_none``: whether to allow ``None`` to be sent over the wire. Infusionsoft, in general, doesn't allow ``None`` (which is ``nil`` in XML-RPC parlance). If a field in a response is null, Infusionsoft will simply not send it.
- ``retries``: number of times to retry failed requests. Requests are retried on connection/socket errors, and "InvalidConfig" faults (if you've never seen them, I envy you). Any other type of fault will still raise an exception.See `the docs `_ for more info.
Usage with Django
-----------------``infusionsoft-client`` includes a Django integration out of the box. Just add it to your ``INSTALLED_APPS``:
.. code-block:: python
INSTALLED_APPS = (
# ...
'infusionsoft.contrib.django',
)And add your app name and API key to your settings:
.. code-block:: python
INFUSIONSOFT_APP_NAME = 'myapp'
INFUSIONSOFT_API_KEY = '098f6bcd4621d373cade4e832627b4f6'Pass extra configuration to the XML-RPC client with ``INFUSIONSOFT_CLIENT_OPTIONS``:
.. code-block:: python
INFUSIONSOFT_CLIENT_OPTIONS = {
'use_builtin_types': True,
}Getting All Rows of a Query
---------------------------Some API calls are paginated, and require multiple calls to retrieve all results. This can be a pain, and you may find yourself writing the same code over and over. To this end, ``infusionsoft-client`` provides a ``consume()`` generator function, which will consume all pages of any query function.
To use it, create a lambda (or regular) function taking ``page`` and ``limit`` as arguments which performs your paginated API call, and pass it to ``consume()``:
.. code-block:: python
import infusionsoft
from infusionsoft.query import consumequery_fn = lambda page, limit: (
infusionsoft.DataService.query('mytable', limit, page, ['Id']))# Use with a for-loop, to avoid storing all rows in memory:
for row in consume(query_fn):
do_stuff(row)# Or retrieve all rows at once
all_rows = list(consume(query_fn))Generate Code Stubs
-------------------Shipped with ``infusionsoft-client`` is code to download the official Infusionsoft XML-RPC docs, parse them with `BeautifulSoup `_, and generate Python 3.5-compatible stubs for all methods.
To generate these yourself, first install the extra requirements:
.. code-block:: bash
pip install -r stub-requirements.txt
Then run the ``generate_stubs()`` function, which will return a string:
.. code-block:: python
from infusionsoft.gen_stubs import generate_stubs
source = generate_stubs()