{ "info": { "author": "Lukas \u0160alkauskas", "author_email": "halfas.online@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "InAppPy\n=======\n|travis| |pypi| |downloads|\n\n.. |travis| image:: https://travis-ci.org/dotpot/InAppPy.svg?branch=master\n :target: https://travis-ci.org/dotpot/InAppPy\n.. |pypi| image:: https://badge.fury.io/py/inapppy.svg\n :target: https://badge.fury.io/py/inapppy\n.. |downloads| image:: https://img.shields.io/pypi/dm/inapppy.svg\n :target: https://pypi.python.org/pypi/inapppy\n\n\nTable of contents\n=================\n\n1. Introduction\n2. Installation\n3. Google Play (`receipt` + `signature`)\n4. Google Play (verification)\n5. Google Play (verification with result)\n6. App Store (`receipt` + using optional `shared-secret`)\n7. App Store Response (`validation_result` / `raw_response`) example\n8. App Store, **asyncio** version (available in the inapppy.asyncio package)\n9. Development\n\n\n1. Introduction\n===============\n\nIn-app purchase validation library for `Apple AppStore` and `GooglePlay` (`App Store` validator have **async** support!).\n\n2. Installation\n===============\n::\n\n pip install inapppy\n\n\n3. Google Play (validates `receipt` against provided `signature` using RSA)\n===========================================================================\n.. code:: python\n\n from inapppy import GooglePlayValidator, InAppPyValidationError\n\n\n bundle_id = 'com.yourcompany.yourapp'\n api_key = 'API key from the developer console'\n validator = GooglePlayValidator(bundle_id, api_key)\n\n try:\n # receipt means `androidData` in result of purchase\n # signature means `signatureAndroid` in result of purchase\n validation_result = validator.validate('receipt', 'signature')\n except InAppPyValidationError:\n # handle validation error\n pass\n\n\n4. Google Play verification\n===========================\n.. code:: python\n\n from inapppy import GooglePlayVerifier, errors\n\n\n def google_validator(receipt):\n \"\"\"\n Accepts receipt, validates in Google.\n \"\"\"\n purchase_token = receipt['purchaseToken']\n product_sku = receipt['productId']\n verifier = GooglePlayVerifier(\n GOOGLE_BUNDLE_ID,\n GOOGLE_SERVICE_ACCOUNT_KEY_FILE,\n )\n response = {'valid': False, 'transactions': []}\n try:\n result = verifier.verify(\n purchase_token,\n product_sku,\n\t\t\t\tis_subscription=True\n )\n response['valid'] = True\n response['transactions'].append(\n (result['orderId'], product_sku)\n )\n except errors.GoogleError as exc:\n logging.error('Purchase validation failed {}'.format(exc))\n return response\n\n\n5. Google Play verification (with result)\n=========================================\nAlternative to `.verify` method, instead of raising an error result class will be returned.\n\n.. code:: python\n\n from inapppy import GooglePlayVerifier, errors\n\n\n def google_validator(receipt):\n \"\"\"\n Accepts receipt, validates in Google.\n \"\"\"\n purchase_token = receipt['purchaseToken']\n product_sku = receipt['productId']\n verifier = GooglePlayVerifier(\n GOOGLE_BUNDLE_ID,\n GOOGLE_SERVICE_ACCOUNT_KEY_FILE,\n )\n response = {'valid': False, 'transactions': []}\n\n result = verifier.verify_with_result(\n purchase_token,\n product_sku,\n is_subscription=True\n )\n\n # result contains data\n raw_response = result.raw_response\n is_canceled = result.is_canceled\n is_expired = result.is_expired\n\n return result\n\n\n6. App Store (validates `receipt` using optional `shared-secret` against iTunes service)\n========================================================================================\n.. code:: python\n\n from inapppy import AppStoreValidator, InAppPyValidationError\n\n\n bundle_id = 'com.yourcompany.yourapp'\n auto_retry_wrong_env_request=False # if True, automatically query sandbox endpoint if\n # validation fails on production endpoint\n validator = AppStoreValidator(bundle_id, auto_retry_wrong_env_request=auto_retry_wrong_env_request)\n\n try:\n exclude_old_transactions=False # if True, include only the latest renewal transaction\n validation_result = validator.validate('receipt', 'optional-shared-secret', exclude_old_transactions=exclude_old_transactions)\n except InAppPyValidationError as ex:\n # handle validation error\n response_from_apple = ex.raw_response # contains actual response from AppStore service.\n pass\n\n\n\n7. App Store Response (`validation_result` / `raw_response`) example\n====================================================================\n.. code:: json\n\n {\n \"latest_receipt\": \"MIIbngYJKoZIhvcNAQcCoIIbj...\",\n \"status\": 0,\n \"receipt\": {\n \"download_id\": 0,\n \"receipt_creation_date_ms\": \"1486371475000\",\n \"application_version\": \"2\",\n \"app_item_id\": 0,\n \"receipt_creation_date\": \"2017-02-06 08:57:55 Etc/GMT\",\n \"original_purchase_date\": \"2013-08-01 07:00:00 Etc/GMT\",\n \"request_date_pst\": \"2017-02-06 04:41:09 America/Los_Angeles\",\n \"original_application_version\": \"1.0\",\n \"original_purchase_date_pst\": \"2013-08-01 00:00:00 America/Los_Angeles\",\n \"request_date_ms\": \"1486384869996\",\n \"bundle_id\": \"com.yourcompany.yourapp\",\n \"request_date\": \"2017-02-06 12:41:09 Etc/GMT\",\n \"original_purchase_date_ms\": \"1375340400000\",\n \"in_app\": [{\n \"purchase_date_ms\": \"1486371474000\",\n \"web_order_line_item_id\": \"1000000034281189\",\n \"original_purchase_date_ms\": \"1486371475000\",\n \"original_purchase_date\": \"2017-02-06 08:57:55 Etc/GMT\",\n \"expires_date_pst\": \"2017-02-06 01:00:54 America/Los_Angeles\",\n \"original_purchase_date_pst\": \"2017-02-06 00:57:55 America/Los_Angeles\",\n \"purchase_date_pst\": \"2017-02-06 00:57:54 America/Los_Angeles\",\n \"expires_date_ms\": \"1486371654000\",\n \"expires_date\": \"2017-02-06 09:00:54 Etc/GMT\",\n \"original_transaction_id\": \"1000000271014363\",\n \"purchase_date\": \"2017-02-06 08:57:54 Etc/GMT\",\n \"quantity\": \"1\",\n \"is_trial_period\": \"false\",\n \"product_id\": \"com.yourcompany.yourapp\",\n \"transaction_id\": \"1000000271014363\"\n }],\n \"version_external_identifier\": 0,\n \"receipt_creation_date_pst\": \"2017-02-06 00:57:55 America/Los_Angeles\",\n \"adam_id\": 0,\n \"receipt_type\": \"ProductionSandbox\"\n },\n \"latest_receipt_info\": [{\n \"purchase_date_ms\": \"1486371474000\",\n \"web_order_line_item_id\": \"1000000034281189\",\n \"original_purchase_date_ms\": \"1486371475000\",\n \"original_purchase_date\": \"2017-02-06 08:57:55 Etc/GMT\",\n \"expires_date_pst\": \"2017-02-06 01:00:54 America/Los_Angeles\",\n \"original_purchase_date_pst\": \"2017-02-06 00:57:55 America/Los_Angeles\",\n \"purchase_date_pst\": \"2017-02-06 00:57:54 America/Los_Angeles\",\n \"expires_date_ms\": \"1486371654000\",\n \"expires_date\": \"2017-02-06 09:00:54 Etc/GMT\",\n \"original_transaction_id\": \"1000000271014363\",\n \"purchase_date\": \"2017-02-06 08:57:54 Etc/GMT\",\n \"quantity\": \"1\",\n \"is_trial_period\": \"true\",\n \"product_id\": \"com.yourcompany.yourapp\",\n \"transaction_id\": \"1000000271014363\"\n }, {\n \"purchase_date_ms\": \"1486371719000\",\n \"web_order_line_item_id\": \"1000000034281190\",\n \"original_purchase_date_ms\": \"1486371720000\",\n \"original_purchase_date\": \"2017-02-06 09:02:00 Etc/GMT\",\n \"expires_date_pst\": \"2017-02-06 01:06:59 America/Los_Angeles\",\n \"original_purchase_date_pst\": \"2017-02-06 01:02:00 America/Los_Angeles\",\n \"purchase_date_pst\": \"2017-02-06 01:01:59 America/Los_Angeles\",\n \"expires_date_ms\": \"1486372019000\",\n \"expires_date\": \"2017-02-06 09:06:59 Etc/GMT\",\n \"original_transaction_id\": \"1000000271014363\",\n \"purchase_date\": \"2017-02-06 09:01:59 Etc/GMT\",\n \"quantity\": \"1\",\n \"is_trial_period\": \"false\",\n \"product_id\": \"com.yourcompany.yourapp\",\n \"transaction_id\": \"1000000271016119\"\n }],\n \"environment\": \"Sandbox\"\n }\n\n\n8. App Store, asyncio version (available in the inapppy.asyncio package)\n========================================================================\n.. code:: python\n\n from inapppy import InAppPyValidationError\n from inapppy.asyncio import AppStoreValidator\n\n\n bundle_id = 'com.yourcompany.yourapp'\n auto_retry_wrong_env_request=False # if True, automatically query sandbox endpoint if\n # validation fails on production endpoint\n validator = AppStoreValidator(bundle_id, auto_retry_wrong_env_request=auto_retry_wrong_env_request)\n\n try:\n exclude_old_transactions=False # if True, include only the latest renewal transaction\n validation_result = await validator.validate('receipt', 'optional-shared-secret', exclude_old_transactions=exclude_old_transactions)\n except InAppPyValidationError as ex:\n # handle validation error\n response_from_apple = ex.raw_response # contains actual response from AppStore service.\n pass\n\n\n\n9. Development\n==============\n\n.. code:: bash\n\n # run checks and tests\n tox\n\n # setup project\n make setup\n\n # check for lint errors\n make lint\n\n # run tests\n make test\n\n # run black\n make black", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dotpot/InAppPy", "keywords": "in-app store purchase googleplay appstore validation", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "inapppy", "package_url": "https://pypi.org/project/inapppy/", "platform": "", "project_url": "https://pypi.org/project/inapppy/", "project_urls": { "Homepage": "https://github.com/dotpot/InAppPy" }, "release_url": "https://pypi.org/project/inapppy/2.4.4/", "requires_dist": null, "requires_python": "", "summary": "In-app purchase validation library for Apple AppStore and GooglePlay.", "version": "2.4.4" }, "last_serial": 5695020, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "616e8ab3fb31f84c3e37a711ee7a3d37", "sha256": "fe8cbfba1f677d5cab9ecb619783f2c89950b76de1d515ed18daa658f872007b" }, "downloads": -1, "filename": "inapppy-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "616e8ab3fb31f84c3e37a711ee7a3d37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4635, "upload_time": "2017-02-06T12:15:25", "url": "https://files.pythonhosted.org/packages/f9/c8/fad4a4f8cb9d22ec4cdbfd7d919df422a89c6bda8c78244aeaac419df163/inapppy-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "340a5c1dd20306b6bb69c212dc903255", "sha256": "11a8f322aec1330ade71ac86c477824d240d436a1e3dfad834b47d47454dfbea" }, "downloads": -1, "filename": "inapppy-0.1.tar.gz", "has_sig": false, "md5_digest": "340a5c1dd20306b6bb69c212dc903255", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2538, "upload_time": "2017-02-06T12:15:26", "url": "https://files.pythonhosted.org/packages/75/ce/4cce2b0f929aec727c9437f0dfd2d5b85538d037dcc40d9aba4318d24368/inapppy-0.1.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "3470f4798eec2be53d129912c5b11296", "sha256": "0bb5d828a12c8cf3f0e062586bf8ca69c33edcf923f5f58f61fd086f133ef793" }, "downloads": -1, "filename": "inapppy-0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "3470f4798eec2be53d129912c5b11296", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6812, "upload_time": "2017-02-07T11:25:07", "url": "https://files.pythonhosted.org/packages/75/c0/d184e32482c6714f50d5df3c29ca1cbb6f9514a828c57e55f4b4d4762d98/inapppy-0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa38f108e9b11b893638fb90327c1402", "sha256": "b3a779edbbf52138d2c7135e394e0afe0dbd97b4591de33715f6f8f0571972f5" }, "downloads": -1, "filename": "inapppy-0.6.tar.gz", "has_sig": false, "md5_digest": "fa38f108e9b11b893638fb90327c1402", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4029, "upload_time": "2017-02-07T11:25:08", "url": "https://files.pythonhosted.org/packages/b8/c9/c1e707257851c1f36accb83a63ed69a5af3c9309de6b56f4e7072f679591/inapppy-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "ce6c361c3b8503ac15fc54e2890af2cf", "sha256": "a14d883e8f40dd8b909058ddf304bbfc2584d9825638df5adf8447984f330ce9" }, "downloads": -1, "filename": "inapppy-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "ce6c361c3b8503ac15fc54e2890af2cf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6744, "upload_time": "2018-10-15T08:33:30", "url": "https://files.pythonhosted.org/packages/7b/73/c3f93424999282d0c82870ff7e5b5c6f8fa64c7bcabf2d730c75b9b3821d/inapppy-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c10299e7d72f9bde26dff2a8a441190c", "sha256": "71f10a03a5959870dfe962c66ca1c6133b9b2e167878208572e202e108f7fada" }, "downloads": -1, "filename": "inapppy-0.7.tar.gz", "has_sig": false, "md5_digest": "c10299e7d72f9bde26dff2a8a441190c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8868, "upload_time": "2018-10-15T08:33:32", "url": "https://files.pythonhosted.org/packages/83/84/736d9ef4186a9dc096fbb5e21b7aa4a55448b470965bf8373f1ae9e9bbbc/inapppy-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "0c46e71898894113330da52b8e3029d9", "sha256": "e0d0b5b23ab5f7b437fd622782225a6c3d401af17bd826578bcc54a0aafca231" }, "downloads": -1, "filename": "inapppy-0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "0c46e71898894113330da52b8e3029d9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6755, "upload_time": "2018-11-06T08:22:30", "url": "https://files.pythonhosted.org/packages/a1/e0/be90e0e039fb9528e5fe52fb092f94806b0acb851673a3aa4def770e5618/inapppy-0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "855ebdf6edf26b0017a9c8726a14f9ed", "sha256": "79e18d54ce3ee2910ab8bacf5b723752d582d30d6af509f3665da7b9357c9a41" }, "downloads": -1, "filename": "inapppy-0.8.tar.gz", "has_sig": false, "md5_digest": "855ebdf6edf26b0017a9c8726a14f9ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9036, "upload_time": "2018-11-06T08:22:31", "url": "https://files.pythonhosted.org/packages/73/19/8bed984d5cff842786a8290d72e2c58b3c6c45b62af8e28a807b3f0e5d3f/inapppy-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "2b54bb791d8b8f91e350d5ec43b79a39", "sha256": "5156969874d2f6064e6219aa27b53bdd39804675d08b25758c4e394e43d71a10" }, "downloads": -1, "filename": "inapppy-0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "2b54bb791d8b8f91e350d5ec43b79a39", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6799, "upload_time": "2018-11-14T06:25:57", "url": "https://files.pythonhosted.org/packages/f8/5f/d451122e118a34fbc6d5cc012e8763063b9a9fa638386016e8f3c2ff6da1/inapppy-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a6ad7cf9747a646e9fcf86914968356", "sha256": "d2bf63f7ffc99eab0d25fdd0c52d363be635ae1d5556aa2a1cfc0de77b09c331" }, "downloads": -1, "filename": "inapppy-0.9.tar.gz", "has_sig": false, "md5_digest": "5a6ad7cf9747a646e9fcf86914968356", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9212, "upload_time": "2018-11-14T06:25:59", "url": "https://files.pythonhosted.org/packages/f2/e6/830650fc82c41e892026c19e46095d29344acd826ff835a518ffa7568d9c/inapppy-0.9.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "d06548b295f9c9d6eb855f645b951e37", "sha256": "0acf75ad928e70759e5c78c6f994159eefb9410d706eddf8fa03e98906fe0784" }, "downloads": -1, "filename": "inapppy-2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d06548b295f9c9d6eb855f645b951e37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6908, "upload_time": "2018-11-15T10:53:16", "url": "https://files.pythonhosted.org/packages/64/60/db482f6aee2eacbb02b1e801965bbb972a13b4df64b75125305bb09f153f/inapppy-2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6396553adc702c4b987eabf6da072d7b", "sha256": "45e21a5368d13d33a414d9c7df1c67cf7eb45d138a41546bb99e339c9c4e6e0d" }, "downloads": -1, "filename": "inapppy-2.0.tar.gz", "has_sig": false, "md5_digest": "6396553adc702c4b987eabf6da072d7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9553, "upload_time": "2018-11-15T10:53:18", "url": "https://files.pythonhosted.org/packages/11/ff/7650e667008578c1f41e1755be59a19562b17dfdaebe60c66232d7d3c898/inapppy-2.0.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "b2d6bfb9f5da7bd95ca0e7681f27975c", "sha256": "18ac58b4ce6a92134c1a0d8e498742ccb7f192127bebdaa8ffb255bbd5bca6e3" }, "downloads": -1, "filename": "inapppy-2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b2d6bfb9f5da7bd95ca0e7681f27975c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8516, "upload_time": "2018-12-22T06:11:27", "url": "https://files.pythonhosted.org/packages/e2/1c/fc032fa513f00e718893606076f8c52da33ade15e8fbf5e4b632dd94f7f9/inapppy-2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d294b2c4fd6cedc3ce9e22d7f8402886", "sha256": "dbc58aa780181d72b302617fe2013c029f113b08f75fc5afaf1d9cd9d56bc4cf" }, "downloads": -1, "filename": "inapppy-2.1.tar.gz", "has_sig": false, "md5_digest": "d294b2c4fd6cedc3ce9e22d7f8402886", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6148, "upload_time": "2018-12-22T06:11:29", "url": "https://files.pythonhosted.org/packages/07/11/780cb6c4ee69a57e813abf764dede7a5b9a530fa20b09a27f5605f2316cd/inapppy-2.1.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "6fff6361800f2b71a926ce69c092b359", "sha256": "f29c2de28fb51af70197f7f3c87b83a3bb010417cd763107d36ea397543106fb" }, "downloads": -1, "filename": "inapppy-2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6fff6361800f2b71a926ce69c092b359", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8448, "upload_time": "2019-01-14T17:06:53", "url": "https://files.pythonhosted.org/packages/a2/b5/5062b0cb59b98d043ca5b6395fe055d9c9be5b5cf47b64df8a5d9096ac38/inapppy-2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9cc6c2984e17187a811d30050121d64", "sha256": "c0742e2a2913f26c647244ee83937aa21b06e4c3a4d9c1c00ca1a1da65cd1fd8" }, "downloads": -1, "filename": "inapppy-2.2.tar.gz", "has_sig": false, "md5_digest": "f9cc6c2984e17187a811d30050121d64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10970, "upload_time": "2019-01-14T17:06:54", "url": "https://files.pythonhosted.org/packages/3a/0e/cad4b710caaec2f653a4c29d3b4ec26febce6631725b72061fbd821b7b0d/inapppy-2.2.tar.gz" } ], "2.3": [ { "comment_text": "", "digests": { "md5": "dcdc6e910a92c005b0f1f940248080df", "sha256": "4c32ae49e69a1c9b2943cdcca48da19f6db1ee08118ffcf80134061592300457" }, "downloads": -1, "filename": "inapppy-2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "dcdc6e910a92c005b0f1f940248080df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8477, "upload_time": "2019-01-25T10:59:55", "url": "https://files.pythonhosted.org/packages/7a/8e/92ccaeba0ee692a26cdc58bb263abde47f9b5fe693f31797ca682680dfac/inapppy-2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0b6e409726000f3ff1851d6e0eadfb0", "sha256": "139866ebd132729417a2f1be37e23bde10b23690c7ebae6308274588afc9b995" }, "downloads": -1, "filename": "inapppy-2.3.tar.gz", "has_sig": false, "md5_digest": "a0b6e409726000f3ff1851d6e0eadfb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11059, "upload_time": "2019-01-25T10:59:56", "url": "https://files.pythonhosted.org/packages/be/e3/21c49174a72a3def5a565286421a262ee3ae46257c0d62c9611b1bf175e4/inapppy-2.3.tar.gz" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "0a77f1355fdfc129c0d991da647edbd6", "sha256": "fd6dc48a5cd9776e862bda0665d156f3c45bec7d118b3b3c1c81964cb0905caa" }, "downloads": -1, "filename": "inapppy-2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0a77f1355fdfc129c0d991da647edbd6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8695, "upload_time": "2019-04-10T07:34:39", "url": "https://files.pythonhosted.org/packages/9a/fd/d47cc517e2a2fe56a461bf5a520716de17461a873b484f6df9988800c7b5/inapppy-2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee8a73f04983f18a6345f4cbc028bfd6", "sha256": "76a43d39137d2e0bc26d03c058d378a34aef3a21b51f1e678745a0860a3a1ce8" }, "downloads": -1, "filename": "inapppy-2.4.tar.gz", "has_sig": false, "md5_digest": "ee8a73f04983f18a6345f4cbc028bfd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11392, "upload_time": "2019-04-10T07:34:41", "url": "https://files.pythonhosted.org/packages/2f/fb/bd3ad3b2cac131f432c469c63dc1f20247717f57445e89d2b68c16f8058e/inapppy-2.4.tar.gz" } ], "2.4.1": [ { "comment_text": "", "digests": { "md5": "59232d27d0d9983e3372006c2acf657d", "sha256": "af0c49c5b545bbb6b7eb2a0d6edfef9757853f5414c1ede67ffddbcabe99a253" }, "downloads": -1, "filename": "inapppy-2.4.1.tar.gz", "has_sig": false, "md5_digest": "59232d27d0d9983e3372006c2acf657d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6476, "upload_time": "2019-04-10T09:28:11", "url": "https://files.pythonhosted.org/packages/5b/b7/c1cbdba79c736b4ffbf3ebc88c4118d9b8caa9582c51a8be6703f7d2b77d/inapppy-2.4.1.tar.gz" } ], "2.4.2": [ { "comment_text": "", "digests": { "md5": "5e43c084fcbfe51d57c1661439fbacfc", "sha256": "e75d5c67d56aff5ecd790cff0d3392acc03cb795a77c6dc126477ddf311efe11" }, "downloads": -1, "filename": "inapppy-2.4.2.tar.gz", "has_sig": false, "md5_digest": "5e43c084fcbfe51d57c1661439fbacfc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7198, "upload_time": "2019-07-24T10:30:37", "url": "https://files.pythonhosted.org/packages/41/e6/649071608ab98021db6b905b6749f2968302d9953afc9b0122983d77d99c/inapppy-2.4.2.tar.gz" } ], "2.4.3": [ { "comment_text": "", "digests": { "md5": "f0ba1b503a4253c3d85336321a35fa2a", "sha256": "227c9981b720bfd85ff44cc839b0dd0f10f1fc1184e1906aeefb86ed201d3d61" }, "downloads": -1, "filename": "inapppy-2.4.3.tar.gz", "has_sig": false, "md5_digest": "f0ba1b503a4253c3d85336321a35fa2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7398, "upload_time": "2019-07-24T18:50:04", "url": "https://files.pythonhosted.org/packages/c8/fe/c64e78d6cac97a0a23289d2f533a7ed5c0a6289a3644b1a26a569b6b7e9a/inapppy-2.4.3.tar.gz" } ], "2.4.4": [ { "comment_text": "", "digests": { "md5": "caaf4e6200629953023120784ff8c321", "sha256": "3f4ef77383385ba908598a5ac1836a9716176f9db051479adef2b7fa69d5dab3" }, "downloads": -1, "filename": "inapppy-2.4.4.tar.gz", "has_sig": false, "md5_digest": "caaf4e6200629953023120784ff8c321", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8234, "upload_time": "2019-08-18T16:01:06", "url": "https://files.pythonhosted.org/packages/4f/a7/d9e6c0c50189c49d554122ab93296d56b6a82843a091cf4638091d5dbc67/inapppy-2.4.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "caaf4e6200629953023120784ff8c321", "sha256": "3f4ef77383385ba908598a5ac1836a9716176f9db051479adef2b7fa69d5dab3" }, "downloads": -1, "filename": "inapppy-2.4.4.tar.gz", "has_sig": false, "md5_digest": "caaf4e6200629953023120784ff8c321", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8234, "upload_time": "2019-08-18T16:01:06", "url": "https://files.pythonhosted.org/packages/4f/a7/d9e6c0c50189c49d554122ab93296d56b6a82843a091cf4638091d5dbc67/inapppy-2.4.4.tar.gz" } ] }