Skip to content

Instantly share code, notes, and snippets.

View vytas7's full-sized avatar

Vytautas Liuolia vytas7

View GitHub Profile
@vytas7
vytas7 / error_handling.py
Last active March 22, 2024 19:39
Falcon error handling examples
import falcon
import falcon.routing
class FloatConverter(falcon.routing.BaseConverter):
def convert(self, value):
try:
return float(value)
except ValueError:
return None
@vytas7
vytas7 / proxy.py
Created April 25, 2019 17:13
Falcon proxying example using a sink (tested with Falcon 2.0.0rc4 and CPython 3.7)
import io
import falcon
import requests
class Proxy(object):
"""Try, for instance ``/examples/forms1.html``."""
UPSTREAM = 'https://www.simplehtmlguide.com'
@vytas7
vytas7 / aioboto3_upload.py
Created July 26, 2022 08:12
Upload files from a multipart form directly to S3 (Falcon ASGI)
import logging
import aioboto3
import falcon.asgi
logging.basicConfig(
format='%(asctime)s [%(levelname)s] %(message)s', level=logging.INFO
)
@vytas7
vytas7 / async_deps.py
Last active May 29, 2022 13:29
Falcon: inject params from async context managers
import logging
import aiohttp
import falcon
import falcon.asgi
# NOTE(vytas): Useful since ASGI otherwise has nothing like wsgierrors.
logging.basicConfig(
format='%(asctime)s [%(levelname)s] %(message)s', level=logging.INFO)
@vytas7
vytas7 / multipart.rst
Last active May 10, 2022 11:20
Multipart form handling in Falcon proposal

multipart/form-data handling in Falcon proposal

Design philosophy

Multipart form handling should be performant, straightforward, and leave full control of the parsing process to the user, i.e. no surprising magic such as automatic creation of large files and saving anything there by default (although tools/helpers may exist to assist in that too).

@vytas7
vytas7 / texthandler.py
Last active March 12, 2022 18:40
text/plain media handler for Falcon
import cgi
import functools
import falcon
class TextHandler(falcon.media.BaseHandler):
DEFAULT_CHARSET = 'utf-8'
@classmethod
@vytas7
vytas7 / hybridapp.py
Last active February 8, 2022 15:46
Hybrid ASGI/WSGI app in the same process
#!/usr/bin/env python
import asyncio
import logging
import threading
import uuid
import falcon
import falcon.asgi
import gunicorn.app.base
import uvicorn
@vytas7
vytas7 / proxy.py
Created August 17, 2021 16:32
Proxying a website with Falcon ASGI + httpx
import falcon.asgi
import httpx
class Proxy(object):
UPSTREAM = 'https://falconframework.org'
def __init__(self):
self._client = httpx.AsyncClient()
@vytas7
vytas7 / asgi-multipart.rst
Last active April 23, 2021 08:15
ASGI multipart form handling
@vytas7
vytas7 / instrumentation.py
Created April 20, 2021 06:48
Discussed on falconry/user: how to implement a basic instrumentation plugin using middleware
import random
import time
import uuid
import falcon
class RequestMonitor:
def __init__(self, req, resp):