X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/73bd7038fbefdb1c6a61fa1edf16ff61613050a5..fb1ac6981257c91a1d3bf753d10e1091f05b001a:/blackd.py diff --git a/blackd.py b/blackd.py index 055f268..d79bfe7 100644 --- a/blackd.py +++ b/blackd.py @@ -1,5 +1,6 @@ import asyncio from concurrent.futures import Executor, ProcessPoolExecutor +from datetime import datetime from functools import partial import logging from multiprocessing import freeze_support @@ -10,7 +11,7 @@ import aiohttp_cors import black import click -from _version import version as __version__ +from _black_version import version as __version__ # This is used internally by tests to shut down the server prematurely _stop_signal = asyncio.Event() @@ -21,6 +22,7 @@ LINE_LENGTH_HEADER = "X-Line-Length" PYTHON_VARIANT_HEADER = "X-Python-Variant" SKIP_STRING_NORMALIZATION_HEADER = "X-Skip-String-Normalization" FAST_OR_SAFE_HEADER = "X-Fast-Or-Safe" +DIFF_HEADER = "X-Diff" BLACK_HEADERS = [ PROTOCOL_VERSION_HEADER, @@ -28,6 +30,7 @@ BLACK_HEADERS = [ PYTHON_VARIANT_HEADER, SKIP_STRING_NORMALIZATION_HEADER, FAST_OR_SAFE_HEADER, + DIFF_HEADER, ] # Response headers @@ -112,10 +115,25 @@ async def handle(request: web.Request, executor: Executor) -> web.Response: req_bytes = await request.content.read() charset = request.charset if request.charset is not None else "utf8" req_str = req_bytes.decode(charset) + then = datetime.utcnow() + loop = asyncio.get_event_loop() formatted_str = await loop.run_in_executor( executor, partial(black.format_file_contents, req_str, fast=fast, mode=mode) ) + + # Only output the diff in the HTTP response + only_diff = bool(request.headers.get(DIFF_HEADER, False)) + if only_diff: + now = datetime.utcnow() + src_name = f"In\t{then} +0000" + dst_name = f"Out\t{now} +0000" + loop = asyncio.get_event_loop() + formatted_str = await loop.run_in_executor( + executor, + partial(black.diff, req_str, formatted_str, src_name, dst_name), + ) + return web.Response( content_type=request.content_type, charset=charset,