{ "info": { "author": "Mikko Ohtamaa", "author_email": "mikko@opensourcehacker.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Build Tools" ], "description": "Cryptoassets library integration for Django\n=============================================\n\nThis package provides integration of `cryptoassets.core `_ Bitcoin and cryptoasset framework for `Django web framework `_.\n\n.. contents :: :local:\n\nFeatures\n=================\n\n* Use Django ``settings.py`` configure mechanism to set up *cryptoassets.core*\n\n* Django management command mappings for `cryptoassets helper service `_\n\n* Django native logging\n\n* Django event dispatch integration\n\n* Setting up SQLAlchemy sessions and database conflict resolution inside Django\n\nUsage\n=================\n\nAdd ``cryptoassets.django`` to your Django application list in ``settings.py``::\n\n INSTALLED_APPS = (\n 'cryptoassets.django',\n )\n\nAdd `cryptoassets.core configuration `_ as Python dictionary to your Django ``settings.py`` module under ``CRYPTOASSETS`` variable.\n\nExample for ``settings.py``::\n\n # TESTNET settings\n CRYPTOASSETS = {\n\n # It is recommended to use separate database for cryptoassets,\n # but you can share the database with Django as well.\n # In any case, cryptoassets\n # will use a separate db connection.\n # cryptoassets.django does not read the existing DATABASES setting.\n # Configure the connection using SQLAlchemy syntax:\n # http://cryptoassetscore.readthedocs.org/en/latest/config.html#database\n \"database\": {\n \"url\": \"postgresql://localhost/cryptoassets\",\n \"echo\": False,\n },\n\n # Configure block.io API service with Bitcoin testnet\n # (let's not play around with real Bitcoins yet)\n \"coins\": {\n \"btc\": {\n \"backend\": {\n \"class\": \"cryptoassets.core.backend.blockio.BlockIo\",\n \"api_key\": \"923f-xxxx-yyyy-zzzz\",\n \"network\": \"btctest\",\n \"pin\": \"foobar123\",\n # Cryptoassets helper process will use this UNIX named pipe to communicate\n # with bitcoind\n \"walletnotify\": {\n \"class\": \"cryptoassets.core.backend.sochainwalletnotify.SochainWalletNotifyHandler\",\n \"pusher_app_key\": \"e9f5cc20074501ca7395\"\n },\n }\n },\n },\n\n # Bind cryptoassets.core event handler to Django dispacth wrapper\n \"events\": {\n \"django\": {\n \"class\": \"cryptoassets.core.event.python.InProcessEventHandler\",\n \"callback\": \"cryptoassets.django.incoming.handle_tx_update\"\n }\n },\n\n # Start simple status at port 9001 for diagnostics\n \"status_server\": {\n \"ip\": \"127.0.0.1\",\n \"port\": 9001\n }\n }\n\n.. note ::\n\n If you copy-paste these settings please sign up at block.io for your own API key.\n\nInitializing database\n-----------------------\n\nRun::\n\n python manage.py cryptoassets_initialize_database\n\nThis will build database tables for configured cryptocurrencies.\n\nThis is Django management command warpper for `cryptoassets-initialize-database `_.\n\nStarting cryptoassets helper service\n-------------------------------------\n\nStart a helper service. This standalone process runs, connects to APIs and networks, listens to incoming transactions, broadcasts outgoing transaction.\n\n.. note ::\n\n Cryptoassets helper service does not run within your web server process. It runs as a standalone process on your server.\n\nRun::\n\n python manage.py cryptoassets_helper_service\n\nFor more information see `helper service command `_.\n\nHandling incoming transactions\n-------------------------------\n\nMake sure ``walletnotify`` is configured in ``CRYPTOASSETS`` setting as described above. It will translate incoming interprocess communication to Django events.\n\nGrab incoming transactions in your application code in ``txupdate`` signal::\n\n from cryptoassets.django.signals import txupdate\n from django.dispatch import receiver\n\n @receiver(txupdate)\n def txupdate_received(event_name, data, **kwargs):\n \"\"\" Received transaction update from cryptoassets.core.\n\n \"\"\"\n\n if data.get(\"transaction_type\") != \"deposit\":\n # We are only interest updates on incoming transctions\n return\n\n transaction_hash = data[\"txid\"]\n value = data['amount']\n address = data['address']\n confirmations = int(data.get('confirmations', -1))\n\n logger.info(\"Transaction update received: %s BTC:%s address:%s confirmations:%d\", transaction_hash, value, address, confirmations)\n\nThe handler is executed inside *cryptoassets helper service* process.\n\n`More information about cryptoassets.core events `_.\n\nAccessing cryptoassets data\n=============================\n\nAccessing database models\n-------------------------\nTo get access to database models::\n\n from cryptoassets.django.app import get_cryptoassets\n\n cryptoassets = get_cryptoassets()\n BitcoinWallet = cryptoassets.coins.get(\"btc\").coin_description.Wallet\n\nMaking database queries\n-------------------------\n\nAll database access goes through a separate SQLAlcemy session which is wrapped with `database transaction conflict resolver `_.\n\nFor convenience, ``cryptoassets.django.assetsdb.managed_transaction()`` decorator is provided:\n\nExample code::\n\n from cryptoassets.django.app import get_cryptoassets\n from cryptoassets.django import assetdb\n\n def get_wallet(session):\n \"\"\"Return the master shared wallet used to receive payments. \"\"\"\n cryptoassets = get_cryptoassets()\n BitcoinWallet = cryptoassets.coins.get(\"btc\").coin_description.Wallet\n wallet = BitcoinWallet.get_or_create_by_name(\"default\", session)\n return wallet\n\n def create_new_receiving_address(label):\n\n @assetdb.managed_transaction\n def tx(session):\n\n wallet = get_wallet(session=session)\n\n account = wallet.get_or_create_account_by_name(\"my account\")\n session.flush() # account id gets written inside commit\n addr = wallet.create_receiving_address(account, label)\n logging.info(\"Created receiving address %s\", addr.address)\n address = addr.address\n return address\n\n return tx()\n\nThe rest is by `model API `_ and `SQLAlchemy `_.\n\nOther\n=================\n\nExample Django application\n----------------------------\n\n`See Liberty Music Store `_ (`source code `_).\n\ncryptoassets.core tutorial\n---------------------------\n\n`See getting started `_.\n\nRunning helper service as system service\n----------------------------------------\n\nTo have automatic start/stop and other functionality for cryptoassets helper service, use something akin *systemd* or `supervisord `_ to manage ``python manage.py cryptoassets_helper_service``.\n\nAuthor\n=================\n\nMikko Ohtamaa (`blog `_, `Facebook `_, `Twitter `_, `Google+ `_)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/miohtama/cryptoassets.django", "keywords": "bitcoin django cryptoasset sqlalchemy", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "cryptoassets.django", "package_url": "https://pypi.org/project/cryptoassets.django/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cryptoassets.django/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/miohtama/cryptoassets.django" }, "release_url": "https://pypi.org/project/cryptoassets.django/0.1/", "requires_dist": null, "requires_python": null, "summary": "cryptoassets.core library integration for Django", "version": "0.1" }, "last_serial": 1453548, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "6e60f15673f7fb045ee8fc61519c460e", "sha256": "875aeaeeb12f28742a1ebba10c6c98f57a7f70a87e95caaf73140908be65a297" }, "downloads": -1, "filename": "cryptoassets.django-0.1.zip", "has_sig": false, "md5_digest": "6e60f15673f7fb045ee8fc61519c460e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15919, "upload_time": "2015-03-09T01:43:08", "url": "https://files.pythonhosted.org/packages/19/74/3c33c47e902556e6a31c0e271a787680b700ee856c4c6b1e0c93efe06716/cryptoassets.django-0.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6e60f15673f7fb045ee8fc61519c460e", "sha256": "875aeaeeb12f28742a1ebba10c6c98f57a7f70a87e95caaf73140908be65a297" }, "downloads": -1, "filename": "cryptoassets.django-0.1.zip", "has_sig": false, "md5_digest": "6e60f15673f7fb045ee8fc61519c460e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15919, "upload_time": "2015-03-09T01:43:08", "url": "https://files.pythonhosted.org/packages/19/74/3c33c47e902556e6a31c0e271a787680b700ee856c4c6b1e0c93efe06716/cryptoassets.django-0.1.zip" } ] }