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.1b1.tar.gz (647.1 kB view details)

Uploaded Source

Built Distributions

falcon-3.1.1b1-cp311-cp311-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11 Windows x86-64

falcon-3.1.1b1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (9.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

falcon-3.1.1b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

falcon-3.1.1b1-cp311-cp311-macosx_10_9_universal2.whl (3.6 MB view details)

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

falcon-3.1.1b1-cp310-cp310-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10 Windows x86-64

falcon-3.1.1b1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (8.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

falcon-3.1.1b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp310-cp310-macosx_10_15_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

falcon-3.1.1b1-cp39-cp39-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.9 Windows x86-64

falcon-3.1.1b1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (9.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

falcon-3.1.1b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (8.5 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp39-cp39-macosx_10_15_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

falcon-3.1.1b1-cp38-cp38-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.8 Windows x86-64

falcon-3.1.1b1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (9.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

falcon-3.1.1b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (9.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp38-cp38-macosx_10_15_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

falcon-3.1.1b1-cp37-cp37m-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.7m Windows x86-64

falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (8.5 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 MB view details)

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

falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (7.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64 manylinux: glibc 2.5+ x86-64

falcon-3.1.1b1-cp37-cp37m-macosx_10_15_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.7m macOS 10.15+ x86-64

falcon-3.1.1b1-cp36-cp36m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.6m Windows x86-64

falcon-3.1.1b1-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.1b1.tar.gz.

File metadata

  • Download URL: falcon-3.1.1b1.tar.gz
  • Upload date:
  • Size: 647.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for falcon-3.1.1b1.tar.gz
Algorithm Hash digest
SHA256 f80096205c920b4518669bd1c60f4e7c94c893776c28c7fd70c2eeae9d839164
MD5 6b8881b4c41ae7d21c30d9f6d1cc849a
BLAKE2b-256 61b18fcc794322f6e31b138d22d83cb9edc8f49a1276b8d20440e668d4de8b97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 19a98a70b4469a70fecf3d8589025808e94049640dd56051fbb07166d8bb3cf7
MD5 28a331e04e2768c04fac3057b5bad8d1
BLAKE2b-256 0bcd9d6cdda4b6aa70ef63bd1b1b1b924434de8dd7f949199b62b5a183a6e0ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 c9d1332f8a736a0e8680659711d657a6f2f57de5c15545397191bdebf5711a23
MD5 e1f94f15210598160e0298810062b930
BLAKE2b-256 da3355ef3fe306c8c9aa012d6ff4aebf9d686cdc9b421997de6c3f7e881286b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b5050194683c7e6a7b7ba3e21172626c038f5321f20dc27087fc1438155073f0
MD5 b81b01e0ac74ac11ec6203044fe3a34a
BLAKE2b-256 6dd25d2632715a8611e76c24a2309eea4778cdb8d8e1c15493ffcb25cd551836

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 730ef1da068a1287ab2c37421ed29d96211ddc8b1f949820b32af01114247f21
MD5 1365564a645b205a93bfe9d2bc1682ef
BLAKE2b-256 9afaa4549df32edbb12f3f89f1a571a612ae9243f66c6fa0d3057326f7ac302f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 eba5ecdb92e85df47788e026dc0f1805a80307ce4d0aced9f8e42a5df9ff876c
MD5 ce40c07fda205213b79476a73b14f6eb
BLAKE2b-256 c5b7ddc5be9abc5e7ead21861568065cf3332cf33db1a4cae4f64430146694b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 4b40e155b7ca2ba6f3eb8c0d13ccec62a317707d99dae6650f2823a4640a3924
MD5 2469ffa118f5206263934f98e3689296
BLAKE2b-256 faf956000317e12fae74e0c9f4973034fc05a0f8ca8dde457bbc41b3965e2d2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9cf65ce63a2b787509912d029b222fa5419331204531552ec248331764d035ae
MD5 87ebf7ae6314e7c4c0ba0201580ae412
BLAKE2b-256 2e2fc29f4f004c3c549dded31a6344d04545b085dcff8af9b01c9309ae19e5af

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7e05683f7d5727527daa7868605c36c2711a75dd2b71932e588455109e21c8b5
MD5 fa68a8fb358e4d4531c3f2e97a9eafe1
BLAKE2b-256 a07d879cd1247f2a9934ee412edd09a6d6dc4f95229ab38bcd15bfcdad37201e

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 65abc813a6ae4c8f5661981947e476759ee8aa310bc82cb0096dec889311c68d
MD5 514b96d165975541b5224c939aa42b70
BLAKE2b-256 ee0fd2ac665d9d81747ce5eb11f7855a297e863a2b519a0f132bce6b5d2294d2

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 9eeac6da26a771cddd71f136baec32cc753d0661794740bc886db218b87e5f41
MD5 f2b85078e8b54c0158aab81632c128de
BLAKE2b-256 8255bdecaf4cf7ac96362ae89c00deed107e79888c790bad02b056cb560d4c84

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3fe5c7601a1a93bed429f373fe12fe1f17af5547d0227331247f8c5e2b2832c4
MD5 af1290b22853a1faa16479b9b6661d2b
BLAKE2b-256 5ce2086a5f80b96b60719bf5b85c611d633016e9ec1a985a99bbdbbd4220f3d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 fed4c9ed014fabb9e666082761e0b9f6b39e97f00a80f0530af623f4d9f003d5
MD5 d3ffe192609b0eb8f328358faf1ff1f4
BLAKE2b-256 fed41432253dd1d6fd0ea3326d8523881bd8d03db6797606d5c54b7e8ddcd1dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a50b8bb2e36fc4d01361cbb193ce31805f0233a4145ca779f345b5f2f713cdf9
MD5 dcba4c1d854effb7bc538e155d9028c1
BLAKE2b-256 4dac2c7d125bd0b3b1e7d84305bba16cc076a0c24e3c085279718fba54d1dadf

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c875ebf2f091b5b8c295987331d919310641b21b7058e66272994f8a3531f302
MD5 55b26b8d85ed53b732bd7a789aa0b838
BLAKE2b-256 bd340e00e19176d6ac2a963868e69133deca2fa7fea9b547605c39839034efb7

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 34a2d002d955dfc61a3d56aa637b98a623a31b6ff7b760bcf688b16f551df8ad
MD5 d7d786ae79add2424bbf64572c205ace
BLAKE2b-256 ffe5295a0483368e33968233c3d4be06ab692f400c5d5573c3ed3d924aed0515

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 176e6f43d9c8bdcb40f07452e52fec7968a7907c753061ada0e683bb4be3f35a
MD5 ddaf5ce7f5d90a100219ec01167e3a43
BLAKE2b-256 4353c5b7f4713e39f5db6072661cb0ddabdb6947d618c00d56358c5956cf00d7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 322a7d326eba61b5c1b696b43a5700db52428413a20cda2acef429beb4bb86ef
MD5 64c580175d4a87e681fba79de48d9148
BLAKE2b-256 dc7596655fe32b9619dac909477894f6b01f115c2f128217ca3cb0f04facdfe7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 4301940a406e8d628f5f33f16b5f9b68694788b28dd7e3ee5b2c6d36ae89a9ab
MD5 e9b879c7820eeff21ea22a56cbbcdf44
BLAKE2b-256 11958be0c1485c7bc9e41ebbbf7d956df2b6b13ee38be57750d0eeb055e7a64a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 14f7f36aa7a14e51304b1c62648d06bfc0e2ceae59ded25f24aade09e2a3b62c
MD5 3874b9304cdae5a85d112ca78bdc79cc
BLAKE2b-256 f25e7e0b813b05a5a1361a53fe52b8b812e9ea759789d3be7c15541cd6d835c3

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9b513c7f8300960e286a4008ddea9d284a9b580253110bb60be259b35cd0495
MD5 60edc1b0b70d929ec1da561a2bf40b38
BLAKE2b-256 03f7a8ed6ab2cc478df64176c7233c43a60243e7ad71c88d45640da59dc33108

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f8afe9ef5a8c4f6e40b45e408bc0a8822553ae8a61587cd6df388d32597f370a
MD5 a43950c27cd03a05de8746f16ac89bff
BLAKE2b-256 c707d25fe6c1bca79bb509f7fe514547d734d50b39a00fbcbd3af4929a1ec11f

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 126268c366f1750332f17feb4268a0f443b38c8d3528c6413d2bb7b404c86de2
MD5 c174f5c87b57ef771d3558a9a603e51f
BLAKE2b-256 ecd48f88ff146da429a43f6cda0a82fee15f19d6561334b01a335fded71ef7e6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 28347d1fb07c36caea8473586ce38e5ebb963d8c96d7c50e3abef6bc9acafeb4
MD5 ca4d97eccfe14eae00b4f64dd50ba30b
BLAKE2b-256 5f84934ca81d32ff64a64becf123b412077ea6d6486ed453aca6aab777b5bf39

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 da8d0fe4845ebd3c47b52a9d598d5a45184064dc3d70b41790458b08465a3fb9
MD5 6bbe65326badb371750d63d32f37ff55
BLAKE2b-256 bac25545ee526618962c53565496c84f80e1f4186b986a1b568084b24948902d

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 16044fbde2a5d12fd52cd6df8968717b94f0567cd377a02e61cfd6a8b055033b
MD5 ab75f68aee06ae6c4e3cb92849ae568d
BLAKE2b-256 b9641fde3dace0e24af21c26b91267e05ac987cea63d1a481d8e009f94fcae98

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f075aa00bb59323fa7b3175ce1f4219f9126c7b191695f71c45b1e4db8a5e466
MD5 83ecbcc47a53e7b6988417612c376e94
BLAKE2b-256 b0c0b5cabaf8b38748cf9c0043aa4e975ac9cee47ccd0a57ea698a44ab90f8ab

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b09f66eb9f28d3ecb9d2645773abf41ceea081cfad85a4a8ae0e5d6e7445ae88
MD5 41a1e9b6bf8620a7a75b5695f26f99ad
BLAKE2b-256 8ad2d046f26284891995dd78ca30534a0da1739e1cfb5f476c7fef87ee6b3c63

See more details on using hashes here.

File details

Details for the file falcon-3.1.1b1-cp37-cp37m-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for falcon-3.1.1b1-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ad5a66e7303e9b13a5e25f958161ff920b96f6492b624bc5082b6ccdd83159c7
MD5 73d42f513370442ca884d8da5bbe2616
BLAKE2b-256 60487a9dffa7d5a24b1a1c159113c67edea6a7a530823c7317864044c0a6fa62

See more details on using hashes here.

File details

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

File metadata

  • Download URL: falcon-3.1.1b1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.1 urllib3/1.26.12 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.1b1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 c77b6f29814aaeb0a7e37f7eee092161e7ccd9a5c0ab57202268d623aac8de42
MD5 8c2ffda811d6b6a78f87d646d4dc78fd
BLAKE2b-256 f3ddcc789ddaf90c8f0e02546ff78b77ab635ac07867a1936b88c9ed9a3ab33a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: falcon-3.1.1b1-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.8.3 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.10.1 urllib3/1.26.12 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.1b1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 bc1ff7e17052c64d2ff630960de978bb6335f145b8bd0c7206b38cd3df6ccebc
MD5 5c5b09eaba390ed5c94da9d95872de53
BLAKE2b-256 127e01a819c39bc3fa02405668ba9467b38b58b9867945dba7eaccdda5a226dc

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