{ "info": { "author": "Steven Serrata", "author_email": "sserrata@paloaltonetworks.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "===================================\nPalo Alto Networks Cloud Python SDK\n===================================\n\nPython idiomatic SDK for the Palo Alto Networks Application Framework.\n\nThe Palo Alto Networks Cloud Python SDK (or `pancloud` for short) was created to assist developers with\nprogrammatically interacting with the Palo Alto Networks Application Framework.\n\nThe primary goal is to provide full, low-level API coverage for the following Application Framework services:\n\n - Logging Service\n - Directory Sync Service\n - Event Service\n\nThe secondary goal is to provide coverage, in the form of helpers, for common tasks/operations.\n\n - Log/event pagination\n - OAuth 2.0 and token refreshing\n - More, coming soon!\n\n* Documentation: https://pancloud.readthedocs.io\n* Free software: ISC license\n\n-----\n\n|requests| |pipenv| |pypi| |travis| |docs|\n\n-----\n\nFeatures\n--------\n\n- HTTP client wrapper for the popular Requests library with full access to its features.\n- Language bindings for Logging Service, Event Service and Directory Sync Service.\n- Helper methods for performing common tasks, such as log/event pagination.\n- Support for OAuth 2.0 grant code authorization flow.\n- Library of example scripts illustrating how to leverage `pancloud`.\n- Support for API Explorer Developer Tokens (Introduced in v1.5.0).\n\nStatus\n------\n\nThe Palo Alto Networks Cloud Python SDK is considered **production/stable** at this time.\n\nInstallation\n------------\n\nFrom PyPI::\n\n $ pip install pancloud\n\nInstall From GitHub\n-------------------\n\nClone the repo::\n\n $ git clone https://github.com/PaloAltoNetworks/pancloud.git\n\nUse |pipenv| to install all dependencies and create a virtualenv for your project::\n\n $ pipenv install\n\nYou can specify which python version to use by adding \"--two\" or \"--three\"::\n\n $ pipenv --three install\n\nActivate the pipenv shell::\n\n $ pipenv shell\n\nObtaining and Using OAuth 2.0 Tokens\n------------------------------------\n\nWork with your Developer Relations representative to register your\napplication and receive the credentials needed to obtain an `access_token`.\nNormally, this requires a `client_id`, `client_secret`, and `refresh_token`.\nAPI Explorer may optionally be used to generate a Developer Token, which can\nbe used in place of the `client_id`, `client_secret`, and `refresh_token`.\n\nFor more information visit the following RTD page: `Credentials `__\n\nExample\n-------\n\nThe following example assumes valid credentials are present::\n\n $ ./logging_query.py\n\n QUERY: {\"queryId\":\"59801207-9a75-49c1-9f87-a2aa23f55774\",\"sequenceNo\":0,\"queryStatus\":\"RUNNING\",\"clientParameters\":{},\"result\":{\"esResult\":null,\"esQuery\":{\"table\":[\"panw.traffic\"],\"query\":{\"aggregations\":{},\"size\":1},\"selections\":[],\"params\":{}}}}\n\n JOB_FINISHED: queryId: 59801207-9a75-49c1-9f87-a2aa23f55774, sequenceNo: 0, retrieving from 0, size: 1, took: 117 ms\n\n RESULT: {\"queryId\":\"59801207-9a75-49c1-9f87-a2aa23f55774\",\"sequenceNo\":0,\"queryStatus\":\"JOB_FINISHED\",\"clientParameters\":{},\"result\":{\"esResult\":{\"took\":117,\"hits\":{\"total\":1878954,\"maxScore\":2,\"hits\":[{\"_index\":\"117270009_panw.all_2018042400-2018062300_000000\",\"_type\":\"traffic\",\"_id\":\"117270009_lcaas:0:149314:0\",\"_score\":2,\"_source\":{\"risk-of-app\":\"4\",\"logset\":\"ForwardToLoggingService\",\"bytes_received\":14882,\"natsport\":53295,\"sessionid\":806912,\"type\":\"traffic\",\"parent_start_time\":0,\"packets\":30,\"characteristic-of-app\":[\"able-to-transfer-file\",\"has-known-vulnerability\",\"tunnel-other-application\",\"prone-to-misuse\",\"is-saas\"],\"dg_hier_level_4\":0,\"dg_hier_level_1\":11,\"dg_hier_level_3\":0,\"dg_hier_level_2\":0,\"action\":\"allow\",\"recsize\":1622,\"from\":\"L3-Trust\",\"parent_session_id\":0,\"repeatcnt\":1,\"app\":\"web-browsing\",\"vsys\":\"vsys1\",\"nat\":1,\"technology-of-app\":\"browser-based\",\"pkts_received\":17,\"chunks_sent\":0,\"receive_time\":1524893357,\"non-standard-dport\":443,\"subcategory-of-app\":\"internet-utility\",\"chunks_received\":0,\"users\":\"panwdomain\\\\user1\",\"srcuser\":\"panwdomain\\\\user1\",\"proxy\":1,\"fwd\":1,\"config_ver\":2049,\"cloud_hostname\":\"sample-cft-fw\",\"customer-id\":\"117270009\",\"proto\":\"tcp\",\"non_std_dport\":1,\"tunneled-app\":\"tunneled-app\",\"is-saas-of-app\":0,\"natdport\":443,\"action_source\":\"from-policy\",\"assoc_id\":0,\"dst\":\"66.135.212.201\",\"natdst\":\"66.135.212.201\",\"chunks\":0,\"flags\":22020208,\"rule\":\"Allow Outbound Browsing\",\"dport\":443,\"elapsed\":0,\"sanctioned-state-of-app\":0,\"inbound_if\":\"ethernet1/2\",\"device_name\":\"sample-cft-fw\",\"subtype\":\"end\",\"time_received\":1524893357,\"actionflags\":-9223372036854776000,\"tunnelid_imsi\":0,\"session_end_reason\":\"tcp-fin\",\"natsrc\":\"10.0.0.100\",\"seqno\":1633879,\"src\":\"10.0.1.101\",\"start\":1524893341,\"time_generated\":1524893357,\"outbound_if\":\"ethernet1/1\",\"category-of-app\":\"general-internet\",\"bytes_sent\":2152,\"srcloc\":\"10.0.0.0-10.255.255.255\",\"pkts_sent\":13,\"dstloc\":\"US\",\"serial\":\"\",\"bytes\":17034,\"vsys_id\":1,\"to\":\"L3-Untrust\",\"category\":\"10006\",\"sport\":33562,\"tunnel\":0}}]},\"id\":\"59801207-9a75-49c1-9f87-a2aa23f55774\",\"from\":0,\"size\":1,\"completed\":true,\"state\":\"COMPLETED\",\"timed_out\":false},\"esQuery\":{\"table\":[\"panw.traffic\"],\"query\":{\"aggregations\":{},\"size\":1},\"selections\":[],\"params\":{}}}}\n\n DELETE: {\"success\":true}\n\nContributors\n------------\n\n- Kevin Steves - `github `__\n- Steven Serrata - `github `__\n\n.. |pypi| image:: https://img.shields.io/pypi/pyversions/pancloud.svg\n :target: https://pypi.python.org/pypi/pancloud\n\n.. |travis| image:: https://img.shields.io/travis/PaloAltoNetworks/pancloud.svg\n :target: https://travis-ci.org/PaloAltoNetworks/pancloud\n\n.. |docs| image:: https://readthedocs.org/projects/pancloud/badge/?version=latest\n :target: https://pancloud.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. |requests| image:: https://img.shields.io/badge/docs-requests-blue.svg\n :target: http://docs.python-requests.org/en/master\n :alt: Documentation Status\n\n.. |pipenv| image:: https://img.shields.io/badge/docs-pipenv-green.svg\n :target: https://docs.pipenv.org\n :alt: Documentation Status\n\n\n=======\nHistory\n=======\n\n1.5.1 (2019-04-26)\n------------------\n\n* Updated Pipfile.lock.\n* Replaced recursion with loop pattern in `LoggingService` `xpoll()` method.\n* Added `decode('utf-8')` to base64 decoded JWT to ensure compatibility with `json.loads()`.\n* Addressed minor typos in docs.\n\n1.5.0 (2019-02-27)\n------------------\n\n* Added `flush()` method to `EventService` class.\n* Added `auto_refresh` support to `HTTPClient` `_apply_credentials()` method.\n* Removed `auto_retry` feature from `HTTPClient` class.\n* Refactored `HTTPClient` class `request()` method keyword argument overrides.\n* Removed unused `token_revoke_url` keyword argument.\n* Added support for API Explorer Developer Tokens to `Credentials` class.\n* Refactored `Credentials` `refresh()` method.\n\n1.4.0 (2018-10-04)\n------------------\n\n* Added default URL to `HTTPClient` class.\n* Updated docstrings for `StorageAdapter`, `TinyDBStore` and `Credentials` classes.\n* Now returning `state` as `str` instead of `UUID` in `get_authorization_url()` method.\n* Now unifying display results for -m/-s/--write. For -m you now need an output specifier (-j/-p) to print the response.\n* Added `decode_jwt_payload()` method to allow for extracting/using all JWT fields.\n* Added -s option to allow for invocation of setter methods. This allows modifying of credential store fields.\n* Added credential setters to allow for modifying credentials.\n* Updated examples.\n* Switched from using `requests` to `HTTPClient` in `Credentials` class.\n* Now checking JWT access_token `exp` to determine if refresh if needed.\n* Now generating a new `state` each time `get_authorization_url()` is called.\n* Added `__repr__` to `Credentials` class with support for masking secrets.\n* Updated -E --ack,nack,poll options usage to be accurate.\n* `JOB_FAILED` response in `xpoll()` queryStatus now includes errorCode.\n\n1.3.0 (2018-08-04)\n------------------\n\n* Added support for custom read/write credentials path.\n* `TinyDBStore` `fetch_credential()` now returns `None` instead of empty `str`.\n* Fixed bug that caused `_resolve_credential()` to be executed an inefficient number of times.\n* Now updating `HTTPClient` headers instead of overriding them which previously broke HTTP persistence.\n* Added JMESPath `isotime()` function to `summit.py` which prints epoch.\n* Added argument to `EventService` `xpoll()` method to support sleeping between polls.\n* Added `PAN_` prefix to envars to avoid name collisions.\n* Fixed bug when `R['R1_obj']['LoggingService.query']` is None and allow json=None case with special case of --end -1 which will not set a default end of now.\n* Fixed bug that nulled out credentials if an error occurred during a `fetch_tokens()` or `refresh()` operation.\n* Now enforcing strict credential resolution. Previous behavior allowed for merging credentials from different providers.\n* Added support for caching `refresh_token` to support rolling.\n* Added support for writing logs to `summit.py`.\n* Switch from using `data` param to `json` param in client/service methods.\n* Now defaulting `R1` to `None` so don't send body unless specified.\n* Now printing request headers and body at debug level 3 in `summit.py`.\n* Added enhancements to `summit.py` for specifying `startTime` and `endTime`.\n\n1.2.3 (2018-06-21)\n------------------\n\n* Reversed the `access_token` lookup order in get_credentials() method.\n* Added `_resolve_credential()` to `access_token()` property method to support token caching.\n* Now comparing passed `access_token` in `refresh()` method to value returned by property method.\n\n1.2.2 (2018-06-20)\n------------------\n\n* Added pancloud.adapters to find_packages include list to resolve issue with PyPI package.\n\n1.2.1 (2018-06-20)\n------------------\n\n* Added requirements.txt to MANIFEST.in to address build issues with PyPI package.\n* Fixed issue in README.rst that prevented PyPI from properly rendering.\n\n1.2.0 (2018-06-20)\n------------------\n\n* Updated README.rst\n* Updated RTD API Reference.\n* Added `pancloud` to requirements_dev.txt\n* Added docstrings to `Credentials` property methods.\n* Changed logging xpoll() to return entire log entry instead of just `_source` dictionary.\n* Added `Credentials` Storage Adapter feature and moved `TinyDB` code to `tinydb_adapter.py`, the default storage adapter.\n* Automatically carry `queryId` from `logging --query` response to `--id` in subsequent `--poll`, `--xpoll` and `--delete` in `summit.py`.\n* Various bug fixes and improvements to `summit.py`.\n* Added support for caching `access_token` in credentials store.\n* Added `write()` method to `LoggingService` class to support writing logs.\n* Fixed issues with `Credentials` `get_authorization_url` and `fetch_tokens` methods.\n* Added `logging_write.py` to examples.\n\n1.1.0 (2018-05-08)\n------------------\n\n* Updated logging `xpoll()` to reflect behavior of current API.\n* Added `credentials.py` module to support OAuth2 operations.\n* Added `auto_refresh` and `auto_retry` support to `HTTPClient()`.\n* Added `PartialCredentialsError` exception to handle cases where incomplete credentials are passed to `Credentials`.\n* Removed extraneous dependencies, e.g. pyopenssl.\n* Cleaned up requirements.txt and PipLock files.\n* Added `TinyDB` package for reading/writing `credentials.json` file.\n* Now raising `PanCloudError` for `enforce_json` errors.\n* Removed logging `poll_all()` method and example script.\n* Now checking if `sequence_no` is `None` before incrementing in logging `iter_poll()` method.\n* Added event `xpoll()` method to support iterating through events.\n* Introducing `summit.py`, a command-line interface for `pancloud`.\n* Added `credentials` support to `summit.py` to enable writing `credentials.json` file and passing `Credentials` with requests.\n* Updated example scripts library to incorporate new credentials feature.\n\n1.0.3 (2018-04-26)\n------------------\n\n* Overhauled and updated RTDs\n* Updated `__init__.py` to allow package-level imports\n* Fixed issue where starrifying authorization token in `__repr__` overrode value in request header.\n\n1.0.2 (2018-03-20)\n------------------\n\n* Updated .gitignore to exclude .pytest_cache\n* Excluding certain functions/classes from tests until API Gateway is ready\n* Renamed tests modules to all lowercase\n* Bumped version to 1.0.2 from 1.0.1\n* Updated 'query' and 'poll' endpoints to reflect current working state of APIs\n* Fixed .travis.yml branch regex\n* Updated example scripts\n* Removed pyopenssl property method from HTTPClient\n* Removed test_repr() as not all tested python versions support ordered kwargs\n\n1.0.1 (2018-03-19)\n------------------\n\n* Default to empty `path`\n\n1.0.0 (2018-03-16)\n------------------\n\n* First release.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/PaloAltoNetworks/pancloud", "keywords": "pancloud", "license": "ISC license", "maintainer": "", "maintainer_email": "", "name": "pancloud", "package_url": "https://pypi.org/project/pancloud/", "platform": "", "project_url": "https://pypi.org/project/pancloud/", "project_urls": { "Homepage": "https://github.com/PaloAltoNetworks/pancloud" }, "release_url": "https://pypi.org/project/pancloud/1.5.1/", "requires_dist": null, "requires_python": "", "summary": "Python idiomatic SDK for the Palo Alto Networks Application Framework.", "version": "1.5.1" }, "last_serial": 5194620, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "e8a1e2c0dbc100397b0ee3b73507c3b7", "sha256": "ea69a1e39ee78f66614476047bf50e83d5284281d12126696c9bf97619ec7cdc" }, "downloads": -1, "filename": "pancloud-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8a1e2c0dbc100397b0ee3b73507c3b7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17286, "upload_time": "2018-03-16T19:07:11", "url": "https://files.pythonhosted.org/packages/e0/ed/9f387f9b0e970581db22b864eaeb66bd0dd2c413a8e671622fb220bea246/pancloud-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5423deab861fe0a3d5cf5515afd15ff", "sha256": "0b22ed372bdc6b777d6d5e630574de5aecf7c5a35d47be6f3f911350e00ddd4a" }, "downloads": -1, "filename": "pancloud-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b5423deab861fe0a3d5cf5515afd15ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22763, "upload_time": "2018-03-16T19:07:13", "url": "https://files.pythonhosted.org/packages/60/6a/cf579905e3c11f9fa8ef8dd46ac66d6672aca397535c0d72962040d7eccd/pancloud-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "180d475d7fd58921b9ea653d15c38e09", "sha256": "3691769c19481245b789badb7ca18088f7de0c5d260d45f26b74a3c59523b263" }, "downloads": -1, "filename": "pancloud-1.0.1.tar.gz", "has_sig": true, "md5_digest": "180d475d7fd58921b9ea653d15c38e09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23459, "upload_time": "2018-03-19T19:40:14", "url": "https://files.pythonhosted.org/packages/b4/2e/fcd7ebd7f223625bcc6a66eb0bf4a31c989283e409ee14b31452de4d1f4e/pancloud-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "795a267105a1e8eddd569307ab6f4fd9", "sha256": "dfe2cc07b70d4e11b3b08e064c3706dbf669c3f912826d1d5c61683e1ec669f4" }, "downloads": -1, "filename": "pancloud-1.0.2.tar.gz", "has_sig": true, "md5_digest": "795a267105a1e8eddd569307ab6f4fd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22764, "upload_time": "2018-03-21T00:32:05", "url": "https://files.pythonhosted.org/packages/ca/7c/216b4dc9fbb164c0ec557fc9c7d04898a4fc462e43d33134726ad5c1912b/pancloud-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "204fa3d189431a38c27b1c5797addf36", "sha256": "6ad59f17c4ef8ecf33371f9fb076c49373e696874b8643e2490e28c90c2c4bbc" }, "downloads": -1, "filename": "pancloud-1.0.3.tar.gz", "has_sig": true, "md5_digest": "204fa3d189431a38c27b1c5797addf36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 196760, "upload_time": "2018-04-26T18:52:10", "url": "https://files.pythonhosted.org/packages/c6/d8/baa181c04455168e01d04f6c7bfd48bb48f6566410645d7a8a6034f0cb28/pancloud-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "04de382d2b6c81d24f8a8a631d8e5d9d", "sha256": "a658d38f6561945fa94282d95cc99243279b6a2e7f556acecd10016ca25a6454" }, "downloads": -1, "filename": "pancloud-1.1.0.tar.gz", "has_sig": true, "md5_digest": "04de382d2b6c81d24f8a8a631d8e5d9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 379619, "upload_time": "2018-05-09T03:21:03", "url": "https://files.pythonhosted.org/packages/db/ea/e790cf16ddecb6495a6a52fea00b069cc7ee62f6d60f38e7e9167ec30511/pancloud-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "f2832e6ef073bf2b2c7adec7596c4631", "sha256": "47e34780acf858755432e9dd30c3948447882572dfd0b05e43972dfdddfa18ac" }, "downloads": -1, "filename": "pancloud-1.2.0.tar.gz", "has_sig": true, "md5_digest": "f2832e6ef073bf2b2c7adec7596c4631", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 208520, "upload_time": "2018-06-20T21:01:39", "url": "https://files.pythonhosted.org/packages/c2/5d/7951c7197e29c1ff8213be4c3bae7e18dd383fb5577d94ecd1b1b08e339f/pancloud-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "32bfd0a9a13033dd2c782080b2d0d5b9", "sha256": "b404b2ad90896961be6ded0ed7ec5809577e0ea263ad6e0366b18f9e3670a8bd" }, "downloads": -1, "filename": "pancloud-1.2.1.tar.gz", "has_sig": true, "md5_digest": "32bfd0a9a13033dd2c782080b2d0d5b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 208770, "upload_time": "2018-06-20T21:46:12", "url": "https://files.pythonhosted.org/packages/67/07/2ad54d38283e0a7a8bbbcbb7a918a705e6a6b57e85b82e103ea1befcd040/pancloud-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "896e07591257d37a90098bced92820b3", "sha256": "c65566862425589f92462fec497adbff90d65956d90224fe601389641f57c599" }, "downloads": -1, "filename": "pancloud-1.2.2.tar.gz", "has_sig": true, "md5_digest": "896e07591257d37a90098bced92820b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 210209, "upload_time": "2018-06-20T22:53:00", "url": "https://files.pythonhosted.org/packages/dc/6c/292a44427981e6cd375e9b0d5895f37e9a51a6816c6187af4a7e53039a6f/pancloud-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "447d6a0bd90fe864d55c3413b6921727", "sha256": "87bc857a06c022132c087ee3d1bc67fbba279cd410bd1e5f945006bdc6154bce" }, "downloads": -1, "filename": "pancloud-1.2.3.tar.gz", "has_sig": true, "md5_digest": "447d6a0bd90fe864d55c3413b6921727", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 210446, "upload_time": "2018-06-21T19:59:13", "url": "https://files.pythonhosted.org/packages/a9/2f/15c400b17e50b3a472062980237efae3183356a17a9720e039a97eeb4b15/pancloud-1.2.3.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "d2508ebd9af15326a31939117836244f", "sha256": "f79833d5c9860cf728b223a8b756358b89679adc6f68d820c934a3671c40e38d" }, "downloads": -1, "filename": "pancloud-1.3.0.tar.gz", "has_sig": true, "md5_digest": "d2508ebd9af15326a31939117836244f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 215763, "upload_time": "2018-08-05T15:05:24", "url": "https://files.pythonhosted.org/packages/3c/a2/0ccca207aeca54f8447f8b78fb5016eab752e2d822e2d92cddd0e3f11911/pancloud-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "2364d20123f0ff9ee809c0aac184417c", "sha256": "35e97c110d3bf95ab7ecfd3f6e50ebc3b533d129badf9392493defdaacfbed29" }, "downloads": -1, "filename": "pancloud-1.4.0.tar.gz", "has_sig": true, "md5_digest": "2364d20123f0ff9ee809c0aac184417c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 391476, "upload_time": "2018-10-05T18:03:02", "url": "https://files.pythonhosted.org/packages/2d/8f/1a69667d9c263b94222edd35a8d6ce66f7b518dd32e4ed4cc89e521f1d33/pancloud-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "51708dd7530dbda39e664509398f79c9", "sha256": "1fc778cddb5bb6d7f18c4ea02a3896563656641efc7684d60a675aaa16836eb9" }, "downloads": -1, "filename": "pancloud-1.5.0.tar.gz", "has_sig": true, "md5_digest": "51708dd7530dbda39e664509398f79c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 392289, "upload_time": "2019-02-28T00:01:41", "url": "https://files.pythonhosted.org/packages/7c/33/7d544686cf9190a869ed6be6e46585ae69f9c007bdb76c96582bc8e0f56f/pancloud-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "f4c2a2b91ba2d31ccd9dba25f4a91981", "sha256": "374ca770405f9bfda69489ad9cd1ef3d716287f584771566cf9ff6d22f189a4e" }, "downloads": -1, "filename": "pancloud-1.5.1.tar.gz", "has_sig": true, "md5_digest": "f4c2a2b91ba2d31ccd9dba25f4a91981", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1840943, "upload_time": "2019-04-26T19:43:57", "url": "https://files.pythonhosted.org/packages/80/0a/043a6123309750b1a80fdb9d11943c6e31a8092b781e37f29a889efd167a/pancloud-1.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f4c2a2b91ba2d31ccd9dba25f4a91981", "sha256": "374ca770405f9bfda69489ad9cd1ef3d716287f584771566cf9ff6d22f189a4e" }, "downloads": -1, "filename": "pancloud-1.5.1.tar.gz", "has_sig": true, "md5_digest": "f4c2a2b91ba2d31ccd9dba25f4a91981", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1840943, "upload_time": "2019-04-26T19:43:57", "url": "https://files.pythonhosted.org/packages/80/0a/043a6123309750b1a80fdb9d11943c6e31a8092b781e37f29a889efd167a/pancloud-1.5.1.tar.gz" } ] }