Python wrapper for Norada CRM Solve360 API.
http://norada.com/answers/api/external_api_introduction
$ pip install solve360
The API methods and parameters are the same for all record types, i.e. Contacts, Companies and Project Blogs. Simply use the appropriate segment name for the record type. For example, if creating a:
- Contact - Use crm.create_contact()
- Company - Use crm.create_company()
- Projectblog - Use crm.create_projectblog()
>>> from solve360 import Solve360
>>> crm = Solve360(your_email, your_token)
>>> crm.list_contacts()
{u'status': 'success',
u'count': 2,
u'12345': {...},
u'12346': {...}}
The solve360 API have a fixed upper limit on objects each list request will return, currently set to 5000.
To fetch more objects in a single request this wrapper offers a parameter pages
. The request
will continue to fetch objects until either all objects are returned or the number of given
pages have been reached.
>>> contacts = crm.list_contacts(limit=solve360.LIST_MAX_LIMIT, pages=2)
>>> contacts
{u'status': 'success',
u'count': 12000,
u'12345': {...},
u'12346': {...},
...}
>>> len(contacts)
10002 # Keys 'status' and 'count' plus 10000 contacts
Parameter pages
must be a positive number. There is currently no
parameter that fetches all objects available disregard how many there is totally.
Just set pages
to a number high enough to include the number of objects required.
>>> crm.show_contact(12345)
{u'status': 'success',
u'id': 12345,
u'fields': {...},
...}
>>> crm.create_contact({'firstname': 'test', 'lastname': 'creation'})
{'status': 'success',
'item': {'id': 12347, ...},
...}
>>> crm.update_contact(12345, {'firstname': 'updated', 'lastname': 'name'})
{'status': 'success',
'item': {'id': 12345, ...},
...}
>>> crm.destroy_contact(12345)
{'status': 'success'}
>>> crm.show_report_activities('2014-03-05', '2014-03-11')
{u'status': 'success',
u'66326826': {u'comments': [],
u'created': u'2014-03-05T08:48:07+00:00',
u'fields': {u'assignedto': u'88842777',
u'assignedto_cn': u'John Doe',
u'completed': u'0',
u'duedate': u'2014-03-07T00:00:00+00:00',
u'priority': u'0',
u'remindtime': u'0',
...},
...
}
Successful requests with response.status_code == 2XX
will parse the json response body and only return the response data in python data format.
Invalid requests with response.status_code == 4XX or 5XX
will raise an requests.HTTPException
using requests raise_for_status()
returning the complete stacktrace including server error message if available.
$ pip install pytest httpretty
$ py.test solve360/tests.py