{ "info": { "author": "Cheese", "author_email": "ch33s3codes@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "**dfuse** is an open source library written in Python providing an easy to use wrapper around the [dfuse.io](https://dfuse.io/) API. This library has been tested with Python 3.6.x and Python 3.7.x.\n\n## INSTALLATION\n\n```bash\n\n $ pipenv install dfuse\n```\n \n- It is important that you do this from a virtual environment.\n\n\n## Prerequisites\n\n To get up and rolling, create a .env or .ini file in the project folder, with contents copied from the example.env file. (as required by [python decouple](https://pypi.org/project/python-decouple/))\n\n Make sure to substitute the predefined keys with the appropriate ones.\n\n ```API_KEY = YOUR_API_KEY_HERE```\n\n ```BASE_URL = https://mainnet.eos.dfuse.io``` \n \n (Here you can specify either https://mainnet.eos.dfuse.io or https://worbli.eos.dfuse.io \n \n or https://kylin.eos.dfuse.io or https://jungle.eos.dfuse.io.)\n\n\n**ENSURE NO trailing slash at the end of the BASE_URL**\n\n\n ```BLOCK_TIME_URL = /v0/block_id/by_time```\n\n ```TRX_URL = /v0/transactions```\n\n ```STATE_BASE_URL = /v0/state```\n\n You can also define these values as environment variables.\n\nIf the dfuse API is upgraded to another version, say v1, it is easier to switch to that with minimal changes. You only edit your .env file to match the changes.\n\n### JWT Caching\n\nShort-time lived JWT Tokens are persisted on a local sqlite3 database, and are usable for upto 22 hours.\n\n## API Documentation:\n\n\nThis API can currently retrieve the following data from [dfuse.io](https://dfuse.io/):\n\n#### **`GET /v0/block_id/by_time/by_time?time=2019-03-04T10:36:14.5Z&comparator=gte`**\n- **`Description`** - Fetches the block ID, time and block number for the given timestamp, using the ```time``` and ```comparator``` parameters.\n- **`Types`** \n\n - ```time``` - datetime\n - ```comparator``` - string\n- **`Optional parameters:`**\n - None\n- This returns a `BlockTimeStampType`\n\n- You can access all the fields in the response by getting the `data` key, as shown in the following example.\n```python\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> import datetime\n>>> obj = dfuse_.get_block_at_timestamp(time=datetime.datetime.now()-datetime.timedelta(1), comparator='gte')\n>>> obj\n\n\n\n>>> obj.data\n\n{'block': \n {\n 'id': '04763b536d8da0a1d7e10e666333b51efec16d5c5264a69f736acf37a14dec2b', \n 'num': 74857299, \n 'time': '2019-08-19T14:32:59Z'\n }\n}\n\n```\n\n#### **`GET /v0/transactions/:id`**\n- **`Description`** \n \n Fetches the transaction lifecycle associated with the provided path parameter ```:id```.\n\n- **`Types`** \n \n - ```id``` - string\n \n- **`Optional parameters:`**\n - None\n\n```python\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.get_transaction_lifecycle(id='1d5f57e9392d045ef4d1d19e6976803f06741e11089855b94efcdb42a1a41253')\n\n>>> obj\n\n \n\n\n>>> obj.data\n\n {\n 'transaction_status': 'executed',\n 'id': '1d5f57e9392d045ef4d1d19e6976803f06741e11089855b94efcdb42a1a41253',\n 'transaction': {'expiration': '2019-04-16T14:36:11',\n 'ref_block_num': 65222,\n 'ref_block_prefix': 943310534,\n 'max_net_usage_words': 0,\n 'max_cpu_usage_ms': 0,\n 'delay_sec': 0,\n 'context_free_actions': [],\n 'actions': [{'account': 'maouehmaoueh',\n 'name': 'cfainline',\n 'authorization': [{'actor': 'maouehmaoueh', 'permission': 'active'}],\n 'hex_data': '03313233'}],\n 'transaction_extensions': [],\n 'signatures': ['SIG_K1_Jyv32XzrAGQepnk7p3YwXbRyNcp6Cztt8peR41GjfJ5hjDhjNfyf4ViubcShaDGd1BB9NEKGRrGjsQadzvwKrp7Wkjx9kh'],\n 'context_free_data': []},\n 'execution_trace': {'id': '1d5f57e9392d045ef4d1d19e6976803f06741e11089855b94efcdb42a1a41253',\n 'block_num': 53280461,\n 'block_time': '2019-04-16T14:35:41.5',\n 'producer_block_id': '032cfecd63f2e42da2fb5b7f632acadbe5153756db615c5d28bbc99f9bd0976d',\n 'receipt': {'status': 'executed',\n 'cpu_usage_us': 1191,\n 'net_usage_words': 12},\n 'elapsed': 71934,\n 'net_usage': 96,\n 'scheduled': False,\n 'action_traces': [{'receipt': {'receiver': 'maouehmaoueh',\n 'act_digest': '5a2ffd1d0376049b5fcaa7d5f122723973c8fea40de9aba059bc439b4f77fd5e',\n 'global_sequence': '6249291689',\n 'auth_sequence': [['maouehmaoueh', 13]],\n 'recv_sequence': 5,\n 'code_sequence': 2,\n 'abi_sequence': 1},\n 'act': {'account': 'maouehmaoueh',\n 'name': 'cfainline',\n 'authorization': [{'actor': 'maouehmaoueh', 'permission': 'active'}],\n 'data': {'data': '123'},\n 'hex_data': '03313233'},\n 'context_free': False,\n 'elapsed': 71857,\n 'console': '',\n 'trx_id': '1d5f57e9392d045ef4d1d19e6976803f06741e11089855b94efcdb42a1a41253',\n 'block_num': 53280461,\n 'block_time': '2019-04-16T14:35:41.5',\n 'producer_block_id': '032cfecd63f2e42da2fb5b7f632acadbe5153756db615c5d28bbc99f9bd0976d',\n 'account_ram_deltas': None,\n 'except': None,\n 'inline_traces': [{'receipt': {'receiver': 'dfuseiohooks',\n 'act_digest': '469d68d4e68c0adc6fd302ca60b4d27256400965b90baf7a5736c9e0ed0b3d0f',\n 'global_sequence': '6249291690',\n 'auth_sequence': [],\n 'recv_sequence': 2,\n 'code_sequence': 0,\n 'abi_sequence': 1},\n 'act': {'account': 'dfuseiohooks',\n 'name': 'event',\n 'data': {'data': 'testing=123', 'key': ''},\n 'hex_data': '000b74657374696e673d313233'},\n 'context_free': True,\n 'elapsed': 11,\n 'console': '',\n 'trx_id': '1d5f57e9392d045ef4d1d19e6976803f06741e11089855b94efcdb42a1a41253',\n 'block_num': 53280461,\n 'block_time': '2019-04-16T14:35:41.5',\n 'producer_block_id': '032cfecd63f2e42da2fb5b7f632acadbe5153756db615c5d28bbc99f9bd0976d',\n 'account_ram_deltas': None,\n 'except': None,\n 'inline_traces': None}]}],\n 'failed_dtrx_trace': None,\n 'except': None},\n 'execution_block_header': {'timestamp': '2019-04-16T14:35:41.5',\n 'producer': 'bitfinexeos1',\n 'confirmed': 0,\n 'previous': '032cfeccf3b57dd793d3ff831adb381225fa7c2b4a998a3c16502c2774581e36',\n 'transaction_mroot': 'a4317c9ce3c3925fac8bda2463a06d5b5876b37ea4b0b2af36bb42d028910a66',\n 'action_mroot': '16187708fc3827f31d2fbe8ecf6c1877e2b5f0050e63f025edd01eeff4dec82f',\n 'schedule_version': 773,\n 'new_producers': None,\n 'header_extensions': []},\n 'dtrxops': None,\n 'creation_tree': [],\n 'dbops': None,\n 'ramops': None,\n 'tableops': None,\n 'pub_keys': ['EOS8b3K9r6mLDykeL7GzGJCFt9Z5SRSHSXFT77yHz8e3z7en1tFwG'],\n 'created_by': None,\n 'canceled_by': None,\n 'execution_irreversible': True,\n 'creation_irreversible': True,\n 'cancelation_irreversible': False\n }\n\n >>> obj.transaction_status\n\n 'executed'\n```\n\n#### **`GET /v0/state/abi?account={account}&json={true/false}&block_num=int`**\n- **`Description`** \n \n Fetch the ABI for a given contract ```account```, at any ```block_num``` height.\n The ```block_num``` parameter determines for which block you want the given ABI. This can be anywhere in the chain\u2019s history. \n \n If the requested ```block_num``` is irreversible, you will get an immutable ABI. If the ABI has changed while still in a reversible chain, you will get this new ABI, but it is not guaranteed to be the view that will pass irreversibility. Inspect the returned block_num parameter of the response to understand from which longest chain the returned ABI is from.\n\n The returned ABI is the one that was active at the block_num requested\n\n- **`Types`** \n - ```account``` - string (required)\n - ```json``` - bool (optional, defaults to False)\n - ```block_num``` - int (Optional - defaults to ```head block num```)\n \n- **`Optional parameters:`**\n - ```json```\n - ```block_num```\n\n\n```python\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.fetch_abi(account='arbarotokenn', block_num=57202657)\n\n>>> obj\n\n \n\n>>> obj.data\n\n {'block_num': 57202658,\n 'account': 'arbarotokenn',\n 'abi': {'version': 'eosio::abi/1.1',\n 'structs': [{'name': 'account',\n 'base': '',\n 'fields': [{'name': 'balance', 'type': 'asset'},\n {'name': 'lastclaim', 'type': 'asset'}]},\n {'name': 'claim',\n 'base': '',\n 'fields': [{'name': 'owner', 'type': 'name'},\n {'name': 'tokensym', 'type': 'symbol'}]},\n {'name': 'close',\n 'base': '',\n 'fields': [{'name': 'owner', 'type': 'name'},\n {'name': 'symbol', 'type': 'symbol'}]},\n {'name': 'create',\n 'base': '',\n 'fields': [{'name': 'issuer', 'type': 'name'},\n {'name': 'maximum_supply', 'type': 'asset'}]},\n {'name': 'currency_stats',\n 'base': '',\n 'fields': [{'name': 'supply', 'type': 'asset'},\n {'name': 'max_supply', 'type': 'asset'},\n {'name': 'issuer', 'type': 'name'},\n {'name': 'totaldividends', 'type': 'asset'}]},\n {'name': 'issue',\n 'base': '',\n 'fields': [{'name': 'to', 'type': 'name'},\n {'name': 'quantity', 'type': 'asset'},\n {'name': 'memo', 'type': 'string'}]},\n {'name': 'open',\n 'base': '',\n 'fields': [{'name': 'owner', 'type': 'name'},\n {'name': 'symbol', 'type': 'symbol'},\n {'name': 'ram_payer', 'type': 'name'}]},\n {'name': 'retire',\n 'base': '',\n 'fields': [{'name': 'quantity', 'type': 'asset'},\n {'name': 'memo', 'type': 'string'}]},\n {'name': 'transfer',\n 'base': '',\n 'fields': [{'name': 'from', 'type': 'name'},\n {'name': 'to', 'type': 'name'},\n {'name': 'quantity', 'type': 'asset'},\n {'name': 'memo', 'type': 'string'}]}],\n 'actions': [{'name': 'claim', 'type': 'claim', 'ricardian_contract': ''},\n {'name': 'close', 'type': 'close', 'ricardian_contract': ''},\n {'name': 'create', 'type': 'create', 'ricardian_contract': ''},\n {'name': 'issue', 'type': 'issue', 'ricardian_contract': ''},\n {'name': 'open', 'type': 'open', 'ricardian_contract': ''},\n {'name': 'retire', 'type': 'retire', 'ricardian_contract': ''},\n {'name': 'transfer', 'type': 'transfer', 'ricardian_contract': ''}],\n 'tables': [{'name': 'accounts', 'index_type': 'i64', 'type': 'account'},\n {'name': 'stat', 'index_type': 'i64', 'type': 'currency_stats'}]}}\n\n\n```\n\n#### **`POST /v0/state/abi/bin_to_json`**\n- **`Description`** \n \n Decodes binary rows (in hexadecimal string) for a given table against the ABI of a given contract account, at any block height.\n \n The returned ABI is the one that was active at the block_num requested.\n\n The block_num parameter determines for which block you want to decode rows against. This can be anywhere in the chain\u2019s history.\n\n If the requested `block_num` is irreversible, decoding will be performed against an immutable ABI. If the ABI has changed while still in a reversible chain, decoding will be performed against this new ABI, but it is not guaranteed to be the view that will pass irreversibility. Inspect the returned `block_num` parameter of the response to understand from which longest chain the returned ABI is from.\n\n- **`Types`** \n - ```account``` - string (required)\n - ```table``` - The name-encoded table name you want to retrieve (contract dependent)\n - ```hex_rows``` - An array of hexadecimal rows to decode. Each row must be a valid hexadecimal string representation of the row to decode against the ABI.\n - ```block_num``` - int (Optional - defaults to ```head block num```)\n \n- **`Optional parameters:`**\n - ```block_num```\n\n```python\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.bin_to_json(account='eosio.token', table='accounts', hex_rows=[\"aa2c0b010000000004454f5300000000\"], block_num=2600000)\n\n>>> obj\n\n \n\n>>> obj.data\n\n {\n 'block_num': 181,\n 'account': 'eosio.token',\n 'table': 'accounts',\n 'rows': [\n {\n 'balance': '1750.9546 EOS'\n }\n ]\n }\n\n>>> obj.account\n\n 'eosio.token'\n\n>>> obj.block_num\n\n 181\n\n```\n\n#### **`GET /v0/state/key_accounts`**\n- **`Description`** \n \n Fetches the accounts controlled by the given public key, at any block height.\n\n NOTE: this endpoint is a drop-in replacement for the /v1/history/get_key_accounts API endpoint from standard nodeos. Simply tweak the URL, and add the Bearer token.\n\n The block_num parameter determines for which block height you want a list of accounts associated to the given public key. This can be anywhere in the chain\u2019s history.\n\n If the requested block_num is irreversible, you will get an immutable list of accounts. Otherwise, there are chances that the returned value moves as the chain reorganizes.\n \n\n- **`Types`** \n - ```public_key``` - The public key to fetch controlled accounts for. string (required)\n\n - ```block_num``` - int (Optional - defaults to ```head block num```)\n \n- **`Optional parameters:`**\n - ```block_num```\n\n```python\n\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.get_key_accounts(public_key='EOS744heXNxjLamUjLxaLpn6gREh3CVf5VvFESq9sG969VmcNYyq6')\n\n>>> obj\n\n \n\n>>> obj.data\n\n {'block_num': 76752386, 'account_names': ['greenunicorn']}\n\n>>> obj.block_num\n\n 76752386\n\n>>> obj.account_names\n\n ['greenunicorn']\n```\n\n\n#### **`GET /v0/state/permission_links`**\n- **`Description`** \n \n Fetches snapshots of any account\u2019s linked authorizations on the blockchain, at any block height.\n\n The block_num parameter determines for which block you want a linked authorizations snapshot. This can be anywhere in the chain\u2019s history.\n\n If the requested block_num is irreversible, you will get an immutable snapshot. If the block_num is still in a reversible chain, you will get a full consistent snapshot, but it is not guaranteed to be the view that will pass irreversibility. Inspect the returned up_to_block_id parameter to understand from which longest chain the returned value is a snapshot of.\n \n\n- **`Types`** \n - ```account``` - string (required)\n\n - ```block_num``` - int (Optional - defaults to ```head block num```)\n \n- **`Optional parameters:`**\n - ```block_num```\n\n\n```python\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.get_permission_links(account='eoscanadacom', block_num=25000000) \n\n>>> obj\n\n \n\n>>> obj.data\n\n {'last_irreversible_block_id': '04931d68265c1fba52f772e031e67d2f16d898ed0ee0c60384db163345e7d0f1',\n 'last_irreversible_block_num': 76750184,\n 'linked_permissions': [{'contract': 'eosforumdapp',\n 'action': 'post',\n 'permission_name': 'day2day'},\n {'contract': 'eosforumdapp',\n 'action': 'status',\n 'permission_name': 'day2day'},\n {'contract': 'eosforumdapp',\n 'action': 'unpost',\n 'permission_name': 'day2day'},\n {'contract': 'eosio',\n 'action': 'claimrewards',\n 'permission_name': 'claimer'},\n {'contract': 'eosio', 'action': 'regproducer', 'permission_name': 'day2day'},\n {'contract': 'eosio', 'action': 'unregprod', 'permission_name': 'day2day'},\n {'contract': 'theblacklist',\n 'action': 'sethash',\n 'permission_name': 'blacklistops'}]}\n\n>>> obj.last_irreversible_block_id\n\n '04931d68265c1fba52f772e031e67d2f16d898ed0ee0c60384db163345e7d0f1'\n\n>>> obj.last_irreversible_block_num \n \n 76750184\n\n```\n\n#### **`GET/v0/state/table`**\n- **`Description`** \n \n Fetches the state of any table, at any block height.\n\n The block_num parameter determines for which block you want a table snapshot. This can be anywhere in the chain\u2019s history.\n\n If the requested block_num is irreversible, you will get an immutable snapshot. If the block_num is still in a reversible chain, you will get a full consistent snapshot, but it is not guaranteed to pass irreversibility. Inspect the returned up_to_block_id parameter to understand from which longest chain the returned value is a snapshot of.\n \n\n- **`Types`** \n\n - ```account``` - string (required)\n\n - ```scope``` - The name-encoded scope of the table you are requesting. (required)\n\n - ```table``` - table name you want to retrieve (required)\n\n - ```block_num``` - int (Optional - defaults to ```head block num```)\n\n - ```json``` - boolean (optional, defaults to false)\n\n - ```key_type``` - How to represent the row keys in the returned table. string (optional, defaults to `name`) \n\n - Valid `key_type`s:\n \n - `name` (default) for EOS name-encoded base32 representation of the row key\n - `hex` for hexadecimal encoding, ex: abcdef1234567890\n - `hex_be` for big endian hexadecimal encoding, ex: 9078563412efcdab\n - `uint64` for string encoded uint64\n \n- **`Optional parameters:`**\n - ```block_num```\n - ```json```\n - ```key_type```\n\n```python\n\n>>> from dfuse import Dfuse\n>>> dfuse_ = Dfuse()\n>>> obj = dfuse_.get_table(account='eosio.token', scope='greenunicorn', table='accounts', block_num=74000000) \n\n>>> obj\n\n \n\n>>> obj.data\n\n {'last_irreversible_block_id': '04932bcb8edd41317814654da379057d6a2f880aaf2e095a602b997eedc5c143',\n 'last_irreversible_block_num': 76753867,\n 'rows': [{'key': '........ehbo5',\n 'payer': 'greenunicorn',\n 'json': {'balance': '0.7585 EOS'}}\n ]\n }\n\n>>> obj.obj.last_irreversible_block_id\n\n '04932bcb8edd41317814654da379057d6a2f880aaf2e095a602b997eedc5c143'\n\n```\n\n#### **`GET /v0/state/table/accounts`**\n \n TODO\n\n- **GET** ```/v0/state/table/scopes```: Fetching snapshots of any table on the blockchain, at any block height, for a list of scopes for a given account (contract).\n\n- **GET** ```/v0/search/transactions```: Structure Query Engine (SQE), for searching the whole blockchain history and get fast and precise results.\n\n- **POST** ```/v1/chain/push_transaction```: Drop-in replacement for submitting a transaction to the network, but can optionally block the request until the transaction is either in a block or in an irreversible block.\n\n- Other ```/v1/chain/```: Reverse-proxy of all standard chain requests to a well-connected node.\n\n- **WEBSOCKETS**\n\n- **GRAPHQL**\n\n\n\n## Buy me a coffee?\n\nIf you feel like buying me a coffee::\n\n```\nEOS : greenunicorn\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/th3ch33s3/dfuse-python", "keywords": "EOSIO,API,dfuse", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "dfuse", "package_url": "https://pypi.org/project/dfuse/", "platform": "", "project_url": "https://pypi.org/project/dfuse/", "project_urls": { "Bug Reports": "https://github.com/th3ch33s3/dfuse-python/issues", "Buy me a coffee": "https://github.com/th3ch33s3/dfuse-python#buy-me-a-coffee", "Homepage": "https://github.com/th3ch33s3/dfuse-python" }, "release_url": "https://pypi.org/project/dfuse/0.0.4/", "requires_dist": null, "requires_python": "", "summary": "Python wrapper around the dfuse.io API.", "version": "0.0.4" }, "last_serial": 5816708, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b63d2e9814b0c67c7b0a2ca8b0074dff", "sha256": "4b04828a2d6af1021102f12d200921009e1832da816d12ecfd885bbd091cad64" }, "downloads": -1, "filename": "dfuse-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b63d2e9814b0c67c7b0a2ca8b0074dff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16418, "upload_time": "2019-09-08T20:34:17", "url": "https://files.pythonhosted.org/packages/89/fa/e7fc1099d887fdafd385cec6f7a5c6e9a0b0ce8d600c6dfc1129acdcef1c/dfuse-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb38f9e2377f5a4b0ccc327b51659588", "sha256": "7ad9b8b5df60eb6ed94a442f3bc02fd01372bd58303a7d496d5e63671035efc6" }, "downloads": -1, "filename": "dfuse-0.0.1.tar.gz", "has_sig": false, "md5_digest": "eb38f9e2377f5a4b0ccc327b51659588", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19934, "upload_time": "2019-09-08T20:34:21", "url": "https://files.pythonhosted.org/packages/45/91/e70dcdd29578ceaf94d8c4e801fb4089cd194b6a7460cbe0a4ba87949917/dfuse-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5974dfce5e043264a44cb09261552a62", "sha256": "b12e797f0c73d169a716c9dec63506e0572137e8ba1c11c6cdf13f4b0f7ae7f3" }, "downloads": -1, "filename": "dfuse-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5974dfce5e043264a44cb09261552a62", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9608, "upload_time": "2019-09-09T07:50:39", "url": "https://files.pythonhosted.org/packages/25/d5/c5031e6842144e0c343e04bdb7cbcd833c8ef48f9b1c06d1034c99d35f86/dfuse-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd60c2d526cb8da477037894091d6ffd", "sha256": "7d10d6579c3d08c3db550c9270913777f02b4b526423cb4d0b0740e4d6d2108f" }, "downloads": -1, "filename": "dfuse-0.0.2.tar.gz", "has_sig": false, "md5_digest": "dd60c2d526cb8da477037894091d6ffd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12031, "upload_time": "2019-09-09T07:50:41", "url": "https://files.pythonhosted.org/packages/68/06/389211bfc5314b0d1112ed4157f0baebd9c070f0d8d9e186106c74797c59/dfuse-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "8018ef4e6702cc5a5541a2ad80be0d14", "sha256": "ea5b0ba56018f38173447d7cfb0f620fd03e99dedc09815647d928e70687d971" }, "downloads": -1, "filename": "dfuse-0.0.3.tar.gz", "has_sig": false, "md5_digest": "8018ef4e6702cc5a5541a2ad80be0d14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22140, "upload_time": "2019-09-11T17:33:41", "url": "https://files.pythonhosted.org/packages/89/7e/498e322c1d015a49551ed30b2bb6e56236a356fede7f0d177876b22a6567/dfuse-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "095face33a26a18e282203ea2dee42f0", "sha256": "b59a678d2f1b40bee1c069c0165791032076a9a6b0d9fa384b041c2528f4dfcf" }, "downloads": -1, "filename": "dfuse-0.0.4.tar.gz", "has_sig": false, "md5_digest": "095face33a26a18e282203ea2dee42f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21412, "upload_time": "2019-09-11T20:16:08", "url": "https://files.pythonhosted.org/packages/6a/ba/1b2568e8a521c5dbf24ba961c1b4ea8bf19d23a9132ea8d55b34702a16f5/dfuse-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "095face33a26a18e282203ea2dee42f0", "sha256": "b59a678d2f1b40bee1c069c0165791032076a9a6b0d9fa384b041c2528f4dfcf" }, "downloads": -1, "filename": "dfuse-0.0.4.tar.gz", "has_sig": false, "md5_digest": "095face33a26a18e282203ea2dee42f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21412, "upload_time": "2019-09-11T20:16:08", "url": "https://files.pythonhosted.org/packages/6a/ba/1b2568e8a521c5dbf24ba961c1b4ea8bf19d23a9132ea8d55b34702a16f5/dfuse-0.0.4.tar.gz" } ] }