{ "info": { "author": "Matthias Bussonnier", "author_email": "bussonniermatthias@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License" ], "description": "# Frappucino\n\nFreeze your API.\n\nFrappucino allows you during development to make sure you haven't broken API. By\nfirst taking an imprint of your API at one point in time and then compare it to\nthe current project state. The goal is to warn you when incompatible changes\nhave been introduces, and list theses.\n\nYou could integrate it in you CI to make sure you don't inadvertently break\nthings.\n\nExample:\n\n```python\n# old function\ndef read(name, *, options=None):\n with open(name, 'rb') as f:\n return process(data)\n\n# new function\ndef read(name_or_buffer, *, options=None):\n if isinstance(name, str):\n with open(name, 'rb') as f:\n data = f.read()\n else:\n data = name_or_buffer.read()\n return process(data)\n```\n\nThere is a subtle breakage of API in the above, as you may not remember\npositional parameters can be use a keyword arguments. That is to say one of your customer may use:\n\n```python\nread(name='dump.csv')\n```\n\nHence changing the _name_ of the positional parameter from `name` to\n`name_or_buffer` is a change of API. There are a number of details like this one\nwhere you _may_ end up breaking API without realizing. It's hard to keep track\nof this when working on dev branches, unit test may not catch all of that.\nFrappuccino is there to help.\n\n\n# Example:\n\n\n```\n$ source activate astropy==3.2\n$ frappuccino astropy astropy.timeseries --save astropy.json\n\n$ source activate astropy=master\n$ frappuccino astropy astropy.timeseries --compare astropy.json\n\nThe following signatures differ between versions:\n\n - astropy.time.core.TimeDelta.to(self, *args, **kwargs)\n + astropy.time.core.TimeDelta.to(self, unit, equivalencies='[]')\n\n - astropy.table.table.Table.add_column(self, col, index='None', name='None', rename_duplicate='False', copy='True')\n + astropy.table.table.Table.add_column(self, col, index='None', name='None', rename_duplicate='False', copy='True', default_name='None')\n\n - astropy.table.table.Table.replace_column(self, name, col)\n + astropy.table.table.Table.replace_column(self, name, col, copy='True')\n```\n\n# Other example \n\n```\ncp frappuccino/tests/old.py frappuccino/t.py ; frappuccino frappuccino.t --save t.json; sleep 2; cp frappuccino/tests/new.py frappuccino/t.py; frappuccino frappuccino.t --compare t.json\n```\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/Carreau/frappuccino", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "frappuccino", "package_url": "https://pypi.org/project/frappuccino/", "platform": "", "project_url": "https://pypi.org/project/frappuccino/", "project_urls": { "Homepage": "https://github.com/Carreau/frappuccino" }, "release_url": "https://pypi.org/project/frappuccino/0.0.6/", "requires_dist": [ "pytoml" ], "requires_python": ">=3.6", "summary": "Frappuccino", "version": "0.0.6" }, "last_serial": 5888048, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "e35d3d77bf7027d4859557ba867a207b", "sha256": "31be798da40449f90d6da04937c1472626e7a78f4466d38dabad102ff78fdf2e" }, "downloads": -1, "filename": "frappuccino-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e35d3d77bf7027d4859557ba867a207b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 958950, "upload_time": "2017-06-29T14:06:25", "url": "https://files.pythonhosted.org/packages/f8/85/ef8e1f1ba15d1456a714c1fce774af1b22c7ceabd5ffbd82e793546f7022/frappuccino-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "f8864f4ab343c3e99841b08b3461918e", "sha256": "a960ef945d9068f3a39cdcaf15625ad8b4a3666e497326090a1e2a9f4db2ecc9" }, "downloads": -1, "filename": "frappuccino-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f8864f4ab343c3e99841b08b3461918e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 28912, "upload_time": "2019-07-13T20:17:16", "url": "https://files.pythonhosted.org/packages/b6/32/20d81e136a7eb7f987e49fefc07a4270d3171b353095251aa7169f0f620e/frappuccino-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "243df27267e6c0818e3a6f8d05ed6322", "sha256": "21dd05eb0932ee98c7b22981d4e07979857ef1d972566fac09174c2dc4d67fc6" }, "downloads": -1, "filename": "frappuccino-0.0.2.tar.gz", "has_sig": false, "md5_digest": "243df27267e6c0818e3a6f8d05ed6322", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11515, "upload_time": "2019-07-13T20:17:18", "url": "https://files.pythonhosted.org/packages/38/c8/4e147b3ed474b8e32a5d67bc9b1dcc69f0a683f1e0cefc46c2fa5d3e6cd3/frappuccino-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "b19cfc32c72c568f07c154a784697a86", "sha256": "02afe59f5e00972ac26ec7b603a283ad2af37c92412b966a4fc0e3edd088e3c6" }, "downloads": -1, "filename": "frappuccino-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b19cfc32c72c568f07c154a784697a86", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 29663, "upload_time": "2019-07-13T22:08:05", "url": "https://files.pythonhosted.org/packages/ef/15/0a746464a31520fcdac59bc7120f7508f3a4ff36fc9eaf4afa41b2fb9512/frappuccino-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ba57648bdd15222577bfb492beac397", "sha256": "e3604d331fc49ae391eb85df57c554cd39f4d6cc7830d02bf7bd7340414640f6" }, "downloads": -1, "filename": "frappuccino-0.0.3.tar.gz", "has_sig": false, "md5_digest": "5ba57648bdd15222577bfb492beac397", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11653, "upload_time": "2019-07-13T22:08:06", "url": "https://files.pythonhosted.org/packages/80/ba/2a4ba9aff1d0fdb77c1dea810113bc60a20848384279dca3b0174b6f8f0b/frappuccino-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "7cf3d23dd86e64116f1fdf61e6b0c6e4", "sha256": "efe86d77bd4e1edff23f40a771b5fcaf0f95778ca44e4e4b023bcbccfd575551" }, "downloads": -1, "filename": "frappuccino-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "7cf3d23dd86e64116f1fdf61e6b0c6e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 29630, "upload_time": "2019-07-13T22:09:39", "url": "https://files.pythonhosted.org/packages/23/ff/9e41a7f1bba0eb6c89c81b7b9c9aa8c3e07883cf56a291cf392a5433f76e/frappuccino-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c580104bb59b516509775b2cd844fbc2", "sha256": "b87abdecc78ea6c4a86bb5fd48677cb92e7da8341c7da3fb4aba4f561138c146" }, "downloads": -1, "filename": "frappuccino-0.0.4.tar.gz", "has_sig": false, "md5_digest": "c580104bb59b516509775b2cd844fbc2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11640, "upload_time": "2019-07-13T22:09:41", "url": "https://files.pythonhosted.org/packages/56/c1/ea89196ebe8d3177bf0c37775f738971f6e920dd8b25e012b127c387dd5d/frappuccino-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "28fd83ee878e9368c463bb5c270e4791", "sha256": "5490c836fb1868caf3c29fe47afe086cee437217cc66c27d41d3d5a60667297c" }, "downloads": -1, "filename": "frappuccino-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "28fd83ee878e9368c463bb5c270e4791", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 30464, "upload_time": "2019-07-14T15:35:00", "url": "https://files.pythonhosted.org/packages/8a/88/1ba4064db34dbc1ca5619e84fbd9c86ab81670d43d8b63e556568a6bd0a0/frappuccino-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "410c16a82fcad3f8a79c7f4291aa6d43", "sha256": "ad25d312d4b6695cd5f6c942913b037578a7f55c58569b2ecf1af56db34fd0c2" }, "downloads": -1, "filename": "frappuccino-0.0.5.tar.gz", "has_sig": false, "md5_digest": "410c16a82fcad3f8a79c7f4291aa6d43", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12453, "upload_time": "2019-07-14T15:35:02", "url": "https://files.pythonhosted.org/packages/27/df/cc369ea21ce9124dce0249f914e0d77acb2f0999e308319038eb0eb723ea/frappuccino-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6ef36cf59143261b0df03ea290f3d8dd", "sha256": "cc0cade435d984fe47fb0916f820e54bc2460dfa70e5642c1b02a158518a251f" }, "downloads": -1, "filename": "frappuccino-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "6ef36cf59143261b0df03ea290f3d8dd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34635, "upload_time": "2019-09-26T02:21:24", "url": "https://files.pythonhosted.org/packages/05/45/9c0996c459406b851fcb01de5e255213b321846f6a3fcc9ddfb330be0959/frappuccino-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c7d6c9484e277bafc1a7672c8f82ced", "sha256": "e2c3559bce43fcb3dcb6492ecc34d94f71dd2ca7c46395d2ec16bd37d20c60c1" }, "downloads": -1, "filename": "frappuccino-0.0.6.tar.gz", "has_sig": false, "md5_digest": "2c7d6c9484e277bafc1a7672c8f82ced", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12730, "upload_time": "2019-09-26T02:21:26", "url": "https://files.pythonhosted.org/packages/c6/8e/fc0f30e5f4bdbabf373c97c5805a2b9d3b26f09b2f52ce7543cf92b2037d/frappuccino-0.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6ef36cf59143261b0df03ea290f3d8dd", "sha256": "cc0cade435d984fe47fb0916f820e54bc2460dfa70e5642c1b02a158518a251f" }, "downloads": -1, "filename": "frappuccino-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "6ef36cf59143261b0df03ea290f3d8dd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34635, "upload_time": "2019-09-26T02:21:24", "url": "https://files.pythonhosted.org/packages/05/45/9c0996c459406b851fcb01de5e255213b321846f6a3fcc9ddfb330be0959/frappuccino-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c7d6c9484e277bafc1a7672c8f82ced", "sha256": "e2c3559bce43fcb3dcb6492ecc34d94f71dd2ca7c46395d2ec16bd37d20c60c1" }, "downloads": -1, "filename": "frappuccino-0.0.6.tar.gz", "has_sig": false, "md5_digest": "2c7d6c9484e277bafc1a7672c8f82ced", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12730, "upload_time": "2019-09-26T02:21:26", "url": "https://files.pythonhosted.org/packages/c6/8e/fc0f30e5f4bdbabf373c97c5805a2b9d3b26f09b2f52ce7543cf92b2037d/frappuccino-0.0.6.tar.gz" } ] }