from concurrent.futures import Executor, ProcessPoolExecutor
from functools import partial
import logging
+from multiprocessing import freeze_support
from aiohttp import web
+import aiohttp_cors
import black
import click
LINE_LENGTH_HEADER = "X-Line-Length"
PYTHON_VARIANT_HEADER = "X-Python-Variant"
SKIP_STRING_NORMALIZATION_HEADER = "X-Skip-String-Normalization"
+SKIP_NUMERIC_UNDERSCORE_NORMALIZATION_HEADER = "X-Skip-Numeric-Underscore-Normalization"
FAST_OR_SAFE_HEADER = "X-Fast-Or-Safe"
+BLACK_HEADERS = [
+ VERSION_HEADER,
+ LINE_LENGTH_HEADER,
+ PYTHON_VARIANT_HEADER,
+ SKIP_STRING_NORMALIZATION_HEADER,
+ SKIP_NUMERIC_UNDERSCORE_NORMALIZATION_HEADER,
+ FAST_OR_SAFE_HEADER,
+]
+
@click.command(context_settings={"help_option_names": ["-h", "--help"]})
@click.option(
def make_app() -> web.Application:
app = web.Application()
executor = ProcessPoolExecutor()
- app.add_routes([web.post("/", partial(handle, executor=executor))])
+
+ cors = aiohttp_cors.setup(app)
+ resource = cors.add(app.router.add_resource("/"))
+ cors.add(
+ resource.add_route("POST", partial(handle, executor=executor)),
+ {
+ "*": aiohttp_cors.ResourceOptions(
+ allow_headers=(*BLACK_HEADERS, "Content-Type"), expose_headers="*"
+ )
+ },
+ )
+
return app
skip_string_normalization = bool(
request.headers.get(SKIP_STRING_NORMALIZATION_HEADER, False)
)
+ skip_numeric_underscore_normalization = bool(
+ request.headers.get(SKIP_NUMERIC_UNDERSCORE_NORMALIZATION_HEADER, False)
+ )
fast = False
if request.headers.get(FAST_OR_SAFE_HEADER, "safe") == "fast":
fast = True
mode = black.FileMode.from_configuration(
- py36=py36, pyi=pyi, skip_string_normalization=skip_string_normalization
+ py36=py36,
+ pyi=pyi,
+ skip_string_normalization=skip_string_normalization,
+ skip_numeric_underscore_normalization=skip_numeric_underscore_normalization,
)
req_bytes = await request.content.read()
charset = request.charset if request.charset is not None else "utf8"
return web.Response(status=500, text=str(e))
-if __name__ == "__main__":
+def patched_main() -> None:
+ freeze_support()
black.patch_click()
main()
+
+
+if __name__ == "__main__":
+ patched_main()