Skip to main content

The ultra-reliable, fast ASGI+WSGI framework for building data plane APIs at scale.

Project description

Build Status Falcon web framework docs codecov.io code style: blue

The Falcon Web Framework

Falcon is a minimalist ASGI/WSGI framework for building mission-critical REST APIs and microservices, with a focus on reliability, correctness, and performance at scale.

When it comes to building HTTP APIs, other frameworks weigh you down with tons of dependencies and unnecessary abstractions. Falcon cuts to the chase with a clean design that embraces HTTP and the REST architectural style.

Falcon apps work with any WSGI or ASGI server, and run like a champ under CPython 3.5+ and PyPy 3.5+ (3.6+ required for ASGI).

What People are Saying

“Falcon is rock solid and it’s fast.”

“We have been using Falcon as a replacement for [another framework] and we simply love the performance (three times faster) and code base size (easily half of our [original] code).”

“I’m loving #falconframework! Super clean and simple, I finally have the speed and flexibility I need!”

“Falcon looks great so far. I hacked together a quick test for a tiny server of mine and was ~40% faster with only 20 minutes of work.”

“I feel like I’m just talking HTTP at last, with nothing in the middle. Falcon seems like the requests of backend.”

“The source code for Falcon is so good, I almost prefer it to documentation. It basically can’t be wrong.”

“What other framework has integrated support for 786 TRY IT NOW ?”

Features

Falcon tries to do as little as possible while remaining highly effective.

  • ASGI, WSGI, and WebSocket support

  • Native asyncio support

  • No reliance on magic globals for routing and state management

  • Stable interfaces with an emphasis on backwards-compatibility

  • Simple API modeling through centralized RESTful routing

  • Highly-optimized, extensible code base

  • Easy access to headers and bodies through request and response classes

  • DRY request processing via middleware components and hooks

  • Strict adherence to RFCs

  • Idiomatic HTTP error responses

  • Straightforward exception handling

  • Snappy testing with WSGI/ASGI helpers and mocks

  • CPython 3.5+ and PyPy 3.5+ support

Support Falcon Development

Has Falcon helped you make an awesome app? Show your support today with a one-time donation or by becoming a patron. Supporters get cool gear, an opportunity to promote their brand to Python developers, and prioritized support.

Thanks!

How is Falcon Different?

Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.

- Antoine de Saint-Exupéry

We designed Falcon to support the demanding needs of large-scale microservices and responsive app backends. Falcon complements more general Python web frameworks by providing bare-metal performance, reliability, and flexibility wherever you need it.

Reliable. We go to great lengths to avoid introducing breaking changes, and when we do they are fully documented and only introduced (in the spirit of SemVer) with a major version increment. The code is rigorously tested with numerous inputs and we require 100% coverage at all times. Falcon has no dependencies outside the standard library, helping minimize your app’s attack surface while avoiding transitive bugs and breaking changes.

Debuggable. Falcon eschews magic. It’s easy to tell which inputs lead to which outputs. Unhandled exceptions are never encapsulated or masked. Potentially surprising behaviors, such as automatic request body parsing, are well-documented and disabled by default. Finally, when it comes to the framework itself, we take care to keep logic paths simple and understandable. All this makes it easier to reason about the code and to debug edge cases in large-scale deployments.

Fast. Same hardware, more requests. Falcon turns around requests significantly faster than other popular Python frameworks like Django and Flask. For an extra speed boost, Falcon compiles itself with Cython when available, and also works well with PyPy. Considering a move to another programming language? Benchmark with Falcon+PyPy first!

Flexible. Falcon leaves a lot of decisions and implementation details to you, the API developer. This gives you a lot of freedom to customize and tune your implementation. It also helps you understand your apps at a deeper level, making them easier to tune, debug, and refactor over the long run. Falcon’s minimalist design provides space for Python community members to independently innovate on Falcon add-ons and complementary packages.

Who’s Using Falcon?

Falcon is used around the world by a growing number of organizations, including:

  • 7ideas

  • Cronitor

  • EMC

  • Hurricane Electric

  • Leadpages

  • OpenStack

  • Rackspace

  • Shiftgig

  • tempfil.es

  • Opera Software

If you are using the Falcon framework for a community or commercial project, please consider adding your information to our wiki under Who’s Using Falcon?

Community

A number of Falcon add-ons, templates, and complementary packages are available for use in your projects. We’ve listed several of these on the Falcon wiki as a starting point, but you may also wish to search PyPI for additional resources.

The Falconry community on Gitter is a great place to ask questions and share your ideas. You can find us in falconry/user. We also have a falconry/dev room for discussing the design and development of the framework itself.

Per our Code of Conduct, we expect everyone who participates in community discussions to act professionally, and lead by example in encouraging constructive discussions. Each individual in the community is responsible for creating a positive, constructive, and productive culture.

