{
"info": {
"author": "James Saryerwinnie",
"author_email": "js@jamesls.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Natural Language :: English",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7"
],
"description": "===========\nAWS Chalice\n===========\n\n.. image:: https://badges.gitter.im/awslabs/chalice.svg\n :target: https://gitter.im/awslabs/chalice?utm_source=badge&utm_medium=badge\n :alt: Gitter\n.. image:: https://travis-ci.org/aws/chalice.svg?branch=master\n :target: https://travis-ci.org/aws/chalice\n :alt: Travis CI\n.. image:: https://readthedocs.org/projects/chalice/badge/?version=latest\n :target: http://chalice.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. image:: https://codecov.io/github/aws/chalice/coverage.svg?branch=master\n :target: https://codecov.io/github/aws/chalice\n :alt: codecov.io\n\n\n.. image:: https://chalice.readthedocs.io/en/latest/_images/chalice-logo-whitespace.png\n :target: https://chalice.readthedocs.io/en/latest/\n :alt: Chalice Logo\n\n\nChalice is a microframework for writing serverless apps in python. It allows\nyou to quickly create and deploy applications that use AWS Lambda. It provides:\n\n* A command line tool for creating, deploying, and managing your app\n* A decorator based API for integrating with Amazon API Gateway, Amazon S3,\n Amazon SNS, Amazon SQS, and other AWS services.\n* Automatic IAM policy generation\n\n\nYou can create Rest APIs:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name=\"helloworld\")\n\n @app.route(\"/\")\n def index():\n return {\"hello\": \"world\"}\n\nTasks that run on a periodic basis:\n\n.. code-block:: python\n\n from chalice import Chalice, Rate\n\n app = Chalice(app_name=\"helloworld\")\n\n # Automatically runs every 5 minutes\n @app.schedule(Rate(5, unit=Rate.MINUTES))\n def periodic_task(event):\n return {\"hello\": \"world\"}\n\n\nYou can connect a lambda function to an S3 event:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name=\"helloworld\")\n\n # Whenever an object is uploaded to 'mybucket'\n # this lambda function will be invoked.\n\n @app.on_s3_event(bucket='mybucket')\n def handler(event):\n print(\"Object uploaded for bucket: %s, key: %s\"\n % (event.bucket, event.key))\n\nAs well as an SQS queue:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name=\"helloworld\")\n\n # Invoke this lambda function whenever a message\n # is sent to the ``my-queue-name`` SQS queue.\n\n @app.on_sqs_message(queue='my-queue-name')\n def handler(event):\n for record in event:\n print(\"Message body: %s\" % record.body)\n\n\nAnd several other AWS resources.\n\nOnce you've written your code, you just run ``chalice deploy``\nand Chalice takes care of deploying your app.\n\n::\n\n $ chalice deploy\n ...\n https://endpoint/dev\n\n $ curl https://endpoint/api\n {\"hello\": \"world\"}\n\nUp and running in less than 30 seconds.\nGive this project a try and share your feedback with us here on Github.\n\nThe documentation is available\n`on readthedocs `__.\n\nQuickstart\n==========\n\n.. quick-start-begin\n\nIn this tutorial, you'll use the ``chalice`` command line utility\nto create and deploy a basic REST API.\nFirst, you'll need to install ``chalice``. Using a virtualenv\nis recommended::\n\n $ pip install virtualenv\n $ virtualenv ~/.virtualenvs/chalice-demo\n $ source ~/.virtualenvs/chalice-demo/bin/activate\n\nNote: **make sure you are using python2.7, python3.6, or python3.7**.\nThese are the only python versions currently supported by AWS Lambda so they\nare also the only versions supported by the ``chalice`` CLI and ``chalice``\npython package. You can find the latest versions of python on the\n`Python download page `_. You can check\nthe version of python in your virtualenv by\nrunning::\n\n # Double check you have a supported python version in your virtualenv\n $ python -V\n\nNext, in your virtualenv, install ``chalice``::\n\n $ pip install chalice\n\nYou can verify you have chalice installed by running::\n\n $ chalice --help\n Usage: chalice [OPTIONS] COMMAND [ARGS]...\n ...\n\n\nCredentials\n-----------\n\nBefore you can deploy an application, be sure you have\ncredentials configured. If you have previously configured your\nmachine to run boto3 (the AWS SDK for Python) or the AWS CLI then\nyou can skip this section.\n\nIf this is your first time configuring credentials for AWS you\ncan follow these steps to quickly get started::\n\n $ mkdir ~/.aws\n $ cat >> ~/.aws/config\n [default]\n aws_access_key_id=YOUR_ACCESS_KEY_HERE\n aws_secret_access_key=YOUR_SECRET_ACCESS_KEY\n region=YOUR_REGION (such as us-west-2, us-west-1, etc)\n\nIf you want more information on all the supported methods for\nconfiguring credentials, see the\n`boto3 docs\n`__.\n\n\nCreating Your Project\n---------------------\n\nThe next thing we'll do is use the ``chalice`` command to create a new\nproject::\n\n $ chalice new-project helloworld\n\nThis will create a ``helloworld`` directory. Cd into this\ndirectory. You'll see several files have been created for you::\n\n $ cd helloworld\n $ ls -la\n drwxr-xr-x .chalice\n -rw-r--r-- app.py\n -rw-r--r-- requirements.txt\n\nYou can ignore the ``.chalice`` directory for now, the two main files\nwe'll focus on is ``app.py`` and ``requirements.txt``.\n\nLet's take a look at the ``app.py`` file:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name='helloworld')\n\n\n @app.route('/')\n def index():\n return {'hello': 'world'}\n\n\nThe ``new-project`` command created a sample app that defines a\nsingle view, ``/``, that when called will return the JSON body\n``{\"hello\": \"world\"}``.\n\n\nDeploying\n---------\n\nLet's deploy this app. Make sure you're in the ``helloworld``\ndirectory and run ``chalice deploy``::\n\n $ chalice deploy\n ...\n Initiating first time deployment...\n https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/\n\nYou now have an API up and running using API Gateway and Lambda::\n\n $ curl https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/\n {\"hello\": \"world\"}\n\nTry making a change to the returned dictionary from the ``index()``\nfunction. You can then redeploy your changes by running ``chalice deploy``.\n\n\nFor the rest of these tutorials, we'll be using ``httpie`` instead of ``curl``\n(https://github.com/jakubroztocil/httpie) to test our API. You can install\n``httpie`` using ``pip install httpie``, or if you're on Mac, you can run\n``brew install httpie``. The Github link has more information on installation\ninstructions. Here's an example of using ``httpie`` to request the root\nresource of the API we just created. Note that the command name is ``http``::\n\n\n $ http https://qxea58oupc.execute-api.us-west-2.amazonaws.com/api/\n HTTP/1.1 200 OK\n Connection: keep-alive\n Content-Length: 18\n Content-Type: application/json\n Date: Mon, 30 May 2016 17:55:50 GMT\n X-Cache: Miss from cloudfront\n\n {\n \"hello\": \"world\"\n }\n\n\nAdditionally, the API Gateway endpoints will be shortened to\n``https://endpoint/api/`` for brevity. Be sure to substitute\n``https://endpoint/api/`` for the actual endpoint that the ``chalice``\nCLI displays when you deploy your API (it will look something like\n``https://abcdefg.execute-api.us-west-2.amazonaws.com/api/``.\n\nNext Steps\n----------\n\nYou've now created your first app using ``chalice``.\n\nThe next few sections will build on this quickstart section and introduce\nyou to additional features including: URL parameter capturing,\nerror handling, advanced routing, current request metadata, and automatic\npolicy generation.\n\n\nTutorial: URL Parameters\n========================\n\nNow we're going to make a few changes to our ``app.py`` file that\ndemonstrate additional capabilities provided by the python serverless\nmicroframework for AWS.\n\nOur application so far has a single view that allows you to make\nan HTTP GET request to ``/``. Now let's suppose we want to capture\nparts of the URI:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name='helloworld')\n\n CITIES_TO_STATE = {\n 'seattle': 'WA',\n 'portland': 'OR',\n }\n\n\n @app.route('/')\n def index():\n return {'hello': 'world'}\n\n @app.route('/cities/{city}')\n def state_of_city(city):\n return {'state': CITIES_TO_STATE[city]}\n\n\nIn the example above, we've now added a ``state_of_city`` view that allows\na user to specify a city name. The view function takes the city\nname and returns name of the state the city is in. Notice that the\n``@app.route`` decorator has a URL pattern of ``/cities/{city}``. This\nmeans that the value of ``{city}`` is captured and passed to the view\nfunction. You can also see that the ``state_of_city`` takes a single\nargument. This argument is the name of the city provided by the user.\nFor example::\n\n GET /cities/seattle --> state_of_city('seattle')\n GET /cities/portland --> state_of_city('portland')\n\nNow that we've updated our ``app.py`` file with this new view function,\nlet's redeploy our application. You can run ``chalice deploy`` from\nthe ``helloworld`` directory and it will deploy your application::\n\n $ chalice deploy\n\nLet's try it out. Note the examples below use the ``http`` command\nfrom the ``httpie`` package. You can install this using ``pip install httpie``::\n\n $ http https://endpoint/api/cities/seattle\n HTTP/1.1 200 OK\n\n {\n \"state\": \"WA\"\n }\n\n $ http https://endpoint/api/cities/portland\n HTTP/1.1 200 OK\n\n {\n \"state\": \"OR\"\n }\n\n\nNotice what happens if we try to request a city that's not in our\n``CITIES_TO_STATE`` map::\n\n $ http https://endpoint/api/cities/vancouver\n HTTP/1.1 500 Internal Server Error\n Content-Type: application/json\n X-Cache: Error from cloudfront\n\n {\n \"Code\": \"ChaliceViewError\",\n \"Message\": \"ChaliceViewError: An internal server error occurred.\"\n }\n\n\nIn the next section, we'll see how to fix this and provide better\nerror messages.\n\n\nTutorial: Error Messages\n========================\n\nIn the example above, you'll notice that when our app raised\nan uncaught exception, a 500 internal server error was returned.\n\nIn this section, we're going to show how you can debug and improve\nthese error messages.\n\nThe first thing we're going to look at is how we can debug this\nissue. By default, debugging is turned off, but you can\nenable debugging to get more information:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name='helloworld')\n app.debug = True\n\n\nThe ``app.debug = True`` enables debugging for your app.\nSave this file and redeploy your changes::\n\n $ chalice deploy\n ...\n https://endpoint/api/\n\nNow, when you request the same URL that returned an internal\nserver error, you'll get back the original stack trace::\n\n $ http https://endpoint/api/cities/vancouver\n Traceback (most recent call last):\n File \"/var/task/chalice/app.py\", line 304, in _get_view_function_response\n response = view_function(*function_args)\n File \"/var/task/app.py\", line 18, in state_of_city\n return {'state': CITIES_TO_STATE[city]}\n KeyError: u'vancouver'\n\n\nWe can see that the error is caused from an uncaught ``KeyError`` resulting\nfrom trying to access the ``vancouver`` key.\n\nNow that we know the error, we can fix our code. What we'd like to do is\ncatch this exception and instead return a more helpful error message\nto the user. Here's the updated code:\n\n.. code-block:: python\n\n from chalice import BadRequestError\n\n @app.route('/cities/{city}')\n def state_of_city(city):\n try:\n return {'state': CITIES_TO_STATE[city]}\n except KeyError:\n raise BadRequestError(\"Unknown city '%s', valid choices are: %s\" % (\n city, ', '.join(CITIES_TO_STATE.keys())))\n\n\nSave and deploy these changes::\n\n $ chalice deploy\n $ http https://endpoint/api/cities/vancouver\n HTTP/1.1 400 Bad Request\n\n {\n \"Code\": \"BadRequestError\",\n \"Message\": \"Unknown city 'vancouver', valid choices are: portland, seattle\"\n }\n\nWe can see now that we have received a ``Code`` and ``Message`` key, with the message\nbeing the value we passed to ``BadRequestError``. Whenever you raise\na ``BadRequestError`` from your view function, the framework will return an\nHTTP status code of 400 along with a JSON body with a ``Code`` and ``Message``.\nThere are a few additional exceptions you can raise from your python code::\n\n* BadRequestError - return a status code of 400\n* UnauthorizedError - return a status code of 401\n* ForbiddenError - return a status code of 403\n* NotFoundError - return a status code of 404\n* ConflictError - return a status code of 409\n* UnprocessableEntityError - return a status code of 422\n* TooManyRequestsError - return a status code of 429\n* ChaliceViewError - return a status code of 500\n\nYou can import these directly from the ``chalice`` package:\n\n.. code-block:: python\n\n from chalice import UnauthorizedError\n\n\nTutorial: Additional Routing\n============================\n\nSo far, our examples have only allowed GET requests.\nIt's actually possible to support additional HTTP methods.\nHere's an example of a view function that supports PUT:\n\n.. code-block:: python\n\n @app.route('/resource/{value}', methods=['PUT'])\n def put_test(value):\n return {\"value\": value}\n\nWe can test this method using the ``http`` command::\n\n $ http PUT https://endpoint/api/resource/foo\n HTTP/1.1 200 OK\n\n {\n \"value\": \"foo\"\n }\n\nNote that the ``methods`` kwarg accepts a list of methods. Your view function\nwill be called when any of the HTTP methods you specify are used for the\nspecified resource. For example:\n\n.. code-block:: python\n\n @app.route('/myview', methods=['POST', 'PUT'])\n def myview():\n pass\n\nThe above view function will be called when either an HTTP POST or\nPUT is sent to ``/myview``.\n\nAlternatively if you do not want to share the same view function across\nmultiple HTTP methods for the same route url, you may define separate view\nfunctions to the same route url but have the view functions differ by\nHTTP method. For example:\n\n.. code-block:: python\n\n @app.route('/myview', methods=['POST'])\n def myview_post():\n pass\n\n @app.route('/myview', methods=['PUT'])\n def myview_put():\n pass\n\nThis setup will route all HTTP POST's to ``/myview`` to the ``myview_post()``\nview function and route all HTTP PUT's to ``/myview`` to the ``myview_put()``\nview function. It is also important to note that the view functions\n**must** have unique names. For example, both view functions cannot be\nnamed ``myview()``.\n\nIn the next section we'll go over how you can introspect the given request\nin order to differentiate between various HTTP methods.\n\n\nTutorial: Request Metadata\n==========================\n\nIn the examples above, you saw how to create a view function that supports\nan HTTP PUT request as well as a view function that supports both POST and\nPUT via the same view function. However, there's more information we\nmight need about a given request:\n\n* In a PUT/POST, you frequently send a request body. We need some\n way of accessing the contents of the request body.\n* For view functions that support multiple HTTP methods, we'd like\n to detect which HTTP method was used so we can have different\n code paths for PUTs vs. POSTs.\n\nAll of this and more is handled by the current request object that the\n``chalice`` library makes available to each view function when it's called.\n\nLet's see an example of this. Suppose we want to create a view function\nthat allowed you to PUT data to an object and retrieve that data\nvia a corresponding GET. We could accomplish that with the\nfollowing view function:\n\n.. code-block:: python\n\n from chalice import NotFoundError\n\n OBJECTS = {\n }\n\n @app.route('/objects/{key}', methods=['GET', 'PUT'])\n def myobject(key):\n request = app.current_request\n if request.method == 'PUT':\n OBJECTS[key] = request.json_body\n elif request.method == 'GET':\n try:\n return {key: OBJECTS[key]}\n except KeyError:\n raise NotFoundError(key)\n\n\nSave this in your ``app.py`` file and rerun ``chalice deploy``.\nNow, you can make a PUT request to ``/objects/your-key`` with a request\nbody, and retrieve the value of that body by making a subsequent\n``GET`` request to the same resource. Here's an example of its usage::\n\n # First, trying to retrieve the key will return a 404.\n $ http GET https://endpoint/api/objects/mykey\n HTTP/1.1 404 Not Found\n\n {\n \"Code\": \"NotFoundError\",\n \"Message\": \"mykey\"\n }\n\n # Next, we'll create that key by sending a PUT request.\n $ echo '{\"foo\": \"bar\"}' | http PUT https://endpoint/api/objects/mykey\n HTTP/1.1 200 OK\n\n null\n\n # And now we no longer get a 404, we instead get the value we previously\n # put.\n $ http GET https://endpoint/api/objects/mykey\n HTTP/1.1 200 OK\n\n {\n \"mykey\": {\n \"foo\": \"bar\"\n }\n }\n\nYou might see a problem with storing the objects in a module level\n``OBJECTS`` variable. We address this in the next section.\n\nThe ``app.current_request`` object also has the following properties.\n\n* ``current_request.query_params`` - A dict of the query params for the request.\n* ``current_request.headers`` - A dict of the request headers.\n* ``current_request.uri_params`` - A dict of the captured URI params.\n* ``current_request.method`` - The HTTP method (as a string).\n* ``current_request.json_body`` - The parsed JSON body (``json.loads(raw_body)``)\n* ``current_request.raw_body`` - The raw HTTP body as bytes.\n* ``current_request.context`` - A dict of additional context information\n* ``current_request.stage_vars`` - Configuration for the API Gateway stage\n\nDon't worry about the ``context`` and ``stage_vars`` for now. We haven't\ndiscussed those concepts yet. The ``current_request`` object also\nhas a ``to_dict`` method, which returns all the information about the\ncurrent request as a dictionary. Let's use this method to write a view\nfunction that returns everything it knows about the request:\n\n.. code-block:: python\n\n @app.route('/introspect')\n def introspect():\n return app.current_request.to_dict()\n\n\nSave this to your ``app.py`` file and redeploy with ``chalice deploy``.\nHere's an example of hitting the ``/introspect`` URL. Note how we're\nsending a query string as well as a custom ``X-TestHeader`` header::\n\n\n $ http 'https://endpoint/api/introspect?query1=value1&query2=value2' 'X-TestHeader: Foo'\n HTTP/1.1 200 OK\n\n {\n \"context\": {\n \"apiId\": \"apiId\",\n \"httpMethod\": \"GET\",\n \"identity\": {\n \"accessKey\": null,\n \"accountId\": null,\n \"apiKey\": null,\n \"caller\": null,\n \"cognitoAuthenticationProvider\": null,\n \"cognitoAuthenticationType\": null,\n \"cognitoIdentityId\": null,\n \"cognitoIdentityPoolId\": null,\n \"sourceIp\": \"1.1.1.1\",\n \"userAgent\": \"HTTPie/0.9.3\",\n \"userArn\": null\n },\n \"requestId\": \"request-id\",\n \"resourceId\": \"resourceId\",\n \"resourcePath\": \"/introspect\",\n \"stage\": \"dev\"\n },\n \"headers\": {\n \"accept\": \"*/*\",\n ...\n \"x-testheader\": \"Foo\"\n },\n \"method\": \"GET\",\n \"query_params\": {\n \"query1\": \"value1\",\n \"query2\": \"value2\"\n },\n \"raw_body\": null,\n \"stage_vars\": null,\n \"uri_params\": null\n }\n\n\nTutorial: Request Content Types\n===============================\n\nThe default behavior of a view function supports\na request body of ``application/json``. When a request is\nmade with a ``Content-Type`` of ``application/json``, the\n``app.current_request.json_body`` attribute is automatically\nset for you. This value is the parsed JSON body.\n\nYou can also configure a view function to support other\ncontent types. You can do this by specifying the\n``content_types`` parameter value to your ``app.route``\nfunction. This parameter is a list of acceptable content\ntypes. Here's an example of this feature:\n\n.. code-block:: python\n\n import sys\n\n from chalice import Chalice\n if sys.version_info[0] == 3:\n # Python 3 imports.\n from urllib.parse import urlparse, parse_qs\n else:\n # Python 2 imports.\n from urlparse import urlparse, parse_qs\n\n\n app = Chalice(app_name='helloworld')\n\n\n @app.route('/', methods=['POST'],\n content_types=['application/x-www-form-urlencoded'])\n def index():\n parsed = parse_qs(app.current_request.raw_body.decode())\n return {\n 'states': parsed.get('states', [])\n }\n\nThere's a few things worth noting in this view function.\nFirst, we've specified that we only accept the\n``application/x-www-form-urlencoded`` content type. If we\ntry to send a request with ``application/json``, we'll now\nget a ``415 Unsupported Media Type`` response::\n\n $ http POST https://endpoint/api/ states=WA states=CA --debug\n ...\n >>> requests.request(**{'allow_redirects': False,\n 'headers': {'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...\n\n\n HTTP/1.1 415 Unsupported Media Type\n\n {\n \"message\": \"Unsupported Media Type\"\n }\n\nIf we use the ``--form`` argument, we can see the\nexpected behavior of this view function because ``httpie`` sets the\n``Content-Type`` header to ``application/x-www-form-urlencoded``::\n\n $ http --form POST https://endpoint/api/formtest states=WA states=CA --debug\n ...\n >>> requests.request(**{'allow_redirects': False,\n 'headers': {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n ...\n\n HTTP/1.1 200 OK\n {\n \"states\": [\n \"WA\",\n \"CA\"\n ]\n }\n\nThe second thing worth noting is that ``app.current_request.json_body``\n**is only available for the application/json content type.**\nIn our example above, we used ``app.current_request.raw_body`` to access\nthe raw body bytes:\n\n.. code-block:: python\n\n parsed = parse_qs(app.current_request.raw_body)\n\n``app.current_request.json_body`` is set to ``None`` whenever the\n``Content-Type`` is not ``application/json``. This means that\nyou will need to use ``app.current_request.raw_body`` and parse\nthe request body as needed.\n\n\nTutorial: Customizing the HTTP Response\n=======================================\n\nThe return value from a chalice view function is serialized as JSON as the\nresponse body returned back to the caller. This makes it easy to create\nrest APIs that return JSON response bodies.\n\nChalice allows you to control this behavior by returning an instance of\na chalice specific ``Response`` class. This behavior allows you to:\n\n* Specify the status code to return\n* Specify custom headers to add to the response\n* Specify response bodies that are not ``application/json``\n\nHere's an example of this:\n\n.. code-block:: python\n\n from chalice import Chalice, Response\n\n app = Chalice(app_name='custom-response')\n\n\n @app.route('/')\n def index():\n return Response(body='hello world!',\n status_code=200,\n headers={'Content-Type': 'text/plain'})\n\nThis will result in a plain text response body::\n\n $ http https://endpoint/api/\n HTTP/1.1 200 OK\n Content-Length: 12\n Content-Type: text/plain\n\n hello world!\n\n\nTutorial: GZIP compression for json\n===================================\nThe return value from a chalice view function is serialized as JSON as the\nresponse body returned back to the caller. This makes it easy to create\nrest APIs that return JSON response bodies.\n\nChalice allows you to control this behavior by returning an instance of\na chalice specific ``Response`` class. This behavior allows you to:\n\n* Add ``application/json`` to binary_types\n* Specify the status code to return\n* Specify custom header ``Content-Type: application/json``\n* Specify custom header ``Content-Encoding: gzip``\n\nHere's an example of this:\n\n.. code-block:: python\n\n import json\n import gzip\n from chalice import Chalice, Response\n\n app = Chalice(app_name='compress-response')\n app.api.binary_types.append('application/json')\n\n @app.route('/')\n def index():\n blob = json.dumps({'hello': 'world'}).encode('utf-8')\n payload = gzip.compress(blob)\n custom_headers = {\n 'Content-Type': 'application/json',\n 'Content-Encoding': 'gzip'\n }\n return Response(body=payload,\n status_code=200,\n headers=custom_headers)\n\n\n\nTutorial: CORS Support\n======================\n\nYou can specify whether a view supports CORS by adding the\n``cors=True`` parameter to your ``@app.route()`` call. By\ndefault this value is false:\n\n.. code-block:: python\n\n @app.route('/supports-cors', methods=['PUT'], cors=True)\n def supports_cors():\n return {}\n\n\nSettings ``cors=True`` has similar behavior to enabling CORS\nusing the AWS Console. This includes:\n\n* Injecting the ``Access-Control-Allow-Origin: *`` header to your\n responses, including all error responses you can return.\n* Automatically adding an ``OPTIONS`` method to support preflighting\n requests.\n\nThe preflight request will return a response that includes:\n\n* ``Access-Control-Allow-Origin: *``\n* The ``Access-Control-Allow-Methods`` header will return a list of all HTTP\n methods you've called out in your view function. In the example above,\n this will be ``PUT,OPTIONS``.\n* ``Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,\n X-Api-Key,X-Amz-Security-Token``.\n\nIf more fine grained control of the CORS headers is desired, set the ``cors``\nparameter to an instance of ``CORSConfig`` instead of ``True``. The\n``CORSConfig`` object can be imported from from the ``chalice`` package it's\nconstructor takes the following keyword arguments that map to CORS headers:\n\n================= ==== ================================\nArgument Type Header\n================= ==== ================================\nallow_origin str Access-Control-Allow-Origin\nallow_headers list Access-Control-Allow-Headers\nexpose_headers list Access-Control-Expose-Headers\nmax_age int Access-Control-Max-Age\nallow_credentials bool Access-Control-Allow-Credentials\n================= ==== ================================\n\nCode sample defining more CORS headers:\n\n.. code-block:: python\n\n from chalice import CORSConfig\n cors_config = CORSConfig(\n allow_origin='https://foo.example.com',\n allow_headers=['X-Special-Header'],\n max_age=600,\n expose_headers=['X-Special-Header'],\n allow_credentials=True\n )\n @app.route('/custom-cors', methods=['GET'], cors=cors_config)\n def supports_custom_cors():\n return {'cors': True}\n\n\nThere's a couple of things to keep in mind when enabling cors for a view:\n\n* An ``OPTIONS`` method for preflighting is always injected. Ensure that\n you don't have ``OPTIONS`` in the ``methods=[...]`` list of your\n view function.\n* Even though the ``Access-Control-Allow-Origin`` header can be set to a\n string that is a space separated list of origins, this behavior does not\n work on all clients that implement CORS. You should only supply a single\n origin to the ``CORSConfig`` object. If you need to supply multiple origins\n you will need to define a custom handler for it that accepts ``OPTIONS``\n requests and matches the ``Origin`` header against a whitelist of origins.\n If the match is successful then return just their ``Origin`` back to them\n in the ``Access-Control-Allow-Origin`` header.\n\n Example:\n\n.. code-block:: python\n\n from chalice import Chalice, Response\n\n app = Chalice(app_name='multipleorigincors')\n\n _ALLOWED_ORIGINS = set([\n\t'http://allowed1.example.com',\n\t'http://allowed2.example.com',\n ])\n\n\n @app.route('/cors_multiple_origins', methods=['GET', 'OPTIONS'])\n def supports_cors_multiple_origins():\n\tmethod = app.current_request.method\n\tif method == 'OPTIONS':\n\t headers = {\n\t\t'Access-Control-Allow-Method': 'GET,OPTIONS',\n\t\t'Access-Control-Allow-Origin': ','.join(_ALLOWED_ORIGINS),\n\t\t'Access-Control-Allow-Headers': 'X-Some-Header',\n\t }\n\t origin = app.current_request.headers.get('origin', '')\n\t if origin in _ALLOWED_ORIGINS:\n\t\theaders.update({'Access-Control-Allow-Origin': origin})\n\t return Response(\n\t\tbody=None,\n\t\theaders=headers,\n\t )\n\telif method == 'GET':\n\t return 'Foo'\n\n* Every view function must explicitly enable CORS support.\n\nThe last point will change in the future. See\n`this issue\n`_\nfor more information.\n\n\nTutorial: Policy Generation\n===========================\n\nIn the previous section we created a basic rest API that\nallowed you to store JSON objects by sending the JSON\nin the body of an HTTP PUT request to ``/objects/{name}``.\nYou could then retrieve objects by sending a GET request to\n``/objects/{name}``.\n\nHowever, there's a problem with the code we wrote:\n\n.. code-block:: python\n\n OBJECTS = {\n }\n\n @app.route('/objects/{key}', methods=['GET', 'PUT'])\n def myobject(key):\n request = app.current_request\n if request.method == 'PUT':\n OBJECTS[key] = request.json_body\n elif request.method == 'GET':\n try:\n return {key: OBJECTS[key]}\n except KeyError:\n raise NotFoundError(key)\n\n\nWe're storing the key value pairs in a module level ``OBJECTS``\nvariable. We can't rely on local storage like this persisting\nacross requests.\n\nA better solution would be to store this information in Amazon S3.\nTo do this, we're going to use boto3, the AWS SDK for Python.\nFirst, install boto3::\n\n $ pip install boto3\n\nNext, add ``boto3`` to your requirements.txt file::\n\n $ echo 'boto3==1.3.1' >> requirements.txt\n\nThe requirements.txt file should be in the same directory that contains\nyour ``app.py`` file. Next, let's update our view code to use boto3:\n\n.. code-block:: python\n\n import json\n import boto3\n from botocore.exceptions import ClientError\n\n from chalice import NotFoundError\n\n\n S3 = boto3.client('s3', region_name='us-west-2')\n BUCKET = 'your-bucket-name'\n\n\n @app.route('/objects/{key}', methods=['GET', 'PUT'])\n def s3objects(key):\n request = app.current_request\n if request.method == 'PUT':\n S3.put_object(Bucket=BUCKET, Key=key,\n Body=json.dumps(request.json_body))\n elif request.method == 'GET':\n try:\n response = S3.get_object(Bucket=BUCKET, Key=key)\n return json.loads(response['Body'].read())\n except ClientError as e:\n raise NotFoundError(key)\n\nMake sure to change ``BUCKET`` with the name of an S3 bucket\nyou own. Redeploy your changes with ``chalice deploy``.\nNow, whenever we make a ``PUT`` request to ``/objects/keyname``, the\ndata send will be stored in S3. Any subsequent ``GET`` requests will\nretrieve this data from S3.\n\nManually Providing Policies\n---------------------------\n\n\nIAM permissions can be auto generated, provided manually or can be\npre-created and explicitly configured. To use a\npre-configured IAM role ARN for chalice, add these two keys to your\nchalice configuration. Setting manage_iam_role to false tells\nChalice to not attempt to generate policies and create IAM role.\n\n::\n\n \"manage_iam_role\":false\n \"iam_role_arn\":\"arn:aws:iam:::role/\"\n\nWhenever your application is deployed using ``chalice``, the\nauto generated policy is written to disk at\n``/.chalice/policy.json``. When you run the\n``chalice deploy`` command, you can also specify the\n``--no-autogen-policy`` option. Doing so will result in the\n``chalice`` CLI loading the ``/.chalice/policy.json``\nfile and using that file as the policy for the IAM role.\nYou can manually edit this file and specify ``--no-autogen-policy``\nif you'd like to have full control over what IAM policy to associate\nwith the IAM role.\n\nYou can also run the ``chalice gen-policy`` command from your project\ndirectory to print the auto generated policy to stdout. You can\nthen use this as a starting point for your policy.\n\n::\n\n $ chalice gen-policy\n {\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"s3:ListAllMyBuckets\"\n ],\n \"Resource\": [\n \"*\"\n ],\n \"Effect\": \"Allow\",\n \"Sid\": \"9155de6ad1d74e4c8b1448255770e60c\"\n }\n ]\n }\n\nExperimental Status\n-------------------\n\nThe automatic policy generation is still in the early stages, it should\nbe considered experimental. You can always disable policy\ngeneration with ``--no-autogen-policy`` for complete control.\n\nAdditionally, you will be prompted for confirmation whenever the\nauto policy generator detects actions that it would like to add or remove::\n\n\n $ chalice deploy\n Updating IAM policy.\n\n The following action will be added to the execution policy:\n\n s3:ListBucket\n\n Would you like to continue? [Y/n]:\n\n\nTutorial: Using Custom Authentication\n=====================================\n\nAWS API Gateway routes can be authenticated in multiple ways:\n\n- API Key\n- AWS IAM\n- Cognito User Pools\n- Custom Auth Handler\n\nAPI Key\n-------\n\n.. code-block:: python\n\n @app.route('/authenticated', methods=['GET'], api_key_required=True)\n def authenticated():\n return {\"secure\": True}\n\nOnly requests sent with a valid `X-Api-Key` header will be accepted.\n\nUsing AWS IAM\n-------------\n\n.. code-block:: python\n\n authorizer = IAMAuthorizer()\n\n @app.route('/iam-role', methods=['GET'], authorizer=authorizer)\n def authenticated():\n return {\"secure\": True}\n\n\nUsing Amazon Cognito User Pools\n-------------------------------\n\nTo integrate with cognito user pools, you can use the\n``CognitoUserPoolAuthorizer`` object:\n\n.. code-block:: python\n\n authorizer = CognitoUserPoolAuthorizer(\n 'MyPool', header='Authorization',\n provider_arns=['arn:aws:cognito:...:userpool/name'])\n\n @app.route('/user-pools', methods=['GET'], authorizer=authorizer)\n def authenticated():\n return {\"secure\": True}\n\n\nNote, earlier versions of chalice also have an ``app.define_authorizer``\nmethod as well as an ``authorizer_name`` argument on the ``@app.route(...)``\nmethod. This approach is deprecated in favor of ``CognitoUserPoolAuthorizer``\nand the ``authorizer`` argument in the ``@app.route(...)`` method.\n``app.define_authorizer`` will be removed in future versions of chalice.\n\n\nUsing Custom Authorizers\n------------------------\n\nTo integrate with custom authorizers, you can use the ``CustomAuthorizer`` method\non the ``app`` object. You'll need to set the ``authorizer_uri``\nto the URI of your lambda function.\n\n.. code-block:: python\n\n authorizer = CustomAuthorizer(\n 'MyCustomAuth', header='Authorization',\n authorizer_uri=('arn:aws:apigateway:region:lambda:path/2015-03-31'\n '/functions/arn:aws:lambda:region:account-id:'\n 'function:FunctionName/invocations'))\n\n @app.route('/custom-auth', methods=['GET'], authorizer=authorizer)\n def authenticated():\n return {\"secure\": True}\n\n\nTutorial: Local Mode\n====================\n\nAs you develop your application, you may want to experiment locally before\ndeploying your changes. You can use ``chalice local`` to spin up a local\nHTTP server you can use for testing.\n\nFor example, if we have the following ``app.py`` file:\n\n.. code-block:: python\n\n from chalice import Chalice\n\n app = Chalice(app_name='helloworld')\n\n\n @app.route('/')\n def index():\n return {'hello': 'world'}\n\n\nWe can run ``chalice local`` to test this API locally::\n\n\n $ chalice local\n Serving on localhost:8000\n\nWe can override the port using::\n\n $ chalice local --port=8080\n\nWe can now test our API using ``localhost:8000``::\n\n $ http localhost:8000/\n HTTP/1.0 200 OK\n Content-Length: 18\n Content-Type: application/json\n Date: Thu, 27 Oct 2016 20:08:43 GMT\n Server: BaseHTTP/0.3 Python/2.7.11\n\n {\n \"hello\": \"world\"\n }\n\n\nThe ``chalice local`` command *does not* assume the\nrole associated with your lambda function, so you'll\nneed to use an ``AWS_PROFILE`` that has sufficient permissions\nto your AWS resources used in your ``app.py``.\n\n\nDeleting Your App\n=================\n\nYou can use the ``chalice delete`` command to delete your app.\nSimilar to the ``chalice deploy`` command, you can specify which\nchalice stage to delete. By default it will delete the ``dev`` stage::\n\n $ chalice delete --stage dev\n Deleting Rest API: duvw4kwyl3\n Deleting function aws:arn:lambda:region:123456789:helloworld-dev\n Deleting IAM Role helloworld-dev\n\n.. quick-start-end\n\nFeedback\n========\n\nWe'also love to hear from you. Please create any Github issues for\nadditional features you'd like to see over at\nhttps://github.com/aws/chalice/issues. You can also chat with us\non gitter: https://gitter.im/awslabs/chalice\n\n\nFAQ\n===\n\n\n**Q: How does the Python Serverless Microframework for AWS compare to other\nsimilar frameworks?**\n\nThe biggest difference between this framework and others is that the Python\nServerless Microframework for AWS is singularly focused on using a familiar,\ndecorator-based API to write python applications that run on Amazon API Gateway\nand AWS Lambda. You can think of it as\n`Flask `__/`Bottle `__\nfor serverless APIs. Its goal is to make writing and deploying these types of\napplications as simple as possible specifically for Python developers.\n\nTo achieve this goal, it has to make certain tradeoffs. Python will always\nremain the only supported language in this framework. Not every feature of API\nGateway and Lambda is exposed in the framework. It makes assumptions about how\napplications will be deployed, and it has restrictions on how an application\ncan be structured. It does not address the creation and lifecycle of other AWS\nresources your application may need (Amazon S3 buckets, Amazon DynamoDB tables,\netc.). The feature set is purposefully small.\n\nOther full-stack frameworks offer a lot more features and configurability than\nwhat this framework has and likely will ever have. Those frameworks are\nexcellent choices for applications that need more than what is offered by this\nmicroframework. If all you need is to create a simple rest API in Python that\nruns on Amazon API Gateway and AWS Lambda, consider giving the Python\nServerless Microframework for AWS a try.\n\nRelated Projects\n----------------\n\n* `serverless `__ - Build applications\n comprised of microservices that run in response to events, auto-scale for\n you, and only charge you when they run.\n* `Zappa `__ - Deploy python WSGI applications\n on AWS Lambda and API Gateway.\n* `claudia `__ - Deploy node.js projects\n to AWS Lambda and API Gateway.\n* `Domovoi `_ - An extension to Chalice that\n handles a variety of AWS Lambda event sources such as SNS push notifications,\n S3 events, and Step Functions state machines.\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/aws/chalice",
"keywords": "chalice",
"license": "Apache License 2.0",
"maintainer": "",
"maintainer_email": "",
"name": "chalice",
"package_url": "https://pypi.org/project/chalice/",
"platform": "",
"project_url": "https://pypi.org/project/chalice/",
"project_urls": {
"Homepage": "https://github.com/aws/chalice"
},
"release_url": "https://pypi.org/project/chalice/1.12.0/",
"requires_dist": [
"attrs (>=17.4.0,<20.0.0)",
"botocore (>=1.12.86,<2.0.0)",
"click (<8.0,>=6.6)",
"enum-compat (>=0.0.2)",
"jmespath (<1.0.0,>=0.9.3)",
"pip (<19.4,>=9)",
"setuptools",
"six (>=1.10.0,<2.0.0)",
"wheel",
"typing (==3.6.4); python_version < \"3.7\"",
"watchdog (==0.8.3); extra == 'event-file-poller'"
],
"requires_python": "",
"summary": "Microframework",
"version": "1.12.0"
},
"last_serial": 5979518,
"releases": {
"0.0.1": [
{
"comment_text": "",
"digests": {
"md5": "7d09f0a51f3ba221359a75193c9f2a84",
"sha256": "8044310d79205f08db498729b872a461c4b66b373943a811dfc9fd6d298325e0"
},
"downloads": -1,
"filename": "chalice-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "7d09f0a51f3ba221359a75193c9f2a84",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 49336,
"upload_time": "2016-07-11T20:15:43",
"url": "https://files.pythonhosted.org/packages/00/9e/89ebcfff1c5b40043df14c72cf30ebb74a277b3f605c35409b08a2b63465/chalice-0.0.1.tar.gz"
}
],
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "ad8e515d5d75a973913e439de2a80526",
"sha256": "9cb64815dfb63dfa2e0a9a1647af3678733f37b7af214a0fdf76a288fab22de0"
},
"downloads": -1,
"filename": "chalice-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "ad8e515d5d75a973913e439de2a80526",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 52659,
"upload_time": "2016-08-04T23:54:16",
"url": "https://files.pythonhosted.org/packages/69/0b/3a79bdee047c6e091e4f563e1b31b41230db7409e523f85cd1e395dcecbd/chalice-0.1.0.tar.gz"
}
],
"0.10.0": [
{
"comment_text": "",
"digests": {
"md5": "5a6f41d2d7431d533cb587838d01f2ae",
"sha256": "ac2fafcf0e17de4787618e74b087305a2dcee68d4e7bc3acc6b65e83e543ac5a"
},
"downloads": -1,
"filename": "chalice-0.10.0.tar.gz",
"has_sig": false,
"md5_digest": "5a6f41d2d7431d533cb587838d01f2ae",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 103231,
"upload_time": "2017-06-22T01:42:24",
"url": "https://files.pythonhosted.org/packages/fa/53/c243ed4dc868b20a49bfa27674121004d4e54797ebfb756d73ab3d9cd007/chalice-0.10.0.tar.gz"
}
],
"0.10.1": [
{
"comment_text": "",
"digests": {
"md5": "464f8eb8717495b53b17dc28ec7c077f",
"sha256": "5c6633204ca26e2e7405b2088eba201db46bdd2c20d1f8c56b6eb60c64dd9bb0"
},
"downloads": -1,
"filename": "chalice-0.10.1.tar.gz",
"has_sig": false,
"md5_digest": "464f8eb8717495b53b17dc28ec7c077f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 103864,
"upload_time": "2017-06-26T23:18:29",
"url": "https://files.pythonhosted.org/packages/2d/70/cee79c117467c6263e961514397359b18d3b45a7518119587c676a644c48/chalice-0.10.1.tar.gz"
}
],
"0.2.0": [
{
"comment_text": "",
"digests": {
"md5": "10baccebd5753958cb4703d592d1df8a",
"sha256": "d4b92aeab8fcf26769cbb301aca3bdf7d200bfdee5202936e99442fa2ab6f80d"
},
"downloads": -1,
"filename": "chalice-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "10baccebd5753958cb4703d592d1df8a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 59171,
"upload_time": "2016-09-28T00:14:49",
"url": "https://files.pythonhosted.org/packages/a8/9d/7c73a09f589fc646affba49c92e86c70605c3bc5bbbb47282ca7d9023134/chalice-0.2.0.tar.gz"
}
],
"0.3.0": [
{
"comment_text": "",
"digests": {
"md5": "7aa79cf0c7fdca6c600b9dc011cf985f",
"sha256": "37ba91e17c58cadc2f6374e55793e340df3f1d122bccd42829665399928a1ebb"
},
"downloads": -1,
"filename": "chalice-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "7aa79cf0c7fdca6c600b9dc011cf985f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 75691,
"upload_time": "2016-10-13T19:13:20",
"url": "https://files.pythonhosted.org/packages/6c/ad/a5d1c14f43dfc26e4cdfa0bd65f1b0470184b5923955dd4c0bb97ab3a167/chalice-0.3.0.tar.gz"
}
],
"0.4.0": [
{
"comment_text": "",
"digests": {
"md5": "fe8ca86b32d09f70f2916182aee96a1f",
"sha256": "75e7555963fbc8768f599e40371f5e26d88207af14ad631b47bd48a3f0c6308a"
},
"downloads": -1,
"filename": "chalice-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "fe8ca86b32d09f70f2916182aee96a1f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 82529,
"upload_time": "2016-11-01T19:18:48",
"url": "https://files.pythonhosted.org/packages/24/32/4d389f11035a3dfc9b750d9010a3421b29cac69c005cb8357ee594922ba3/chalice-0.4.0.tar.gz"
}
],
"0.5.0": [
{
"comment_text": "",
"digests": {
"md5": "f2a6ef7d9535dd32fa4f71c796cbba9c",
"sha256": "1788eabd8d32e596d036fca118558df0c850909014782cbc96a66b16e5798bdb"
},
"downloads": -1,
"filename": "chalice-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "f2a6ef7d9535dd32fa4f71c796cbba9c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 86507,
"upload_time": "2016-11-28T19:09:59",
"url": "https://files.pythonhosted.org/packages/b4/3e/369bf1cf3666ecb2a948c2cb25c3665aa0f43fe41bbb60853ecd55814a04/chalice-0.5.0.tar.gz"
}
],
"0.5.1": [
{
"comment_text": "",
"digests": {
"md5": "64bf8cb290ae54a86f86334e7989141e",
"sha256": "84407bd6f58270376c03e2041af60447ebc1652806395a043d10cc1059e3b5b5"
},
"downloads": -1,
"filename": "chalice-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "64bf8cb290ae54a86f86334e7989141e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 89172,
"upload_time": "2017-01-05T21:17:14",
"url": "https://files.pythonhosted.org/packages/14/2f/e015d50950ce237a50e1b34af160de653227022754860c41e3f4b6f4f288/chalice-0.5.1.tar.gz"
}
],
"0.6.0": [
{
"comment_text": "",
"digests": {
"md5": "733c025088cd2180c46d6e89e4331c6e",
"sha256": "27260750e089c3fc3ebe0a5c1a1e5bf226cc19198ee4dbdf1216393fcd024364"
},
"downloads": -1,
"filename": "chalice-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "733c025088cd2180c46d6e89e4331c6e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 92296,
"upload_time": "2017-02-23T20:21:46",
"url": "https://files.pythonhosted.org/packages/90/0d/fca7065a2cd8c50272e21beb43fef34fde972432b842a865e706eee8ad81/chalice-0.6.0.tar.gz"
}
],
"0.7.0": [
{
"comment_text": "",
"digests": {
"md5": "d6c96102e78377c54a936ec35b674ad0",
"sha256": "2aba09996e4505c09b54bea77d935015c271905652a1ff9fedb9491d86d5d3c0"
},
"downloads": -1,
"filename": "chalice-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "d6c96102e78377c54a936ec35b674ad0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 98365,
"upload_time": "2017-04-05T06:51:37",
"url": "https://files.pythonhosted.org/packages/87/6f/ab1ccdc1202ac25789d95b407de8d3919c9011e08c0e83a8e781b85d4d51/chalice-0.7.0.tar.gz"
}
],
"0.8.0": [
{
"comment_text": "",
"digests": {
"md5": "08681f3bef1626c3e18f4704206b32c6",
"sha256": "48c79c0bdce922350525d0b08f17898abf9ae5db565945504e66b1bf23aef20a"
},
"downloads": -1,
"filename": "chalice-0.8.0.tar.gz",
"has_sig": false,
"md5_digest": "08681f3bef1626c3e18f4704206b32c6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 86212,
"upload_time": "2017-04-18T20:42:32",
"url": "https://files.pythonhosted.org/packages/46/b7/d1c8f3ef4dccd36d4618e94326a7ef8721c8bfaa1be61f3c871b7d063579/chalice-0.8.0.tar.gz"
}
],
"0.8.1": [
{
"comment_text": "",
"digests": {
"md5": "de0e04c3c6b2755ce35cb81e3eb539ea",
"sha256": "ae0225a652300135bc5769beccde9d8155e97f853b9faed3292a6ae9b56e7e25"
},
"downloads": -1,
"filename": "chalice-0.8.1.tar.gz",
"has_sig": false,
"md5_digest": "de0e04c3c6b2755ce35cb81e3eb539ea",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 90672,
"upload_time": "2017-05-02T17:46:27",
"url": "https://files.pythonhosted.org/packages/c5/c8/823f3093a7a27e7022f4b4d326bf6e54c57da30c97a761fb099b26cada7a/chalice-0.8.1.tar.gz"
}
],
"0.8.2": [
{
"comment_text": "",
"digests": {
"md5": "d49af53f06a46ea757822570e8b3c967",
"sha256": "a17003e8dbfd800bcced9b369c16fa4eeda06e147b247c594ce4bdffe7601e5a"
},
"downloads": -1,
"filename": "chalice-0.8.2.tar.gz",
"has_sig": false,
"md5_digest": "d49af53f06a46ea757822570e8b3c967",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 91809,
"upload_time": "2017-05-08T20:29:59",
"url": "https://files.pythonhosted.org/packages/95/d0/4e29ed521d98923fb8c24d9ccbb64a16bddac7dcaa1be373e3f9cf413514/chalice-0.8.2.tar.gz"
}
],
"0.9.0": [
{
"comment_text": "",
"digests": {
"md5": "9563741289400c28b862384c2208eca5",
"sha256": "c445902a2893bda1d111a84ed29ac684a886c04dd25eefed9ffdb291ebb60511"
},
"downloads": -1,
"filename": "chalice-0.9.0.tar.gz",
"has_sig": false,
"md5_digest": "9563741289400c28b862384c2208eca5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 96632,
"upload_time": "2017-05-31T00:43:20",
"url": "https://files.pythonhosted.org/packages/37/37/2e5936cd131fb17598d158e8d9e97a62c0c6b141e5abd004df6e2be4d759/chalice-0.9.0.tar.gz"
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "37bbd54f09620e80912cd6a27fa721e9",
"sha256": "3cbb220d797b6a1a3224b87954b0f777a8839b21d2127ec49bca9a7d0543c59b"
},
"downloads": -1,
"filename": "chalice-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "37bbd54f09620e80912cd6a27fa721e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 160953,
"upload_time": "2017-07-31T22:52:38",
"url": "https://files.pythonhosted.org/packages/a1/1a/1a222a7a3104c68a79fc27615cd6b6ece4f8cbc7540d4cdca20d84a985b5/chalice-1.0.0.tar.gz"
}
],
"1.0.0b1": [
{
"comment_text": "",
"digests": {
"md5": "938b3322212982457a0f782fb417cbcf",
"sha256": "b03b96420f20a4fb7a9c16f4e34acabbfeb48078b900673133b66fbf9d90efad"
},
"downloads": -1,
"filename": "chalice-1.0.0b1.tar.gz",
"has_sig": false,
"md5_digest": "938b3322212982457a0f782fb417cbcf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 156361,
"upload_time": "2017-07-05T23:01:12",
"url": "https://files.pythonhosted.org/packages/5b/67/9cf0e7e8f1abb5e62e3ceb9f95ef3a26989027256689174d9fa93a7b60e6/chalice-1.0.0b1.tar.gz"
}
],
"1.0.0b2": [
{
"comment_text": "",
"digests": {
"md5": "91b570de443e90e16f8ec714266d6c01",
"sha256": "cac9757cb004284614ed2a19268d8681314f617c86fc0b1766d719791e6b23ba"
},
"downloads": -1,
"filename": "chalice-1.0.0b2.tar.gz",
"has_sig": false,
"md5_digest": "91b570de443e90e16f8ec714266d6c01",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 160709,
"upload_time": "2017-07-26T23:55:10",
"url": "https://files.pythonhosted.org/packages/50/1f/66dddd979c37e43f741141b833c754b1534b075aa9d488b348b0deb235c3/chalice-1.0.0b2.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "5530ca29698118e03d226fd368a18bae",
"sha256": "d1154f6f1f9b0699062397c11d87dcff731942d74b49881e99d4863d2df64aab"
},
"downloads": -1,
"filename": "chalice-1.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5530ca29698118e03d226fd368a18bae",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 159120,
"upload_time": "2017-08-16T23:00:36",
"url": "https://files.pythonhosted.org/packages/e2/0b/219d002e1cc85d5f0e92ae4e000d46f46864dffb80c4637a3984b6fd2a3f/chalice-1.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "24b042efdbd5c0bc42c197bb13589de9",
"sha256": "499c6eaf7c81acbf143c4836017058e6ee6ae880ba55b55913ea8edcdb42afdc"
},
"downloads": -1,
"filename": "chalice-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "24b042efdbd5c0bc42c197bb13589de9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 163022,
"upload_time": "2017-08-16T23:00:33",
"url": "https://files.pythonhosted.org/packages/5e/1d/440fa64c4809f8fc0ed7787a9287d969afc5e434c893f3d21684ea6fc395/chalice-1.0.1.tar.gz"
}
],
"1.0.2": [
{
"comment_text": "",
"digests": {
"md5": "e7f43149691db80f01b4d7a22afaf021",
"sha256": "50dd33917dfec13e1b519eeb981cdcf38cfa160e1e2cbb9c0cfe4c4cf7b16237"
},
"downloads": -1,
"filename": "chalice-1.0.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "e7f43149691db80f01b4d7a22afaf021",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 167226,
"upload_time": "2017-09-05T20:12:25",
"url": "https://files.pythonhosted.org/packages/4f/22/01ffc01cfbde3f0fa490bdc494c537e30b79d90006b07de75a1124ab9df8/chalice-1.0.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "dd1acba96debd92ac2b5af810b62ef30",
"sha256": "337b5d3d927c42f40a45356271aa60a1679f9403a91bf4245e681b165c4042e0"
},
"downloads": -1,
"filename": "chalice-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "dd1acba96debd92ac2b5af810b62ef30",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 170864,
"upload_time": "2017-09-05T20:12:27",
"url": "https://files.pythonhosted.org/packages/22/72/8981c599171476c7dd835959b8a85643a5a939df74371ab8c1893aa83ef2/chalice-1.0.2.tar.gz"
}
],
"1.0.3": [
{
"comment_text": "",
"digests": {
"md5": "220c93398b1ead9e1db5a9246b74c60b",
"sha256": "0aabc962daddf6ae9f28c3c1e3ce5adbc42fcecd21a546ca5e1e071db2a7df09"
},
"downloads": -1,
"filename": "chalice-1.0.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "220c93398b1ead9e1db5a9246b74c60b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 183777,
"upload_time": "2017-09-27T20:41:19",
"url": "https://files.pythonhosted.org/packages/f0/a1/031601a7f3eb468075c87f934d2a2a3af524ad8ab3ee2d4c9221e57e63ca/chalice-1.0.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f90dba3716515097742c469eaecb287e",
"sha256": "508cabc8d4e3058a07cb408cb545eee927d8eb0d965e4c38159d65253c516674"
},
"downloads": -1,
"filename": "chalice-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "f90dba3716515097742c469eaecb287e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 187558,
"upload_time": "2017-09-27T20:41:22",
"url": "https://files.pythonhosted.org/packages/15/54/6cf6497286624568b4d53d7e67136e6a799b7eecc2ff67deac1ff54d5e41/chalice-1.0.3.tar.gz"
}
],
"1.0.4": [
{
"comment_text": "",
"digests": {
"md5": "f613f6ad600bd8343c73fef32414261b",
"sha256": "50b83b7f792502318a1d459584e72cc3ad9b70fe0ca1a242b44930009de2123b"
},
"downloads": -1,
"filename": "chalice-1.0.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f613f6ad600bd8343c73fef32414261b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 185312,
"upload_time": "2017-10-25T07:41:16",
"url": "https://files.pythonhosted.org/packages/9d/62/dbf2c27e9dc0eb28e6acdfe291711032d2c578afaf31216637d8e312460c/chalice-1.0.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "71416f574dbceba000a637e8f628ad97",
"sha256": "7d2e2ee3a83cb41b582effb381dd960dc7dea854702194a386e3cc752aec922d"
},
"downloads": -1,
"filename": "chalice-1.0.4.tar.gz",
"has_sig": false,
"md5_digest": "71416f574dbceba000a637e8f628ad97",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 189043,
"upload_time": "2017-10-25T07:41:19",
"url": "https://files.pythonhosted.org/packages/7c/13/538819ccc9aa31890054f5ed79d8e3931876e61b403d3b2d42a3026b15a3/chalice-1.0.4.tar.gz"
}
],
"1.1.0": [
{
"comment_text": "",
"digests": {
"md5": "1af7eb848be0bb11ea478a0d50ac329b",
"sha256": "d1b959817dc566d7e542e51f28d1f5b1bf0f079098584266600cb02591779c84"
},
"downloads": -1,
"filename": "chalice-1.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1af7eb848be0bb11ea478a0d50ac329b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 188768,
"upload_time": "2017-12-06T00:33:18",
"url": "https://files.pythonhosted.org/packages/e4/43/b24b3e258c40db584e12a87df0e336eed03bf635d2d9502ee713dfff783b/chalice-1.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "70b51ff904e713bb1037a1626acefd96",
"sha256": "4c757b76065a442d648db8dc1693f352d1e11dc6d6bded5c730ad489076044fe"
},
"downloads": -1,
"filename": "chalice-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "70b51ff904e713bb1037a1626acefd96",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 192726,
"upload_time": "2017-12-06T00:33:20",
"url": "https://files.pythonhosted.org/packages/ec/39/edd470aac01445da30e1c6889c730ad2d573f724b3826260d093db4e480a/chalice-1.1.0.tar.gz"
}
],
"1.1.1": [
{
"comment_text": "",
"digests": {
"md5": "a3d8405fe1eb501c12534cc59336a7c3",
"sha256": "02c88db62d4e9a175786c0c0041f21b0921351e506f3ee87ce5ff90ae5e89da6"
},
"downloads": -1,
"filename": "chalice-1.1.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a3d8405fe1eb501c12534cc59336a7c3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 190384,
"upload_time": "2018-02-27T01:22:12",
"url": "https://files.pythonhosted.org/packages/e6/00/42338dc4d87e5b3918d5ddacdcccc6b4acde706a033128321f96a1af699d/chalice-1.1.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b494d6e03ebf843d870fb462e4f6834e",
"sha256": "7e922f3afab7f36cb48b72ad358e41ac4f150f4bbd30db00ba93e8d0dc5e94a6"
},
"downloads": -1,
"filename": "chalice-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "b494d6e03ebf843d870fb462e4f6834e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 194127,
"upload_time": "2018-02-27T01:22:15",
"url": "https://files.pythonhosted.org/packages/c1/0b/ac7cc10f67a7d8de8ff1ecbf3c741159cb46f128770e27099f01cd83ae13/chalice-1.1.1.tar.gz"
}
],
"1.10.0": [
{
"comment_text": "",
"digests": {
"md5": "6d0e293af9c947aec85388d5f074f747",
"sha256": "90e5a7c9fbec7b33ce21aff406d568c02b3f44942f9de2f163da097a876f9f64"
},
"downloads": -1,
"filename": "chalice-1.10.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6d0e293af9c947aec85388d5f074f747",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 304136,
"upload_time": "2019-08-07T20:05:52",
"url": "https://files.pythonhosted.org/packages/e5/12/4de8ef03f6430939409cbdc1bb0f0a756eb21934f6aa0b2db5a5f515af69/chalice-1.10.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e007fc32ae5973b3be31ff84d5a1b305",
"sha256": "a8c97b9c5472c00569410216a681e5bb922cbc509d8199713c878437d969c002"
},
"downloads": -1,
"filename": "chalice-1.10.0.tar.gz",
"has_sig": false,
"md5_digest": "e007fc32ae5973b3be31ff84d5a1b305",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 300062,
"upload_time": "2019-08-07T20:05:55",
"url": "https://files.pythonhosted.org/packages/2d/0c/f809dbe4967911c1d34da2673cdb5e70b205ae65b9a7989a48584d0fe26e/chalice-1.10.0.tar.gz"
}
],
"1.11.0": [
{
"comment_text": "",
"digests": {
"md5": "9ef5dac1647cd61bcbfcdefbd2bbb6ad",
"sha256": "dfe1e7f9a3f7a4785b0c924fd21a646a6f2b804fef60125d057c2e3de46dcdcf"
},
"downloads": -1,
"filename": "chalice-1.11.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9ef5dac1647cd61bcbfcdefbd2bbb6ad",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 305884,
"upload_time": "2019-08-28T23:30:18",
"url": "https://files.pythonhosted.org/packages/b1/67/32c0ac21bf28a5856dbe6d8b0a1a8d18109f8e1168fcbedc93eee977a8f2/chalice-1.11.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "657318029f8f10dc03ec85c7b269f32e",
"sha256": "63c744df00446aaefff254fbb238d0aa245d9fb349a03aee5e2b2c4899496465"
},
"downloads": -1,
"filename": "chalice-1.11.0.tar.gz",
"has_sig": false,
"md5_digest": "657318029f8f10dc03ec85c7b269f32e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 301966,
"upload_time": "2019-08-28T23:30:21",
"url": "https://files.pythonhosted.org/packages/d6/48/58c8c1844d1c3718bfed3268b9c4224487538ab11c0914e142deb4803977/chalice-1.11.0.tar.gz"
}
],
"1.11.1": [
{
"comment_text": "",
"digests": {
"md5": "f8d92df0a9be06a78bbad3fc90d7eafa",
"sha256": "23e516a3aed811f9d7d56b1e52060f71791e0a11d0bddc7e19784d18c7276aa3"
},
"downloads": -1,
"filename": "chalice-1.11.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f8d92df0a9be06a78bbad3fc90d7eafa",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 306115,
"upload_time": "2019-09-17T21:59:35",
"url": "https://files.pythonhosted.org/packages/82/24/6eae56592a8888c96f3e6a75d14320c86d8f262de8d6978988f8026ad916/chalice-1.11.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e2959a27fdb2c8729109e899cac6ad52",
"sha256": "a2861ed6440e26254e9daff50d23e5d190e92e5e727b4deebea350a1884694cd"
},
"downloads": -1,
"filename": "chalice-1.11.1.tar.gz",
"has_sig": false,
"md5_digest": "e2959a27fdb2c8729109e899cac6ad52",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 302233,
"upload_time": "2019-09-17T21:59:38",
"url": "https://files.pythonhosted.org/packages/5f/4f/7b6e49788744d7c8f183d075a7c110ee462a28a54ea299c2dfd3fd2cefe6/chalice-1.11.1.tar.gz"
}
],
"1.12.0": [
{
"comment_text": "",
"digests": {
"md5": "43719f75d4ed77350ba59587dc0e0d6b",
"sha256": "1a8d937a91564318d50d1247fa50fb386d1c003fe39bd3e89a92e79d1aef95ed"
},
"downloads": -1,
"filename": "chalice-1.12.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "43719f75d4ed77350ba59587dc0e0d6b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 307435,
"upload_time": "2019-10-15T20:42:12",
"url": "https://files.pythonhosted.org/packages/a9/90/5358f8b1e3739c544d2b03ecfd67d9a7681f7dfa519df4c7763475e5e0e3/chalice-1.12.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d1d26904a806726ce4ebc447b3c4b703",
"sha256": "f8f929f26df77285a202fb93174400230f8912c5b9c1fb061c7836a78413e325"
},
"downloads": -1,
"filename": "chalice-1.12.0.tar.gz",
"has_sig": false,
"md5_digest": "d1d26904a806726ce4ebc447b3c4b703",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 303842,
"upload_time": "2019-10-15T20:42:26",
"url": "https://files.pythonhosted.org/packages/19/e1/87317e61ae957a2772b3cc63c6a6b2822893a6c79a797907ec1f2cf171e6/chalice-1.12.0.tar.gz"
}
],
"1.2.0": [
{
"comment_text": "",
"digests": {
"md5": "1b392106bf21bc2e932e5ffacd072212",
"sha256": "968df4fa5a60645b2b99f74aa8eb6248dde11c373c00a8ad48a7ab44131c3a08"
},
"downloads": -1,
"filename": "chalice-1.2.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1b392106bf21bc2e932e5ffacd072212",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 210411,
"upload_time": "2018-04-06T19:30:29",
"url": "https://files.pythonhosted.org/packages/a9/e1/93b5320095b68692728d9b5469feec708d4f0df8c1617bc95dbe4a61ee90/chalice-1.2.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "7155fc5b45caca7cc18c5cf21bc29ccd",
"sha256": "5900982e47d52527a3df0c9fdfde1eb3f2656d1f679619fb5d7be8b5a31c16f9"
},
"downloads": -1,
"filename": "chalice-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "7155fc5b45caca7cc18c5cf21bc29ccd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 211893,
"upload_time": "2018-04-06T19:30:31",
"url": "https://files.pythonhosted.org/packages/00/2b/87a9ad51678bf4da134e434138f0f351fe9f6afdd08537e80b80adf1de8f/chalice-1.2.0.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "19ac84faf409d0e106313da9c0ff9404",
"sha256": "3d82e6408fc078354468cf25907684f7b9fa8363edbbb3de17e7a266dd9c6879"
},
"downloads": -1,
"filename": "chalice-1.2.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "19ac84faf409d0e106313da9c0ff9404",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 210780,
"upload_time": "2018-04-12T22:27:46",
"url": "https://files.pythonhosted.org/packages/59/4d/676d65edbe02a46b64cb25f1e449c32066eeec65fbc6820be26e582068ca/chalice-1.2.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "aa970d45e251fa51cab79b131cf69dfc",
"sha256": "5772c409e5aee3567f34fe51dde0de0c8e7d01b1a5ab857fd4a7d55b9f3ee9c7"
},
"downloads": -1,
"filename": "chalice-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "aa970d45e251fa51cab79b131cf69dfc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 212330,
"upload_time": "2018-04-12T22:27:48",
"url": "https://files.pythonhosted.org/packages/5e/3b/a9856c6f19b779e1fc01c76cc2b8fc36ff1f3c0ac2fe0ded4b4c8245976a/chalice-1.2.1.tar.gz"
}
],
"1.2.2": [
{
"comment_text": "",
"digests": {
"md5": "5e148a5454d51e26a523741f66b2a048",
"sha256": "73f6d2da3f26626520638b4e976dbc90eea1515aa92410daa477b481c633fb02"
},
"downloads": -1,
"filename": "chalice-1.2.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5e148a5454d51e26a523741f66b2a048",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 214144,
"upload_time": "2018-04-13T21:38:31",
"url": "https://files.pythonhosted.org/packages/f4/cc/31e8b7c39ad845c990dc97c1e10bdcec93d1f9e9ca324f7cec77ce05c03d/chalice-1.2.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "00cc08fe1785fb73d3953bf7a7dbc4af",
"sha256": "55e0338a3e233e5cc8a252002a79b14ba461430ab634219028c9999ebc6c19e1"
},
"downloads": -1,
"filename": "chalice-1.2.2.tar.gz",
"has_sig": false,
"md5_digest": "00cc08fe1785fb73d3953bf7a7dbc4af",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 215604,
"upload_time": "2018-04-13T21:38:33",
"url": "https://files.pythonhosted.org/packages/65/4d/a08fcb916089c8ced42ab98db3ad54619d2ed084c2aa1284eafd10c6d58a/chalice-1.2.2.tar.gz"
}
],
"1.2.3": [
{
"comment_text": "",
"digests": {
"md5": "e1f766caaabbb9d9c227f387e994de49",
"sha256": "c6f123a3035bd5b6cb45ecaf98d8cebbf043a56c55e453761b85c68de3de58ab"
},
"downloads": -1,
"filename": "chalice-1.2.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "e1f766caaabbb9d9c227f387e994de49",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 217438,
"upload_time": "2018-05-08T22:11:28",
"url": "https://files.pythonhosted.org/packages/54/db/66da097e5b9ce80f6f665d6971cfa9841617c7a476e37917aef61f57c276/chalice-1.2.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9cb7a081fcca029238f3f02713e5c32f",
"sha256": "8cfcc66f5564b852d734c12b7766ad5b2660a8267e5276b7891a24b310ef1129"
},
"downloads": -1,
"filename": "chalice-1.2.3.tar.gz",
"has_sig": false,
"md5_digest": "9cb7a081fcca029238f3f02713e5c32f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 219925,
"upload_time": "2018-05-08T22:11:29",
"url": "https://files.pythonhosted.org/packages/bf/5e/b5ac558cce02ce3b3651f3821473567cd206c53a48e9b85d0c7b13e4ea1b/chalice-1.2.3.tar.gz"
}
],
"1.3.0": [
{
"comment_text": "",
"digests": {
"md5": "5f57f295c8ea76eb174864cdd1d78ae2",
"sha256": "84aea03abd3a3c1b6e8bb8ebc511990f1ad080f219006eb6ad1b4927019ab7e7"
},
"downloads": -1,
"filename": "chalice-1.3.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5f57f295c8ea76eb174864cdd1d78ae2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 227067,
"upload_time": "2018-05-22T23:17:04",
"url": "https://files.pythonhosted.org/packages/8a/1a/b66fc349d7707785284bfd3f2d130c87070becd450f42190aa718e8a9628/chalice-1.3.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f4826d15ba3b5ae7ab470c634d08a2d7",
"sha256": "571af400c5c1870c5964ae2d97138d750eb1555224c205f46fc12c684d34193a"
},
"downloads": -1,
"filename": "chalice-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "f4826d15ba3b5ae7ab470c634d08a2d7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 227961,
"upload_time": "2018-05-22T23:17:06",
"url": "https://files.pythonhosted.org/packages/1a/2f/fa94589ba4c2929ca2266b3220354eac711e54a768ef1f53c6282ead8fac/chalice-1.3.0.tar.gz"
}
],
"1.4.0": [
{
"comment_text": "",
"digests": {
"md5": "a479dcaddd61587357e4660b4aa05715",
"sha256": "b4f6489c897e9c7d6f79f695594e6a5592379f8f97ff5272df88781eb2642d34"
},
"downloads": -1,
"filename": "chalice-1.4.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a479dcaddd61587357e4660b4aa05715",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 245192,
"upload_time": "2018-07-10T00:07:22",
"url": "https://files.pythonhosted.org/packages/fd/d0/bc9a06a4d020a0ab5495de2a5436a6c385f93598fc5353aa79a11b004c40/chalice-1.4.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d346c295c5485def1360396d0f5238d4",
"sha256": "c7db868f691e457a031a2306c95b6bad77a744bad9520f301d862b59e5c1e1a2"
},
"downloads": -1,
"filename": "chalice-1.4.0.tar.gz",
"has_sig": false,
"md5_digest": "d346c295c5485def1360396d0f5238d4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 245136,
"upload_time": "2018-07-10T00:07:24",
"url": "https://files.pythonhosted.org/packages/95/c4/67db05f971ca6b49fcb46eb7845e65a245ce9ccbeb69f5ddb5ae4424a870/chalice-1.4.0.tar.gz"
}
],
"1.5.0": [
{
"comment_text": "",
"digests": {
"md5": "f7cdd64b3b5b5517d5e809ba68688fc6",
"sha256": "3dcc9a2ad4755887a1b65482f43f6c2e3dca4e0c615beeb98656efeb0db8473c"
},
"downloads": -1,
"filename": "chalice-1.5.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f7cdd64b3b5b5517d5e809ba68688fc6",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 246355,
"upload_time": "2018-07-10T04:59:41",
"url": "https://files.pythonhosted.org/packages/10/34/0b1ed27562fa836845d94cda96ec7f04b7f37242937a820e211018706968/chalice-1.5.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a5ede83ecd7e833670cdc2c10c4dfb0c",
"sha256": "8564fdd1a64a4423774dba04719ba4e6f0c14ecc36a73bb53bdcd8ad7065605e"
},
"downloads": -1,
"filename": "chalice-1.5.0.tar.gz",
"has_sig": false,
"md5_digest": "a5ede83ecd7e833670cdc2c10c4dfb0c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 246176,
"upload_time": "2018-07-10T04:59:43",
"url": "https://files.pythonhosted.org/packages/86/3a/b0c0b869f0464724431f49b17a4fd9dafe453184b881831f8c05d4fb5e4d/chalice-1.5.0.tar.gz"
}
],
"1.6.0": [
{
"comment_text": "",
"digests": {
"md5": "6f614280b4a5216511d43ee71a029828",
"sha256": "5c033cae41c3c076db5af326b053de6ecb3157fe1ca36b25d0c1425a53eccb38"
},
"downloads": -1,
"filename": "chalice-1.6.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6f614280b4a5216511d43ee71a029828",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 251150,
"upload_time": "2018-07-20T23:45:37",
"url": "https://files.pythonhosted.org/packages/40/db/77e3d47842a26a02236280fd759434f520b623ff2f98876181d71c198ccb/chalice-1.6.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f2dc6239d70a0f8506fa64dd162b53ce",
"sha256": "93bde80e5b0c7f1685f4176cd5c953c3c773aa3eed55f2dc12221c180a0adb7a"
},
"downloads": -1,
"filename": "chalice-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "f2dc6239d70a0f8506fa64dd162b53ce",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 250114,
"upload_time": "2018-07-20T23:45:39",
"url": "https://files.pythonhosted.org/packages/f8/b2/4b7c0b7d39a7df070a0d2d97b12ce9253ce3cd2a5bec3b85f46af25d1086/chalice-1.6.0.tar.gz"
}
],
"1.6.1": [
{
"comment_text": "",
"digests": {
"md5": "7403befa26983bd443bd5c4ba8d4b3d6",
"sha256": "43567739afdb0c0ed37226a5a5f2693c3b868dd09e23e006b57176dcde6fec50"
},
"downloads": -1,
"filename": "chalice-1.6.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "7403befa26983bd443bd5c4ba8d4b3d6",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 251532,
"upload_time": "2018-11-01T22:31:15",
"url": "https://files.pythonhosted.org/packages/69/24/e93b2105b7b1304399d192aa024b0a19c4ce053c68a19d088dfc37479442/chalice-1.6.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d88c11a63a70e99378c8e0e02f17e415",
"sha256": "783ba3c603b944ba32f0ee39f272dc192f2097cfc520692f4dcb718bebdf940e"
},
"downloads": -1,
"filename": "chalice-1.6.1.tar.gz",
"has_sig": false,
"md5_digest": "d88c11a63a70e99378c8e0e02f17e415",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 250893,
"upload_time": "2018-11-01T22:31:17",
"url": "https://files.pythonhosted.org/packages/fb/1c/f3aef258f8a330c8d9d3a1574b79574444d00735d8a84c32f3650a19ea03/chalice-1.6.1.tar.gz"
}
],
"1.6.2": [
{
"comment_text": "",
"digests": {
"md5": "96d977917b654718ad2094ca893a0950",
"sha256": "6b084db566f5a678c67d7375d8775a8c633395d810d6108d350f13465bb15924"
},
"downloads": -1,
"filename": "chalice-1.6.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "96d977917b654718ad2094ca893a0950",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 253274,
"upload_time": "2019-01-02T22:17:55",
"url": "https://files.pythonhosted.org/packages/3f/85/5112826ddd5283b97702fd5579948618ad6506402474036a717f804e6332/chalice-1.6.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "55c4134614c7f7ac93f1710bab1d7710",
"sha256": "96c22f95ccc91ed3e79cc4a9a88bf27f95a13a2caf5a55137ab081d371258f0f"
},
"downloads": -1,
"filename": "chalice-1.6.2.tar.gz",
"has_sig": false,
"md5_digest": "55c4134614c7f7ac93f1710bab1d7710",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 253004,
"upload_time": "2019-01-02T22:17:58",
"url": "https://files.pythonhosted.org/packages/01/14/06fc49a73178387f18b7860f46e3d1f20fb1a8405a1b089fca6463adda76/chalice-1.6.2.tar.gz"
}
],
"1.7.0": [
{
"comment_text": "",
"digests": {
"md5": "f743dbffd0741c2bf7d28d80d5bee1ca",
"sha256": "f778d065a3c8443750e199c604d9429c87d3bc136ec20191bc56fcfe444e9199"
},
"downloads": -1,
"filename": "chalice-1.7.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f743dbffd0741c2bf7d28d80d5bee1ca",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 258012,
"upload_time": "2019-02-05T00:20:11",
"url": "https://files.pythonhosted.org/packages/1b/5a/b4fccb980b18143b84c3507dadcf7c4450258d8880fd2658d243bccef7b0/chalice-1.7.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8e4ae3573d9f54b7dd8824961c8b2fb6",
"sha256": "98a1237bf77f18761d8f964cb3c3b794e2d377a261b5e1640268608ec94336fa"
},
"downloads": -1,
"filename": "chalice-1.7.0.tar.gz",
"has_sig": false,
"md5_digest": "8e4ae3573d9f54b7dd8824961c8b2fb6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 257816,
"upload_time": "2019-02-05T00:20:13",
"url": "https://files.pythonhosted.org/packages/40/20/6b63a689e3e79ef1e1517b5cab09d7cb91c5d41a1f8d29275cf9cb03d8b4/chalice-1.7.0.tar.gz"
}
],
"1.8.0": [
{
"comment_text": "",
"digests": {
"md5": "ad8fcaa4cfc4222d92edb501ffba9767",
"sha256": "6a7d4ecf2b1de697a232e36604c5a3bc720876dced5b2e4edbe6ab91102f9d4a"
},
"downloads": -1,
"filename": "chalice-1.8.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ad8fcaa4cfc4222d92edb501ffba9767",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 259010,
"upload_time": "2019-04-03T19:41:11",
"url": "https://files.pythonhosted.org/packages/c4/fc/5e7832066a7c2da212adf63a8ac59427df292bd01dfc6c0f27e889aae553/chalice-1.8.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "637a77158eb62a948b8daeaf10f40459",
"sha256": "d5fae4b2e24708b510989d2c3a15443867b46c563ee84a10da2938f6e0c3589f"
},
"downloads": -1,
"filename": "chalice-1.8.0.tar.gz",
"has_sig": false,
"md5_digest": "637a77158eb62a948b8daeaf10f40459",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 257939,
"upload_time": "2019-04-03T19:41:14",
"url": "https://files.pythonhosted.org/packages/3b/b8/586f3a02c32a1b83ee8e9e18384f9bfe8cea1a23530d2cdd52bc2977ed69/chalice-1.8.0.tar.gz"
}
],
"1.9.0": [
{
"comment_text": "",
"digests": {
"md5": "a6c272f227a6176112558bd4b44804fe",
"sha256": "04fd0e6f8b0fd552a12da631dd1a42e8a5c8cee9dd2159ccda4b015da489ddcf"
},
"downloads": -1,
"filename": "chalice-1.9.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a6c272f227a6176112558bd4b44804fe",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 272722,
"upload_time": "2019-06-17T22:04:03",
"url": "https://files.pythonhosted.org/packages/1b/58/ec932273a49cfde41a43eeb7cf92b6d253bd067383a6ab81071ae691e177/chalice-1.9.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a30c828b299429f2d9610659df9d628e",
"sha256": "905a2d5c2c01aa6ba932e8332cd5ba080921b2e9fb5a3a795456f7e6251e02fe"
},
"downloads": -1,
"filename": "chalice-1.9.0.tar.gz",
"has_sig": false,
"md5_digest": "a30c828b299429f2d9610659df9d628e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 271638,
"upload_time": "2019-06-17T22:04:07",
"url": "https://files.pythonhosted.org/packages/df/dd/3ad0dfd1b7989b2a3131d2c2d8ad32834c3a52e68cc2e25760c35bc9a1eb/chalice-1.9.0.tar.gz"
}
],
"1.9.1": [
{
"comment_text": "",
"digests": {
"md5": "989c7a0f01f2ece3e90c100d65f48aeb",
"sha256": "88cb65b9383aec898bd7c3f39b2c2bdbdfd49183c115eb2038c09fd6480adbae"
},
"downloads": -1,
"filename": "chalice-1.9.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "989c7a0f01f2ece3e90c100d65f48aeb",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 273075,
"upload_time": "2019-07-09T21:19:22",
"url": "https://files.pythonhosted.org/packages/d2/ba/aa42db3ed3b9279488db57a334ae96d0ed1c4f80a41e324a648a6f2cda98/chalice-1.9.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "05f95a4763fe6c9067fa35cd17c82bac",
"sha256": "f151276b778c6ba53c1595acc3fd873a8d87ed46c559b323b50090726285a703"
},
"downloads": -1,
"filename": "chalice-1.9.1.tar.gz",
"has_sig": false,
"md5_digest": "05f95a4763fe6c9067fa35cd17c82bac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 273229,
"upload_time": "2019-07-09T21:19:25",
"url": "https://files.pythonhosted.org/packages/a6/f5/ea0db83d4aade5c859f0d94190b38ed3637ca5df7d3c3cbf205e99f1c7e1/chalice-1.9.1.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "43719f75d4ed77350ba59587dc0e0d6b",
"sha256": "1a8d937a91564318d50d1247fa50fb386d1c003fe39bd3e89a92e79d1aef95ed"
},
"downloads": -1,
"filename": "chalice-1.12.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "43719f75d4ed77350ba59587dc0e0d6b",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 307435,
"upload_time": "2019-10-15T20:42:12",
"url": "https://files.pythonhosted.org/packages/a9/90/5358f8b1e3739c544d2b03ecfd67d9a7681f7dfa519df4c7763475e5e0e3/chalice-1.12.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d1d26904a806726ce4ebc447b3c4b703",
"sha256": "f8f929f26df77285a202fb93174400230f8912c5b9c1fb061c7836a78413e325"
},
"downloads": -1,
"filename": "chalice-1.12.0.tar.gz",
"has_sig": false,
"md5_digest": "d1d26904a806726ce4ebc447b3c4b703",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 303842,
"upload_time": "2019-10-15T20:42:26",
"url": "https://files.pythonhosted.org/packages/19/e1/87317e61ae957a2772b3cc63c6a6b2822893a6c79a797907ec1f2cf171e6/chalice-1.12.0.tar.gz"
}
]
}