{ "info": { "author": "Nikita Sobolev", "author_email": "mail@sobolevn.me", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Quality Assurance" ], "description": "# docker-image-size-limit\n\n[![wemake.services](https://img.shields.io/badge/%20-wemake.services-green.svg?label=%20&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAbUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP%2F%2F%2F5TvxDIAAAAIdFJOUwAjRA8xXANAL%2Bv0SAAAADNJREFUGNNjYCAIOJjRBdBFWMkVQeGzcHAwksJnAPPZGOGAASzPzAEHEGVsLExQwE7YswCb7AFZSF3bbAAAAABJRU5ErkJggg%3D%3D)](https://wemake.services) [![Build Status](https://travis-ci.org/wemake-services/docker-image-size-limit.svg?branch=master)](https://travis-ci.org/wemake-services/docker-image-size-limit) [![Coverage](https://coveralls.io/repos/github/wemake-services/docker-image-size-limit/badge.svg?branch=master)](https://coveralls.io/github/wemake-services/docker-image-size-limit?branch=master) [![wemake-python-styleguide](https://img.shields.io/badge/style-wemake-000000.svg)](https://github.com/wemake-services/docker-image-size-limit)\n\nLimit your `docker` image size with a simple CLI command.\nPerfect to be used inside your CI process.\n\nRead the [announcing post](https://sobolevn.me/2019/03/announcing-docker-image-size-limit).\n\n\n## Installation\n\n```bash\npip install docker-image-size-limit\n```\n\n\n## Usage\n\nWe support just a single command:\n\n```bash\n$ disl your-image-name:label 300MiB\nyour-image-name:label exceeds 300MiB limit by 114.4 MiB\n```\n\n\n## Options\n\nYou can specify your image as:\n\n- Image name: `python`\n- Image name with tag: `python:3.6.6-alpine`\n\nYou can specify your size as:\n\n- Raw number of bytes: `1024`\n- Human-readable megabytes: `30 MB` or `30 MiB`\n- Human-readable gigabytes: `1 GB` or `1 GiB`\n- Any other size supported by [`humanfriendly`](https://humanfriendly.readthedocs.io/en/latest/api.html#humanfriendly.parse_size)\n\n\n## Programmatic usage\n\nYou can also import and use this library as `python` code:\n\n```python\nfrom docker import from_env\nfrom docker_image_size_limit import check_image_size\n\noversize = check_image_size(client, 'image-name:latest', '1 GiB')\nassert oversize < 0, 'Too big image!' # negative oversize - is a good thing!\n```\n\nWe also ship [PEP-561](https://www.python.org/dev/peps/pep-0561/)\ncompatible type annotations with this library.\n\n\n## Should I use it?\n\nYou can use this script instead:\n\n```bash\nLIMIT=1024\nIMAGE='your-image-name:latest'\n\nSIZE=\"$(docker image inspect \"$IMAGE\" --format='{{.Size}}')\"\ntest \"$SIZE\" -gt \"$LIMIT\" && echo 'Limit exceeded'; false\n```\n\nBut I prefer to reuse tools over\ncustom `bash` scripts here and there.\n\n\n## License\n\nMIT.\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/wemake-services/docker-image-size-limit", "keywords": "docker,docker image,size limit,wemake.services,code quality", "license": "MIT", "maintainer": "Nikita Sobolev", "maintainer_email": "mail@sobolevn.me", "name": "docker-image-size-limit", "package_url": "https://pypi.org/project/docker-image-size-limit/", "platform": "", "project_url": "https://pypi.org/project/docker-image-size-limit/", "project_urls": { "Homepage": "https://github.com/wemake-services/docker-image-size-limit", "Repository": "https://github.com/wemake-services/docker-image-size-limit" }, "release_url": "https://pypi.org/project/docker-image-size-limit/0.2.0/", "requires_dist": [ "docker (>=3.7,<5.0)", "humanfriendly (>=4.18,<5.0)" ], "requires_python": ">=3.6,<4.0", "summary": "", "version": "0.2.0" }, "last_serial": 5832094, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6beffd558d430d9ef97fd4400e9db96a", "sha256": "3cb81754c00808094e8efcaf10bd5e0a4eaa4f3ebe21f04c7d523130ae713a02" }, "downloads": -1, "filename": "docker_image_size_limit-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6beffd558d430d9ef97fd4400e9db96a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 5696, "upload_time": "2019-03-03T10:15:12", "url": "https://files.pythonhosted.org/packages/33/85/21bdb0fa23d923fb85a0b57dad8f4ff5fb5490096baf938364685596588a/docker_image_size_limit-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d69d54e4564cafa95b3e0052134cf1c", "sha256": "b4519684b1469db5e11b87915d363dcfcf185b062c25c7c4d82d0098be70ed44" }, "downloads": -1, "filename": "docker-image-size-limit-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5d69d54e4564cafa95b3e0052134cf1c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3834, "upload_time": "2019-03-03T10:15:09", "url": "https://files.pythonhosted.org/packages/f0/4d/a7f65248458a8ac640689a16ac7b34b550f2d5406864e9bd49c5f7645d51/docker-image-size-limit-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "0dff038d1d08d9b39f41070af19c846e", "sha256": "0cde49bf84dd8f7db79480fce9ea6aeb91fa784f0823c90e62bdab2f1a555e1e" }, "downloads": -1, "filename": "docker_image_size_limit-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0dff038d1d08d9b39f41070af19c846e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 5695, "upload_time": "2019-03-03T10:23:59", "url": "https://files.pythonhosted.org/packages/d5/25/9bca22f97d359c5833f784e1baeb72cc95602604f22c132b9c75456cffb2/docker_image_size_limit-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83b2f374b1ea82744d417788c0fa7323", "sha256": "979a7da789f8973b135fd3716e5fc85ddaac03192d7c35ddbbfaafc82b6be0a0" }, "downloads": -1, "filename": "docker-image-size-limit-0.1.1.tar.gz", "has_sig": false, "md5_digest": "83b2f374b1ea82744d417788c0fa7323", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3822, "upload_time": "2019-03-03T10:23:58", "url": "https://files.pythonhosted.org/packages/2e/96/19e1ac8b40377e26752d8db8fe8f34967d72b9bde65d96d3f2c1cfd05c10/docker-image-size-limit-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "49d9bfbebbfac69e052bb59fa8e470ee", "sha256": "b946a1a991c479d51a32feb5f802e772210ddd56a4805be20347626d60505219" }, "downloads": -1, "filename": "docker_image_size_limit-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "49d9bfbebbfac69e052bb59fa8e470ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 5682, "upload_time": "2019-03-03T11:22:26", "url": "https://files.pythonhosted.org/packages/e4/e4/1105348e56b9897d4d9e25d4ff34b99bb7122d76f471ab7e1a7ae3c10a64/docker_image_size_limit-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "02cc8f0e39f6ff0af5b3b2e68e21c838", "sha256": "3802644ff029e4f62e3fdeb5747c1c9645f201cfd05600659cf55788463d138d" }, "downloads": -1, "filename": "docker-image-size-limit-0.1.2.tar.gz", "has_sig": false, "md5_digest": "02cc8f0e39f6ff0af5b3b2e68e21c838", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3795, "upload_time": "2019-03-03T11:22:25", "url": "https://files.pythonhosted.org/packages/4d/e1/ec247f8d193fc6182b66833be78905c7378401a4587a2095a304ca00c59a/docker-image-size-limit-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f5481d1b42026ad9809cca607906e2e9", "sha256": "885b1ae5df3aec101a511408f59fd2760830f6de3a3f0f8d19503af813b86347" }, "downloads": -1, "filename": "docker_image_size_limit-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f5481d1b42026ad9809cca607906e2e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6171, "upload_time": "2019-09-15T14:20:21", "url": "https://files.pythonhosted.org/packages/60/a3/d8822c68a38a45e6885848c502c058e415267063c203747a57830042aac0/docker_image_size_limit-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "056780fe6569ec745a13cff6ba821b05", "sha256": "c866d33a19779d2c4a78ace4a6e7ebea33457b3cc292f246a006029addb3bcda" }, "downloads": -1, "filename": "docker-image-size-limit-0.2.0.tar.gz", "has_sig": false, "md5_digest": "056780fe6569ec745a13cff6ba821b05", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 4291, "upload_time": "2019-09-15T14:20:18", "url": "https://files.pythonhosted.org/packages/0e/3c/b1a705f91d4a1bc67c22a40de8687b6b94dcf24d267c79f082fc753b17af/docker-image-size-limit-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f5481d1b42026ad9809cca607906e2e9", "sha256": "885b1ae5df3aec101a511408f59fd2760830f6de3a3f0f8d19503af813b86347" }, "downloads": -1, "filename": "docker_image_size_limit-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f5481d1b42026ad9809cca607906e2e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 6171, "upload_time": "2019-09-15T14:20:21", "url": "https://files.pythonhosted.org/packages/60/a3/d8822c68a38a45e6885848c502c058e415267063c203747a57830042aac0/docker_image_size_limit-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "056780fe6569ec745a13cff6ba821b05", "sha256": "c866d33a19779d2c4a78ace4a6e7ebea33457b3cc292f246a006029addb3bcda" }, "downloads": -1, "filename": "docker-image-size-limit-0.2.0.tar.gz", "has_sig": false, "md5_digest": "056780fe6569ec745a13cff6ba821b05", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 4291, "upload_time": "2019-09-15T14:20:18", "url": "https://files.pythonhosted.org/packages/0e/3c/b1a705f91d4a1bc67c22a40de8687b6b94dcf24d267c79f082fc753b17af/docker-image-size-limit-0.2.0.tar.gz" } ] }