A python wrapper library for Zoho API calls which aims to unify the API for the different Zoho Products (CRM, Support, Projects etc).
NOTE: Only the crm client is in a production ready state.
The library has asynchronous interface i.e.
from talkzoho import CRMClient
async def main():
crm = CRMClient(auth_token='xxx')
account = await crm.accounts.get('7030050000019540342')
However, Talk Zoho also provides the helper function talkzoho.utils.wait for usage in synchronous code.
from talkzoho import CRMClient
from talkzoho.utils import wait
account = wait(crm.accounts.get, '7030050000019540342')
Installation
pip install talkzoho
Example Usage
from talkzoho import CRMClient
async def main():
crm = CRMClient(auth_token='xxx')
# Get Account
account = await crm.accounts.get('7030050000019540342')
# Insert Lead
lead_id = await crm.leads.insert({
'First Name': 'Bill',
'Last Name': 'Billson'})
# Filter Leads
bills = await crm.leads.filter(term='Bill', limit=1)
# Update Contact
contact_id = await crm.contacts.update({
'CONTACTID': '7030050000019540536',
'First Name': 'Jill',
'Last Name': 'Jillson'})
# Delete Contact
success = await crm.contacts.delete('7030050000019540536')
Renamed and Custom Modules
Talk Zoho supports renamed standard modules; when initialising the CRMClient pass the flag to indicate if you want to use Zoho’s canonical names or the user’s aliases. The flag (use_module_aliases) defaults to False.
async def main():
crm = CRMClient(auth_token='xxx', use_module_aliases=False)
potential = await crm.potentials.get('7030050000019540360')
crm = CRMClient(auth_token='xxx', use_module_aliases=True)
opportunity = await crm.opportunities.get('7030050000019540360')
# potential == opportunity
This works the same for custom modules:
async def main():
crm = CRMClient(auth_token='xxx', use_module_aliases=False)
custom_record = await crm.custom_module_8.get('9130050000019540360')
crm = CRMClient(auth_token='xxx', use_module_aliases=True)
partner = await crm.partners.get('9130050000019540360')
# custom_record == partner
Error Handling
Zoho use a number of ways to inform the client of errors. For example, CRM always returns a 200 status code with a error message and code in the body, where as books will return more standard looking HTTP errors. Talk Zoho tries to unify these and raises a `tornado.web.HTTPError <http://www.tornadoweb.org/en/stable/web.html#tornado.web.HTTPError>`__. Talk Zoho will also map the Zoho specific codes to their HTTP status code equivalent.
NOTE: Deleting a CRM record (with a correct-looking id) will never return an error.This is the behavior of Zoho’s CRM API.
from talkzoho import CRMClient
from tornado.web import HTTPError
async def main():
crm = CRMClient(auth_token='xxx')
try:
account = await crm.accounts.get('1234')
except HTTPError as http_error:
# HTTPError(404, reason='No record available with the specified record ID.')
print(http_error)
Metadata
Release files for talkzoho 3.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| talkzoho-3.0.3.tar.gz | 12.3 kB | Without provenance | Details |
Release files / talkzoho-3.0.3.tar.gz
| Download URL | talkzoho-3.0.3.tar.gz |
|---|---|
| Size | 12.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1bd53e5c92c6684d0dfb07ddd78e2e482b65c51c809ef4c3585e48bd92f017b
|
|
BLAKE2b-256 checksum How to use checksums |
fa2f6bb1dfe977f8218de6281802a51e14b5d0095d2282a6389812292dfd6d38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for talkzoho 3.0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.