{ "info": { "author": "Philip J Grabner, Cadit Health Inc", "author_email": "oss@cadit.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "License :: Public Domain", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Software Development", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": "===================\npyramid_controllers\n===================\n\nThe ``pyramid_controllers`` package is a pyramid plugin that provides\nde-centralized hierarchical object dispatch, similar to how the\nstandard TurboGears request dispatch works. You may also be interested\nin the pyramid-describe_ package, which can make these controllers\nself-documenting.\n\nTL;DR\n=====\n\nInstall:\n\n.. code-block:: bash\n\n $ pip install pyramid-controllers\n\nUse:\n\n.. code-block:: python\n\n # the following application serves these URLs:\n # /\n # /about/team\n # /about/mission\n # /resource/{RESOURCE_ID} (RESTful: GET and PUT)\n\n # standard pyramid-controller imports\n from pyramid_controllers import \\\n Controller, RestController, \\\n expose, expose_defaults, index, default, lookup, wrap, fiddle\n\n # create a controller for \"/about/team\" and \"/about/mission\"\n class AboutController(Controller):\n @expose(renderer='mymodule:path/to/template.mako')\n def team(self, request): return dict(team=get_team_members())\n @expose\n def mission(self, request): return 'Our mission: rock the world.'\n\n # create a RESTful (GET, PUT) controller for \"/resource/{RESOURCE_ID}\"\n class ResourceController(RestController):\n @expose\n def get(self, request): return 'Name: ' + request.res.name\n @expose\n def put(self, request):\n request.res.name = request.params.get('name')\n return self.get(request)\n\n # create the dispatcher that will lookup resources by ID\n class ResourceDispatcher(Controller):\n RESOURCE_ID = ResourceController(expose=False)\n @lookup\n def lookup(self, request, res_id, *rem):\n request.res = get_resource_by_id(res_id)\n return (self.RESOURCE_ID, rem)\n\n # the root controller with support for \"/\" and sub-controllers\n class RootController(Controller):\n about = AboutController()\n resource = ResourceDispatcher()\n @index\n def index(self, request):\n return HTTPFound('/about/mission')\n\n # and hook it all into pyramid in the app's main()\n def main(global_config, **settings):\n # ... (the usual pyramid startup calls) ...\n config.include('pyramid_controllers')\n config.add_controller('root', '/', RootController())\n\n\nInstallation\n============\n\nYou can manually install it by running:\n\n.. code-block:: bash\n\n $ pip install pyramid-controllers\n\nHowever, a better approach is to use standard python distribution\nutilities, and add pyramid_controllers as a dependency to your\nproject's `install_requires` parameter in your ``setup.py``. Then run\na ``python setup.py develop``.\n\nThen, enable the package either in your INI file via:\n\n.. code-block:: text\n\n pyramid.includes = pyramid_controllers\n\nor with code in your package's application initialization via:\n\n.. code-block:: python\n\n def main(global_config, **settings):\n # ...\n config.include('pyramid_controllers')\n # ...\n\nUsage\n=====\n\nNow that your pyramid application has access to the plugin, anchor the\nroot controller to a URL entrypoint via the\n``config.add_controller()`` method. Note that unlike many of the other\ncontroller approaches, a pyramid_controller route takes control of all\nURLs that are prefixed with the specified entrypoint. For example, the\nfollowing:\n\n.. code-block:: python\n\n def main(global_config, **settings):\n # ...\n config.include('pyramid_controllers')\n # ...\n config.add_controller('rootController', '/root', '.controllers.RootController')\n # ...\n\nwill allow the class ``.controllers.RootController`` to handle any request\nfor the URL ``/root`` or URLs that start with ``/root/...``.\n\nConcept\n=======\n\nThe basic gist of pyramid_controllers is that for any incoming URL, it\nwill be split into components based on forwarded slashes (\"/\") and\nsequentially lookup the controller in the series while applying name\nlookups, defaulting, access control, and generic request manipulation.\n\nFor example, assuming that ``RootController`` is anchored at \"/\", then\nthe following code will handle a request for ``/how/are/you`` by responding\nwith the \"A-OK!\" response.\n\n.. code-block:: python\n\n from pyramid_controllers import Controller, expose\n\n # NOTE: These classes are defined in order of semantic use. For this\n # to actually work, the controllers would need to be defined\n # before they are invoked (so in opposite order), of course.\n\n class RootController(Controller):\n how = HowController()\n\n class HowController(Controller):\n are = AreController()\n\n class AreController(Controller):\n @expose\n def you(self, request):\n return 'A-OK!'\n\nHere, the initial request is received by ``RootController``. A lookup\nof the \"how\" attribute finds that it is associated with another\ncontroller, so the request is dispatched to that object. The same\nthing happens when the ``HowController`` receives the request, which\nin turn dispatches it to the ``AreController``. When the framework\ndoes a lookup of the \"you\" attribute, it finds that it is a method. To\ncontrol which methods are invocable via a URL, you must define the\nmethod to be exposed to the framework via the ``@expose`` decorator.\n\nAt this point the framework hands the request to the object's method for\nhandling, providing the active ``request`` object as the first parameter,\nin standard pyramid fashion.\n\nTODO: add documentation about the various supported response and\nexception types.\n\nControllers\n===========\n\nThere exist several classes that can be subclassed to produce\ncontroller classes:\n\n* **pyramid_controllers.Controller**: this class is the base class\n of all controllers, and does not provide much functionality other\n than allowing the framework to know that a class is intended to\n handle requests in a pyramid_controllers approach.\n\n* **pyramid_controllers.RestController**: this class routes the\n various RESTful verbs to controller methods by the same name\n (note that the method names are lower-cased).\n\nHere is an example of the RestController, which will accept any of the\nstandard HTTP verbs (GET, PUT, POST, DELETE) to the URL \"/hello\" and\nwill emit a response that simply reflects the method used (with a\nlittle poetic licence thrown in):\n\n.. code-block:: python\n\n from pyramid_controllers import Controller, RestController\n\n class RootController(Controller):\n hello = ReflectController()\n\n class ReflectController(RestController):\n @expose\n def get(self, request):\n return 'I am *not* a dog, go GET it yourself!'\n @expose\n def put(self, request):\n return 'Apparently you golf. PUTting is just part of the game.'\n @expose\n def post(self, request):\n return 'People use email today, silly. Stop using the POST!'\n @expose\n def delete(self, request):\n return 'Hey! This is not the CIA, you cannot just DELETE me!'\n\n\nDecorators\n==========\n\nThere are several decorators provided by the pyramid_controllers\npackage that influence how a request is handled, as follows:\n\n* **@expose**: the most common decorator, it simply declares that the\n decorated method is intended to handle incoming requests, and is\n therefore \"exposed\" to the request traversal and dispatching. Note\n that although it is exposed, access control restrictions may\n restrict who can actually access it.\n\n* **@index**: declares that the decorated method is the method that\n will handle the request if no further components in the URL path\n exist. Think of this as the ``index.html`` in an htdocs directory.\n\n* **@default**: if the standard component traversal strategy fails to\n match either a sub-controller or an exposed method to handle a\n request, then the framework searches for a method that has been\n decorated as a ``@default`` or ``@lookup`` method (``@lookup``\n decorators take precedence). The default method is expected to\n behave identically to an \"exposed\" method in that it should respond\n to the request.\n\n* **@lookup**: similar to the ``@default`` decorator, the ``@lookup``\n decorator is invoked when the framework could not find another\n method or sub-controller to handle the request. The @lookup method,\n unlike the @default method, is **not** expected to handle the actual\n request, but instead to return a new controller with which the\n framework will continue the hierarchical request handling. See below\n for details on what parameters are passed and what is expected to be\n returned.\n\n* **@wrap**: a method that will wrap a request handling call. A @wrap\n method is passed both a `request` object and a `handler` callable --\n at some point the @wrap method should invoke ``handler(request)``\n and return the response. Both the request and the response can be\n modified or replaced inside the @wrap method. Cascading @wrap\n methods will be invoked based on Controller traversal. Inherited and\n multiple @wrap methods per controller are currently not explicitly\n supported -- their behavior is undefined.\n\n* **@fiddle**: a method declared as a \"fiddler\" will be called before\n any other method in the given controller and is expected to do\n nothing more than alter the request in some way (such as add\n additional attributes) or throw an exception. A fiddler method\n **MUST NOT** actually respond to a request via standard methods,\n however it can raise exceptions (such as ``HTTPForbidden``), which\n will terminate request dispatching.\n\n* **@expose_defaults**: a Controller class decorator that sets default\n parameters for @expose, @index, and @default methods, such as the\n default renderer and extensions.\n\n\nComplex Example\n===============\n\n.. code-block:: python\n\n from pyramid.httpexceptions import HTTPForbidden, HTTPNotFound\n\n # import the controller base classes\n from pyramid_controllers import Controller, RestController\n\n # import the decorators\n from pyramid_controllers import expose, index, lookup, default, wrap, fiddle\n\n class RootController(Controller):\n public = PublicController()\n admin = AdminController()\n member = MemberDispatchController()\n\n class PublicController(Controller):\n login = AuthController()\n @expose\n def about(self, request):\n return 'We are a snazy company!'\n\n class AuthController(RestController):\n @expose\n def get(self, request):\n return '
'\n @expose\n def post(self, request):\n # todo: perform authentication...\n\n class AdminController(Controller):\n @fiddle\n def checkAuth(self, request):\n if not userHasAdminAccess(request):\n raise HTTPForbidden()\n @index\n def index(self, request):\n return 'View the list of active users.'\n @expose\n def users(self, request):\n return ''\n\n class MemberDispatchController(Controller):\n @wrap\n def checkAuth(self, request, handler):\n if not userHasMemberAccess(request):\n raise HTTPForbidden()\n return handler(request)\n @lookup\n def _lookup(self, username, *rem):\n user = findUserByUsername(username)\n if not user:\n raise HTTPNotFound()\n return (MemberController(user), rem)\n\n class MemberController(Controller):\n def __init__(self, user):\n self.user = user\n @index\n def index(self, request):\n return 'Hi, my name is ' + self.user.name\n @expose\n def age(self, request):\n return 'I am %d years old.' % (self.user.age,)\n @default\n def _default(self, request, attribute, *rem):\n return 'My \"%s\" is \"%r\".' % (attribute, getattr(self.user, attribute))\n\n\n.. _pyramid-describe: https://pypi.python.org/pypi/pyramid_describe\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/cadithealth/pyramid_controllers", "keywords": "web wsgi pyramid bfg pylons turbogears controller handler object-dispatch request-dispatch", "license": "MIT (http://opensource.org/licenses/MIT)", "maintainer": "", "maintainer_email": "", "name": "pyramid_controllers", "package_url": "https://pypi.org/project/pyramid_controllers/", "platform": "any", "project_url": "https://pypi.org/project/pyramid_controllers/", "project_urls": { "Homepage": "http://github.com/cadithealth/pyramid_controllers" }, "release_url": "https://pypi.org/project/pyramid_controllers/0.3.26/", "requires_dist": null, "requires_python": "", "summary": "A pyramid plugin that provides de-centralized hierarchical object dispatch.", "version": "0.3.26" }, "last_serial": 4280164, "releases": { "0.1": [], "0.2": [ { "comment_text": "", "digests": { "md5": "af8cc95578efa4997da09bbcfad044dc", "sha256": "15110fee17fdbf0491effae52076555a6c004c8f68d31fe60a09e53a00030491" }, "downloads": -1, "filename": "pyramid_controllers-0.2.tar.gz", "has_sig": false, "md5_digest": "af8cc95578efa4997da09bbcfad044dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32503, "upload_time": "2013-03-27T19:32:11", "url": "https://files.pythonhosted.org/packages/6b/fd/79ee17ac6efc03830f0a2769526382fa622b94e6d3c46a5ac52bbe999236/pyramid_controllers-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "c0184a9b4a9e3dce87048d30d2082d78", "sha256": "d635aafad14e2f81dc4860415215b9a6c84a600e4d6b298c598095deafd49b55" }, "downloads": -1, "filename": "pyramid_controllers-0.3.tar.gz", "has_sig": false, "md5_digest": "c0184a9b4a9e3dce87048d30d2082d78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33204, "upload_time": "2013-03-28T16:47:47", "url": "https://files.pythonhosted.org/packages/82/85/c91ccaa5af4b123b8126ee5ab76fa785535b192224405a23792b4efee2d7/pyramid_controllers-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c04005796ca50ac76e9944811e350f65", "sha256": "009adc2479a959f654d9bf1cf861b4a2e92a90023c081442e21148f3da5f2f8d" }, "downloads": -1, "filename": "pyramid_controllers-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c04005796ca50ac76e9944811e350f65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33181, "upload_time": "2013-03-28T16:54:50", "url": "https://files.pythonhosted.org/packages/d8/72/e96410617b8d7864fa53bc10f0b578cbbccb059db96025c3e49a6358ad73/pyramid_controllers-0.3.1.tar.gz" } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "74cbd442d9759c17c3274c6619f897c2", "sha256": "1facb4bed9d1c643049c047e7614862e2d21187401d4db9ede4d64105d7a01bd" }, "downloads": -1, "filename": "pyramid_controllers-0.3.10.tar.gz", "has_sig": false, "md5_digest": "74cbd442d9759c17c3274c6619f897c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38743, "upload_time": "2013-04-09T21:07:54", "url": "https://files.pythonhosted.org/packages/84/bd/e715413cd888c89aa803e536f21385b51cf5bd53d773a6a101afba585804/pyramid_controllers-0.3.10.tar.gz" } ], "0.3.11": [ { "comment_text": "", "digests": { "md5": "42a81707d53b041ef396a71263812a6c", "sha256": "a6e070af9482d5b665cfdbcf9e0497ad116ab01f6c2c366ded86d1b4c8c0611a" }, "downloads": -1, "filename": "pyramid_controllers-0.3.11.tar.gz", "has_sig": false, "md5_digest": "42a81707d53b041ef396a71263812a6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40094, "upload_time": "2013-05-13T20:05:26", "url": "https://files.pythonhosted.org/packages/72/0c/b2311365b9d9d10198377b2c1c99f2c0f5ea12005b0c85c7e12d8bb200c4/pyramid_controllers-0.3.11.tar.gz" } ], "0.3.12": [ { "comment_text": "", "digests": { "md5": "022b31c0255c26902a204d2a4249c628", "sha256": "cebe842719cabb89794b3d374b6a22f81aea8c04216fdd7a7437c80088ddfed3" }, "downloads": -1, "filename": "pyramid_controllers-0.3.12.tar.gz", "has_sig": false, "md5_digest": "022b31c0255c26902a204d2a4249c628", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42557, "upload_time": "2013-08-06T19:49:41", "url": "https://files.pythonhosted.org/packages/d6/79/4fc351428620982968905d6579ca237b9da362d5d58c1bc5ef24e5da6cd2/pyramid_controllers-0.3.12.tar.gz" } ], "0.3.13": [ { "comment_text": "", "digests": { "md5": "fdc201e375bf778a99e15aba6f1378a8", "sha256": "b2af783a00c0491f3770b23180d395bdd0827116680381a6a68add0b67bfc8e3" }, "downloads": -1, "filename": "pyramid_controllers-0.3.13.tar.gz", "has_sig": false, "md5_digest": "fdc201e375bf778a99e15aba6f1378a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42573, "upload_time": "2013-08-12T20:41:06", "url": "https://files.pythonhosted.org/packages/be/95/1e4a5a52d2054b66a34ef24356b1bbcf387f72a23961736b0a807a55f20c/pyramid_controllers-0.3.13.tar.gz" } ], "0.3.15": [ { "comment_text": "", "digests": { "md5": "c44b1eb65fd7277a6d10958a64e3ca69", "sha256": "6568d6ba73136473a71efe6a9a9c16ebd1d0d1484a6029fdf3235d92d9081518" }, "downloads": -1, "filename": "pyramid_controllers-0.3.15.tar.gz", "has_sig": false, "md5_digest": "c44b1eb65fd7277a6d10958a64e3ca69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43321, "upload_time": "2013-09-11T18:13:57", "url": "https://files.pythonhosted.org/packages/29/d8/1abee10f4a093200779c4eb41bf16fb8a7b24acca3355b28e8db3030b0f3/pyramid_controllers-0.3.15.tar.gz" } ], "0.3.16": [ { "comment_text": "", "digests": { "md5": "75cd8390ffdc19515f910d240af9717f", "sha256": "d17ec28b733e5f151c55100dc5102271ecc1a1c7198ac9d1bd54087daf42e55e" }, "downloads": -1, "filename": "pyramid_controllers-0.3.16.tar.gz", "has_sig": false, "md5_digest": "75cd8390ffdc19515f910d240af9717f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43340, "upload_time": "2013-09-11T22:06:35", "url": "https://files.pythonhosted.org/packages/6d/9e/52df8bc682a930877768cd32fec0edec1ff3fa9e54efaed26ba0347034a8/pyramid_controllers-0.3.16.tar.gz" } ], "0.3.17": [ { "comment_text": "", "digests": { "md5": "ce2fb98f4fc80fc2e3eb6f75f3603022", "sha256": "9dd89814aa5895bdd56d511ae29892d887e0a72c1b71ff8522824eb9ed41e940" }, "downloads": -1, "filename": "pyramid_controllers-0.3.17.tar.gz", "has_sig": false, "md5_digest": "ce2fb98f4fc80fc2e3eb6f75f3603022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43596, "upload_time": "2013-09-12T04:19:26", "url": "https://files.pythonhosted.org/packages/2e/53/eef0e815462cb4555f2ad1f4b3237a732c66d2c27f1bc3eafbfc9773c4db/pyramid_controllers-0.3.17.tar.gz" } ], "0.3.18": [ { "comment_text": "", "digests": { "md5": "33b3a6e7cf10497c66f36c6c364c5972", "sha256": "0e8004fe7c089527af4d5e227d09e431d06e41951029033f5c11969a7d8bc3c6" }, "downloads": -1, "filename": "pyramid_controllers-0.3.18.tar.gz", "has_sig": false, "md5_digest": "33b3a6e7cf10497c66f36c6c364c5972", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26488, "upload_time": "2013-09-13T18:23:09", "url": "https://files.pythonhosted.org/packages/26/c7/9657cd94f9988ff32096427f15a887263feb169266170c7a597232b579fe/pyramid_controllers-0.3.18.tar.gz" } ], "0.3.19": [ { "comment_text": "", "digests": { "md5": "7aa54826a9b96262a0298a7c67ef7906", "sha256": "3aa7211886f8e3c791d636f0d2d73e373b2e7f62f79c193932b685627e77190b" }, "downloads": -1, "filename": "pyramid_controllers-0.3.19.tar.gz", "has_sig": false, "md5_digest": "7aa54826a9b96262a0298a7c67ef7906", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26313, "upload_time": "2013-09-13T21:33:38", "url": "https://files.pythonhosted.org/packages/03/a4/8d2ade2161afa694d6427e56ce9e5a0bea566d8067dae79685f7cce641ae/pyramid_controllers-0.3.19.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "36d32c73418137e36df9912ef17eecb3", "sha256": "53c37e137cfed93e084ebf82cdfab2a54a0be7d428f6c3636f1d02d72280212f" }, "downloads": -1, "filename": "pyramid_controllers-0.3.2.tar.gz", "has_sig": false, "md5_digest": "36d32c73418137e36df9912ef17eecb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33190, "upload_time": "2013-03-28T17:16:01", "url": "https://files.pythonhosted.org/packages/a2/1b/3a22e7d0af12beed8b187e7a7aa43fb5507b1bc597f874d27ef58e3187f2/pyramid_controllers-0.3.2.tar.gz" } ], "0.3.20": [ { "comment_text": "", "digests": { "md5": "326134b4fb0cebf087537a7c909b6904", "sha256": "dc96dd8cc572689afe010c7e9e5b9b94c5d01cff3381ccd2daaef418da779407" }, "downloads": -1, "filename": "pyramid_controllers-0.3.20.tar.gz", "has_sig": false, "md5_digest": "326134b4fb0cebf087537a7c909b6904", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26602, "upload_time": "2014-02-11T23:27:59", "url": "https://files.pythonhosted.org/packages/98/d9/d86dd04843ecc171a5690ddcd95cd03c5fa445af45924db65057ba11f8d5/pyramid_controllers-0.3.20.tar.gz" } ], "0.3.21": [ { "comment_text": "", "digests": { "md5": "afbb99318db63fbf57cd985f59948ed7", "sha256": "fc31c9b48d9946ba177afaef6691611f80c6161d8e54c2bcbac83715e73ebefc" }, "downloads": -1, "filename": "pyramid_controllers-0.3.21.tar.gz", "has_sig": false, "md5_digest": "afbb99318db63fbf57cd985f59948ed7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26948, "upload_time": "2014-02-24T21:05:16", "url": "https://files.pythonhosted.org/packages/bc/8f/706a903c34b2d93b702dd92733027c2a867f7380fa98fe827bbfe2a5a718/pyramid_controllers-0.3.21.tar.gz" } ], "0.3.22": [ { "comment_text": "", "digests": { "md5": "3e445fa2c461367e5c611fa9b5193a61", "sha256": "8da9a60727cb56c29080f3b12474800931158235ac8485cdc7f7301b69bce03b" }, "downloads": -1, "filename": "pyramid_controllers-0.3.22.tar.gz", "has_sig": false, "md5_digest": "3e445fa2c461367e5c611fa9b5193a61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27853, "upload_time": "2014-03-27T19:35:28", "url": "https://files.pythonhosted.org/packages/97/9e/bb0aa2c13f2efc26d55634d71dd5d56849199611c063a9c00f99759c21df/pyramid_controllers-0.3.22.tar.gz" } ], "0.3.23": [ { "comment_text": "", "digests": { "md5": "91aca313a58c570dafff587098c38bf2", "sha256": "7cf39df0a4740794c865502adffda744928971d714642f13c2cfe2434fea8d2d" }, "downloads": -1, "filename": "pyramid_controllers-0.3.23.tar.gz", "has_sig": false, "md5_digest": "91aca313a58c570dafff587098c38bf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29952, "upload_time": "2014-06-10T21:08:28", "url": "https://files.pythonhosted.org/packages/da/a9/bbd5dad01045722d9c0fbaa0be34eb5d06231a322281f019990426e9fe69/pyramid_controllers-0.3.23.tar.gz" } ], "0.3.24": [ { "comment_text": "", "digests": { "md5": "0eaf5ec272ee1d28c45a2a874228f5d6", "sha256": "7cc2934ef5f6e6fe973f574601ff28296f414e1165dbe5b0eb0a1409dc42fa52" }, "downloads": -1, "filename": "pyramid_controllers-0.3.24.tar.gz", "has_sig": false, "md5_digest": "0eaf5ec272ee1d28c45a2a874228f5d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30806, "upload_time": "2015-10-07T19:12:07", "url": "https://files.pythonhosted.org/packages/90/47/f0c68d378d331f0a55cdc27694776f979b6ec09880bdf21848ca16f59e78/pyramid_controllers-0.3.24.tar.gz" } ], "0.3.25": [ { "comment_text": "", "digests": { "md5": "5cf9a9912153a88243e9cbb65f38dd52", "sha256": "2a4597195b98ed8a030da446fa555094f42f80b5b12c06a55ce7214bf05992aa" }, "downloads": -1, "filename": "pyramid_controllers-0.3.25.tar.gz", "has_sig": false, "md5_digest": "5cf9a9912153a88243e9cbb65f38dd52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35752, "upload_time": "2018-09-16T23:37:28", "url": "https://files.pythonhosted.org/packages/9b/64/a7fd2e65cae2071f9914e3012727c8b070fd26c38d5cea7b6ecc4d0e587c/pyramid_controllers-0.3.25.tar.gz" } ], "0.3.26": [ { "comment_text": "", "digests": { "md5": "b6a1b18a2bef01716bd6b545add94d2b", "sha256": "0ffa206b2b9b959a8a7e38be32ecb696ad07563365c3aa760e8363b7ece92259" }, "downloads": -1, "filename": "pyramid_controllers-0.3.26.tar.gz", "has_sig": false, "md5_digest": "b6a1b18a2bef01716bd6b545add94d2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35532, "upload_time": "2018-09-17T17:35:26", "url": "https://files.pythonhosted.org/packages/2b/6f/bc9f519b7df61f98c87c6674b145a2d552d88c61d1550db12425eab413f1/pyramid_controllers-0.3.26.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "513418b05d969c65b71412dd3442fdcc", "sha256": "48f48f9aa0f24ca0f1a1bb4b033c1aaab495a4cee2aee712750be75d7ed73446" }, "downloads": -1, "filename": "pyramid_controllers-0.3.3.tar.gz", "has_sig": false, "md5_digest": "513418b05d969c65b71412dd3442fdcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34262, "upload_time": "2013-03-29T18:53:52", "url": "https://files.pythonhosted.org/packages/39/6b/7a50d46e4f5eb270b79f401cebe778bb169f3c534b479b782d717dcfbb28/pyramid_controllers-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "6f1093489dfc97fa0939ff46caa2c54f", "sha256": "98ed2b604a780c537c20a4c29811e986f3db9689bfb2a81956555509d534d361" }, "downloads": -1, "filename": "pyramid_controllers-0.3.4.tar.gz", "has_sig": false, "md5_digest": "6f1093489dfc97fa0939ff46caa2c54f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34479, "upload_time": "2013-03-29T22:15:54", "url": "https://files.pythonhosted.org/packages/d4/b3/f0a048aa333551a1f451816710463f07a48e1eebb1f61a66f1070d31b74e/pyramid_controllers-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "cd89db938dab19a4eafdea85c1cf8dc9", "sha256": "a41a097d01dc131be5934be24d262e2c9592abc1f1fb0ef5211f28ad267b8c62" }, "downloads": -1, "filename": "pyramid_controllers-0.3.5.tar.gz", "has_sig": false, "md5_digest": "cd89db938dab19a4eafdea85c1cf8dc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34503, "upload_time": "2013-03-29T22:19:45", "url": "https://files.pythonhosted.org/packages/b5/ab/d92d6fe903cb6856a52fbbce9bc288c7c462dc2ca72620dfacc9ac76dabe/pyramid_controllers-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "5cdd1a98d569f5336e0de0d0dea90c32", "sha256": "cd91cc2333e5b4787ace1e2e8f6b66b5b8fe2aee777c17094a54ce9e11fc1827" }, "downloads": -1, "filename": "pyramid_controllers-0.3.6.tar.gz", "has_sig": false, "md5_digest": "5cdd1a98d569f5336e0de0d0dea90c32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37230, "upload_time": "2013-04-02T03:57:26", "url": "https://files.pythonhosted.org/packages/8c/db/3b1a3f61dfb8bc42b6d4389305e5babecb7f7aaba3f68ef9a1a0cf33da78/pyramid_controllers-0.3.6.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "327e3935f00f863e7d89fb78b73e986d", "sha256": "b79a599c645cf6ddd787846a4eb56def62135bdc42c176cd7b3bb0d2cf57eff3" }, "downloads": -1, "filename": "pyramid_controllers-0.3.8.tar.gz", "has_sig": false, "md5_digest": "327e3935f00f863e7d89fb78b73e986d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38521, "upload_time": "2013-04-09T16:50:25", "url": "https://files.pythonhosted.org/packages/17/d0/580ba1d9dbfddc9257feca340e42c23fe660751a21c76968d7caadab3ac4/pyramid_controllers-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "cbde49f4501d78270defe588d08a8b00", "sha256": "911a259797853a1dd275778fb5f2f1a1f504ffc1020025d0805b8783a2dc52d8" }, "downloads": -1, "filename": "pyramid_controllers-0.3.9.tar.gz", "has_sig": false, "md5_digest": "cbde49f4501d78270defe588d08a8b00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38550, "upload_time": "2013-04-09T18:35:39", "url": "https://files.pythonhosted.org/packages/1c/07/7ee8d4f6be5b05b9d96d3604ac8e237db29f5e142582fbd44a5c9c594505/pyramid_controllers-0.3.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b6a1b18a2bef01716bd6b545add94d2b", "sha256": "0ffa206b2b9b959a8a7e38be32ecb696ad07563365c3aa760e8363b7ece92259" }, "downloads": -1, "filename": "pyramid_controllers-0.3.26.tar.gz", "has_sig": false, "md5_digest": "b6a1b18a2bef01716bd6b545add94d2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35532, "upload_time": "2018-09-17T17:35:26", "url": "https://files.pythonhosted.org/packages/2b/6f/bc9f519b7df61f98c87c6674b145a2d552d88c61d1550db12425eab413f1/pyramid_controllers-0.3.26.tar.gz" } ] }