{ "info": { "author": "keul", "author_email": "luca@keul.it", "bugtrack_url": null, "classifiers": [ "Development Status :: 7 - Inactive", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Topic :: Games/Entertainment", "Topic :: Multimedia :: Graphics", "Topic :: Software Development :: Libraries :: pygame", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: User Interfaces" ], "description": "=======\nKezMenu\n=======\n\nA simple and basical Pygame based module for a fast development of menu interfaces.\n\nIntroduction\n============\n\nThis module is based on the original work of *PyMike*, from the Pygame community\n(see the `EzMeNu project`__ for more info). As I found some issues using the Mike's version library,\nI release this one that fix some of theme, and also add features.\n\n__ http://www.pygame.org/project/855/\n\n`What you can do with this?`\n\tYou can easilly draw a menu interface, and selecting an option using the mouse of arrow keys.\n\nExamples and usage\n==================\n\nHere a fully example of use of this library. Even if we use the Python doctest format, this isn't a\npolitically correct automated test because we'll wait for user input and no real tests are done onto results\n(no... this is not true, but none of the major feature are really tested here).\n\nMaybe someday I'll complete this with better python tests!\n\nHowever...\nThe code in this page is a working example. If you know nothing about doctests, only know that you can\nrun this code simply downloading the source, going to the kezmenu directory and type:\n\n python tests.py\n\nIf you have the library installed on your system you can run the example program from the python interpreter:\n\n import kezmenu\n\n kezmenu.runTests() \n\nInit all the Pygame stuff\n-------------------------\n\nFirst of all we need to enable the Pygame environment:\n\n >>> import pygame\n >>> from pygame.locals import *\n >>> import pygame.font\n >>> pygame.font.init()\n >>> screen = pygame.display.set_mode((640,480), 0, 32)\n\nKezMenu works drawing the menu onto a `pygame.Surface`__ instance; the better (simpler) choice is always draw the menu\nonto the screen (another Surface instance obtained using methods of the `pygame.display`__ Pygame's module, like\n`pygame.display.set_mode`__),\nbecause is not possible in Pygame to know the offset of a blitten surface from the screen topleft corner.\n\n__ http://www.pygame.org/docs/ref/surface.html\n__ http://www.pygame.org/docs/ref/display.html\n__ http://www.pygame.org/docs/ref/display.html#pygame.display.set_mode\n\nThis is not important if you are not planning to use the mouse on the menu and rely only up and down keys.\nTo disable the mouse, just put to False the *mouse_enabled* attribute of a KezMEnu instance.\n\nIn the first example below we will use a surface inside the screen for drawing the menu.\nSo we create this surface first:\n\n >>> surface = pygame.Surface( (400,400), flags=SRCALPHA, depth=32 )\n >>> surface.fill( (150,150,150,255) )\n \n\nNow we can blit the surface on the screen. We will repeat this procedure some times so it's better create out first\ndummy function (those functions aren't really useful outside this test environment):\n\n >>> def blitSurface():\n ... screen.blit(surface, (50,50) )\n ... pygame.display.update()\n\nSo we can call it for the first time:\n\n >>> blitSurface()\n\nThis is a graphical test, so we need to delay the automatic actions and make possible that the user can look at results\nand then go over. We wait for user input before going over.\n\nTo do this we create a second silly function that we'll call often later:\n\n >>> click_count = 0\n >>> def waitForUserAction(msg='???'):\n ... global click_count\n ... click_count+=1\n ... pygame.display.set_caption(\"Example %s - %s\" % (click_count, msg))\n ... while True:\n ... for event in pygame.event.get():\n ... if event.type==KEYDOWN:\n ... return\n\nOk, lets call it for the first time:\n\n >>> waitForUserAction(\"An empty, dark surface\")\n\nWe only displayed on the screen a surface filled with a dark color.\n\nThe KezMenu\n-----------\n\nNow it's time to create our KezMenu instance:\n\n >>> from kezmenu import KezMenu\n >>> menu = KezMenu()\n\nTo draw out menu we create before another second dummy function for test needs:\n\n >>> def drawMenu():\n ... surface.fill( (150,150,150,255) )\n ... menu.draw(surface)\n ...\t blitSurface()\n ... pygame.display.flip()\n\nThis is a valid way to create our menu, but we only obtain an empty menu (so invisible to user).\n\n >>> drawMenu()\n >>> waitForUserAction(\"You see no difference\")\n\nYou see no changes from the example 1, isn't it?\nIf we create our menu in this way we need to fill it runtime with our options.\nYou can do this by modifying runtime the *options* attribute.\n\nWe need to know what the menu action must execute, before defining the option:\n\n >>> option_selected = None\n >>> def option1():\n ... global option_selected\n ... option_selected = 1\n >>> menu.options = ( {'label': 'First option!', 'callable': option1}, )\n\nAs you can see the options member must be a tuple of dictionary.\nThose dict must contains (at least) the *label* and *callable* parameters; other paramter can\nbe specified for advanced use (see *EFFECTS.txt*).\n\nThe *label* is the string to be draw for the menu option, and the *callable* is the function, object,\nmethod, ... to be called on selection.\n\nAs far as we blitted the menu inside a surface that isn't in the (0,0) screen position, we need (if we wanna use also mouse\ncontrol later) to specify the *screen_topleft_offset* attribute:\n\n >>> menu.screen_topleft_offset = (50,50)\n >>> drawMenu()\n >>> waitForUserAction(\"Our first option!\")\n\nIn this way we say to the menu that all coordinates must keep count of an offset from the topleft corner of the screen.\n\nPass a screen object directly to the *menu.draw* method is more common, so in all other examples we will drop the use\nof the surface object.\n\n >>> surface = None\n\nWays to link action to menu selection\n-------------------------------------\n\nManually change the *options* attribute is simple (and can be useful) but the most common way is to create the options\ndirectly on menu creation.\nTo do make tests more complete, we need to add some other callable!\n\n >>> def option2():\n ... global option_selected\n ... option_selected = 1\n >>> def option3():\n ... global option_selected\n ... option_selected = 1\n\n >>> import sys\n >>> def optionX(p):\n ... global option_selected\n ... option_selected = p\n\nNow create a new menu instance:\n\n >>> menu = KezMenu(\n ... [\"First option!\", option1],\n ... [\"sEcond\", option2],\n ... [\"Again!\", option3],\n ... [\"Lambda\", lambda: optionX(71)],\n ... [\"Quit\", sys.exit],\n ... )\n\nYou can fast create menu entries giving a list of couples that are our *label* and *callable* attributes.\nThe *__init__* method does the magic and save those values in the right way.\n\n >>> type(menu.options[0]) == dict\n True\n >>> menu.options[1]['callable']\n \n >>> [x['label'] for x in menu.options]\n ['First option!', 'sEcond', 'Again!', 'Lambda', 'Quit']\n\nLike said above we will not use anymore the surface object, so we can simplify a little our dummy function:\n\n >>> def drawMenu():\n ... screen.fill( (150,150,150,255) )\n ... menu.draw(screen)\n ... pygame.display.flip()\n\nAnd now we refresh our window:\n\n >>> drawMenu()\n >>> waitForUserAction(\"All our options\")\n\nIt's very important to see how the actions are linked to the menu items. We must create couples of labels and\n*callable objects* without calling them! Like above you must pass the callable to the KezMenu a function,\nyou must not call the callable yourself.\n\nWe can also use as callable argument a method of an object, a Python standard callable (like the `sys.exit`__ above)\n\nWhat if you wanna also need to pass parameter(s) to the callable? The use of the `lambda function`__ above will show you how\nto do this!\n\n__ http://docs.python.org/library/sys.html#sys.exit\n__ http://docs.python.org/reference/expressions.html#id17\n\nCustomize the menu GUI: colors, font, ...\n-----------------------------------------\n\nThe menu showed in the last example is a little ugly. Too near the the screen border and color used for non selected\nelements are ugly.\nYou can modify those properties also for an already created menu:\n\n >>> menu.position\n (0, 0)\n >>> menu.position = (30,50)\n >>> menu.position\n (30, 50)\n >>> drawMenu()\n >>> waitForUserAction(\"Not soo near to border now...\")\n\nNow the menu is in a better position on the screen.\n\nLets go over and modify some font properties, but first let me talk about the menu dimension.\nData about the menu dimension is always available using the *width* and *height* attributes:\n\n >>> menu.width\n 126\n >>> menu.height\n 115\n\nThose values are related to the labels displayed in the menu voices and also influenced by the\nfont used (and it's dimension):\n\n >>> new_font = pygame.font.Font(None, 38)\n >>> menu.font = new_font\n >>> drawMenu()\n >>> waitForUserAction(\"Bigger font\")\n\nThis bigger font has different size, so the whole menu size raise:\n\n >>> menu.width\n 154\n >>> menu.height\n 135\n\nNow colors:\n\n >>> menu.color = (255,255,255,100)\n >>> menu.focus_color = (255,255,0)\n >>> drawMenu()\n >>> waitForUserAction(\"...and better colors\")\n \nAs you can see we can easily manipulate the font color, and the font of the selected item.\n\nDo something useful with our KezMenu\n------------------------------------\n\nYou noticed that our previous examples are rightnow static screenshots without any possible interaction.\n\nTo make some real examples with our menu we need to use the *KezMEnu.update* method, and pass it\nthe `pygame.Event`__ instances that Pygame had captured.\nThe *waitForUserAction* dummy function is no more needed because a menu is commonly a way to wait for user\ndecision itself.\n\n__ http://www.pygame.org/docs/ref/event.html\n\n >>> click_count+=1\n >>> pygame.display.set_caption(\"Example %s - %s\" % (click_count, \"Use the KezMenu freely\"))\n >>> while True:\n ... events = pygame.event.get()\n ... menu.update(events)\n ... drawMenu()\n ... if option_selected:\n ... break\n >>> option_selected is not None\n True\n\nThe *option_selected* variable now contains the return value of the callable, relative to the option choosen.\n\nNB: if you select the *Quit* option running this test you will get a fake test failure.\nThis isn't a KezMenu bug, but it's normal in Python tests: the *sys.exit* call raise a\n*SystemExit* exception that in tests are handled in a different way.\n\nOk, the example is at the end!\n\nBut KezMenu has also some effects!\nYou can find examples about menu effects in the *EFFECTS.txt* file!\n\nGoodbye!\n\n >>> pygame.quit()\n\n\n\n\n===============================\nPlay with the KezMenu's effects\n===============================\n\nIntroduction\n============\n\nFrom version 0.3.0 the inner KezMenu structure is changed a lot. One of the first\nnews is that every line has it's own `pygame.font.Font`__ to use.\n\n__ http://www.pygame.org/docs/ref/font.html#pygame.font.Font\n\nThis will give us a lot of freedom for menu's entries display effects.\n\n >>> import pygame\n >>> from pygame.locals import *\n >>> import pygame.font\n >>> pygame.font.init()\n >>> screen = pygame.display.set_mode((640,480), 0, 32)\n >>> screen.fill( (50,50,50,255) )\n \n\n >>> click_count = 0\n >>> def waitForUserAction(msg='???'):\n ... global click_count\n ... click_count+=1\n ... pygame.display.set_caption(\"Example %s - %s\" % (click_count, msg))\n ... while True:\n ... for event in pygame.event.get():\n ... if event.type==KEYDOWN:\n ... return\n\n >>> def updateCaption(msg='???'):\n ... global click_count\n ... click_count+=1\n ... pygame.display.set_caption(\"Example %s - %s\" % (click_count, msg))\n\n >>> from kezmenu import KezMenu\n >>> def drawMenu():\n ... screen.fill( (50,50,50,255) )\n ... menu.draw(screen)\n ... pygame.display.flip()\n\n >>> option_selected = 0\n >>> def optSelected():\n ... global option_selected\n ... option_selected=1\n\n >>> menu = KezMenu(\n ... [\"First option!\", optSelected],\n ... [\"sEcond\", optSelected],\n ... [\"Again!\", optSelected],\n ... [\"Lambda\", optSelected],\n ... [\"Quit\", optSelected],\n ... )\n >>> menu.font = pygame.font.Font(None, 20)\n >>> menu.color = (255,255,255)\n >>> menu.position = (10,10)\n\nLets show the actual menu height:\n \n >>> menu.height\n 70\n\nHere again a standard menu.\n\n >>> drawMenu()\n >>> waitForUserAction(\"The same boring menu\")\n\nNow we want a bigger font for 'sEcond' entry:\n\n >>> menu.options[1]['font'] = pygame.font.Font(None, 26)\n >>> drawMenu()\n >>> waitForUserAction(\"Bigger entry 2\")\n\nLets who now that manually play with the options menu can lead to some errors\nin the menu itself, because KezMenu instance is not warn of changed parameters:\n\n >>> menu.height\n 70\n\nSo even if we display a new well drawn menu, the saved size is not changed.\nThis is bad. We can fix this simply calling an internal KezMenu method, that\ncommonly KezMenu objects call for us:\n\n >>> menu._fixSize()\n >>> menu.height\n 74\n\nThis introduction was only a taste of what there's inside KezMenu effect's ways to do things.\n\nThe KezMenu available effects\n=============================\n\nHere a list and example of usage of all available effects.\nEffects are enabled using the *enableEffect* method, and must be used for\nexisting effects, or a KeyError is raised:\n\n >>> menu.enableEffect('not-existing-effect-just-for-raise-error')\n Traceback (most recent call last):\n ...\n KeyError: \"KezMenu don't know an effect of type not-existing-effect-just-for-raise-error\"\n\nIn all the following example we need a timer, and so can use the\n`pygame.time.Clock`__:\n\n__ http://www.pygame.org/docs/ref/time.html#pygame.time.Clock\n\n >>> clock = pygame.time.Clock()\n\nTo enable an effect, we must use the *enableEffect* method, passing to it the\nname of the effect and optionally some keyword arguments.\n\n**Important thing**: effects can be (sometimes) combined!\n\nraise-line-padding-on-focus\n---------------------------\n\nThis effect raise the padding above and below the focused element while time\nis passing. Padding on the last element will only raise the top padding.\nPadding on the first element will only raise the bottom padding.\n\n`padding`\n Default: 10px. The number of pixel that will be added above and below the\n selected menu entry.\n\n`enlarge_time`\n Default: 500 millisec. Time needed (in seconds) to reach the max padding.\n\n::\n\n >>> updateCaption('raise-line-padding-on-focus')\n >>> option_selected = 0\n >>> menu.enableEffect('raise-line-padding-on-focus')\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n\nWe can call this effect with new custom values:\n\n >>> updateCaption('raise-line-padding-on-focus (custom)')\n >>> option_selected = 0\n >>> menu.enableEffect('raise-line-padding-on-focus', padding=30, enlarge_time=1.)\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n >>> menu.disableEffect('raise-line-padding-on-focus')\n\nraise-col-padding-on-focus\n--------------------------\n\nThis effect raise the padding on the left of the focused element while time is\npassing.\n\n`padding`\n Default: 10px. The number of pixel that will be added on the left of the\n selected menu entry.\n\n`enlarge_time`\n Default: 500 millisec. Time needed (in seconds) to reach the max padding.\n\n::\n\n >>> updateCaption('raise-col-padding-on-focus')\n >>> option_selected = 0\n >>> menu.enableEffect('raise-col-padding-on-focus')\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n\nWe can call this effect with new custom values:\n\n >>> updateCaption('raise-col-padding-on-focus (custom)')\n >>> option_selected = 0\n >>> menu.enableEffect('raise-col-padding-on-focus', padding=20, enlarge_time=3.)\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n >>> menu.disableEffect('raise-col-padding-on-focus')\n\nenlarge-font-on-focus\n---------------------\n\nThis effect will raise the font size of the selected element on the menu of a\ngiven multiply factor. The Font class of Pygame has a limitation (not a bug):\nis not possible to obtain the font data (family, size) after the font creation.\n\nSo for use this effect is needed to pass to the init method all font data, and\na new font will be created (the standard menu 'font' property will be\noverrided).\n\n`font`\n Required. A font name of path, same as you are passing it to Pygame\n Font constructor, so can also be None.\n\n`size`\n Required. The size of the font, same as you are passing it to Pygame Font\n constructor.\n\n`enlarge_factor`\n Default: 2.(200%). The multiply factor of the font size at the maximum\n extension, as a real value.\n\n`enlarge_time`\n Default: 500 millisec. Time needed (in seconds) to reach the max font\n size.\n\n::\n\n >>> updateCaption('enlarge-font-on-focus')\n >>> option_selected = 0\n >>> menu.enableEffect('enlarge-font-on-focus', font=None, size=18)\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n\nLets now customized all the data:\n\n >>> updateCaption('enlarge-font-on-focus (focus)')\n >>> option_selected = 0\n >>> menu.enableEffect('enlarge-font-on-focus', font=None, size=18, enlarge_factor=5., enlarge_time=2.)\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n\t>>> menu.disableEffect('enlarge-font-on-focus')\n\nCombining KezMenu effects\n=========================\n\nThe primary scope of KezMenu effects is to be enough flexible to be activated\nin same time.\nAs the effects available will raise in future, sometimes can be that effects\nwill fall in conflict each other, but in general I'll try to integrate them.\n\nActivate more that one effects in the same time is very simple: just activate it!\n\n >>> updateCaption('Combined effects example')\n >>> option_selected = 0\n >>> menu.enableEffect('raise-line-padding-on-focus', padding=30, enlarge_time=1.)\n >>> menu.enableEffect('raise-col-padding-on-focus', padding=20, enlarge_time=1.)\n >>> menu.enableEffect('enlarge-font-on-focus', font=None, size=16, enlarge_factor=3.)\n >>> while True:\n ... time_passed = clock.tick() / 1000.\n ... events = pygame.event.get()\n ... menu.update(events, time_passed)\n ... drawMenu()\n ... if option_selected:\n ... break\n >>> menu.disableEffect('raise-line-padding-on-focus')\n >>> menu.disableEffect('raise-col-padding-on-focus')\n >>> menu.disableEffect('enlarge-font-on-focus')\n\nWanna write a new effect?\n=========================\n\nIf anyone is interested in develop a new effect, I will be happy to integrate\nit in KezMenu!\n\nChangelog\n=========\n\n0.3.6 (2013-06-07)\n------------------\n\n* Fixed packaging error\n\n0.3.5\n-----\n\n* Test done with Python 2.6 and Pygame 1.9\n* Fixes to doctest\n* Removed deprecated code\n\n0.3.1\n-----\n\n* Nothing new, but fixed a problem that break menus if the module is used in a py2exe environment.\n\n0.3.0\n-----\n\n* Added a README.txt in doctest format.\n* Added many deprecation warning for not `PEP 8`__ named methods.\n Those methods will be removed in future.\n* If the menu position was moved from (0,0), the mouse control was buggy\n because not counting this offset.\n* Support for the menu effects\n\n__ http://www.python.org/dev/peps/pep-0008/\n\n0.2.1\n-----\n\n* Released as egg.\n* Added some txt file.\n\n0.2.0 - Unreleased\n------------------\n\n* Fixed many issues related to font handle.\n* Added the support to mouse usage.\n\n0.1.0\n-----\n\nFor version 0.1.0 I mean the original EzMeNu version 1.0.\n\nCredits\n=======\n\n* PyMike from the Pygame community for his original work.\n\nTODO\n====\n\n* Submenus?\n* More effects (ideas are welcome)\n* Need to work better with transparency\n\nGet the code\n============\n\nThe source repository is hosted at `GitHub`__\n\n__ https://github.com/keul/KezMenu", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://www.pygame.org/project-KezMenu-996-.html", "keywords": "python pygame menu kezmenu library", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "KezMenu", "package_url": "https://pypi.org/project/KezMenu/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/KezMenu/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://www.pygame.org/project-KezMenu-996-.html" }, "release_url": "https://pypi.org/project/KezMenu/0.3.6/", "requires_dist": null, "requires_python": null, "summary": "A simple and basical Pygame library for fast develop of menu interfaces", "version": "0.3.6" }, "last_serial": 784590, "releases": { "0.2.1": [ { "comment_text": "", "digests": { "md5": "8b791651b563d73b60c87b439e668d06", "sha256": "4df20ac8e2bc8aa67499a0a43f9b7cb161114e87b1443163e06a75dec8dbd451" }, "downloads": -1, "filename": "KezMenu-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8b791651b563d73b60c87b439e668d06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3216, "upload_time": "2008-12-29T18:52:20", "url": "https://files.pythonhosted.org/packages/34/49/85fcdf7713c7e0fe48b6a23c45d5f3325eb3e89443f6bf91842ea114fa09/KezMenu-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "9e99d5e17be96084cb48f5bf125aa408", "sha256": "f3329ad0d7758f93517e8b4b4f65501065cd6eca58de0b7d01aedb42c460f628" }, "downloads": -1, "filename": "KezMenu-0.3.0-py2.5.egg", "has_sig": false, "md5_digest": "9e99d5e17be96084cb48f5bf125aa408", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 26465, "upload_time": "2009-01-17T15:20:08", "url": "https://files.pythonhosted.org/packages/84/4b/8e1d927e992b8c3b315c4672d79d7264e27cedd489722a0bbd04b38ea9e1/KezMenu-0.3.0-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "3ed8f368d01f666b585d5703571c5150", "sha256": "120cfadc79830cba3687795794d124e9ba8be693bad658619584409d8b6725de" }, "downloads": -1, "filename": "KezMenu-0.3.0.tar.gz", "has_sig": false, "md5_digest": "3ed8f368d01f666b585d5703571c5150", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21970, "upload_time": "2009-01-17T15:20:15", "url": "https://files.pythonhosted.org/packages/28/8d/f16d8940929179e3b63e4543bf517e53d906cb2f7a1252ad2d2b41177098/KezMenu-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "27ccf9a0bcca16c21d3c5e2531148e93", "sha256": "551301178bbb9db7fb4a99d686c0a5c9033fa0f2f2ea6fe682225fed42b2a8f4" }, "downloads": -1, "filename": "KezMenu-0.3.1-py2.5.egg", "has_sig": false, "md5_digest": "27ccf9a0bcca16c21d3c5e2531148e93", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 26557, "upload_time": "2009-04-26T19:10:29", "url": "https://files.pythonhosted.org/packages/71/6f/ca7625c23927c0f584f1cb88ee8f9074d551e7cde1e5e143a1a5309c7f50/KezMenu-0.3.1-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "3d2d2046a687eb0518c7a9048d0e4d6b", "sha256": "81beac6f8d0785797fef070d2aff82c8af83366be2276b7dbeba2a7f06bf0bcf" }, "downloads": -1, "filename": "KezMenu-0.3.1.tar.gz", "has_sig": false, "md5_digest": "3d2d2046a687eb0518c7a9048d0e4d6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17155, "upload_time": "2009-04-26T19:10:17", "url": "https://files.pythonhosted.org/packages/0e/c7/774e0d8c76a5d7d822ac01730ffdc89b51d3455252230ab52f92ad5b33e7/KezMenu-0.3.1.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "69b9196013776dfa2473c28a474dfef0", "sha256": "34c47ab371ab734f89bbdf1c8381c79e039ac5c015a1dc96f0aba92e05f803a2" }, "downloads": -1, "filename": "KezMenu-0.3.5-py2.6.egg", "has_sig": false, "md5_digest": "69b9196013776dfa2473c28a474dfef0", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 19062, "upload_time": "2009-10-22T23:38:16", "url": "https://files.pythonhosted.org/packages/9d/b7/b960ae674411843200c2e1db9e5c9f92644cdb916040ea67a2cea8cead83/KezMenu-0.3.5-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "28324720574121d0108c2423b9a4db89", "sha256": "c8664d452fab08ab2a73219b55d4d86af757a2dfeb257c57300237bd8370342d" }, "downloads": -1, "filename": "KezMenu-0.3.5.tar.gz", "has_sig": false, "md5_digest": "28324720574121d0108c2423b9a4db89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11576, "upload_time": "2009-10-22T23:38:15", "url": "https://files.pythonhosted.org/packages/4e/67/4987f0724968947d4878be8156effd3073dfe87a4d34d04bf28eeed03df0/KezMenu-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "29a40cd4198dbbc3ee40c621a56de261", "sha256": "21f6e87454063c00961eb5d55f33c8dddfbe5cc47c893f3612a09aab9ee85ae5" }, "downloads": -1, "filename": "KezMenu-0.3.6.tar.gz", "has_sig": false, "md5_digest": "29a40cd4198dbbc3ee40c621a56de261", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17298, "upload_time": "2013-06-07T17:24:51", "url": "https://files.pythonhosted.org/packages/f3/db/f757790efe0e22e9bbfd96968b701bbe917ba46e021b2ad4512cf94a187e/KezMenu-0.3.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "29a40cd4198dbbc3ee40c621a56de261", "sha256": "21f6e87454063c00961eb5d55f33c8dddfbe5cc47c893f3612a09aab9ee85ae5" }, "downloads": -1, "filename": "KezMenu-0.3.6.tar.gz", "has_sig": false, "md5_digest": "29a40cd4198dbbc3ee40c621a56de261", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17298, "upload_time": "2013-06-07T17:24:51", "url": "https://files.pythonhosted.org/packages/f3/db/f757790efe0e22e9bbfd96968b701bbe917ba46e021b2ad4512cf94a187e/KezMenu-0.3.6.tar.gz" } ] }