From e8660437a5295eef0fe7dc50b05bdd9717800453 Mon Sep 17 00:00:00 2001 From: Oracle Date: Sat, 2 Aug 2025 08:36:00 +0200 Subject: [PATCH] Added timeout context manager finally --- asyncron/base/admin.py | 27 ++++++++++++++++++++++----- asyncron/models.py | 19 ++++++++++++++----- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/asyncron/base/admin.py b/asyncron/base/admin.py index 20fa562..0b0460c 100644 --- a/asyncron/base/admin.py +++ b/asyncron/base/admin.py @@ -16,15 +16,32 @@ class BaseModelAdmin( admin.ModelAdmin ): self.message_user( request, mark_safe(f""" Error For {id}: -
{escape(e)}
- [TraceBack] +
{escape(e)}
+
{escape(traceback_message)}
"""), messages.ERROR ) - else: self.message_user( request, f"Error For {id}: {e}", messages.ERROR) + else: self.message_user( request, f"Error For {id}: {escape(e)}", messages.ERROR) if failed == 0: self.message_user( request, f"All {len(results)} Succeeded!", messages.SUCCESS ) diff --git a/asyncron/models.py b/asyncron/models.py index 196ea8a..d85bce6 100644 --- a/asyncron/models.py +++ b/asyncron/models.py @@ -194,11 +194,20 @@ class Trace( BaseModel ): await self.asave() try: - if self.task.self_aware: - output = await func(self, *self.args, **self.kwargs ) - else: - with patch( 'builtins.print', self.print ): - output = await func( *self.args, **self.kwargs ) + async with asyncio.timeout( None ) as tmcm: + + if self.task.timeout: + tmcm.reschedule( self.loop.time() + self.task.timeout.total_seconds() ) + + if self.task.self_aware: + output = await func(self, *self.args, **self.kwargs ) + else: + with patch( 'builtins.print', self.print ): + output = await func( *self.args, **self.kwargs ) + + except TimeoutError: + self.set_status( "E", f"Timed out" ) + self.stderr = traceback.format_exc() except Exception as e: self.set_status( "E", f"Exception: {e}" )