feat(assessment): auto comprehensive assessment - rules engine from college scoring standard, per-semester stats, manual overrides, word export
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# types
|
||||
if False:
|
||||
from typing import IO
|
||||
|
||||
|
||||
trace_file: IO[str] | None = None
|
||||
if trace_filename := os.environ.get("PYREPL_TRACE"):
|
||||
trace_file = open(trace_filename, "a")
|
||||
|
||||
|
||||
|
||||
if sys.platform == "emscripten":
|
||||
from posix import _emscripten_log
|
||||
|
||||
def trace(line: str, *k: object, **kw: object) -> None:
|
||||
if "PYREPL_TRACE" not in os.environ:
|
||||
return
|
||||
if k or kw:
|
||||
line = line.format(*k, **kw)
|
||||
_emscripten_log(line)
|
||||
|
||||
else:
|
||||
def trace(line: str, *k: object, **kw: object) -> None:
|
||||
if trace_file is None:
|
||||
return
|
||||
if k or kw:
|
||||
line = line.format(*k, **kw)
|
||||
trace_file.write(line + "\n")
|
||||
trace_file.flush()
|
||||
|
||||
|
||||
def trace_text(text: str, limit: int = 60) -> str:
|
||||
if len(text) > limit:
|
||||
text = text[:limit] + "..."
|
||||
return repr(text)
|
||||
Reference in New Issue
Block a user