{ "info": { "author": "Martin Strohalm", "author_email": "pero@bymartin.cz", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", "Topic :: Multimedia :: Graphics :: Presentation", "Topic :: Scientific/Engineering" ], "description": "# Pero\n\nThe main motivation behind the *pero* library is to provide unified API for multiple drawing backends like\n[PyQt5](https://pypi.org/project/PyQt5/), [wxPython](https://pypi.org/project/wxPython/),\n[PyCairo](https://pypi.org/project/pycairo/), [PyMuPDF](https://pypi.org/project/PyMuPDF/),\n[Pythonista](http://omz-software.com/pythonista/) (and possibly more), which is easy to understand and use. Beside the\ncommon drawing capabilities, numerous pre-build glyphs are available, as well as an easy to use path, matrix\ntransformations etc. Depending on available backend libraries, drawings can be viewed directly or exported into various\nimage formats.\n\nEver since I discovered the wonderful [d3js](https://d3js.org) JavaScript library, I wanted to have the same amazing\nconcept of dynamic properties within Python drawings. In fact, this has been the trigger to start working on the *pero*\nlibrary. Finally, it is all now available.\n\nUntil the full [documentation](https://github.com/xxao/pero/tree/master/docs) is available, please see the *examples* folder or in-code documentation\nof classes and functions to learn more about the *pero* library capabilities.\n\n\n```python\n\nimport pero\n\nimg = pero.Image(width=200, height=200)\n\nimg.line_cap = pero.ROUND\nimg.line_join = pero.ROUND\n\n# fill\nimg.fill_color = pero.colors.White\nimg.fill()\n\n# body\nimg.line_width = 2\nimg.line_color = pero.colors.Orange.darker(.1)\nimg.fill_color = pero.colors.Orange\nimg.draw_circle(100, 100, 75)\n\n# shadow\nimg.line_color = None\nimg.fill_color = pero.colors.White.darker(.1)\nimg.draw_ellipse(100, 185, 70, 10)\n\n# eyes\nimg.fill_color = pero.colors.Black\nimg.draw_circle(70, 85, 15)\nimg.draw_circle(130, 85, 15)\n\n# eyebrows\nimg.line_color = pero.colors.Black\nimg.fill_color = None\nimg.line_width = 3\nimg.draw_arc(70, 85, 23, pero.rads(-100), pero.rads(-20))\nimg.draw_arc(130, 85, 23, pero.rads(200), pero.rads(280))\n\n# mouth\nimg.line_width = 5\nimg.draw_arc(100, 100, 50, pero.rads(40), pero.rads(80))\n\n# highlight\nimg.line_color = pero.colors.Orange.lighter(.3)\nimg.draw_arc(100, 100, 68, pero.rads(220), pero.rads(260))\n\n# hat\npath = pero.Path(pero.WINDING)\npath.ellipse(100, 27, 40, 10)\npath.ellipse(100, 17, 30, 10)\npath.rect(85, 17, 30, 10)\n\nmat = pero.Matrix().rotate(pero.rads(20), 100, 100)\npath.transform(mat)\n\nimg.line_color = None\nimg.fill_color = pero.colors.Black\nimg.draw_path(path)\n\n# show image\nimg.show()\n```\n\n![Final Image](https://raw.githubusercontent.com/xxao/pero/master/docs/drawing/images/image.png)\n\n\n## Requirements\n\n- [Python 3.6+](https://www.python.org)\n- [Numpy](https://pypi.org/project/numpy/)\n- [PIL (Pillow)](https://pypi.org/project/Pillow/)\n- \\[[PyQt5](https://pypi.org/project/PyQt5/)\\]\n- \\[[wxPython](https://pypi.org/project/wxPython/)\\]\n- \\[[PyCairo](https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycairo)\\]\n- \\[[PyMuPDF](https://pypi.org/project/PyMuPDF/)\\]\n- \\[[Pythonista iOS App](http://omz-software.com/pythonista/)\\]\n\n\n## Installation\n\nThe *pero* library is fully implemented in Python. No additional compiler is necessary. After downloading the source\ncode just run the following command from the *pero* folder:\n\n```$ python setup.py install```\n\nor simply by using pip\n\n```$ pip install pero```\n\n\n## Disclaimer\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied\nwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\nPlease note that the *pero* library is still in an alpha state. Any changes in its API may occur.\n\n\n## Examples\n\n\n### Using default backend\n\nIf you just want to draw an image using whatever the default backend is (for requested format), or show the image\ndirectly (requires wxPython or Pythonista), just create an image and use it as any other *pero* canvas:\n\n```python\n\nimport pero\n\n# init size\nwidth = 200\nheight = 200\n\n# init image\nimg = pero.Image(width=width, height=height)\n\n# draw graphics\nimg.line_color = \"b\"\nimg.fill_color = \"w\"\nimg.fill()\nimg.draw_circle(100, 100, 75)\n\n# save to file\nimg.export('image.png')\n\n# show in viewer\nimg.show()\n```\n\n### Using PyQt5\n\nInside a *QWidget* you can create a *QPainter* and encapsulate it into the *pero* canvas:\n\n```python\n\nimport pero\nfrom PyQt5.QtGui import QPainter\n\n# init size\nwidth = 200\nheight = 200\n\n# init painter\nqp = QPainter()\nqp.begin(self)\nqp.setRenderHint(QPainter.Antialiasing)\n\n# init canvas\ncanvas = pero.qt.QtCanvas(qp)\n\n# draw graphics\ncanvas.line_color = \"b\"\ncanvas.fill_color = \"w\"\ncanvas.fill()\ncanvas.draw_circle(100, 100, 75)\n\n# end drawing\nqp.end()\n```\n\n\n### Using wxPython\n\nInside a *wxApp* you can use just about any *wxDC* you want and encapsulate it into the *pero* canvas:\n\n```python\n\nimport pero\nimport wx\n\n# init size\nwidth = 200\nheight = 200\n\n# create DC\nbitmap = wx.Bitmap(width, height)\ndc = wx.MemoryDC()\ndc.SelectObject(bitmap)\n\n# use GCDC\nif 'wxMac' not in wx.PlatformInfo:\n dc = wx.GCDC(dc)\n\n# init canvas\ncanvas = pero.wx.WXCanvas(dc, width=width, height=height)\n\n# draw graphics\ncanvas.line_color = \"b\"\ncanvas.fill_color = \"w\"\ncanvas.fill()\ncanvas.draw_circle(100, 100, 75)\n```\n\n### Using PyCairo\n\nDepending on the final image format, choose appropriate *cairo* surface, get the drawing context and encapsulate it into\nthe *pero* canvas:\n\n```python\n\nimport pero\nimport cairo\n\n# init size\nwidth = 200\nheight = 200\n\n# create cairo drawing context\nsurface = cairo.PSSurface('image.eps', width, height)\ndc = cairo.Context(surface)\n\n# init canvas\ncanvas = pero.cairo.CairoCanvas(dc, width=width, height=height)\n\n# draw graphics\ncanvas.line_color = \"b\"\ncanvas.fill_color = \"w\"\ncanvas.fill()\ncanvas.draw_circle(100, 100, 75)\n\n# save to file\ndc.show_page()\n```\n\n### Using PyMuPDF\n\nCreate a document, add new page and encapsulate it into the *pero* canvas:\n\n```python\n\nimport pero\nimport fitz\n\n# init size\nwidth = 200\nheight = 200\n\n# init document\ndoc = fitz.open()\npage = doc.newPage(width=width, height=height)\n\n# init canvas\ncanvas = pero.mupdf.MuPDFCanvas(page)\n\n# draw graphics\ncanvas.line_color = \"b\"\ncanvas.fill_color = \"w\"\ncanvas.fill()\ncanvas.draw_circle(100, 100, 75)\n\n# save to file\ndoc.save('image.pdf')\ndoc.close()\n```\n\n### Using SVG\n\nThe *pero* library implements its own way to draw and save SVG files Just create a *pero* canvas:\n\n```python\n\nimport pero\n\n# init size\nwidth = 200\nheight = 200\n\n# init canvas\ncanvas = pero.svg.SVGCanvas(width=width, height=height)\n\n# draw graphics\ncanvas.line_color = \"b\"\ncanvas.fill_color = \"w\"\ncanvas.fill()\ncanvas.draw_circle(100, 100, 75)\n\n# save to file\nwith open('test.svg', 'w', encoding='utf-8') as f:\n f.write(canvas.get_xml())\n```\n\n### Using Pythonista\n\nInitialize a new *ui.ImageContext* and create a *pero* canvas:\n\n```python\n\nimport pero\nimport ui\n\n# init size\nwidth = 200\nheight = 200\n\n# open context\nwith ui.ImageContext(width, height) as ctx:\n\n # init canvas\n canvas = pero.pythonista.UICanvas(width=width, height=height)\n\n # draw graphics\n canvas.line_color = \"b\"\n canvas.fill_color = \"w\"\n canvas.fill()\n canvas.draw_circle(100, 100, 75)\n\n # show image\n img = ctx.get_image()\n img.show()\n```\n\n### Using glyphs and dynamic properties\n\nSimilar to [d3js](https://d3js.org>) JavaScript library, most of the properties of pre-build *pero.Glyphs* objects can\nbe specified as a function, to which given data source is automatically provided. Together with *pero.scales* (and maybe\nthe *pero.Axis)* this can be used to make simple plots easily.\n\n```python\n\nimport pero\nimport numpy\n\n# init size\nwidth = 400\nheight = 300\npadding = 50\n\n# init data\nx_data = numpy.linspace(-numpy.pi, numpy.pi, 50)\ny_data = numpy.sin(x_data)\n\n# init scales\nx_scale = pero.LinScale(\n in_range = (min(x_data), max(x_data)),\n out_range = (padding, width-padding))\n\ny_scale = pero.LinScale(\n in_range = (-1, 1),\n out_range = (height-padding, padding))\n\ncolor_scale = pero.GradientScale(\n in_range = (-1, 1),\n out_range = pero.colors.Spectral)\n\n# init marker\nmarker = pero.Circle(\n size = 8,\n x = lambda d: x_scale.scale(d[0]),\n y = lambda d: y_scale.scale(d[1]),\n line_color = lambda d: color_scale.scale(d[1]).darker(.2),\n fill_color = lambda d: color_scale.scale(d[1]))\n\n# init image\nimage = pero.Image(width=width, height=height)\n\n# fill\nimage.fill_color = pero.colors.White\nimage.fill()\n\n# draw points\nfor p in zip(x_data, y_data):\n marker.draw(image, source=p)\n\n# show image\nimage.show()\n```\n\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/xxao/pero", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pero", "package_url": "https://pypi.org/project/pero/", "platform": "", "project_url": "https://pypi.org/project/pero/", "project_urls": { "Homepage": "https://github.com/xxao/pero" }, "release_url": "https://pypi.org/project/pero/0.10.0/", "requires_dist": [ "numpy", "Pillow" ], "requires_python": "", "summary": "Draw consistently with various backends", "version": "0.10.0" }, "last_serial": 6004411, "releases": { "0.10.0": [ { "comment_text": "", "digests": { "md5": "807c87b0c54b031895e3eb296d5f2298", "sha256": "48ee2aa28d5ede123bfbde344a80f924e2dfecd4c9acfcb6d0c85968c636270d" }, "downloads": -1, "filename": "pero-0.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "807c87b0c54b031895e3eb296d5f2298", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 290479, "upload_time": "2019-10-20T19:29:15", "url": "https://files.pythonhosted.org/packages/36/c2/1e8811fede6aa6c6418f1a8f85cfe44cfffb7c5649505acad0dd49bc8889/pero-0.10.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7c53c4aa7db6c91df696381acee8f21", "sha256": "3ceb987eda10d25927f19ef5af07c236df70663c92f94e3f5cb269c3a01b0909" }, "downloads": -1, "filename": "pero-0.10.0.tar.gz", "has_sig": false, "md5_digest": "a7c53c4aa7db6c91df696381acee8f21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204925, "upload_time": "2019-10-20T19:29:41", "url": "https://files.pythonhosted.org/packages/5c/2d/b95c3c47cbe3681f80327f7c5d1e05ca7a99799bccadf2a698a78e8ae4a8/pero-0.10.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "68e74ae48c573f7e453801999133c77e", "sha256": "2b99ee32da291c82177de79ff33800f9ad8753f1e9683d476ab9cc21849e3d9a" }, "downloads": -1, "filename": "pero-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "68e74ae48c573f7e453801999133c77e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 206611, "upload_time": "2019-06-17T11:26:00", "url": "https://files.pythonhosted.org/packages/6a/47/59c4b4c25a70a42cdf5176a6fabd3ed18b5255e399c41a816e4bca3f04c1/pero-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fc3b5c7a70c9ca7747d9d37ee870bb0", "sha256": "3f78ca1fd04ef458d0ac54bcfd08a604997122df9d0899680173fc47b61e5ff7" }, "downloads": -1, "filename": "pero-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6fc3b5c7a70c9ca7747d9d37ee870bb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 164631, "upload_time": "2019-06-17T11:26:03", "url": "https://files.pythonhosted.org/packages/e7/e8/22c208c60fce3f8017b0ab5abec3c75732497f13f2d3e2af4062f806d8ba/pero-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "4084cd863057b98d11d034ebd679da8b", "sha256": "0bc13971517e066dc5b1484334796c4678b2830908412b43aea5132596825e3f" }, "downloads": -1, "filename": "pero-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4084cd863057b98d11d034ebd679da8b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 206618, "upload_time": "2019-06-17T12:04:25", "url": "https://files.pythonhosted.org/packages/c6/bb/bb32620a77b03a2f5dd9a556d147b984f63007c715e46a6d8a54bbe3562e/pero-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a42215978c0a99fbef424b8a78caaa22", "sha256": "f221a6fe395672138c52b0f7765a82e37adb1b457c009e376fd846089c112271" }, "downloads": -1, "filename": "pero-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a42215978c0a99fbef424b8a78caaa22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 164640, "upload_time": "2019-06-17T12:04:27", "url": "https://files.pythonhosted.org/packages/05/1a/16a3c9ae6f8fffa7736d47afd85f7558244e2b6a02689ff24e4dc96285f8/pero-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "01d6c9b21953b13be2ccd3df79d1bf61", "sha256": "ab545874a86c3306a3d26aba39a23fbe48337ade7b94d65da9689a4ddb46c8a4" }, "downloads": -1, "filename": "pero-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "01d6c9b21953b13be2ccd3df79d1bf61", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 206917, "upload_time": "2019-07-02T10:44:42", "url": "https://files.pythonhosted.org/packages/2d/21/6c8456fd919a9990bad3d235af9e816a2c292956bd71afc6f20087364141/pero-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9908972abcbeb608c6701438ee20fd60", "sha256": "e79a2331871804b0b4b45489ed27dd556790aee677ff92de687a2fcca9d749de" }, "downloads": -1, "filename": "pero-0.3.0.tar.gz", "has_sig": false, "md5_digest": "9908972abcbeb608c6701438ee20fd60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 159308, "upload_time": "2019-07-02T10:44:47", "url": "https://files.pythonhosted.org/packages/3f/ed/2250b2deda8d65b97051cc70463d7a2323216c8e59cd9f597cd2ce72298b/pero-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "6e97197513bfbd9c08ddc8387d1a2a69", "sha256": "5b581a5f258ba9fbd6dfed52b1f48e92813bddb2af40d59652feb5ddcbe14ccf" }, "downloads": -1, "filename": "pero-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6e97197513bfbd9c08ddc8387d1a2a69", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 216119, "upload_time": "2019-07-09T21:03:11", "url": "https://files.pythonhosted.org/packages/00/5a/ea90a52c6ffcb36731034f5912b2d8ca23138bfd2d15f5b4bf53bfff19a6/pero-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2bb01411f3de4c3f427ba99273f60b2", "sha256": "5fef05ef646fe600337b3b73c74ed1f0733214684debf1dcc80ed699ce876627" }, "downloads": -1, "filename": "pero-0.4.0.tar.gz", "has_sig": false, "md5_digest": "e2bb01411f3de4c3f427ba99273f60b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 166773, "upload_time": "2019-07-09T21:03:18", "url": "https://files.pythonhosted.org/packages/ce/4b/c10e6861a3a79cfe5d274a1c30b59842f6d760aad2a870e28f967ec876fd/pero-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "b1a98c8f3f0243766eb3c8526fc0dc3c", "sha256": "b34e350825a3be591604748655f90c5af8ed76f639fbe7df1dd26bf8e8c9bf48" }, "downloads": -1, "filename": "pero-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b1a98c8f3f0243766eb3c8526fc0dc3c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 220141, "upload_time": "2019-07-12T13:19:47", "url": "https://files.pythonhosted.org/packages/49/1a/ee2c3dfa3d08f10dfa41b90045ddbd9afa73047ba66a476f123e3692b7ce/pero-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de27078c2275f57cff9cf3c69f8b760a", "sha256": "22e09710680b6f80fbcb98bb097d103ab6001e22608627cdf2d58bc947eb6eb0" }, "downloads": -1, "filename": "pero-0.5.0.tar.gz", "has_sig": false, "md5_digest": "de27078c2275f57cff9cf3c69f8b760a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 170456, "upload_time": "2019-07-12T13:19:56", "url": "https://files.pythonhosted.org/packages/47/e2/2fa0eefe71558c7c690411dd630aff7880ad72fe4211fcb2d0f78ebfab47/pero-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "06bffa0158e6a2f24a08df4c61e1e2f6", "sha256": "9c88d3f72882c40a1271c001d3d0f9d47210a8c72d93e0f6db71025ae2dc5bdc" }, "downloads": -1, "filename": "pero-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "06bffa0158e6a2f24a08df4c61e1e2f6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 224983, "upload_time": "2019-09-18T15:27:52", "url": "https://files.pythonhosted.org/packages/b9/1d/46c97bbbefe1fd3fac254dcb7412aa0a30675827e02e9aad5f2b60fbd4ef/pero-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca2b2df5570dd918aae31dfb436ac483", "sha256": "f96136fa6862cc8226fe456b266da402718393a322b154e6ea3ace48318bb8f4" }, "downloads": -1, "filename": "pero-0.6.0.tar.gz", "has_sig": false, "md5_digest": "ca2b2df5570dd918aae31dfb436ac483", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 176001, "upload_time": "2019-09-18T15:28:03", "url": "https://files.pythonhosted.org/packages/88/f7/dea055d445e62af3d017a51b0b8fec64c554c3fcdaf27332bcce374a39d1/pero-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "f057ec3e6f9c5f2498b2d50202144d75", "sha256": "1d4c302b93c40aaa6e23669c87925a83266da2d1840deabf0744da21d4d61422" }, "downloads": -1, "filename": "pero-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f057ec3e6f9c5f2498b2d50202144d75", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 227775, "upload_time": "2019-09-20T07:31:54", "url": "https://files.pythonhosted.org/packages/40/1b/08ce1863086b580e54657f18139d5436a4f7fc652c4abe25e5f5cc163448/pero-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "149f58ed1535755a48df563b9753d263", "sha256": "bd9846b2ddcd3e57340715ab34fb5cb7503f0289f4c8749ee9eccf4146c96458" }, "downloads": -1, "filename": "pero-0.7.0.tar.gz", "has_sig": false, "md5_digest": "149f58ed1535755a48df563b9753d263", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 178573, "upload_time": "2019-09-20T07:32:11", "url": "https://files.pythonhosted.org/packages/2b/23/045bc725dbac0e778fcec33e37214552bbf13c70cee50d708f4506684cdf/pero-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "68c04ae4aada7aab97ee45db809a6351", "sha256": "0f214c8b9da75c0fb05b9efd9164b75ac60a689a193e7e85ab8bca0361b1ab77" }, "downloads": -1, "filename": "pero-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "68c04ae4aada7aab97ee45db809a6351", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 231219, "upload_time": "2019-09-26T09:28:41", "url": "https://files.pythonhosted.org/packages/7d/f6/fb50126a6fff33bf4c400fba40abea9b3bfedea904fc83f154ae9865150b/pero-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc09927842b5e4e314f5842a53126133", "sha256": "96e8daa80ebb65a8f68e093e567f594e51bc923e2be9cc9f8f7914ac93e1dfd0" }, "downloads": -1, "filename": "pero-0.8.0.tar.gz", "has_sig": false, "md5_digest": "cc09927842b5e4e314f5842a53126133", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 183554, "upload_time": "2019-09-26T09:28:57", "url": "https://files.pythonhosted.org/packages/e4/e5/245000fd72e1d059105335948eb927a12cf32e3dec47606de08ecd3f6481/pero-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "b1e874a65a5366add260646f5d515674", "sha256": "20c2162bb2ddfe2353e20d2aeab5e4c586e56205cee6f9f8610f8381567b0404" }, "downloads": -1, "filename": "pero-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b1e874a65a5366add260646f5d515674", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 231213, "upload_time": "2019-10-16T09:42:24", "url": "https://files.pythonhosted.org/packages/ab/6c/77f00ec1f1a9a32558d5c3501164faec6cc41221d6f1eda51d20ccacfe84/pero-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c9ab59c61ec35d13736291635b2991d", "sha256": "92d2f5ca4d695e01318658ecc96637131f61581f47b44c53808fdf3f051093c6" }, "downloads": -1, "filename": "pero-0.9.0.tar.gz", "has_sig": false, "md5_digest": "5c9ab59c61ec35d13736291635b2991d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 183584, "upload_time": "2019-10-16T09:42:45", "url": "https://files.pythonhosted.org/packages/61/29/939602db862b10c183c445a23943a65d7c07b2d861f7ebb316ff8b7abfb0/pero-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "807c87b0c54b031895e3eb296d5f2298", "sha256": "48ee2aa28d5ede123bfbde344a80f924e2dfecd4c9acfcb6d0c85968c636270d" }, "downloads": -1, "filename": "pero-0.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "807c87b0c54b031895e3eb296d5f2298", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 290479, "upload_time": "2019-10-20T19:29:15", "url": "https://files.pythonhosted.org/packages/36/c2/1e8811fede6aa6c6418f1a8f85cfe44cfffb7c5649505acad0dd49bc8889/pero-0.10.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7c53c4aa7db6c91df696381acee8f21", "sha256": "3ceb987eda10d25927f19ef5af07c236df70663c92f94e3f5cb269c3a01b0909" }, "downloads": -1, "filename": "pero-0.10.0.tar.gz", "has_sig": false, "md5_digest": "a7c53c4aa7db6c91df696381acee8f21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204925, "upload_time": "2019-10-20T19:29:41", "url": "https://files.pythonhosted.org/packages/5c/2d/b95c3c47cbe3681f80327f7c5d1e05ca7a99799bccadf2a698a78e8ae4a8/pero-0.10.0.tar.gz" } ] }