{ "info": { "author": "chhsiao90", "author_email": "chhsiao90@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Environment :: Console :: Curses", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Widget Sets" ], "description": "# General Viewer (GViewer)\n[![Build Status](https://travis-ci.org/chhsiao90/gviewer.svg?branch=master)](https://travis-ci.org/chhsiao90/gviewer)\n[![Coverage Status](https://coveralls.io/repos/github/chhsiao90/gviewer/badge.svg?branch=master)](https://coveralls.io/github/chhsiao90/gviewer?branch=master)\n\n**Simple, Light Weight, Powerful** \nGViewer is a terminal UI library that depends on [urwid](https://github.com/urwid/urwid) simplified writing a tui based reporting system. \nYou could write a powerful terminal UI that display and operate with data as you want with just less and less code.\n\n## Installation\n```shell\npip install gviewer\n```\n\n## Run Example\nThere are some example in examples that provide some use cases. \nYou could see and run the examples.\n\n```shell\npython examples/panama.py\n```\n\n## Usage\n\n### Data Store\n\n####StaticDataStore\nUsed for static data list, like log file\nInitiate with a list of eny type of content\nThe content will transfer to the your defined displayer later for display \n\n```python\nfrom gviewer import StaticDataStore\ndata_store = StaticDataStore(data)\n```\n\n#### AsyncDataStore\nUsed for asynchronous data list, like subscribe an [zeromq](http://zeromq.org/) publisher\n\n```python\ndef register_func(on_message):\n some_listener.on_message(on_message)\n\ndata_store = AsyncDataStore(register_func)\n```\n\n### Displayer\nDefined how you display your data from Data Store to summary/details\n\n```python\nfrom gviewer import BaseDisplayer, View, Group, PropsGroup, Text, Prop\n\nclass MyDisplayer(BaseDisplayer):\n def to_summary(self, message):\n \"\"\"\n return a str or text markup\n reference: http://urwid.org/manual/displayattributes.html#text-markup\n \"\"\"\n return message[\"summary\"]\n\n def get_views(self):\n \"\"\"return an array of tuple that contains view title and a function that transform message to detail\"\"\"\n return [\n (\"view1\", self.view1),\n (\"view2\", self.view2),\n ]\n\n def view1(self, message):\n \"\"\"return groups\"\"\"\n return View(\n [Group(\"title\", [Text(m) for m in message[\"view1\"]])]\n )\n\n def view2(self, message):\n \"\"\"return groups\"\"\"\n return View(\n [PropsGroup(\"title\", [Prop(p[0], p[1]) for p in message[\"view2\"]])]\n )\n```\n\n### GViewer\nMain class to start the tui\nThe constructor accept any of urwid.MainLoop arguments to intiate with custom config\n\n```python\nfrom gviewer import GViewer, DisplayerContext\ncontext = DisplayerContext(data_store, displayer)\nviewer = GViewer(context)\nviewer.start()\n```\n\n## Advanced Usage\n### Summary Actions\nBind function to specific key to apply customize action, ex: export\n```python\nfrom gviewer import GViewer, DisplayerContext\n\ndef custom_export(controller, message, widget, *args, **kwargs):\n with open(\"export\", \"w\") as f:\n f.write(str(message))\n controller.notify(\"file is export\")\n\ncontext = DisplayerContext(data_store, displayer, actions=Actions([(\"a\", \"Custom export\", custom_export)]))\nviewer = GViewer(context)\n```\n\n### View Actions\nBind function to specific key to apply customize action, ex: export\n```python\nfrom gviewer import View, BaseDisplayer\nclass MyDisplayer(BaseDisplayer):\n def get_views(self):\n return [(\"view\", self.view)]\n\n def view(self, message):\n return View([], actions=Actions([(\"a\", \"Custom export\", self.custom_export)]))\n\n def custom_export(controller, message, *args, **kwargs):\n with open(\"export\", \"w\") as f:\n f.write(str(message))\n controller.notify(\"file is export\")\n```\n\n## Built-in actions\n### Summary\n- /: search\n- g: top\n- G: bottom\n- x: clear current item\n- X: clear all items\n- q: quit\n- ?: help\n\n### Detail\n- /: search\n- tab: next view\n- shift+tab: prev view\n- n: search next result \n- N: search previous result\n- e: export current content to file\n- q: quit\n- ?: help\n\n\n## Contribution\nPlease feel free to create issue or create PR\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chhsiao90/gviewer", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "gviewer", "package_url": "https://pypi.org/project/gviewer/", "platform": "", "project_url": "https://pypi.org/project/gviewer/", "project_urls": { "Homepage": "https://github.com/chhsiao90/gviewer" }, "release_url": "https://pypi.org/project/gviewer/3.0.6/", "requires_dist": [ "urwid (==1.3.1)", "Pygments (==2.1.3); extra == 'dev'", "mock (==2.0.0); extra == 'dev'" ], "requires_python": "", "summary": "General Viewer", "version": "3.0.6" }, "last_serial": 2343610, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "26916f5b0e40c80629b6af71f146ae2d", "sha256": "32e667814a83a33e8c4acdd7b3cb836d6068304e56b557b62891c7bbd728c78f" }, "downloads": -1, "filename": "gviewer-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "26916f5b0e40c80629b6af71f146ae2d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10174, "upload_time": "2016-07-06T14:03:35", "url": "https://files.pythonhosted.org/packages/bd/a3/4262f60c5fe7dd8184473740371b71a1c00f02f37ae9c86187db30f7087b/gviewer-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4d7ff886e41bd60225fd351f8d0ed75", "sha256": "3a015a0553391bd8c7b85db147ba73ffd3d212acb7d3acd133604d7d50ef4a7e" }, "downloads": -1, "filename": "gviewer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a4d7ff886e41bd60225fd351f8d0ed75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5776, "upload_time": "2016-07-06T14:03:37", "url": "https://files.pythonhosted.org/packages/c1/ec/4568d8dc78a9d9afd83b09674f4d34af272028cd26fd0212ec2989c9500e/gviewer-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ab2df13c8276c8618a74ee9841e085d7", "sha256": "d0696ddc1fb1c98570c407320d034be37cee8b0900a878e1549d63066c165295" }, "downloads": -1, "filename": "gviewer-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "ab2df13c8276c8618a74ee9841e085d7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12164, "upload_time": "2016-07-10T07:21:35", "url": "https://files.pythonhosted.org/packages/47/b0/6b77ee64bbe33bad5c7a3634e522f59be411d57604a3c404630b96002e44/gviewer-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03884a022b292bb617936929d8cf999d", "sha256": "4998c28e37c4cc7e99eeb742c438660037ee26c7c9a46f3cfcd32deddc01153b" }, "downloads": -1, "filename": "gviewer-1.1.0.tar.gz", "has_sig": false, "md5_digest": "03884a022b292bb617936929d8cf999d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6847, "upload_time": "2016-07-10T07:21:37", "url": "https://files.pythonhosted.org/packages/30/32/ee1a4ab001ce7f14fb9acb866141ef40e7bdd8f47b60388394db9bc14d0b/gviewer-1.1.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "4abefa90c80f907a0af784edd349a63a", "sha256": "51496a7c758e097876360e0ed35605424ffede5cf7b3acc023be0b1401b0a193" }, "downloads": -1, "filename": "gviewer-2.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "4abefa90c80f907a0af784edd349a63a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22605, "upload_time": "2016-08-18T13:26:56", "url": "https://files.pythonhosted.org/packages/36/77/b49d736d7ee4e16ae405c30925b7b5ef43b3f15074e8df614510a1f3b2e7/gviewer-2.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4533e3fb56b693eb50c514800def59f5", "sha256": "960cbd5de77e0a77dac6a585e0e98a5cd83776ab46df57b7443def50dbac8f37" }, "downloads": -1, "filename": "gviewer-2.0.0.tar.gz", "has_sig": false, "md5_digest": "4533e3fb56b693eb50c514800def59f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13371, "upload_time": "2016-08-18T13:27:00", "url": "https://files.pythonhosted.org/packages/fb/ba/2c527ae379ea0e8e66b468e119e26db90477579b8c1b5c406151f91a8eb3/gviewer-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "20901c28fe64f9b47f5c013085c159b1", "sha256": "26aa87b7fb502d82231cb18fb19401b4bd7f42421f33ee7d5eb47a6e78a30ab3" }, "downloads": -1, "filename": "gviewer-2.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "20901c28fe64f9b47f5c013085c159b1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26893, "upload_time": "2016-08-25T02:22:12", "url": "https://files.pythonhosted.org/packages/7b/34/d2437847851c1bbcb8a81345bfd767cc9e8e61f728a4413744d2871ddfa9/gviewer-2.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7202acb70cd71b9f46035a739669dcc1", "sha256": "05b9aea2c44b77377bcc9ca260c5a7250586461f3023426aa5acc7906a4deef6" }, "downloads": -1, "filename": "gviewer-2.1.0.tar.gz", "has_sig": false, "md5_digest": "7202acb70cd71b9f46035a739669dcc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15907, "upload_time": "2016-08-25T02:22:16", "url": "https://files.pythonhosted.org/packages/7f/a6/3c1b0b63d8d792b7ecc84fbbf4f81ba1adf323b0dc1a0eb127907a99c360/gviewer-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "eb508ef4cf5a9026b177235247955337", "sha256": "2e518a601f0ca1de768ebc94c2f1f42122a6895b6d68a94f01af624701a899ea" }, "downloads": -1, "filename": "gviewer-2.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "eb508ef4cf5a9026b177235247955337", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26917, "upload_time": "2016-08-25T03:02:33", "url": "https://files.pythonhosted.org/packages/24/2d/f7323d36498aa659c5f795441402e0aba1ddce18783b03053e25d69ad944/gviewer-2.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e28c889a5f05bcaa22abd2b162249b7f", "sha256": "c148f62282d39187f03919bc24ed15605780408ffd979279cec5d2955cbbeb46" }, "downloads": -1, "filename": "gviewer-2.1.1.tar.gz", "has_sig": false, "md5_digest": "e28c889a5f05bcaa22abd2b162249b7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15903, "upload_time": "2016-08-25T03:02:36", "url": "https://files.pythonhosted.org/packages/72/f6/853ef0179b6b217d4ec27839b20fcb7fd884ca2a76effaf6b8c936cd5274/gviewer-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "16fe4670c8f6eaa807ea0512f8d1d98a", "sha256": "3e3a8ea31c7dd9c3d7dbd8503ac1f0b69b2c13e599ab9b020c7f7fb4cb6a7207" }, "downloads": -1, "filename": "gviewer-2.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "16fe4670c8f6eaa807ea0512f8d1d98a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 29521, "upload_time": "2016-08-31T23:37:09", "url": "https://files.pythonhosted.org/packages/50/80/713f9559752f43c3207aeb02768a6698f74fb3d9310fa0813c0bce06f1a8/gviewer-2.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "06ea5b4d781e6ca673cff8f513cceb9a", "sha256": "89b9fddd70242eeb44590fbaf569acc23cb494723e7c02c702f64e7b81b262a8" }, "downloads": -1, "filename": "gviewer-2.1.2.tar.gz", "has_sig": false, "md5_digest": "06ea5b4d781e6ca673cff8f513cceb9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17473, "upload_time": "2016-08-31T23:37:13", "url": "https://files.pythonhosted.org/packages/47/d5/3d37f87757df6755fe0815cb7e6fbf42574a706969aec4a39311762db98e/gviewer-2.1.2.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "3f650979c1c7b6007914621fc6fba84a", "sha256": "e4da27bf69ff6f719e0c9f639940a7a85994fcfe3c672763000aaac855c6467e" }, "downloads": -1, "filename": "gviewer-2.1.3-py2-none-any.whl", "has_sig": false, "md5_digest": "3f650979c1c7b6007914621fc6fba84a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 29089, "upload_time": "2016-09-02T12:19:06", "url": "https://files.pythonhosted.org/packages/a1/74/f3871308cc28124b9f6d59afb85e963c5ae93b637cebe0376f19dd14b96d/gviewer-2.1.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c10760c319dbefd8473bc64579e63a4a", "sha256": "56c58f6533d57002ff57734dd226273303fac3c0e6a22e0533a3cdcb856c6738" }, "downloads": -1, "filename": "gviewer-2.1.3.tar.gz", "has_sig": false, "md5_digest": "c10760c319dbefd8473bc64579e63a4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17449, "upload_time": "2016-09-02T12:19:08", "url": "https://files.pythonhosted.org/packages/e4/9f/a4b2e5e3245aeedee92028e677a4c12080842658745beb825c6a5b8b20f9/gviewer-2.1.3.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "af26208c50b080d8a90b2105eb372a99", "sha256": "2b7479334c6d3f80ec603643811e2ec1c35cfb5f670701575ce68ab47164ca69" }, "downloads": -1, "filename": "gviewer-3.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "af26208c50b080d8a90b2105eb372a99", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 33487, "upload_time": "2016-09-07T05:51:22", "url": "https://files.pythonhosted.org/packages/fe/95/7ae0fcef8fc1c8da9562557b2382a6afb29d956f3cfb97205783b3ca1402/gviewer-3.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f96ce580be081c4d0af92fa4f31b6aa", "sha256": "7874d5087b651080cb1bf7ac86579202e19541facafb3a9e7254836dd54b49f5" }, "downloads": -1, "filename": "gviewer-3.0.0.tar.gz", "has_sig": false, "md5_digest": "6f96ce580be081c4d0af92fa4f31b6aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19911, "upload_time": "2016-09-07T05:51:25", "url": "https://files.pythonhosted.org/packages/96/a4/2f0ddd84dd43c9afb4b36882a010bc54f90cfb9ffcefbabe78809e481c59/gviewer-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "2eda0a210698e280a48f6d3d48d13bc1", "sha256": "267f2725851e642b70652cd3185a01b86e1c12ad172172f30c244b92bd588719" }, "downloads": -1, "filename": "gviewer-3.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "2eda0a210698e280a48f6d3d48d13bc1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 33251, "upload_time": "2016-09-07T06:29:57", "url": "https://files.pythonhosted.org/packages/55/e8/8b43696bf6a1c5ee3c7f6118085e1ec09881ff73854b3a827a7e21bafb0e/gviewer-3.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9f61381936fe1339229968521e50a08", "sha256": "5ea0a7cc583a02a4059ad908e838abb2be115f08e3bea35ec69fafd71e2f098c" }, "downloads": -1, "filename": "gviewer-3.0.1.tar.gz", "has_sig": false, "md5_digest": "f9f61381936fe1339229968521e50a08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19864, "upload_time": "2016-09-07T06:30:00", "url": "https://files.pythonhosted.org/packages/7a/c0/2cd14116b1a5188427e2341c6d542e34d1e43d5ec95c0fa63de960cbcbff/gviewer-3.0.1.tar.gz" } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "62d3ad93185eb59fc2615a75832975f4", "sha256": "3d893d5909bddf6295fc4d120294eb574652fcd16f7fb5e1e1f4f49d32c7461d" }, "downloads": -1, "filename": "gviewer-3.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "62d3ad93185eb59fc2615a75832975f4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 33252, "upload_time": "2016-09-07T06:51:14", "url": "https://files.pythonhosted.org/packages/4f/95/6dbb8b3164fa217a421548677609b74ae99f0b6be143edab042c8cbff79a/gviewer-3.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfd0911edded3532114decba851b9531", "sha256": "ee3d5f81e55875cb1e423f075fae1898e64007a6b5de4850b84c59c56e35b399" }, "downloads": -1, "filename": "gviewer-3.0.2.tar.gz", "has_sig": false, "md5_digest": "bfd0911edded3532114decba851b9531", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19853, "upload_time": "2016-09-07T06:51:17", "url": "https://files.pythonhosted.org/packages/9c/77/a62cfe998331074a5b509c745e41a40d3466123a6680a8e6f7107234cffe/gviewer-3.0.2.tar.gz" } ], "3.0.3": [ { "comment_text": "", "digests": { "md5": "b92925078eb2663af1ffb9d73659488a", "sha256": "6da28f51375ee5c5d2ffb53cc4bf9947a7fe1ead56b028f05a7759b45a7e731a" }, "downloads": -1, "filename": "gviewer-3.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "b92925078eb2663af1ffb9d73659488a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 33467, "upload_time": "2016-09-08T05:19:26", "url": "https://files.pythonhosted.org/packages/da/42/cdf8440037c0febb20518b478b29540046848defdc4a1a0adefcc3bb3c71/gviewer-3.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6789447cc19f6e582a10095ad10d7e6d", "sha256": "091c50da9689b841b0c8c48d22145cfe1380708a3b9d500f88a4bb7866ae1396" }, "downloads": -1, "filename": "gviewer-3.0.3.tar.gz", "has_sig": false, "md5_digest": "6789447cc19f6e582a10095ad10d7e6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20023, "upload_time": "2016-09-08T05:19:29", "url": "https://files.pythonhosted.org/packages/32/eb/9604610a26cfe5a7a5da3b99303ef1f77d2841f2e9eb9d4053313a23ebf5/gviewer-3.0.3.tar.gz" } ], "3.0.4": [ { "comment_text": "", "digests": { "md5": "1d8091704f1a12728531f2caa6dc683f", "sha256": "d6794b7d11e35ec11b4b34a0f08a81eb1b606a14153cdd530797ec40e0f42dbf" }, "downloads": -1, "filename": "gviewer-3.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "1d8091704f1a12728531f2caa6dc683f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 35071, "upload_time": "2016-09-09T12:48:29", "url": "https://files.pythonhosted.org/packages/a5/60/73eadeef0d7708539326f7923df5ab5732490ea27357978c25c1029388ff/gviewer-3.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "81e1d22f516ee49beb264cceb3396c10", "sha256": "288556bff9132ade3f130888265387710a270b6781c22b1191ca500fb42a308a" }, "downloads": -1, "filename": "gviewer-3.0.4.tar.gz", "has_sig": false, "md5_digest": "81e1d22f516ee49beb264cceb3396c10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21076, "upload_time": "2016-09-09T12:48:32", "url": "https://files.pythonhosted.org/packages/df/29/799186565f7115d9c207bc7805944addc635bdc02c085113dc9f40624258/gviewer-3.0.4.tar.gz" } ], "3.0.5": [ { "comment_text": "", "digests": { "md5": "71ec0919a9d986a9939cce1c57bc5bf7", "sha256": "c143a60445c4133c6f3b08eb18c4bc5c7ffa5a6153834ea111c8a06b8d86a258" }, "downloads": -1, "filename": "gviewer-3.0.5-py2-none-any.whl", "has_sig": false, "md5_digest": "71ec0919a9d986a9939cce1c57bc5bf7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 35183, "upload_time": "2016-09-10T08:56:28", "url": "https://files.pythonhosted.org/packages/5d/90/4bb588a966ea8e117e82ad008e258f4cbb77eba0f0d5a30f7c445b5044ab/gviewer-3.0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2877aaea4fe604e871b22731554ecf88", "sha256": "5485eb5a4638b0eec993672ed0f08616371114c3882457895035ebcc42c94bc8" }, "downloads": -1, "filename": "gviewer-3.0.5.tar.gz", "has_sig": false, "md5_digest": "2877aaea4fe604e871b22731554ecf88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21162, "upload_time": "2016-09-10T08:56:32", "url": "https://files.pythonhosted.org/packages/bb/34/3c4b76c774e9935bd8946787d8e52588d9a941433edff1c351db28d4b471/gviewer-3.0.5.tar.gz" } ], "3.0.6": [ { "comment_text": "", "digests": { "md5": "639dc07ae2deca71e1cbf509e8837d86", "sha256": "58c871486ec10cf28a7017a8cbff2bf5b597f2804cafd2ebe342cc1c29c32a79" }, "downloads": -1, "filename": "gviewer-3.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "639dc07ae2deca71e1cbf509e8837d86", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37126, "upload_time": "2016-09-15T06:03:24", "url": "https://files.pythonhosted.org/packages/e9/cd/bf9d66080937ad4aeae5b4eb2704521a3bd29e92627bde6e691e7fb5bcc0/gviewer-3.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb0f20f6b0dcca2ae3551b99f99a365f", "sha256": "ac0b059f8b8406c32108287d61dd53bedeb0d33e31614ca7bbc845b803c333a4" }, "downloads": -1, "filename": "gviewer-3.0.6.tar.gz", "has_sig": false, "md5_digest": "eb0f20f6b0dcca2ae3551b99f99a365f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22604, "upload_time": "2016-09-15T06:03:28", "url": "https://files.pythonhosted.org/packages/1b/94/d8ed9d1329a285ce362c5294c9ebf1c3efdeeb99f651688156836e6c29d6/gviewer-3.0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "639dc07ae2deca71e1cbf509e8837d86", "sha256": "58c871486ec10cf28a7017a8cbff2bf5b597f2804cafd2ebe342cc1c29c32a79" }, "downloads": -1, "filename": "gviewer-3.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "639dc07ae2deca71e1cbf509e8837d86", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37126, "upload_time": "2016-09-15T06:03:24", "url": "https://files.pythonhosted.org/packages/e9/cd/bf9d66080937ad4aeae5b4eb2704521a3bd29e92627bde6e691e7fb5bcc0/gviewer-3.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb0f20f6b0dcca2ae3551b99f99a365f", "sha256": "ac0b059f8b8406c32108287d61dd53bedeb0d33e31614ca7bbc845b803c333a4" }, "downloads": -1, "filename": "gviewer-3.0.6.tar.gz", "has_sig": false, "md5_digest": "eb0f20f6b0dcca2ae3551b99f99a365f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22604, "upload_time": "2016-09-15T06:03:28", "url": "https://files.pythonhosted.org/packages/1b/94/d8ed9d1329a285ce362c5294c9ebf1c3efdeeb99f651688156836e6c29d6/gviewer-3.0.6.tar.gz" } ] }