Installation

PyPy

PyPy is the fastest way to run your Falcon app. PyPy3.5+ is supported as of PyPy v5.10.

$ pip install falcon

Or, to install the latest beta or release candidate, if any:

$ pip install --pre falcon

CPython

Falcon also fully supports CPython 3.5+.

The latest stable version of Falcon can be installed directly from PyPI:

$ pip install falcon

Or, to install the latest beta or release candidate, if any:

$ pip install --pre falcon

In order to provide an extra speed boost, Falcon can compile itself with Cython. Wheels containing pre-compiled binaries are available from PyPI for several common platforms. However, if a wheel for your platform of choice is not available, you can install the source distribution. The installation process will automatically try to cythonize Falcon for your environment, falling back to a normal pure-Python install if any issues are encountered during the cythonization step:

$ pip install --no-binary :all: falcon

If you want to verify that Cython is being invoked, simply pass the verbose flag -v to pip in order to echo the compilation commands.

The cythonization step is only active when using the CPython Python implementation, so installing using PyPy will skip it. If you want to skip Cython compilation step and install the pure-Python version directly you can set the environment variable FALCON_DISABLE_CYTHON to a non empty value before install:

$ FALCON_DISABLE_CYTHON=Y pip install -v --no-binary :all: falcon

Please note that pip>=10 is required to be able to install Falcon from source.

Installing on OS X

Xcode Command Line Tools are required to compile Cython. Install them with this command:

$ xcode-select --install

The Clang compiler treats unrecognized command-line options as errors, for example:

clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]

You might also see warnings about unused functions. You can work around these issues by setting additional Clang C compiler flags as follows:

$ export CFLAGS="-Qunused-arguments -Wno-unused-function"

Dependencies

Falcon does not require the installation of any other packages, although if Cython has been installed into the environment, it will be used to optimize the framework as explained above.

WSGI Server

Falcon speaks WSGI (or ASGI; see also below). In order to serve a Falcon app, you will need a WSGI server. Gunicorn and uWSGI are some of the more popular ones out there, but anything that can load a WSGI app will do.

$ pip install [gunicorn|uwsgi]

ASGI Server

In order to serve a Falcon ASGI app, you will need an ASGI server. Uvicorn is a popular choice:

$ pip install uvicorn

Source Code

Falcon lives on GitHub, making the code easy to browse, download, fork, etc. Pull requests are always welcome! Also, please remember to star the project if it makes you happy. :)

Once you have cloned the repo or downloaded a tarball from GitHub, you can install Falcon like this:

$ cd falcon
$ pip install .

Or, if you want to edit the code, first fork the main repo, clone the fork to your desktop, and then run the following to install it using symbolic linking, so that when you change your code, the changes will be automagically available to your app without having to reinstall the package:

$ cd falcon
$ pip install -e .

You can manually test changes to the Falcon framework by switching to the directory of the cloned repo and then running pytest:

$ cd falcon
$ pip install -r requirements/tests
$ pytest tests

Or, to run the default set of tests:

$ pip install tox && tox

See also the tox.ini file for a full list of available environments.

Read the Docs

The docstrings in the Falcon code base are quite extensive, and we recommend keeping a REPL running while learning the framework so that you can query the various modules and classes as you have questions.

Online docs are available at: https://falcon.readthedocs.io

You can build the same docs locally as follows:

$ pip install tox && tox -e docs

Once the docs have been built, you can view them by opening the following index page in your browser. On OS X it’s as simple as:

$ open docs/_build/html/index.html

Or on Linux:

$ xdg-open docs/_build/html/index.html

Getting Started

Here is a simple, contrived example showing how to create a Falcon-based WSGI app (the ASGI version is included further down):

# examples/things.py

# Let's get this party started!
from wsgiref.simple_server import make_server

import falcon


# Falcon follows the REST architectural style, meaning (among
# other things) that you think in terms of resources and state
# transitions, which map to HTTP verbs.
class ThingsResource:
    def on_get(self, req, resp):
        """Handles GET requests"""
        resp.status = falcon.HTTP_200  # This is the default status
        resp.content_type = falcon.MEDIA_TEXT  # Default is JSON, so override
        resp.text = ('\nTwo things awe me most, the starry sky '
                     'above me and the moral law within me.\n'
                     '\n'
                     '    ~ Immanuel Kant\n\n')


# falcon.App instances are callable WSGI apps...
# in larger applications the app is created in a separate file
app = falcon.App()

# Resources are represented by long-lived class instances
things = ThingsResource()

# things will handle all requests to the '/things' URL path
app.add_route('/things', things)

