{ "info": { "author": "Artemios Tomaras", "author_email": "artemistomaras@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "######################\ndjango-ethereum-events\n######################\n\nEthereum Contract Event Log monitoring in Django\n\n.. image:: https://travis-ci.org/artemistomaras/django-ethereum-events.svg?branch=master\n :target: https://travis-ci.org/artemistomaras/django-ethereum-events\n \n.. image:: https://img.shields.io/pypi/v/django-ethereum-events.svg \n :target: https://pypi.python.org/pypi/django-ethereum-events\n \n \n********\nOverview\n********\n\nThis package provides an easy way to monitor an ethereum blockchain for transactions that invoke `Contract Events`_ that are of particular interest.\n\nThe main concept was inspired by the following project:\n\n- https://github.com/gnosis/django-eth-events\n\nPackage versions **0.2.x+** support **web3 v4**.\n\nIf you want python 2.7 compatibility and/or **web3 v3** support, use version **0.1.x** of this package.\n\n\n.. _`Contract Events`: http://solidity.readthedocs.io/en/develop/contracts.html#events \n\n************\nInstallation\n************\n\n1. Install using pip:\n\n ::\n\n pip install django-ethereum-events\n\n\n2. Make sure to include ``'django_ethereum_events'`` in your ``INSTALLED_APPS``\n\n .. code-block:: python\n\n INSTALLED_APPS += ('django_ethereum_events')\n \n if you are using the **admin backend**, also include ``solo`` in your ``INSTALLED_APPS``.\n \n3. Make necessary migrations\n\n .. code-block:: python\n\n python manage.py migrate django_ethereum_events\n\n\n*****\nUsage\n*****\n\n1. In your ``settings`` file, specify the following settings\n\n .. code-block:: python\n\n ETHEREUM_NODE_URI = 'http://localhost:8545'\n \n \n2. Create a new MonitoredEvent\n \n .. code-block:: python\n \n contract_abi = \"\"\"\n The whole contract abi goes here\n \"\"\"\n \n event = \"MyEvent\" # the emitted event name\n event_receiver = \"myapp.event_receivers.CustomEventReceiver\"\n contract_address = \"0x10f683d9acc908cA6b7A34726271229B846b0292\" # the address of the contract emitting the event\n \n MonitoredEvent.object.register_event(\n event_name=event,\n contract_address=contract_address,\n contract_abi=contract_abi,\n event_receiver=event_receiver\n )\n \n3. Create an appropriate event receiver\n\n .. code-block:: python\n\n from django_ethereum_events.chainevents import AbstractEventReceiver\n\n class CustomEventReceiver(AbsractEventReceiver):\n def save(self, decoded_event):\n # custom logic goes here\n\n The ``decoded_event`` parameter is the decoded log as provided from `web3.utils.events.get_event_data`_ method.\n \n .. _`web3.utils.events.get_event_data`: https://github.com/ethereum/web3.py/blob/v4.9.2/web3/utils/events.py#L148\n\n4. To start monitoring the blockchain, either run the celery task ``django_ethereum_events.tasks.event_listener`` or better, use ``celerybeat`` to run it as a periodical task\n\n .. code-block:: python\n\n from celery.beat import crontab\n\n CELERYBEAT_SCHEDULE = {\n 'ethereum_events': {\n 'task': 'django_ethereum_events.tasks.event_listener',\n 'schedule': crontab(minute='*/1') # run every minute\n }\n }\n\n You can also set the optional ``ETHEREUM_LOGS_BATCH_SIZE`` setting which limits the maximum amount of the blocks that can be read at a time from the celery task.\n\n\n******************************\nMore about the event receivers\n******************************\n\nIt is advisable that the code inside the custom event receiver to be simple since it is run synchronously while the ``event_listener`` task is running. If that is not the case, pass the argument ``decoded_event`` to a celery task of your own\n\n.. code-block:: python\n\n # inside the CustomEventReceiver.save method\n from django_ethereum_events.utils import HexJsonEncoder\n decoded_event_data = json.dumps(decoded_event, cls=HexJsonEncoder)\n my_custom_task.delay(decoded_event_data)\n \n \nIf an unhandled exception is raised inside the event receiver, the ``event_listener`` task logs the error and creates\na new instance of the ``django_ethereum_events.models.FailedEventLog`` containing all the relevant event information.\n\nThe event listener does **not** attempt to rerun ``FailedEventLogs``. That is up to the client implementation.\n\n\n****************************\nResetting the internal state\n****************************\nBlocks are processed only once. The last block processed is stored in the ``.models.Daemon`` entry.\n\nTo reset the number of blocks processed, run the ``reset_block_daemon`` command optionally specifying the block number (-b, --block) to reset to (defaults to zero). If you reset it to zero, the next time the ``event_listener`` is fired, it will start processing blocks from the genesis block.\n\nThe ``Daemon`` entry can also be changed from the django admin backend.\n\n***************************\nProof-of-Authority Networks\n***************************\nTo use this package on **Rinkeby** or any other private network that uses the Proof-of-Authority consensus engine (also named clique), set the optional ``ETHEREUM_GETH_POA`` setting to ``True``.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/artemistomaras/django-ethereum-events", "keywords": "django ethereum", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "django-ethereum-events", "package_url": "https://pypi.org/project/django-ethereum-events/", "platform": "", "project_url": "https://pypi.org/project/django-ethereum-events/", "project_urls": { "Homepage": "https://github.com/artemistomaras/django-ethereum-events" }, "release_url": "https://pypi.org/project/django-ethereum-events/3.0.1/", "requires_dist": null, "requires_python": "", "summary": "Django Ethereum Events", "version": "3.0.1" }, "last_serial": 5736973, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "3f9f93ba38255508d613bdbcd84677e1", "sha256": "54da9c2b4b675c329f9733505a3b20640138f511e450acd51a285b12fc72721f" }, "downloads": -1, "filename": "django_ethereum_events-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3f9f93ba38255508d613bdbcd84677e1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15380, "upload_time": "2017-09-28T07:20:28", "url": "https://files.pythonhosted.org/packages/20/68/f20a79e1bc0b747bd5ff413bfbf4dc24c812a066c1980dae9a6e5fd1469a/django_ethereum_events-0.1.1-py3-none-any.whl" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e203cd8822e542922fa0605ec30239a3", "sha256": "af521d1359a93daa36d6e54cc759fd04097acf163caaf8eef6428d3aca9853db" }, "downloads": -1, "filename": "django_ethereum_events-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e203cd8822e542922fa0605ec30239a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15410, "upload_time": "2017-12-12T13:16:00", "url": "https://files.pythonhosted.org/packages/e5/a7/de341c9b1b4df5ad120a1d2dff4b64fb6cb0d5df386a90b3616ae065be85/django_ethereum_events-0.1.2-py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b0c7c49d09675eaa17f91d15e0e883b4", "sha256": "1894416bff3fe87c95672d17ea7b9c019182553b3efde842f464f09b245cf417" }, "downloads": -1, "filename": "django_ethereum_events-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b0c7c49d09675eaa17f91d15e0e883b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16518, "upload_time": "2018-03-26T12:59:02", "url": "https://files.pythonhosted.org/packages/b2/09/4f3cabe3f8164ff9414d34f087a002d801d39fdac9c8da1ecf76a4488246/django_ethereum_events-0.1.3-py2.py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "1c4cca965fd3299d8a592a3748f527c4", "sha256": "611be314ae12d4cc8bc56f69315084a5630361100247609b5c14e19aa1894f00" }, "downloads": -1, "filename": "django_ethereum_events-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c4cca965fd3299d8a592a3748f527c4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18803, "upload_time": "2018-05-07T14:35:09", "url": "https://files.pythonhosted.org/packages/30/cb/58d3450c48aa009a81177027d378e3f73c65e2d84f0b035ef098ceb1e19f/django_ethereum_events-0.1.4-py2.py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f49a57b3b50e2864f0d8f13d8a9a147a", "sha256": "a4afa5eea1c59045d1c3937f4701dd4e347528aa01df8475cbb32c6ca883f894" }, "downloads": -1, "filename": "django_ethereum_events-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f49a57b3b50e2864f0d8f13d8a9a147a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19106, "upload_time": "2018-05-24T10:27:55", "url": "https://files.pythonhosted.org/packages/c9/5b/9cc7f5936e8b49fc6281c6ec89ddf6f83cd181bc2cf1962d966086f1c5c4/django_ethereum_events-0.2.1-py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c32a0abd34fa4dc5ae6dd81e0fcc10c4", "sha256": "059a39cacedf5a26b15b104005a4eb3d8282ba60bc030dd8e72f1f659a4e560d" }, "downloads": -1, "filename": "django_ethereum_events-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c32a0abd34fa4dc5ae6dd81e0fcc10c4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19425, "upload_time": "2018-05-24T14:54:53", "url": "https://files.pythonhosted.org/packages/06/40/3434edcb9448810741bf4fa4417889e88fddc780f3f2b044c9818dbb31f3/django_ethereum_events-0.2.2-py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "06d994f971f928b63b336a1f9f61be0f", "sha256": "d527066b9ed90ecc8110711ec19a3b8b4625e9eacaad32290ce48f34e04947c5" }, "downloads": -1, "filename": "django_ethereum_events-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "06d994f971f928b63b336a1f9f61be0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31474, "upload_time": "2018-06-05T09:37:05", "url": "https://files.pythonhosted.org/packages/88/0d/572ac98d83b228ea1c7db3f4944f69063d1fa6ccc9cb7837612c883cbb4a/django_ethereum_events-1.0.1-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "00bc7de2b4972f91fd3b67ed448241ba", "sha256": "e6aa3e73ce43ee7f8fde846fe6143225086068edda7302d54350af806f4c72ba" }, "downloads": -1, "filename": "django-ethereum-events-1.0.2.tar.gz", "has_sig": false, "md5_digest": "00bc7de2b4972f91fd3b67ed448241ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17830, "upload_time": "2018-07-13T11:40:13", "url": "https://files.pythonhosted.org/packages/66/5f/c19dcdac7d7e1968a21d1a0d06b836f2d69b9c3c62cebbf05ffec8f0d2d9/django-ethereum-events-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "27f064b501cf2abea706adf22899f34e", "sha256": "1e485609a84d8cc1a9903121d25813619bc9e698a3b88953bd67974d27916e35" }, "downloads": -1, "filename": "django-ethereum-events-1.0.3.tar.gz", "has_sig": false, "md5_digest": "27f064b501cf2abea706adf22899f34e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17846, "upload_time": "2018-09-17T14:04:12", "url": "https://files.pythonhosted.org/packages/19/4a/063183b43eec44b163662cd8dd9b772d270c415ccae7bbf81a8ccb9d7d0a/django-ethereum-events-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "a8eead93415266578937c4f51a9b829f", "sha256": "0f06db3b5b5d200e6ae487c762246acc27636068562c7d255495904900800f32" }, "downloads": -1, "filename": "django-ethereum-events-1.0.4.tar.gz", "has_sig": false, "md5_digest": "a8eead93415266578937c4f51a9b829f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17863, "upload_time": "2018-09-21T14:48:00", "url": "https://files.pythonhosted.org/packages/5e/54/ae505dcb1e71e9c502f53be8778913a6ffdf51e423e8440831934bcdac73/django-ethereum-events-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "062d4fe84ea147c47697ed2a388cf8d5", "sha256": "569ecdfdb05144dab337e242eb86988675f44b48c47ec12705ccfaebdd1132ed" }, "downloads": -1, "filename": "django_ethereum_events-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "062d4fe84ea147c47697ed2a388cf8d5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32058, "upload_time": "2019-06-10T12:42:29", "url": "https://files.pythonhosted.org/packages/d2/a7/6385dea9a520bf77d8e26a155c973e85082e707625fe76f71a5af4cab0e7/django_ethereum_events-1.0.5-py3-none-any.whl" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "16d4f38db617037c338615644c651e4f", "sha256": "5c23bc8878f9a24b0dfb01c474704432dbcb4f49a6c3002786a6f55949bc103c" }, "downloads": -1, "filename": "django_ethereum_events-2.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "16d4f38db617037c338615644c651e4f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33664, "upload_time": "2019-06-18T11:54:14", "url": "https://files.pythonhosted.org/packages/b3/db/d27ed3d08dbc86f6994cff61af7fd0adfe1473663b1752552586a57b216c/django_ethereum_events-2.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57fb978e2cc522b644e7c529c7063352", "sha256": "d7835cf3f4f8d72a244fdfea5a89b9e8091581269666dd76d019796b7ccc6d56" }, "downloads": -1, "filename": "django-ethereum-events-2.0.0.tar.gz", "has_sig": false, "md5_digest": "57fb978e2cc522b644e7c529c7063352", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19884, "upload_time": "2019-06-18T11:54:24", "url": "https://files.pythonhosted.org/packages/b4/65/195e358470ba99ba8dafe1c715887cf5520178f9ea3d042a71aa7ea17141/django-ethereum-events-2.0.0.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "607145d3d46e9f7d02e4607042ff9132", "sha256": "f54c1848d4b6ee192a810f149079b4c8fa52a9bab7daf283b84df12243af4f93" }, "downloads": -1, "filename": "django_ethereum_events-3.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "607145d3d46e9f7d02e4607042ff9132", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33598, "upload_time": "2019-08-27T07:22:37", "url": "https://files.pythonhosted.org/packages/dc/12/daae62f877ae8c6143fde5358a4bfe7800749eaf967bdd73225d6e4165a6/django_ethereum_events-3.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7db1fcc878beafe4b4fb42e0b6019715", "sha256": "6704443327e5dad3de40e148051732f59e6d807fbaaee16986d7eb936a75075f" }, "downloads": -1, "filename": "django-ethereum-events-3.0.0.tar.gz", "has_sig": false, "md5_digest": "7db1fcc878beafe4b4fb42e0b6019715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19830, "upload_time": "2019-08-27T07:22:26", "url": "https://files.pythonhosted.org/packages/5e/d0/d4fe09726154436f1db44aa248968129104d35e7b5035309a08c5821adea/django-ethereum-events-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "f0ef2f2e4abb62fa0a7e111337389c43", "sha256": "6d392f9b401e7656a3440cc20cb5690181c8355b35ee58c8b5f27e2e09271f07" }, "downloads": -1, "filename": "django_ethereum_events-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f0ef2f2e4abb62fa0a7e111337389c43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33595, "upload_time": "2019-08-27T14:14:06", "url": "https://files.pythonhosted.org/packages/90/e5/f57874624e297a005ce015a6655d86d7495a6de9abd6694df9b8644efe25/django_ethereum_events-3.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6eb2f402023c002bc0b6f2bc5043dc5a", "sha256": "e79c99407a32e27d6face8d1c576eaae6cd4012334ad0a5ef0a0ef46889b91bd" }, "downloads": -1, "filename": "django-ethereum-events-3.0.1.tar.gz", "has_sig": false, "md5_digest": "6eb2f402023c002bc0b6f2bc5043dc5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19830, "upload_time": "2019-08-27T14:13:59", "url": "https://files.pythonhosted.org/packages/34/9a/4c357d83b5b4e33c87ff69dd06bac4299b80535a68078efcc1d083ee270a/django-ethereum-events-3.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f0ef2f2e4abb62fa0a7e111337389c43", "sha256": "6d392f9b401e7656a3440cc20cb5690181c8355b35ee58c8b5f27e2e09271f07" }, "downloads": -1, "filename": "django_ethereum_events-3.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f0ef2f2e4abb62fa0a7e111337389c43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33595, "upload_time": "2019-08-27T14:14:06", "url": "https://files.pythonhosted.org/packages/90/e5/f57874624e297a005ce015a6655d86d7495a6de9abd6694df9b8644efe25/django_ethereum_events-3.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6eb2f402023c002bc0b6f2bc5043dc5a", "sha256": "e79c99407a32e27d6face8d1c576eaae6cd4012334ad0a5ef0a0ef46889b91bd" }, "downloads": -1, "filename": "django-ethereum-events-3.0.1.tar.gz", "has_sig": false, "md5_digest": "6eb2f402023c002bc0b6f2bc5043dc5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19830, "upload_time": "2019-08-27T14:13:59", "url": "https://files.pythonhosted.org/packages/34/9a/4c357d83b5b4e33c87ff69dd06bac4299b80535a68078efcc1d083ee270a/django-ethereum-events-3.0.1.tar.gz" } ] }