2727from fastapi .templating import Jinja2Templates
2828from jinja2 .exceptions import TemplateNotFound
2929from pydantic import constr
30- from pyflakes import ( reporter , checker )
30+ from pyflakes import checker as pyflakes_checker
3131
3232# Local application imports
3333# -------------------------
5858 tags = ["books" ],
5959)
6060
61-
61+
62+
6263@router .post ("/python_check" )
6364async def python_check (request : Request ):
6465 """
6566 Takes a chunk of Python code and runs a syntax checker (currently
6667 Pyflakes) on it to provide more detailed advice than is available
6768 via Skulpt.
68-
69- Caller must provide:
70- * ``code`` -- the Python code to check
7169 """
7270 code_bytes = await request .body ()
7371 code = code_bytes .decode ("utf-8" )
@@ -77,13 +75,12 @@ async def python_check(request: Request):
7775 resultMessage = ""
7876 try :
7977 tree = ast .parse (code , filename = filename )
80- w = checker .Checker (tree , filename = filename )
78+ w = pyflakes_checker .Checker (tree , filename = filename )
79+ w .messages .sort (key = lambda m : m .lineno )
80+ for m in w .messages :
81+ resultMessage = resultMessage + str (m ) + "\n "
8182 except SyntaxError as e :
82- textOut = io .StringIO ()
83- reporter = reporter .Reporter (textOut , textOut )
84- reporter .syntaxError (filename , e .args [0 ], e .lineno , e .offset , e .text )
85- textOut .seek (0 )
86- resultMessage = textOut .read ()
83+ resultMessage = filename + ":" + str (e .lineno ) + ":" + str (e .offset ) + ": " + e .args [0 ] + "\n "
8784
8885 return resultMessage
8986
0 commit comments