if __name__ == '__main__':
    with make_server('', 8000, app) as httpd:
        print('Serving on port 8000...')

        # Serve until process is killed
        httpd.serve_forever()

You can run the above example directly using the included wsgiref server:

$ pip install falcon
$ python things.py

Then, in another terminal:

$ curl localhost:8000/things

The ASGI version of the example is similar:

# examples/things_asgi.py

import falcon
import falcon.asgi


# Falcon follows the REST architectural style, meaning (among
# other things) that you think in terms of resources and state
# transitions, which map to HTTP verbs.
class ThingsResource:
    async def on_get(self, req, resp):
        """Handles GET requests"""
        resp.status = falcon.HTTP_200  # This is the default status
        resp.content_type = falcon.MEDIA_TEXT  # Default is JSON, so override
        resp.text = ('\nTwo things awe me most, the starry sky '
                     'above me and the moral law within me.\n'
                     '\n'
                     '    ~ Immanuel Kant\n\n')


# falcon.asgi.App instances are callable ASGI apps...
# in larger applications the app is created in a separate file
app = falcon.asgi.App()

# Resources are represented by long-lived class instances
things = ThingsResource()

# things will handle all requests to the '/things' URL path
app.add_route('/things', things)

You can run the ASGI version with uvicorn or any other ASGI server:

$ pip install falcon uvicorn
$ uvicorn things_asgi:app

A More Complex Example (WSGI)

Here is a more involved example that demonstrates reading headers and query parameters, handling errors, and working with request and response bodies. Note that this example assumes that the requests package has been installed.

(For the equivalent ASGI app, see: A More Complex Example (ASGI)).

# examples/things_advanced.py

import json
import logging
import uuid
from wsgiref import simple_server

import falcon
import requests


class StorageEngine:

    def get_things(self, marker, limit):
        return [{'id': str(uuid.uuid4()), 'color': 'green'}]

    def add_thing(self, thing):
        thing['id'] = str(uuid.uuid4())
        return thing


class StorageError(Exception):

    @staticmethod
    def handle(ex, req, resp, params):
        # TODO: Log the error, clean up, etc. before raising
        raise falcon.HTTPInternalServerError()


class SinkAdapter:

    engines = {
        'ddg': 'https://duckduckgo.com',
        'y': 'https://search.yahoo.com/search',
    }

    def __call__(self, req, resp, engine):
        url = self.engines[engine]
        params = {'q': req.get_param('q', True)}
        result = requests.get(url, params=params)

        resp.status = str(result.status_code) + ' ' + result.reason
        resp.content_type = result.headers['content-type']
        resp.text = result.text


class AuthMiddleware:

    def process_request(self, req, resp):
        token = req.get_header('Authorization')
        account_id = req.get_header('Account-ID')

        challenges = ['Token type="Fernet"']

        if token is None:
            description = ('Please provide an auth token '
                           'as part of the request.')

            raise falcon.HTTPUnauthorized(title='Auth token required',
                                          description=description,
                                          challenges=challenges,
                                          href='http://docs.example.com/auth')

        if not self._token_is_valid(token, account_id):
            description = ('The provided auth token is not valid. '
                           'Please request a new token and try again.')

            raise falcon.HTTPUnauthorized(title='Authentication required',
                                          description=description,
                                          challenges=challenges,
                                          href='http://docs.example.com/auth')

    def _token_is_valid(self, token, account_id):
        return True  # Suuuuuure it's valid...


class RequireJSON:

    def process_request(self, req, resp):
        if not req.client_accepts_json:
            raise falcon.HTTPNotAcceptable(
                description='This API only supports responses encoded as JSON.',
                href='http://docs.examples.com/api/json')

        if req.method in ('POST', 'PUT'):
            if 'application/json' not in req.content_type:
                raise falcon.HTTPUnsupportedMediaType(
                    title='This API only supports requests encoded as JSON.',
                    href='http://docs.examples.com/api/json')


class JSONTranslator:
    # NOTE: Normally you would simply use req.media and resp.media for
    # this particular use case; this example serves only to illustrate
    # what is possible.

    def process_request(self, req, resp):
        # req.stream corresponds to the WSGI wsgi.input environ variable,
        # and allows you to read bytes from the request body.
        #
        # See also: PEP 3333
        if req.content_length in (None, 0):
            # Nothing to do
            return

        body = req.stream.read()
        if not body:
            raise falcon.HTTPBadRequest(title='Empty request body',
                                        description='A valid JSON document is required.')

        try:
            req.context.doc = json.loads(body.decode('utf-8'))

        except (ValueError, UnicodeDecodeError):
            description = ('Could not decode the request body. The '
                           'JSON was incorrect or not encoded as '
                           'UTF-8.')

            raise falcon.HTTPBadRequest(title='Malformed JSON',
                                        description=description)

    def process_response(self, req, resp, resource, req_succeeded):
        if not hasattr(resp.context, 'result'):
            return

        resp.text = json.dumps(resp.context.result)


