Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -27,6 +27,13 @@ import sys
|
|
| 27 |
# ==============================================================================
|
| 28 |
# LOGGING (Task 5)
|
| 29 |
# ==============================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
IST = timezone(timedelta(hours=5, minutes=30))
|
| 31 |
logging.Formatter.converter = lambda *args: datetime.fromtimestamp(args[-1], tz=IST).timetuple()
|
| 32 |
|
|
@@ -35,6 +42,7 @@ class PrintHandler(logging.Handler):
|
|
| 35 |
try:
|
| 36 |
msg = self.format(record)
|
| 37 |
print(msg, flush=True)
|
|
|
|
| 38 |
except Exception:
|
| 39 |
self.handleError(record)
|
| 40 |
|
|
@@ -58,7 +66,13 @@ root_logger.addHandler(stdout_handler)
|
|
| 58 |
|
| 59 |
logger = logging.getLogger(__name__)
|
| 60 |
|
| 61 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
|
| 63 |
|
| 64 |
# ==============================================================================
|
|
@@ -689,7 +703,7 @@ def start_loop():
|
|
| 689 |
FAST_MODE_UNTIL = 0
|
| 690 |
time.sleep(sleep_seconds)
|
| 691 |
continue
|
| 692 |
-
|
| 693 |
process_tick()
|
| 694 |
|
| 695 |
# Polling loop: Wait in exact intervals without stacking HTTP request delays
|
|
|
|
| 27 |
# ==============================================================================
|
| 28 |
# LOGGING (Task 5)
|
| 29 |
# ==============================================================================
|
| 30 |
+
# Force line buffering for standard output to guarantee HF Spaces captures it
|
| 31 |
+
try:
|
| 32 |
+
sys.stdout.reconfigure(line_buffering=True)
|
| 33 |
+
sys.stderr.reconfigure(line_buffering=True)
|
| 34 |
+
except AttributeError:
|
| 35 |
+
pass # Python < 3.7 fallback
|
| 36 |
+
|
| 37 |
IST = timezone(timedelta(hours=5, minutes=30))
|
| 38 |
logging.Formatter.converter = lambda *args: datetime.fromtimestamp(args[-1], tz=IST).timetuple()
|
| 39 |
|
|
|
|
| 42 |
try:
|
| 43 |
msg = self.format(record)
|
| 44 |
print(msg, flush=True)
|
| 45 |
+
sys.stdout.flush()
|
| 46 |
except Exception:
|
| 47 |
self.handleError(record)
|
| 48 |
|
|
|
|
| 66 |
|
| 67 |
logger = logging.getLogger(__name__)
|
| 68 |
|
| 69 |
+
# Force Uvicorn and FastAPI to use our root logger
|
| 70 |
+
for log_name in ("uvicorn", "uvicorn.error", "uvicorn.access", "fastapi"):
|
| 71 |
+
l = logging.getLogger(log_name)
|
| 72 |
+
l.handlers = []
|
| 73 |
+
l.propagate = True
|
| 74 |
+
|
| 75 |
+
# Suppress Uvicorn's default access logs (spammy)
|
| 76 |
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
|
| 77 |
|
| 78 |
# ==============================================================================
|
|
|
|
| 703 |
FAST_MODE_UNTIL = 0
|
| 704 |
time.sleep(sleep_seconds)
|
| 705 |
continue
|
| 706 |
+
|
| 707 |
process_tick()
|
| 708 |
|
| 709 |
# Polling loop: Wait in exact intervals without stacking HTTP request delays
|