{
"info": {
"author": "Zoho CRM API Team",
"author_email": "support@zohocrm.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Topic :: Software Development :: Build Tools"
],
"description": "#Python SDK for Zoho CRM\n-------------------------\nPython SDK acts as a wrapper for Zoho CRM APIs. Hence, invoking a Zoho CRM API from your python client application is just a method call.\n\nPython SDK supports both single user as well as multi-user authentication.\n\nRegistering a Zoho Client\n-------------------------\nSince Zoho CRM APIs are authenticated with OAuth2 standards, you should register your client app with Zoho.\u00a0\nTo register your app:\n\n- Visit the page \"https://accounts.zoho.com/developerconsole\".\n- Click \u201cAdd Client ID\u201d.\n- Enter Client Name, Client Domain, and Redirect URI. Click \u201cCreate\u201d.\n- Your Client app is created and displayed.\n- Click Options \u2192 Edit to know the registered app's Client ID and Client Secret.\n(Options is the three dot icon at the right corner).\n\nSetting Up\n----------\nPython SDK is installable only through **pip**. Pip is a tool for dependency management in Python. The SDK expects following things from the client app.\n\nClient app must have Python 2.7 and above.\n>https://www.python.org/downloads/\n\nClient app must have python requests installed\n>http://docs.python-requests.org/en/master/user/install/\n\n- The method \"ZCRMRestClient.initialize(configuration_dictionary)\" must be called on starting up of your application\n\n\n>MySQL should run in the same machine, either serving at the default port 3306 or a custom port which needs to be configured in ``mysql_port`` in configuration_dictionary.\u00a0\u00a0\nThe database name should be \"zohooauth\".\u00a0\u00a0\nThere must be a table \"oauthtokens\" with the columns \"useridentifier\"(varchar(100)), \"accesstoken\"(varchar(100)), \"refreshtoken\"(varchar(100)), \"expirytime\"(bigint).\u00a0\n\nIf ``token_persistence_path`` is provided in ``configuration_dictionary`` file, then persistence happens in file only. In this case, MySQL is not required.\n\nCreate an empty file with name **zcrm_oauthtokens.pkl** in the mentioned ``token_persistence_path``\n\nIf Custom DB implementation is used to persist tokens, then \"persistence_handler_class\" and \"persistence_handler_path\" keys must be added in ``configuration_dictionary``\n\nInstallation of SDK through pip\n-------------------------------\nInstall Pip(if not installed).\nPlease refer to the document below to install pip.\n\n>https://pip.pypa.io/en/stable/installing/\n\nInstall SDK\n-----------\nRun the following command to install the SDK:\n\n>pip install zcrmsdk\n\nThis command installs the SDK and creates a package named ``zcrmsdk`` in the installation directory of python (ex. '/Library/Python/2.7/site-packages').\n\nUpgrade the SDK\n---------------\nRun this command to upgrade the SDK to the latest version.\n\n>pip install --upgrade zcrmsdk\n\nConfiguration\n--------------\nBelow is a sample configuration dictionary containing all keys, which needs to be passed to ZCRMRestClient.initialize() on starting up your application.\n>configuration_dictionary = {
\n'apiBaseUrl':'https://www.zohoapis.com',
\n'apiVersion':'v2',
\n'currentUserEmail':'email@gmail.com'
\n'sandbox':'False'
\n'applicationLogFilePath':'',
\n'client_id':'1000.3xxxxxxxxxxxxxxxxxxxxxxxxX0YW',
\n'client_secret':'29xxxxxxxxxxxxxxxxxxxxxxxxxxxxx7e32',
\n'redirect_uri':'https://www.abc.com',
\n'accounts_url':'https://accounts.zoho.com',
\n'token_persistence_path':'/Users/Zoho/Desktop/PythonSDK/FilePersistence',
\n'access_type':'online',
\n//Use the below keys for MySQL DB persistence
\n'mysql_username':'',
\n'mysql_password':'',
\n'mysql_port':'3306',
\n//Use the below keys for custom DB persistence
\n'persistence_handler_class' : 'Custom',
\n'persistence_handler_path': '/Users/Zoho/Desktop/PythonSDK/CustomPersistance.py'
\n}\n\nBased on the preferred persistence, add all mandatory keys in the configuration dictionary.\nclient_id, client_secret and redirect_uri are your OAuth client\u2019s configurations that you get upon registering your Zoho client.\n\naccess_type must be set to offline, as online OAuth client is not supported by the SDK as of now.\n\n``token_persistence_path`` is the path to store the OAuth related tokens in file. If this is set, then there is no need of `database` for persistence. Persistence happens through `file` only.\n\nBased on your domain(EU, CN), change the value of `accounts_url`. Default value is `https://accounts.zoho.com`.\n\nInclude the absolute path in **configuration_dictionary** for the key ``applicationLogFilePath`` to store the logs. This file is to log the exceptions during the usage of the SDK.\n\nTo make API calls to `sandbox account`, set sandbox value in the configuration_dictionary. By default, the value is `false`.\n\n>'sandbox':'true'\n\nIf your application needs only single user authentication then you have to set the user Email ID in the configuration_dictionary as below.\n\n>'currentUserEmail':'user@email.com'\n\n\nTo work with multi-user authentication, set the user Email ID in current thread as an attribute.\n\n>threading.current_thread().__setattr__('current_user_email','user@email.com')\n\nYou can use the above method for single user authentication too, but it is recommended to set the email ID in the ``configuration_dictionary``\n\nIf you do not set the user email in current thread, then the SDK expects it from the ``configuration_dictionary``.\n\nThe SDK raises an exception if user_email is not set in any of the above mentioned methods.\n\nInitialization\n--------------\nThe app will be ready to be initialized after defining the OAuth configuration file.\n\nGenerating self-authorized grant token\nFor self client apps, the self-authorized grant token should be generated from the Zoho Developer Console (https://accounts.zoho.com/developerconsole)\n\n- Visit https://accounts.zoho.com/developerconsole\n- Click Options \u2192 Self Client of the client that you want to authorize.\n- Enter one or more (comma-separated) valid Zoho CRM scopes that you wish to authorize in the \u201cScope\u201d field and choose the time of expiry. Provide \u201caaaserver.profile.READ\u201d scope along with other Zoho CRM scopes.\n- Copy the grant token for backup.\n- Generate refresh_token from grant token by using the below URL (POST request).\n ``https://accounts.zoho.com/oauth/v2/token?code={grant_token}&redirect_uri={redirect_uri}&client_id={client_id}&client_secret={client_secret}&grant_type=authorization_code``\nCopy the refresh_token for backup.\n\nNote that the generated grant token is valid only for the stipulated time you choose while generating it.\u00a0\n\nHence, a refresh token should be generated within that time.\n\nGenerating access token\n-----------------------\nAccess token can be generated from grant token or refresh token. Following any one of the below two methods is sufficient.\u00a0\u00a0\u00a0\u00a0\n\nAccess Token through grant token:\n------------------------------------\nExecute the following code snippet from your main class to get an access token.\u00a0\n\nPaste the generated grant token in the string literal mentioned. This is one-time process only.\n\n>ZCRMRestClient.initialize(configuration_dictionary)\u00a0
\noauth_client = ZohoOAuth.get_client_instance()\u00a0\u00a0
\ngrant_token=\"paste_grant_token_here\"\u00a0
\noauth_tokens = oauth_client.generate_access_token(grant_token)\u00a0
\n\nUpon successful execution of the above code snippet, the generated access and refresh tokens will be persisted through our persistence handler class, based on the preferred persistence.\n\nAccess Token through refresh token:\n------------------------------------\nExecuted the below code snippet from your main class to get an access token.\u00a0\n\nPaste the generated refresh token in the string literal mentioned. This is one time process only.\n\n>ZCRMRestClient.initialize(configuration_dictionary)\u00a0
\noauth_client = ZohoOAuth.get_client_instance()
\nrefresh_token=\"paste_refresh_token_here\"\u00a0\u00a0
\nuser_identifier=\"provide_user_identifier_like_email_here\"\u00a0\u00a0
\noauth_tokens = oauth_client.generate_access_token_from_refresh_token(refresh_token,user_identifier)\u00a0
\n\nUpon successful execution of the above code, the generated access and given refresh tokens will be persisted through our persistence handler class, based on the preferred persistence.\n\nOnce the OAuth tokens have been persisted, subsequent API calls will use these tokens.\u00a0\n\nThe SDK will take care of refreshing the access token using the refresh token, as and when required.\n\nApp Startup\n------------\nInvoke the below statement every time your client app is started.\n\n>ZCRMRestClient.initialize(configuration_dictionary)\n\nOnce the SDK has been initialized by the above line, you can use any APIs of the SDK to get the desired results.\n\nUsing the SDK\n-------------\nAdd the below line in your client app Python files, where you would like to use the SDK.\n\n>import zcrmsdk\n\nBy this, you can access all the functionalities of Python SDK.\n\nFor accessing a module or class use ``zcrmsdk.ClassName``\n\n\nClass Hierarchy\n---------------\nAll Zoho CRM entities are modelled as modules having classes, methods, and instance variables applicable to that particular entity. ZCRMRestClient is the base class of the SDK. ZCRMRestClient has methods to get instances of various other Zoho CRM entities. It is in RestClient module.\nThe class relations and hierarchy of the SDK follows the entity hierarchy inside Zoho CRM. The class hierarchy of various Zoho CRM entities are given below:\n\n\n - ZCRMRestClient\n - ZCRMOrganization\n - ZCRMUser\n - ZCRMUserTheme\n - ZCRMUserCustomizeInfo\n - ZCRMRole\n - ZCRMProfile\n - ZCRMPermission\n - ZCRMProfileSection\n - ZCRMProfileCategory\n - ZCRMModule\n - ZCRMLayout\n - ZCRMSection\n - ZCRMField\n - ZCRMPickListValue\n - ZCRMLookupField\n \t - ZCRMLeadConvertMapping\n - ZCRMLeadConvertMappingField\n - ZCRMCustomView\n - ZCRMCustomViewCategory\n - ZCRMCustomViewCriteria\n - ZCRMRelatedListProperties\n - ZCRMModuleRelatedList\n - ZCRMRecord\n - ZCRMNote\n - ZCRMAttachment\n - ZCRMInventoryLineItem\n - ZCRMTax\n - ZCRMEventParticipant\n - ZCRMPriceBookPricing\n - ZCRMModuleRelation\n - ZCRMJunctionRecord\n - ZCRMTrashRecord\n\nAs appearing in the hierarchy, every entity class will have instance variables to fetch its own properties and to fetch data of its immediate child entities through an API call.\n\nFor example, a Zoho CRM module (ZCRMModule) object will have instance variables to get a module\u2019s properties like display name, module id, etc. and will also have instance variables to fetch all its child objects(like ZCRMLayout).\n\nInstantiate object\n------------------\nIt is not always effective to follow the complete class hierarchy from the top to fetch the data of an entity at some lower level, since this would involve API calls at each level.\u00a0\n\nIn order to handle this, every entity class will have a ``get_instance()`` method to get its own dummy object and instance variables to get dummy objects of its child entities.\n\nPlease note that the get_instance() method would not have any of its properties filled because it would not fire an API call. This would just return a dummy object that shall be only used to access the non-static methods of the class.\n\nSumming it up\n-------------\n``ZCRMRestClient.get_module(\"Contacts\")`` would return the actual Contacts module, that has all the properties of the Contacts module filled through an API call.\n\n``ZCRMRestClient.get_module_instance(\"Contacts\")`` would return a dummy ZCRMModule object that would refer to the Contacts module, with no properties filled, since this does not make an API call.\n\nHence, to get records from a module, you need not to start all the way from ZCRMRestClient. Instead, you could get a ZCRMModule instance with ZCRMModule.get_instance() and then invoke its non-static get_records() method from the created instance.\u00a0\n\nThis would avoid the API call which would have been triggered to populate the ZCRMModule object.\n\nAccessing record properties\n----------------------------\nSince record properties are dynamic across modules, we have only given the common fields like created_time, created_by, owner etc as ZCRMRecord\u2019s default properties.\u00a0\n\nAll other record properties are available as a dictionary in ZCRMRecord object.\n\nTo access the individual field values of a record, use the getter and setter methods available.\u00a0\n\nThe keys of the record properties dictionary are the API names of the module\u2019s fields.\u00a0\n\nAPI names of all fields of all modules are available under ``Setup \u2192 Developer Space \u2192 APIs \u2192 API Names``.\n\nTo get a field value, use ``record.get_field_value(field_api_name)``.\u00a0\n\nTo set a field value, use ``record.set_field_value(field_api_name,new_value)``.\u00a0\n\nWhile setting a field value, ensure that the set value is of the apt data type of the field to which you are going to set it.\n\nResponse Handling\n-----------------\n``APIResponse`` and ``BulkAPIResponse`` are wrapper objects for Zoho CRM APIs\u2019 responses. All API calling methods will return one of these two objects.\n\nDownloadFile and downloadPhoto returns ``FileAPIResponse`` instead of APIResponse.\n\nA method seeking a single entity would return APIResponse object, whereas a method seeking a list of entities would return BulkAPIResponse object.\n\nUse the instance variable **data** to get the entity data alone from the response wrapper objects. APIResponse.data would return a single Zoho CRM entity object, while BulkAPIResponse.data would return a list of Zoho CRM entity objects.\n\nOther than data, these response wrappers have the following properties:\n\n``response_headers`` \u2014 remaining API count for the present day/window and time elapsed for the present window reset.\n\n``info`` \u2014 any other information, if provided by the API, besides the actual data.\n\n``bulk_entity_response`` (list of ``EntityResponse`` instances) \u2014 status of individual entities in a bulk API. For example, an insert records API may partially fail because of a few records. This array gives the individual records\u2019 creation status.\n\nExceptions\nAll unexpected behaviors like faulty API responses, SDK anomalies are handled by the SDK and are raised only as a single exception \u2014 ZCRMException. Hence it's enough to catch this exception alone in the client app code.\n\n\nExamples\n---------\nSample code to insert a record:\n-------------------------------\n\n>try:\u00a0\u00a0
\n record_ins_list=list()\u00a0\u00a0
\n for i in range(0,2):
\n record=ZCRMRecord.get_instance('Invoices') #module API Name\u00a0\u00a0
\n record.set_field_value('Subject', 'Invoice'+str(i))\u00a0\u00a0
\n record.set_field_value('Account_Name', 'IIIT')\u00a0\u00a0
\n user=ZCRMUser.get_instance(440872000000175001,'Python Automation User1')
\n record.set_field_value('Owner',user)\u00a0\u00a0
\n line_item=ZCRMInventoryLineItem.get_instance(ZCRMRecord.get_instance(\"Products\",440872000000224005))
\n line_item.discount=10\u00a0\u00a0
\n line_item.list_price=8\u00a0\u00a0
\n line_item.description='Product Description'\u00a0
\n line_item.quantity=100\u00a0\u00a0
\n line_item.tax_amount=2.5\u00a0\u00a0
\n taxIns=ZCRMTax.get_instance(\"Vat\")\u00a0\u00a0
\n taxIns.percentage=5\u00a0\u00a0
\n line_item.line_tax.append(taxIns)\u00a0
\n record.add_line_item(line_item)\u00a0\u00a0
\n record_ins_list.append(record)\u00a0\u00a0
\n resp=ZCRMModule.get_instance('Invoices').create_records(record_ins_list)\u00a0
\n print resp.status_code\u00a0\u00a0
\n entity_responses=resp.bulk_entity_response\u00a0\u00a0
\n for entity_response in entity_responses:\u00a0
\n print entity_response.details\u00a0\u00a0
\n print entity_response.status\u00a0\u00a0
\n print entity_response.message\u00a0\u00a0
\n print entity_response.code\u00a0\u00a0
\n print entity_response.data.entity_id\u00a0\u00a0
\n print entity_response.data.created_by.id\u00a0\u00a0
\n print entity_response.data.created_time\u00a0\u00a0
\n print entity_response.data.modified_by.id\u00a0\u00a0
\nexcept ZCRMException as ex:\u00a0\u00a0
\n print ex.status_code\u00a0\u00a0
\n print ex.error_message\u00a0\u00a0
\n print ex.error_code\u00a0\u00a0
\n print ex.error_details\u00a0\u00a0
\n print ex.error_content\u00a0\u00a0
\n\nSample code to fetch records:\n-----------------------------\n\n>try:\u00a0\u00a0
\n module_ins=ZCRMModule.get_instance('Products') #module API Name\u00a0\u00a0
\n resp=module_ins.get_records()\u00a0\u00a0
\n print resp.status_code\u00a0\u00a0
\n record_ins_arr=resp.data\u00a0\u00a0
\n for record_ins in record_ins_arr:\u00a0
\n print record_ins.entity_id\u00a0\u00a0
\n print record_ins.owner.id\u00a0\u00a0
\n print record_ins.created_by.id\u00a0
\n print record_ins.modified_by.id\u00a0\u00a0
\n print record_ins.created_time
\n print record_ins.modified_time\u00a0\u00a0
\n product_data=record_ins.field_data\u00a0\u00a0
\n for key in product_data:\u00a0\u00a0
\n print key+\":\"+str(product_data[key])\u00a0
\nexcept ZCRMException as ex:\u00a0\u00a0
\n print ex.status_code\u00a0\u00a0
\n print ex.error_message\u00a0\u00a0
\n print ex.error_code\u00a0\u00a0
\n print ex.error_details\u00a0\u00a0
\n print ex.error_content\u00a0\u00a0
\n\nFor more APIs, please refer [this link](https://www.zoho.com/crm/developer/docs/)\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/zoho/zcrm-python-sdk",
"keywords": "development",
"license": "",
"maintainer": "",
"maintainer_email": "",
"name": "zcrmsdk",
"package_url": "https://pypi.org/project/zcrmsdk/",
"platform": "",
"project_url": "https://pypi.org/project/zcrmsdk/",
"project_urls": {
"Homepage": "https://github.com/zoho/zcrm-python-sdk"
},
"release_url": "https://pypi.org/project/zcrmsdk/2.0.4/",
"requires_dist": [
"requests"
],
"requires_python": "",
"summary": "Zoho CRM SDK for Python developers",
"version": "2.0.4"
},
"last_serial": 5949920,
"releases": {
"0.0.1": [
{
"comment_text": "",
"digests": {
"md5": "f0365d68ad61eee618281bfcacbb5268",
"sha256": "a3473f4e06f314e54e45c99603a8a91a2d6191ac2ac5c4ff8e5dc360cc1897b1"
},
"downloads": -1,
"filename": "zcrmsdk-0.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f0365d68ad61eee618281bfcacbb5268",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 52092,
"upload_time": "2018-02-13T06:15:16",
"url": "https://files.pythonhosted.org/packages/99/e2/8fdc9a2197411c8bc9d8b7de95804b0390edfc0e4fa7be30a599f8da4c70/zcrmsdk-0.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1ae8ce075818bb2675940074d94f0bab",
"sha256": "0b5cd7e4e9e7f4dadb2b71d71166079d5096a0f23b9cf1ee1c48496f503ee829"
},
"downloads": -1,
"filename": "zcrmsdk-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "1ae8ce075818bb2675940074d94f0bab",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46377,
"upload_time": "2018-02-13T06:15:18",
"url": "https://files.pythonhosted.org/packages/26/a2/213446b02e0f26f69e18960ed48c5034019782e06c21f370e0dd73cc7af3/zcrmsdk-0.0.1.tar.gz"
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "a8282d328d5d7fed0e6de26e7715fd40",
"sha256": "0cabfd1b25cb93d934c4ea49ffcaca858a0955f3a6fc1445d9e9dcc92ba74572"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a8282d328d5d7fed0e6de26e7715fd40",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 54032,
"upload_time": "2018-02-28T05:34:36",
"url": "https://files.pythonhosted.org/packages/fa/2e/92141627f91d594ea4c3720458c2970f35c96a47087f9c22f052b75dab2d/zcrmsdk-1.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8e7dc7ba831be7578f7a2141e190e0ef",
"sha256": "091c6372d8f2c5b5355f9ca60c9b365bd298bae2e114a0e6b4527670f9f9ea35"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "8e7dc7ba831be7578f7a2141e190e0ef",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48470,
"upload_time": "2018-02-28T05:35:00",
"url": "https://files.pythonhosted.org/packages/62/38/3ac00bfd665aa75a4f42666ed757158759d6822257df49cff83222a47c72/zcrmsdk-1.0.0.tar.gz"
}
],
"1.0.2": [
{
"comment_text": "",
"digests": {
"md5": "459d7f385b2f3970fef319b11e1bb0ee",
"sha256": "eaeb4ffbe79456e219cda2a052ef0ded9ad0499a558594c5d07b1ad6770cf0de"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "459d7f385b2f3970fef319b11e1bb0ee",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 112087,
"upload_time": "2018-07-03T09:14:55",
"url": "https://files.pythonhosted.org/packages/d4/7a/44b56d89ad156e7915a7e68e69c6ca4333b9d39a306772fe46614334e93d/zcrmsdk-1.0.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "37dfd334180bc910fff014b4df866c45",
"sha256": "0c0df1799be1a797ed2a80de526af45c0d140c4e56b4cb3ae80b592ef7b3c8b7"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "37dfd334180bc910fff014b4df866c45",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 49128,
"upload_time": "2018-07-03T09:14:58",
"url": "https://files.pythonhosted.org/packages/57/c4/f5ee72d7339f909b21c1121e7e2fd47a721545ea30058c3b8f2ef7f2c38a/zcrmsdk-1.0.2.tar.gz"
}
],
"1.0.3": [
{
"comment_text": "",
"digests": {
"md5": "1a43d7f96eaee84a3c56387654a12aa5",
"sha256": "2e679cd44c560f42d5658d4e68e4f0c1b00e1a0fcb0ff5c441460e3c2edcae18"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1a43d7f96eaee84a3c56387654a12aa5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 111972,
"upload_time": "2018-07-03T17:21:33",
"url": "https://files.pythonhosted.org/packages/6f/1b/e9c8bc3a5c4e6f109ec80ca987d8c183d50c2f4185050c9db59219ab7ca3/zcrmsdk-1.0.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "eb15e35028b5f58bc5d6c6e6d8c17d6c",
"sha256": "f2267e3ab9c8ca1db83502087d1c241195b664147567e5bb8f823e78cb95fd09"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "eb15e35028b5f58bc5d6c6e6d8c17d6c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 49022,
"upload_time": "2018-07-03T17:21:38",
"url": "https://files.pythonhosted.org/packages/f0/41/da07f9e42b06da4f9e2bba4971a323973bda1fb064d1d6ee62c3ff5bbd49/zcrmsdk-1.0.3.tar.gz"
}
],
"1.0.4": [
{
"comment_text": "",
"digests": {
"md5": "918fcd03139603cc1ebe92339c523ae5",
"sha256": "bf713795d92abd2785c021ca69b7989ce1ab0ad6a476b30264de5c4a1ad8ed98"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "918fcd03139603cc1ebe92339c523ae5",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 111783,
"upload_time": "2018-11-13T17:12:47",
"url": "https://files.pythonhosted.org/packages/4e/04/2bcf22b25cc3fa8660523156ddb7b672a9cdeb539d69afe0d80c0af16a23/zcrmsdk-1.0.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f6d1f2321d6ba4583a3e7e76da463f88",
"sha256": "055bbc42f0472546cc45076932e359ac76c6ed378ef6b9e372869d14397f91ae"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.4.tar.gz",
"has_sig": false,
"md5_digest": "f6d1f2321d6ba4583a3e7e76da463f88",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48548,
"upload_time": "2018-11-13T17:12:48",
"url": "https://files.pythonhosted.org/packages/8d/c1/4f926f17b3c195277953574178133fc66db7529857ae0ebac520bc9d4c59/zcrmsdk-1.0.4.tar.gz"
}
],
"1.0.5": [
{
"comment_text": "",
"digests": {
"md5": "99be72e18757e2a478cc067a6acaa625",
"sha256": "abfab14ce6cce2d3cf44f77d54a198062299d935a1466f32350605c9de740fcc"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.5-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "99be72e18757e2a478cc067a6acaa625",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 111144,
"upload_time": "2018-11-14T10:30:59",
"url": "https://files.pythonhosted.org/packages/b7/4e/226cac28c5e38d7d15e6f3224cecbb12af983c3b3eac946ce2a525b4f94e/zcrmsdk-1.0.5-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c356725231348052bb16322b92e25624",
"sha256": "18289574d0f1af5b610b399bcaa73d6aa4e762b16394eddff8dcef8c2ad14b34"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.5.tar.gz",
"has_sig": false,
"md5_digest": "c356725231348052bb16322b92e25624",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48580,
"upload_time": "2018-11-14T10:31:01",
"url": "https://files.pythonhosted.org/packages/47/15/7ec681fe6a8a9ba18441f8d4f772df0be52d1486aecdc5e5f93bc55c6673/zcrmsdk-1.0.5.tar.gz"
}
],
"1.0.6": [
{
"comment_text": "",
"digests": {
"md5": "e50d2529577463066592dc9f9eda4bde",
"sha256": "b875d49cfcbcb0922652c06046e434c1c52f782e998f261558e8a769d097b007"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.6-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "e50d2529577463066592dc9f9eda4bde",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 54487,
"upload_time": "2018-12-13T13:52:24",
"url": "https://files.pythonhosted.org/packages/c7/fb/671e36cf8ca82dfeb280809f5b4eda40b661e293440d8700609f6e3fe25b/zcrmsdk-1.0.6-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "4165a8c47c0b16add80ed50c8a047245",
"sha256": "8551b3a3d6b1dbc52b762e4d23da4d3e9f8663dc11acd0e915b5c01c6e4de606"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.6.tar.gz",
"has_sig": false,
"md5_digest": "4165a8c47c0b16add80ed50c8a047245",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48645,
"upload_time": "2018-12-13T13:52:27",
"url": "https://files.pythonhosted.org/packages/78/fd/c690c65e3ad721446831c9df57f7500a65bca2c5ae0d8d3651064fdde47b/zcrmsdk-1.0.6.tar.gz"
}
],
"1.0.7": [
{
"comment_text": "",
"digests": {
"md5": "c792ceb0a18b81007a933ccdcd7523f0",
"sha256": "e6fab8c2a9c9dd2df142b384aaa61aae08983e3669199ed98023be6c998fb60e"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.7-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c792ceb0a18b81007a933ccdcd7523f0",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 48034,
"upload_time": "2019-04-30T12:52:25",
"url": "https://files.pythonhosted.org/packages/2d/69/6e526a1c176690f9eb962df7b3c843133141a59fee89506f8a0bc6b6c60c/zcrmsdk-1.0.7-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "69c855ae15f0b55989ab79817d8e8ccf",
"sha256": "b47b87108e2b3bf1c53813e18a294f1c2f67496c76a9d3eb4b7d4331721da896"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.7.tar.gz",
"has_sig": false,
"md5_digest": "69c855ae15f0b55989ab79817d8e8ccf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47764,
"upload_time": "2019-04-30T12:52:28",
"url": "https://files.pythonhosted.org/packages/5a/54/cc17f09ad91608b1b4a2cef00d2f10a92d0132045d3d8f6e07f951193cd0/zcrmsdk-1.0.7.tar.gz"
}
],
"1.0.8": [
{
"comment_text": "",
"digests": {
"md5": "347a8e0fdaae057329e1ff006b27653f",
"sha256": "ebc0fb8791399204f9ac6d229ea6f1b39abd471b577abf82c43a9e84828f8b1c"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.8-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "347a8e0fdaae057329e1ff006b27653f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 49318,
"upload_time": "2019-04-30T13:17:26",
"url": "https://files.pythonhosted.org/packages/60/6d/f89ad5dd40112a231c4c73ebe1f0425b02894d3b24ef4f711fef00500fc5/zcrmsdk-1.0.8-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "75b08249d50f00230bd6225d20b8f5ac",
"sha256": "614ccc9dcc674c256a193b890dcb99d43d66de32d4657d8e918530fd14882ce4"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.8.tar.gz",
"has_sig": false,
"md5_digest": "75b08249d50f00230bd6225d20b8f5ac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47730,
"upload_time": "2019-04-30T13:17:28",
"url": "https://files.pythonhosted.org/packages/43/3c/5a8834c0e7ea940bb0b5b576ac0509335f021097dd3b939df58aa1cea31a/zcrmsdk-1.0.8.tar.gz"
}
],
"1.0.9": [
{
"comment_text": "",
"digests": {
"md5": "ada5f473798cdcd3f1e2c40830dd777a",
"sha256": "0b0a33211ae4ceea206c9c4623f3bba558f031bfe876a03673b41cae07eeaa67"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.9-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ada5f473798cdcd3f1e2c40830dd777a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 48104,
"upload_time": "2019-06-20T10:57:37",
"url": "https://files.pythonhosted.org/packages/a5/4c/b58392fbe1d153d51ac6493435dc13aa8484798fcb524b7c41ccd4688d3c/zcrmsdk-1.0.9-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a92881a9681dc6ba895ccf4fdf6e689b",
"sha256": "567470c55b71c07c4959d83515031844d5b4bc0b886d6dc620e769c675e2f112"
},
"downloads": -1,
"filename": "zcrmsdk-1.0.9.tar.gz",
"has_sig": false,
"md5_digest": "a92881a9681dc6ba895ccf4fdf6e689b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48918,
"upload_time": "2019-06-20T10:57:39",
"url": "https://files.pythonhosted.org/packages/eb/ec/4eceea870ab5b4e77599beda0c9e599f41efce9b44925f06396fa65b1272/zcrmsdk-1.0.9.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "7d97e17ce70bb3f734981572e339387a",
"sha256": "193d2f2056234685e2e3bbdc07c90f5d6accff5b39068cd54736d8cd0cd0f432"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "7d97e17ce70bb3f734981572e339387a",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 55037,
"upload_time": "2019-07-31T12:30:45",
"url": "https://files.pythonhosted.org/packages/7a/dd/6909eac5fec61381c2745c7f17663176343f69aff91d4b81e87a2d7d4c56/zcrmsdk-2.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "7dd4ef72a0b19e2f9c5edaf85eca34e5",
"sha256": "d48dd8d70880a6f89be5cec681eccb406b95df3f22344e784737d5f4f790b4c2"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "7dd4ef72a0b19e2f9c5edaf85eca34e5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 56024,
"upload_time": "2019-07-31T12:30:47",
"url": "https://files.pythonhosted.org/packages/a8/76/67d5a93be8d505295052f6e01e2ad5b85fa4bacaeb44a6f97cd4979db98f/zcrmsdk-2.0.0.tar.gz"
}
],
"2.0.1": [
{
"comment_text": "",
"digests": {
"md5": "2e7e928f627c9eefc801aec09cbdb38e",
"sha256": "9f6697343c635bfd0c89a992c1ebd6a0d71175ccef9821f493e8561b43977186"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "2e7e928f627c9eefc801aec09cbdb38e",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 61051,
"upload_time": "2019-09-04T09:12:40",
"url": "https://files.pythonhosted.org/packages/2e/58/bde4677a26d8c22a1abf0565c8927f72f05a2e097b5bc77741df42c8f927/zcrmsdk-2.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a938fa2cc4aa58b0cbfd97fe5c5acf65",
"sha256": "c150882a3245918e8746f04dc86e0f788e5543e3d70e651498b5f868576e7d06"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "a938fa2cc4aa58b0cbfd97fe5c5acf65",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 61939,
"upload_time": "2019-09-04T09:12:42",
"url": "https://files.pythonhosted.org/packages/bf/d4/ff772c7977b6e64d3abebaa73fa5bb8b94c6141e47f77bf5b6d3ac022f82/zcrmsdk-2.0.1.tar.gz"
}
],
"2.0.2": [
{
"comment_text": "",
"digests": {
"md5": "cfb9378f46b0091f268f03b0262aa02f",
"sha256": "8ae1b14d0397aeecd6f932e2de46e10654ea61bf84ea70a239ef19cbd792c6d3"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "cfb9378f46b0091f268f03b0262aa02f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 53474,
"upload_time": "2019-09-12T13:14:32",
"url": "https://files.pythonhosted.org/packages/b2/4f/9925fb58b630b7fbe7fa280fb36ec61d2d8d2cdfecfba3cae9bf967a966a/zcrmsdk-2.0.2-py2.py3-none-any.whl"
}
],
"2.0.3": [
{
"comment_text": "",
"digests": {
"md5": "b6c754edeab2a9a69dbee791011dbcdb",
"sha256": "482dd9d1c8e0465fac35febde28da690899ea054c5d5496631d3cb112d1bae1b"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b6c754edeab2a9a69dbee791011dbcdb",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 56834,
"upload_time": "2019-09-26T06:48:56",
"url": "https://files.pythonhosted.org/packages/35/d8/c3e2339ffe0d1a50d09e25e799c8a05a24a9fc4a1c13ba5e0fff691ddf6c/zcrmsdk-2.0.3-py2.py3-none-any.whl"
}
],
"2.0.4": [
{
"comment_text": "",
"digests": {
"md5": "395d7b8c90f21287239ba69a58230830",
"sha256": "497c22998bbc43ac0b7f6aae6b476fe787e76c9298ad84b6600ef65b612c55c5"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "395d7b8c90f21287239ba69a58230830",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 57060,
"upload_time": "2019-10-09T13:49:35",
"url": "https://files.pythonhosted.org/packages/11/b0/40f48dd28647ae607c3f487620d144048726a88021caa95fcf0b52af5513/zcrmsdk-2.0.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "52c57d046eebff7173153c97b544144e",
"sha256": "c53c6ce3feca044ceef8bd503b3532d950cc57991f2d4251cd3604f6e962f99e"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.4.tar.gz",
"has_sig": false,
"md5_digest": "52c57d046eebff7173153c97b544144e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 59170,
"upload_time": "2019-10-09T13:49:37",
"url": "https://files.pythonhosted.org/packages/a1/70/b26f877a2ae58b3001a9ee66263591e16fa9d17369881a05dce45261662d/zcrmsdk-2.0.4.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "395d7b8c90f21287239ba69a58230830",
"sha256": "497c22998bbc43ac0b7f6aae6b476fe787e76c9298ad84b6600ef65b612c55c5"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "395d7b8c90f21287239ba69a58230830",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 57060,
"upload_time": "2019-10-09T13:49:35",
"url": "https://files.pythonhosted.org/packages/11/b0/40f48dd28647ae607c3f487620d144048726a88021caa95fcf0b52af5513/zcrmsdk-2.0.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "52c57d046eebff7173153c97b544144e",
"sha256": "c53c6ce3feca044ceef8bd503b3532d950cc57991f2d4251cd3604f6e962f99e"
},
"downloads": -1,
"filename": "zcrmsdk-2.0.4.tar.gz",
"has_sig": false,
"md5_digest": "52c57d046eebff7173153c97b544144e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 59170,
"upload_time": "2019-10-09T13:49:37",
"url": "https://files.pythonhosted.org/packages/a1/70/b26f877a2ae58b3001a9ee66263591e16fa9d17369881a05dce45261662d/zcrmsdk-2.0.4.tar.gz"
}
]
}