def max_body(limit):

    def hook(req, resp, resource, params):
        length = req.content_length
        if length is not None and length > limit:
            msg = ('The size of the request is too large. The body must not '
                   'exceed ' + str(limit) + ' bytes in length.')

            raise falcon.HTTPPayloadTooLarge(
                title='Request body is too large', description=msg)

    return hook


class ThingsResource:

    def __init__(self, db):
        self.db = db
        self.logger = logging.getLogger('thingsapp.' + __name__)

    def on_get(self, req, resp, user_id):
        marker = req.get_param('marker') or ''
        limit = req.get_param_as_int('limit') or 50

        try:
            result = self.db.get_things(marker, limit)
        except Exception as ex:
            self.logger.error(ex)

            description = ('Aliens have attacked our base! We will '
                           'be back as soon as we fight them off. '
                           'We appreciate your patience.')

            raise falcon.HTTPServiceUnavailable(
                title='Service Outage',
                description=description,
                retry_after=30)

        # NOTE: Normally you would use resp.media for this sort of thing;
        # this example serves only to demonstrate how the context can be
        # used to pass arbitrary values between middleware components,
        # hooks, and resources.
        resp.context.result = result

        resp.set_header('Powered-By', 'Falcon')
        resp.status = falcon.HTTP_200

    @falcon.before(max_body(64 * 1024))
    def on_post(self, req, resp, user_id):
        try:
            doc = req.context.doc
        except AttributeError:
            raise falcon.HTTPBadRequest(
                title='Missing thing',
                description='A thing must be submitted in the request body.')

        proper_thing = self.db.add_thing(doc)

        resp.status = falcon.HTTP_201
        resp.location = '/%s/things/%s' % (user_id, proper_thing['id'])

# Configure your WSGI server to load "things.app" (app is a WSGI callable)
app = falcon.App(middleware=[
    AuthMiddleware(),
    RequireJSON(),
    JSONTranslator(),
])

db = StorageEngine()
things = ThingsResource(db)
app.add_route('/{user_id}/things', things)

# If a responder ever raises an instance of StorageError, pass control to
# the given handler.
app.add_error_handler(StorageError, StorageError.handle)

# Proxy some things to another service; this example shows how you might
# send parts of an API off to a legacy system that hasn't been upgraded
# yet, or perhaps is a single cluster that all data centers have to share.
sink = SinkAdapter()
app.add_sink(sink, r'/search/(?P<engine>ddg|y)\Z')

# Useful for debugging problems in your API; works with pdb.set_trace(). You
# can also use Gunicorn to host your app. Gunicorn can be configured to
# auto-restart workers when it detects a code change, and it also works
# with pdb.
if __name__ == '__main__':
    httpd = simple_server.make_server('127.0.0.1', 8000, app)
    httpd.serve_forever()

Again this code uses wsgiref, but you can also run the above example using any WSGI server, such as uWSGI or Gunicorn. For example:

$ pip install requests gunicorn
$ gunicorn things:app

On Windows you can run Gunicorn and uWSGI via WSL, or you might try Waitress:

$ pip install requests waitress
$ waitress-serve --port=8000 things:app

To test this example, open another terminal and run:

$ http localhost:8000/1/things authorization:custom-token

You can also view the application configuration from the CLI via the falcon-inspect-app script that is bundled with the framework:

falcon-inspect-app things_advanced:app

A More Complex Example (ASGI)

Here’s the ASGI version of the app from above. Note that it uses the httpx package in lieu of requests.

# examples/things_advanced_asgi.py

import json
import logging
import uuid

import falcon
import falcon.asgi
import httpx


class StorageEngine:

    async def get_things(self, marker, limit):
        return [{'id': str(uuid.uuid4()), 'color': 'green'}]

    async def add_thing(self, thing):
        thing['id'] = str(uuid.uuid4())
        return thing


class StorageError(Exception):

    @staticmethod
    async def handle(ex, req, resp, params):
        # TODO: Log the error, clean up, etc. before raising
        raise falcon.HTTPInternalServerError()


class SinkAdapter:

    engines = {
        'ddg': 'https://duckduckgo.com',
        'y': 'https://search.yahoo.com/search',
    }

    async def __call__(self, req, resp, engine):
        url = self.engines[engine]
        params = {'q': req.get_param('q', True)}

        async with httpx.AsyncClient() as client:
            result = await client.get(url, params=params)

        resp.status = result.status_code
        resp.content_type = result.headers['content-type']
        resp.text = result.text


