{ "info": { "author": "Mateusz Kobos", "author_email": "mkobos@icm.edu.pl", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3.4", "Topic :: Scientific/Engineering :: Visualization" ], "description": "About\n=====\n\n|Build Status|\n\nThis is a tool for visualizing Apache Oozie workflows as data flow\npipelines.\n\n.. figure:: docs/summary_diagram.png\n :alt: Visual summary of what the tool does\n\n*Fig. 1*: Visual summary of what the tool does.\n\nThe tool is a command-line application that ingests imperative\ndescription of a workflow in Apache Oozie XML file and converts it to a\ndata pipeline representation in PNG image file. Note that in order for\nthe application to be able to extract the pipeline representation,\ncontent of the Oozie XML file has to follow certain conventions (e.g.,\nthe names of Oozie action properties that correspond to ports have to\nfollow a convention of being prefixed with \"input\" or \"output\" string).\nSee file ``vipe/oozie/converter/iis.py`` for a code which follows such\nconventions used in workflow definitions of `OpenAIRE IIS\nproject `__.\n\nHow to install and run\n======================\n\nRun ``pip install vipe`` to install the stable version of the software\nfrom PyPI repository. After installing the software, you can run it by\nexecuting ``vipe-oozie2png`` (run ``vipe-oozie2png --help`` for usage\ninstructions).\n\nNote that the following libraries have to be installed in the system for\nthe tool to work:\n\n- ``libyaml`` (this is required by ``pyyaml`` library used by the\n solution) - on Ubuntu 14.04 system, this can be installed by running\n ``apt-get install libyaml-dev``\n- `GraphViz `__ - on Ubuntu 14.04 system, this can\n installed by running ``apt-get install graphviz``.\n\nGoals\n=====\n\nThere are two main goals of the solution:\n\n- Show existing **workflows without distracting technical details**\n (i.e. a high-level/business view). In order to achieve it, the\n application shows only data dependencies between workflow nodes, i.e.\n if one node is a producer of data consumed by other workflow node, a\n link between them is shown. If two nodes are executed one after\n another but their order is not really important (in such case the\n order is defined just out of convenience or because both of them need\n to have access to full computational resources), the information\n about their order is not visible. The user of the application can\n also specify a detail level of the visualization.\n- Make **data passed between workflow nodes a first-class citizen**.\n The user of the visualization should focus on the most important\n aspect of the defined workflows - flow of the data between the\n modules.\n\nExample visualizations\n======================\n\nThis section contains example visualization of various workflows. The\nvisualization were generated with the application version 0.5.\n\nSimple workflow\n---------------\n\nBelow we show visualization of Oozie workflow\n```vipe/oozie/test/data/bypass/workflow.xml`` `__.\nInternally, this workflow is converted to ``OozieGraph`` representation\n(see its YAML representation in\n```vipe/oozie/test/data/bypass/workflow.yaml`` `__)\nand then subsequently to ``Pipeline`` representation (see its YAML\nrepresentation in\n```vipe/oozie/test/data/bypass/pipeline.yaml`` `__)\nand then finally to a PNG image.\n\nSee Fig. 2-5 for visualizations of the workflow with different levels of\ndetails as specified by the user.\n\n.. figure:: docs/example_visualizations/bypass/detail_lowest-ports_none.png\n :alt: \n\n*Fig. 2*: Simple workflow visualized with the lowest level of details.\n\n.. figure:: docs/example_visualizations/bypass/detail_medium-ports_none.png\n :alt: \n\n*Fig. 3*: Simple workflow visualized with medium level of details.\n\n.. figure:: docs/example_visualizations/bypass/detail_medium-ports_input_output.png\n :alt: \n\n*Fig. 4*: Simple workflow visualized with medium level of details with\ninput and output ports shown.\n\n.. figure:: docs/example_visualizations/bypass/detail_highest-ports_input_output.png\n :alt: \n\n*Fig. 5*: Simple workflow visualized with the highest level of detail\nwith input and output ports shown.\n\nWorkflows from OpenAIRE IIS project\n-----------------------------------\n\nIn this section, we show visualizations generated for real-life\nworkflows from `OpenAIRE IIS\nproject `__ - see Fig. 6-8.\n\n.. figure:: docs/example_visualizations/iis/primary-main-medium_detail.png\n :alt: \n\n*Fig. 6*: Primary-main workflow from OpenAIRE IIS project with medium\nlevel of detail.\n\n.. figure:: docs/example_visualizations/iis/primary-processing-lowest_detail.png\n :alt: \n\n*Fig. 7*: Primary-processing workflow from OpenAIRE IIS project with the\nlowest level of detail.\n\n.. figure:: docs/example_visualizations/iis/primary-processing-medium_detail.png\n :alt: \n\n*Fig. 8*: Primary-processing workflow from OpenAIRE IIS project with\nmedium level of detail.\n\nFeatures\n========\n\nUser-visible features\n---------------------\n\nFeatures visible to the user of the application are listed below. Note\nthat we use a notion of port (see chapter 3 of Gregor Hohpe, Bobby\nWoolf: \"Enterprise Integration Patterns: Designing, Building, and\nDeploying Messaging Solutions\", Addison-Wesley, 2003) corresponding to a\njoin point between node and connection in a data pipeline graph.\n\n- The produced pipeline representation can be either **PNG image or\n YAML-formatted text file**.\n- Each workflow node can have its **input and output ports shown**;\n ports are connected using arrows to show the producer-consumer\n dependencies.\n- There are **many detail levels** on which the graph can be shown. The\n amount of detail shown on each detail level depends on priority\n assigned to different kind of nodes and on options given to the\n application. The priority is implemented in a well-separated part of\n the code responsible for interpreting custom conventions used in\n Oozie XML file (file ``vipe/oozie/converter/iis.py`` in the source\n code contains such code for conventions used in workflow definitions\n of `OpenAIRE IIS project `__) and\n thus it is reasonably easy for a developer to adjust it to Oozie XML\n conventions used in a different project.\n- The produced graph can have either **horizontal or vertical\n orientation**.\n\nDeveloper-visible features\n--------------------------\n\nIn this section, we describe internal features of the solution that are\nof interest of people who want to extend its code.\n\n**Extensibility areas**. The application was designed and implemented\nwith extensibility in mind - we wanted to make it **easily extensible in\nthe following areas**.\n\n- **Input descriptions of workflow**, e.g. possibility to analyze\n source code instead of Oozie XML file.\n- **Conventions used in the Oozie XML** file, i.e. possibility to use\n different conventions of describing workflows, other than the ones\n used in `OpenAIRE IIS project `__.\n Namely, the developer should be required only to implement a new\n ``PipelineConverter``-derived class.\n- **Output artefacts**, e.g. producing website or interactive web\n applications instead of static images.\n\n**Processing stages**. In order to attain mentioned extensibility goals,\nthe processing in the application was separated into stages shown in\nFig. 9.\n\n.. figure:: docs/data_processing.png\n :alt: Data processing in the application\n\n*Fig. 9*: Data processing in the application. Boxes correspond to data\nstructures or files while the arrows correspond to processing steps. The\narea enclosed with dotted line shows discussed potential future\nextensions of the application. Names highlighted in gray correspond to\nnames of classes in the source code.\n\n**Intermediate representations**. It is worth noting that there are two\nintermediate representations of the workflow (as shown in Fig. 9):\n\n- ``OozieGraph`` class that corresponds directly to objects defined in\n Oozie XML workflow file,\n- ``Pipeline`` class corresponding to data pipeline representation of\n the processing. It contains information about dependencies between\n workflow nodes and data passed between them. It doesn\u2019t store\n information about the order in which the workflow nodes are defined.\n\nA ``PipelineConverter``-derived class is used to translate\n``OozieGraph`` into ``Pipeline``.\n\nCode development\n================\n\nPython packages that the application depends on are listed in the\n``requirements.txt`` file. Note that the project is written in Python 3,\nso you need to install Python 3 version of these dependencies (on Ubuntu\n14.04 system you can do it by executing, e.g.\n``sudo pip3 install pytest``).\n\nThe **docstrings** in the code follow `Google style\nguide `__\nwith types declared in accordance to\n`Sphinx `__'s `type annotating\nconventions `__.\nNote that you have to use Sphinx version at least 1.3 if you want to\ngenerate documentation with type annotations.\n\nFuture work\n===========\n\nPossible future extensions of the application are listed below.\n\n- Generate an interlinked website containing visualization of all\n workflows and subworkflows along with some additional information,\n like a list of all input and output ports with the type of data they\n ingest or produce.\n- Show types of data related to each port.\n- Show links from the names of types of data related to each port to\n their schemas (extracted from surrounding system\u2019s source code).\n- Show link to the Oozie XML workflow corresponding to given diagram\n (it should be extracted from surrounding system\u2019s source code).\n- Show comments and descriptions from the original Oozie workflow\n definition.\n- Show some statistics related to the workflow (e.g., number of nodes).\n- Check whether data passed between workflow nodes is compatible (i.e.\n check that there is no such situation that a data produced by a\n certain workflow node is incompatible with data consumed by its\n consumer). This would be akin to static type checking for the\n workflow.\n\nLicense\n=======\n\nThe code is licensed under Apache License, Version 2.0\n\n.. |Build Status| image:: https://travis-ci.org/openaire/vipe.png?branch=master\n :target: https://travis-ci.org/openaire/vipe", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/openaire/vipe", "keywords": "Oozie,workflow visualization,pipeline visualization", "license": "Apache License, Version 2.0", "maintainer": null, "maintainer_email": null, "name": "vipe", "package_url": "https://pypi.org/project/vipe/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/vipe/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/openaire/vipe" }, "release_url": "https://pypi.org/project/vipe/0.5.3/", "requires_dist": null, "requires_python": null, "summary": "Tool for visualizing Apache Oozie pipelines", "version": "0.5.3" }, "last_serial": 1957784, "releases": { "0.0.1": [], "0.2.0": [ { "comment_text": "", "digests": { "md5": "3b55786d23f2898b76bf9b6992827b42", "sha256": "486d0891212f47bc829943f07c227e5ca5ef94fd4f0522e0630915606532413e" }, "downloads": -1, "filename": "vipe-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3b55786d23f2898b76bf9b6992827b42", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 90683, "upload_time": "2015-11-19T13:01:48", "url": "https://files.pythonhosted.org/packages/dc/b4/a9b05c9a8013b6557bb0754677e3dc2a35aee93a2828c8254e48dfe06b96/vipe-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3eb08cdea585fc3d4cea20e800803fa", "sha256": "dc4233b7ea0cb66fa79c939c5e44d2961b488c2613dce4c48b01a33ca39381f0" }, "downloads": -1, "filename": "vipe-0.2.0-py3.4.egg", "has_sig": false, "md5_digest": "a3eb08cdea585fc3d4cea20e800803fa", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 93732, "upload_time": "2015-11-19T13:01:38", "url": "https://files.pythonhosted.org/packages/7c/b4/e8576c3622d70538b91508fab90646bca31d41f7c778641b2cce37495738/vipe-0.2.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "2b2f470360cf7caa13118d8f69e9b9ad", "sha256": "e06597a58ebf420a54238a343f8e2d58cc5c874ac94071e86e7c5b1920d1a89d" }, "downloads": -1, "filename": "vipe-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2b2f470360cf7caa13118d8f69e9b9ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45129, "upload_time": "2015-11-19T13:01:33", "url": "https://files.pythonhosted.org/packages/47/57/1f222afe46c593528a0d9f0d1abba940870504f6373030798a32a2599b0a/vipe-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "08d1086c722b176a317e0a325df05405", "sha256": "5d29c4ba56e85548af9aab8d33818c80bb25b1bba32ca5a32aa189f3d0d28819" }, "downloads": -1, "filename": "vipe-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08d1086c722b176a317e0a325df05405", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 216487, "upload_time": "2015-12-10T00:04:11", "url": "https://files.pythonhosted.org/packages/84/21/f2e16c31632164315c6b15d3d381691ad256950bf21ddfb6a1b79ba35aa0/vipe-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c7d8e3a00ce5d7f2be1e8de9bf70295", "sha256": "9fb08549c442edffb00138e8296337861c83d93fd692d2bc80bdda48ed1cc122" }, "downloads": -1, "filename": "vipe-0.3.0-py3.4.egg", "has_sig": false, "md5_digest": "3c7d8e3a00ce5d7f2be1e8de9bf70295", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 248556, "upload_time": "2015-12-10T00:03:58", "url": "https://files.pythonhosted.org/packages/da/01/3e4b9bf49d3679a32664198fd5231fd617d4b6aacad8f26a1077084287f0/vipe-0.3.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "bb00feb0d1c308342eeed6c4aca37f1a", "sha256": "bf03e6e7322be98bcf23e7bc11bfde21041e382a15c82cb50ed6f280589d3e44" }, "downloads": -1, "filename": "vipe-0.3.0.tar.gz", "has_sig": false, "md5_digest": "bb00feb0d1c308342eeed6c4aca37f1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 159618, "upload_time": "2015-12-10T00:03:52", "url": "https://files.pythonhosted.org/packages/f9/87/79d1442e10167420e23a6521eaae89eb42c86016eda8473f784827ddd6ad/vipe-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "137918c3a84fb1440c2986ff9c68104f", "sha256": "4e8388cbdf43c34ec84f6898f34474db630d77e8a7b6559e7c40a633462589ec" }, "downloads": -1, "filename": "vipe-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "137918c3a84fb1440c2986ff9c68104f", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 336899, "upload_time": "2015-12-17T12:44:35", "url": "https://files.pythonhosted.org/packages/42/6a/d59b3cbd815c566a5b4dbdb91e67737310406fc2358feab2ec406ae00c28/vipe-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f43bd383d554adc9138199438c359bf7", "sha256": "8024daa21eac3656192a767ea4bd804cae3f7f4d80fe0439e7e6d9d811fbbbf1" }, "downloads": -1, "filename": "vipe-0.4.0-py3.4.egg", "has_sig": false, "md5_digest": "f43bd383d554adc9138199438c359bf7", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 339657, "upload_time": "2015-12-17T12:44:20", "url": "https://files.pythonhosted.org/packages/09/63/0857a756538ca8c6b039c660c0ef3663a2ea0e9a176a4fe52327e68df038/vipe-0.4.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "76afa9f16f9d83d3aed81484d05ed14d", "sha256": "6bc0fce189eba4152d632c973c4dbc37df5ffe7e0f3993fae4f40b6421448fa8" }, "downloads": -1, "filename": "vipe-0.4.0.tar.gz", "has_sig": false, "md5_digest": "76afa9f16f9d83d3aed81484d05ed14d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 243993, "upload_time": "2015-12-17T12:44:02", "url": "https://files.pythonhosted.org/packages/1c/e1/54a820d1670ab79cb2bef0b9ba039646c78ee2cb9ec8d897e4ea5f3a8103/vipe-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "11d8f4a88edbd749742340b922be16d7", "sha256": "2fb39192edaf7daa5ff5ab8c3ad47e3a6a2a0a47d9db16b9f92b15b2537b2005" }, "downloads": -1, "filename": "vipe-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "11d8f4a88edbd749742340b922be16d7", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 224985, "upload_time": "2016-01-22T14:09:36", "url": "https://files.pythonhosted.org/packages/7f/8e/ad8f6c64402f70d260695300a0a1c28b6939fe67e14c077bada10e54257f/vipe-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "016aa051e0e6f1da589375e8fbf4c866", "sha256": "621fc3b2834aae41052b5d7ee6d8b99669a69fd5778a251164e1835e900a16be" }, "downloads": -1, "filename": "vipe-0.5.0-py3.4.egg", "has_sig": false, "md5_digest": "016aa051e0e6f1da589375e8fbf4c866", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 226644, "upload_time": "2016-01-22T14:09:28", "url": "https://files.pythonhosted.org/packages/df/52/2eed9bd111cc07febc5d742260ef866c169db0b46787d07a5c1a6d5d1d9d/vipe-0.5.0-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "496783fe73524e520e25f976dc908518", "sha256": "9793e4bebed3a43867366642a8fbfd6d364eff2d4742316340a210697103289c" }, "downloads": -1, "filename": "vipe-0.5.0.tar.gz", "has_sig": false, "md5_digest": "496783fe73524e520e25f976dc908518", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 135799, "upload_time": "2016-01-22T14:09:18", "url": "https://files.pythonhosted.org/packages/b0/87/97249e627e85debe80ba906a3bb26aeb06ec31c6ac65262baf3147ba9e82/vipe-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "f252d0e2bc405b4ea183b3a92c907498", "sha256": "18a0506ebb40ee01602467b60e3ff082512bf351bb654bb483c0d3dfd6fee78d" }, "downloads": -1, "filename": "vipe-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f252d0e2bc405b4ea183b3a92c907498", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 240552, "upload_time": "2016-01-29T21:49:51", "url": "https://files.pythonhosted.org/packages/07/e4/23abc5247af7070aa2c6347c521b114aa37a7cceb61ed4cd261d6a40dba5/vipe-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "034d15a09bb37b00997b07b243795092", "sha256": "82163405120439470e9c13e4a4f159517eea85ae3ed0d6f74fdcb59a0d8890c3" }, "downloads": -1, "filename": "vipe-0.5.1-py3.4.egg", "has_sig": false, "md5_digest": "034d15a09bb37b00997b07b243795092", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 244720, "upload_time": "2016-01-29T21:49:45", "url": "https://files.pythonhosted.org/packages/e3/36/24db133e53d79fc46f6a65724c55564799e7c10949fb73b8574831516e8e/vipe-0.5.1-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "02a14a63b0df6be024bcfdbf8f660ec3", "sha256": "935cfb9b77b4ccb7563bcfa4d6b845b5ff33246248f908da0e438e974a8f7407" }, "downloads": -1, "filename": "vipe-0.5.1.tar.gz", "has_sig": false, "md5_digest": "02a14a63b0df6be024bcfdbf8f660ec3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 146520, "upload_time": "2016-01-29T21:49:38", "url": "https://files.pythonhosted.org/packages/15/f7/2aec31f465f4ae1e4a31f1a67cb10686804e70fc854ec4a7c04658fa4595/vipe-0.5.1.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "a4745b067383ee321ac88a08c3fd1c73", "sha256": "0c460c026d5de5d7ff76d10f546a3f3d5292a4b06481d469a276a32b77258fa4" }, "downloads": -1, "filename": "vipe-0.5.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4745b067383ee321ac88a08c3fd1c73", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 240707, "upload_time": "2016-02-15T18:50:32", "url": "https://files.pythonhosted.org/packages/64/57/8315b6e01436edeaeeacee2174d0d2161112a3dc98a48d0694b52cc95048/vipe-0.5.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebdde4101a0651b31f5346158f629851", "sha256": "0298de15789a31e6011ad1bc0a88c1835e6489fe5b1db66e7211bbec5e1e73bd" }, "downloads": -1, "filename": "vipe-0.5.3-py3.4.egg", "has_sig": false, "md5_digest": "ebdde4101a0651b31f5346158f629851", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 244860, "upload_time": "2016-02-15T18:50:27", "url": "https://files.pythonhosted.org/packages/a0/81/de3197f20b6184d1316ff76cfb91da3a5a6df2541136e5e46d3ba8a26ff0/vipe-0.5.3-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "6cb1c8449b1c49d0a8b717bcb4c75a2e", "sha256": "313e6615be83cf216b13f339016f187dd6f5e18e792d3fb8b95cb58e406e384e" }, "downloads": -1, "filename": "vipe-0.5.3.tar.gz", "has_sig": false, "md5_digest": "6cb1c8449b1c49d0a8b717bcb4c75a2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 146507, "upload_time": "2016-02-15T18:50:17", "url": "https://files.pythonhosted.org/packages/00/34/333f6987d1c26144828ae521679d59c7536645faffd2edcc877be5198717/vipe-0.5.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a4745b067383ee321ac88a08c3fd1c73", "sha256": "0c460c026d5de5d7ff76d10f546a3f3d5292a4b06481d469a276a32b77258fa4" }, "downloads": -1, "filename": "vipe-0.5.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4745b067383ee321ac88a08c3fd1c73", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 240707, "upload_time": "2016-02-15T18:50:32", "url": "https://files.pythonhosted.org/packages/64/57/8315b6e01436edeaeeacee2174d0d2161112a3dc98a48d0694b52cc95048/vipe-0.5.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebdde4101a0651b31f5346158f629851", "sha256": "0298de15789a31e6011ad1bc0a88c1835e6489fe5b1db66e7211bbec5e1e73bd" }, "downloads": -1, "filename": "vipe-0.5.3-py3.4.egg", "has_sig": false, "md5_digest": "ebdde4101a0651b31f5346158f629851", "packagetype": "bdist_egg", "python_version": "3.4", "requires_python": null, "size": 244860, "upload_time": "2016-02-15T18:50:27", "url": "https://files.pythonhosted.org/packages/a0/81/de3197f20b6184d1316ff76cfb91da3a5a6df2541136e5e46d3ba8a26ff0/vipe-0.5.3-py3.4.egg" }, { "comment_text": "", "digests": { "md5": "6cb1c8449b1c49d0a8b717bcb4c75a2e", "sha256": "313e6615be83cf216b13f339016f187dd6f5e18e792d3fb8b95cb58e406e384e" }, "downloads": -1, "filename": "vipe-0.5.3.tar.gz", "has_sig": false, "md5_digest": "6cb1c8449b1c49d0a8b717bcb4c75a2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 146507, "upload_time": "2016-02-15T18:50:17", "url": "https://files.pythonhosted.org/packages/00/34/333f6987d1c26144828ae521679d59c7536645faffd2edcc877be5198717/vipe-0.5.3.tar.gz" } ] }