class AuthMiddleware:

    async def process_request(self, req, resp):
        token = req.get_header('Authorization')
        account_id = req.get_header('Account-ID')

        challenges = ['Token type="Fernet"']

        if token is None:
            description = ('Please provide an auth token '
                           'as part of the request.')

            raise falcon.HTTPUnauthorized(title='Auth token required',
                                          description=description,
                                          challenges=challenges,
                                          href='http://docs.example.com/auth')

        if not self._token_is_valid(token, account_id):
            description = ('The provided auth token is not valid. '
                           'Please request a new token and try again.')

            raise falcon.HTTPUnauthorized(title='Authentication required',
                                          description=description,
                                          challenges=challenges,
                                          href='http://docs.example.com/auth')

    def _token_is_valid(self, token, account_id):
        return True  # Suuuuuure it's valid...


class RequireJSON:

    async def process_request(self, req, resp):
        if not req.client_accepts_json:
            raise falcon.HTTPNotAcceptable(
                description='This API only supports responses encoded as JSON.',
                href='http://docs.examples.com/api/json')

        if req.method in ('POST', 'PUT'):
            if 'application/json' not in req.content_type:
                raise falcon.HTTPUnsupportedMediaType(
                    description='This API only supports requests encoded as JSON.',
                    href='http://docs.examples.com/api/json')


class JSONTranslator:
    # NOTE: Normally you would simply use req.get_media() and resp.media for
    # this particular use case; this example serves only to illustrate
    # what is possible.

    async def process_request(self, req, resp):
        # NOTE: Test explicitly for 0, since this property could be None in
        # the case that the Content-Length header is missing (in which case we
        # can't know if there is a body without actually attempting to read
        # it from the request stream.)
        if req.content_length == 0:
            # Nothing to do
            return

        body = await req.stream.read()
        if not body:
            raise falcon.HTTPBadRequest(title='Empty request body',
                                        description='A valid JSON document is required.')

        try:
            req.context.doc = json.loads(body.decode('utf-8'))

        except (ValueError, UnicodeDecodeError):
            description = ('Could not decode the request body. The '
                           'JSON was incorrect or not encoded as '
                           'UTF-8.')

            raise falcon.HTTPBadRequest(title='Malformed JSON',
                                        description=description)

    async def process_response(self, req, resp, resource, req_succeeded):
        if not hasattr(resp.context, 'result'):
            return

        resp.text = json.dumps(resp.context.result)


def max_body(limit):

    async def hook(req, resp, resource, params):
        length = req.content_length
        if length is not None and length > limit:
            msg = ('The size of the request is too large. The body must not '
                   'exceed ' + str(limit) + ' bytes in length.')

            raise falcon.HTTPPayloadTooLarge(
                title='Request body is too large', description=msg)

    return hook


class ThingsResource:

    def __init__(self, db):
        self.db = db
        self.logger = logging.getLogger('thingsapp.' + __name__)

    async def on_get(self, req, resp, user_id):
        marker = req.get_param('marker') or ''
        limit = req.get_param_as_int('limit') or 50

        try:
            result = await self.db.get_things(marker, limit)
        except Exception as ex:
            self.logger.error(ex)

            description = ('Aliens have attacked our base! We will '
                           'be back as soon as we fight them off. '
                           'We appreciate your patience.')

            raise falcon.HTTPServiceUnavailable(
                title='Service Outage',
                description=description,
                retry_after=30)

        # NOTE: Normally you would use resp.media for this sort of thing;
        # this example serves only to demonstrate how the context can be
        # used to pass arbitrary values between middleware components,
        # hooks, and resources.
        resp.context.result = result

        resp.set_header('Powered-By', 'Falcon')
        resp.status = falcon.HTTP_200

    @falcon.before(max_body(64 * 1024))
    async def on_post(self, req, resp, user_id):
        try:
            doc = req.context.doc
        except AttributeError:
            raise falcon.HTTPBadRequest(
                title='Missing thing',
                description='A thing must be submitted in the request body.')

        proper_thing = await self.db.add_thing(doc)

        resp.status = falcon.HTTP_201
        resp.location = '/%s/things/%s' % (user_id, proper_thing['id'])


# The app instance is an ASGI callable
app = falcon.asgi.App(middleware=[
    # AuthMiddleware(),
    RequireJSON(),
    JSONTranslator(),
])

db = StorageEngine()
things = ThingsResource(db)
app.add_route('/{user_id}/things', things)

# If a responder ever raises an instance of StorageError, pass control to
# the given handler.
app.add_error_handler(StorageError, StorageError.handle)

# Proxy some things to another service; this example shows how you might
# send parts of an API off to a legacy system that hasn't been upgraded
# yet, or perhaps is a single cluster that all data centers have to share.
sink = SinkAdapter()
app.add_sink(sink, r'/search/(?P<engine>ddg|y)\Z')

You can run the ASGI version with any ASGI server, such as uvicorn:

$ pip install falcon httpx uvicorn
$ uvicorn things_advanced_asgi:app

Contributing

Thanks for your interest in the project! We welcome pull requests from developers of all skill levels. To get started, simply fork the master branch on GitHub to your personal account and then clone the fork into your development environment.

If you would like to contribute but don’t already have something in mind, we invite you to take a look at the issues listed under our next milestone. If you see one you’d like to work on, please leave a quick comment so that we don’t end up with duplicated effort. Thanks in advance!

Please note that all contributors and maintainers of this project are subject to our Code of Conduct.

Before submitting a pull request, please ensure you have added/updated the appropriate tests (and that all existing tests still pass with your changes), and that your coding style follows PEP 8 and doesn’t cause pyflakes to complain.

Commit messages should be formatted using AngularJS conventions.

Comments follow Google’s style guide, with the additional requirement of prefixing inline comments using your GitHub nick and an appropriate prefix:

  • TODO(riker): Damage report!

  • NOTE(riker): Well, that’s certainly good to know.

  • PERF(riker): Travel time to the nearest starbase?

  • APPSEC(riker): In all trust, there is the possibility for betrayal.

The core Falcon project maintainers are:

  • Kurt Griffiths, Project Lead (kgriffs on GH, Gitter, and Twitter)

  • John Vrbanac (jmvrbanac on GH, Gitter, and Twitter)

  • Vytautas Liuolia (vytas7 on GH and Gitter, and vliuolia on Twitter)

  • Nick Zaccardi (nZac on GH and Gitter)

  • Federico Caselli (CaselIT on GH and Gitter)

Please don’t hesitate to reach out if you have any questions, or just need a little help getting started. You can find us in falconry/dev on Gitter.

See also: CONTRIBUTING.md

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

falcon-3.1.2b1.tar.gz (577.6 kB view details)

Uploaded Source

Built Distributions

falcon-3.1.2b1-cp312-cp312-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.12 Windows x86-64

falcon-3.1.2b1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (11.5 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

falcon-3.1.2b1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

falcon-3.1.2b1-cp312-cp312-macosx_10_9_universal2.whl (3.9 MB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

falcon-3.1.2b1-cp311-cp311-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.11 Windows x86-64

falcon-3.1.2b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (11.4 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

falcon-3.1.2b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.9 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

falcon-3.1.2b1-cp311-cp311-macosx_10_9_universal2.whl (4.0 MB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

falcon-3.1.2b1-cp310-cp310-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.10 Windows x86-64

falcon-3.1.2b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (10.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

falcon-3.1.2b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

falcon-3.1.2b1-cp310-cp310-macosx_11_0_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

falcon-3.1.2b1-cp39-cp39-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.9 Windows x86-64

falcon-3.1.2b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (10.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

falcon-3.1.2b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

falcon-3.1.2b1-cp39-cp39-macosx_11_0_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9 macOS 11.0+ x86-64

falcon-3.1.2b1-cp38-cp38-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.8 Windows x86-64

falcon-3.1.2b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (10.7 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

falcon-3.1.2b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

falcon-3.1.2b1-cp38-cp38-macosx_11_0_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8 macOS 11.0+ x86-64

falcon-3.1.2b1-cp37-cp37m-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.7m Windows x86-64

falcon-3.1.2b1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

falcon-3.1.2b1-cp37-cp37m-macosx_11_0_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7m macOS 11.0+ x86-64

falcon-3.1.2b1-cp36-cp36m-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.6m Windows x86-64

falcon-3.1.2b1-cp36-cp36m-macosx_10_14_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file falcon-3.1.2b1.tar.gz.

File metadata

  • Download URL: falcon-3.1.2b1.tar.gz
  • Upload date:
  • Size: 577.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.13

File hashes

Hashes for falcon-3.1.2b1.tar.gz
Algorithm Hash digest
SHA256 83fef0f3ba512e2f23cd8e219a488b9bfdc839582269c60968702a5fd0f94986
MD5 ab2c441dd790443b17ca03316abf0297
BLAKE2b-256 1cbe036b96d288c4c2a227a06513ee465e4156df820c5228d36b5b6b32b135b8

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 83ac2569162f2ea3ec9031858b52a209bb86aa96bc1314d8ab187533126d0eee
MD5 2ef73a1bfaca3b481ca17b7ae0aeedd6
BLAKE2b-256 467a4cc3ea910fb778a407b3528155c611ebd9fa240c462c8761b04efb2f9342

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 84123d63142127f2b0227de71009c404511b888e72ae87c3defad657df1d3b79
MD5 a124032c0484d8731beba8bbf9c59c55
BLAKE2b-256 6cfc14df022b15ec452fa8e43466775df3884d0fe44aafbc558e792b3d3785de

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 994dd03690d7b134f147040d4ba4b63b33ecafd1d701f3bb778e41b5dc636bb4
MD5 d7d77fed46071bae9a295207f9c5d43d
BLAKE2b-256 d0bc4de6cd202760da92d84c9296cbd84e2b4c00e2e8615863254bbd75bdc82c

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1d946abce61eaa927741fa4c552fdb3a513370dee3a5368f4731f243c4b58ba5
MD5 3143a425adcd45e296e9ffcbf093ed67
BLAKE2b-256 7893c4f738b9b766967aa3f6b297faaea51de9b6c38dd13f23d03d142486cb2d

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fddafe853aff99e6f1f9eb90378f6f45cb4ca747cd0dfc1bf1820192e87c140a
MD5 b1d85e7b760e44dc57dbc641f7c08ffc
BLAKE2b-256 667cc1e1fd797349a28f8fa4877f63a53ec30d3891964dfe9d6f56c2da1bcb4c

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 37aea1cea49d0e7f70287bf61f7109213a83c85ca4444256a130a0593326141c
MD5 a52c471b7d895c73053a6e8d90b3cf2e
BLAKE2b-256 f94f25ddf64e94391160b29502bab68ffb3349a2a7a8d0fe0908aec505863b9b

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dd5dc4ecddb366c2998cc2c135481a224df2d5101a9b35e4840a28da229a33b5
MD5 3c2f72cc1cf82391b1c1fd0721f88dbe
BLAKE2b-256 ba6db346f88d8d6824e076a272507bbc664ac22c5127f0fd3c824792b32d67c1

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 8a1a0a0a03e0cf68ee2decaa30064cc32c617f619f255e730831ba7834467f05
MD5 3be4f2bf43b8c6e2b84b930c50514561
BLAKE2b-256 dfb7fd9cf56fc158ec08899ccba45ffbdc6dd4c66f0fe2218496ac2de30eb69c

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e12486a3072620a106e38738b21a33c3b8f42a165790387ac4dca722ad80f99e
MD5 d2d339b87a08a27cd42f5cb6c7ffbe4e
BLAKE2b-256 eda70ca67995ff7ec23470c41a060c407a7ab492c79e37bef2eaff7a1570d4f7

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 75eb2098baa99503ef794c0e3df512999baf44d40de3e6e7f04424208f5e801c
MD5 ea4e00c6cf6dbcc58ba8c68bf757d26e
BLAKE2b-256 3b0bdd5bc049bd698fc06dccfa4b06bd013e150c83738cb6c0f8567d37770694

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for falcon-3.1.2b1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 600f0640b05e4f3979a7dd02cb68e8c1bdd91867e2095d33966618bf74e6d1b5
MD5 30f766b9ce39294a23d6ce9c3f64ad23
BLAKE2b-256 44c2552ee9495309727d417d87166afebd5ad7061505688412b0b305e48210db

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8d9298ce5317a76eaa2dd6cbd621254d83da8d22b421dbb6aabe85230d8b666
MD5 fd4512662037823cde7c396e559e26ce
BLAKE2b-256 75beea115317bdea6678f8e1183fa27267247851e18d522869985ced85943277

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fcc7be4ecd69759f739b6a5f9d9b2041a495072003f210a2c1f397f280c503ef
MD5 73a4c476e6fe7665893e4eae982ea3f6
BLAKE2b-256 c3e503fb2651d79547b574c372489d7ad1b89a95145537689f621acf80260445

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 02e6032d2dc96dd2bf3393c8b9acadf6d3e933f16597b5e3f7f698e7eadf02e3
MD5 75a8809e52783e8cc4f37328fccebcf4
BLAKE2b-256 f1b5aac71ed695ccf79b637fee7267e9004c9639378d3329e8f8f82b62f98b35

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 8cf2c6b2514ce8f239e4fb58782fd6e91929947521001892dddc61fbe85e9275
MD5 254b84337c245b5cd64d4125108ba9fd
BLAKE2b-256 b8044f0de7d955e46c3ea45088303b66ea8ab654b8ee113661f2ad73419b0628

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.13

File hashes

Hashes for falcon-3.1.2b1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 cae31286bef861d695e49e586641ba9be7a51ff2b1141821eb8fccba7f89633f
MD5 72067c5cfc743fd4e6487c78b72c527b
BLAKE2b-256 a8c57dffe36cba9f61704228497decb5033b195f5e9a31a7588fd4bf4e372936

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e608fc95fabd015ecc7a5a0b4e9398d51864fc7f3388baaa6fb70a7339c7a730
MD5 991338b408060769034bb4ab05dd166c
BLAKE2b-256 24c2097a9307f3712a41e19bf903614655fe99981db8a1468c77257c91c6e97e

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fcd539cc5e7a0074de58e4ab1032a868f50c7ef642cf70f97354092184dfb29a
MD5 f23c060801d0155192a2a70fff872ee9
BLAKE2b-256 610c61a817d8fb1f6bd7ce391417efdec2e724aa4a0858385af0264b851f92bc

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a4cbf17b9fd7e8a8d5f00ea9e74f6d447ebbbe5c90ea9c2e64e7faff450cfcca
MD5 13a6b171ab0191c2f2fb5d7e2dc6e1cf
BLAKE2b-256 d51c0060d07693f265d3987b9b7fe2e7cf7182d67b7237bf0fbf0c453b41c45d

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 68a3dd81bf86f0314665ef15bb55481c832c872b8058c4c69f4d6f0c44b86d4f
MD5 4ce9029f04b14cd08c9e205ae2fc7d56
BLAKE2b-256 7ae61374185681a087f19aec1ec865a5167a36d6d4b77add3cb1c9580650c36d

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for falcon-3.1.2b1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7ae4305773146eb0b62cf0efafdb7d49f5cd9dc36ec73a45b8bd2436ee6adec3
MD5 cdb9bb55b11e0b943a4328c3c0c27c3b
BLAKE2b-256 cdc22f0719d486f5b985a05c1776b0afa7cc60e49d4a4dfa053e340b2ce7cce6

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6c1053d173f84a5dc19547dffdfa317ba4fcbf55e2c7db9c17d1caca7cbb0c0e
MD5 bb125a5d064efd21257b050419ed5c0c
BLAKE2b-256 b5874e0870d88b377c5119caa6d16eb56f891c3bc90a9efcae3b9797a2604faf

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 1982e8177faf2be1a3992257dd5d176781619e952aa3d2ca11d087a2462c0e59
MD5 d64dd393e9880936762240332b64f14d
BLAKE2b-256 d8dcb7c6f46d3dc6da796f6a866d4e4c81bdff6751776794fd7b3adc2736296a

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2891517740ee0cdc51e347838f7f8638781e98868ed38706dbbb6ca03ec1ab08
MD5 78ac32d7d0ce64214d32f172e51b75d9
BLAKE2b-256 c3fbb0294b3c0d6c22ed6224cb1cb141adb2b4bd22394d7d55ce046392934019

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 865761ee38f77006363b9b9329e88a5f7897fc4b57381c41f53b839560827cd9
MD5 8563f818c8d8619d1c536eaa8f1145ea
BLAKE2b-256 2020a9b89eaee5d2e40200ca94cd6eb6aa373da581c172816d6f35feb522d280

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.9

File hashes

Hashes for falcon-3.1.2b1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 93312baf74bbf949a23a8290cb7d0dc94a96436e21db6636edc46ac54cfc996e
MD5 84a57cf486f4683d456bc3ad5d992039
BLAKE2b-256 711e832716364a19b20dbd929c51545481358693327625ffa94e761bd55f078e

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 af4f61fa37c5e4835b59d768d685baf4eb9348380f6806707e2e6628689d696a
MD5 ad2acea75e00d8b3463389f24250c237
BLAKE2b-256 76d6b15926fbae1a4f3109c8c7487fafd5b980132b0392ac2e53165646ac0938

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp37-cp37m-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.2b1-cp37-cp37m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9b5c38527b59c6228f3b210fdb500dc62b1f14f345af53b49fa4656bc0de5d04
MD5 abe38a87d6841dd23ea1c86770e103cb
BLAKE2b-256 886f8a57fa3afc904ac01a409c279deea091a8f80c00b08f85a1e93ed5d86ef3

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/1.0.0 urllib3/1.26.18 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8

File hashes

Hashes for falcon-3.1.2b1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7dfe96ad5bc3a366dd9e8de5a7cdced922059793746060930632abfd9c278a98
MD5 89011e166eccfe8f8a693574926db571
BLAKE2b-256 87baf20c8b3b40e90d1cb7c4c449f584addea5b386965d18b061318b8249abcc

See more details on using hashes here.

File details

Details for the file falcon-3.1.2b1-cp36-cp36m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: falcon-3.1.2b1-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/1.0.0 urllib3/1.26.18 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.15

File hashes

Hashes for falcon-3.1.2b1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 5b20cd30a9224df0e5b294f249f430ff4b20d4ad6375258555114c7c6dd38bd7
MD5 bb820b76f9f07b73b5e321e574864017
BLAKE2b-256 e48cd236370ca9e93a1596f98f759b7c4b99701141e15f6f1e90bc425b3c0368

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page