fix_ctp111234

This commit is contained in:
esam 2025-10-03 22:20:34 -04:00
parent ff6c20d946
commit f9450cc788
2 changed files with 2 additions and 13 deletions

View File

@ -26,7 +26,7 @@ class CtpDatabaseCleanUp(models.TransientModel):
_logger.info('Attempting to TRUNCATE table for model: %s (table: %s)', line, table_name) _logger.info('Attempting to TRUNCATE table for model: %s (table: %s)', line, table_name)
safe_table_name = table_name.replace('"', '""') safe_table_name = table_name.replace('"', '""')
sql = 'TRUNCATE TABLE "%s" RESTART IDENTITY CASCADE' % safe_table_name sql = 'DELETE FROM "%s"' % safe_table_name
self._cr.execute(sql) self._cr.execute(sql)
except Exception as e: except Exception as e:

View File

@ -1,24 +1,21 @@
import logging import logging
from odoo import api, models from odoo import api, models
# استخدام المسجل القياسي لإضافة رسائل تصحيح خاصة بهذا الموديول
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class MemoryLogHandler(logging.Handler): class MemoryLogHandler(logging.Handler):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.max_entries = 10000 # الاحتفاظ بآخر 10000 سجل self.max_entries = 10000
self.entries = [] self.entries = []
def emit(self, record): def emit(self, record):
# تجنب تسجيل الطلبات القادمة من العارض نفسه لمنع حلقة لا نهائية
if '/log_viewer/get_logs' in getattr(record, 'message', ''): if '/log_viewer/get_logs' in getattr(record, 'message', ''):
return return
self.entries.append(self.format(record)) self.entries.append(self.format(record))
# إزالة أقدم سجل إذا تجاوزنا الحد الأقصى
if len(self.entries) > self.max_entries: if len(self.entries) > self.max_entries:
self.entries.pop(0) self.entries.pop(0)
@ -27,31 +24,24 @@ class LogHandlerManager(models.AbstractModel):
_name = 'log.handler.manager' _name = 'log.handler.manager'
_description = 'Log Handler Manager' _description = 'Log Handler Manager'
# سنحتفظ بالمعالج كمتغير على مستوى الكلاس لضمان وجود نسخة واحدة فقط
_memory_handler = None _memory_handler = None
@api.model @api.model
def _get_memory_handler(self): def _get_memory_handler(self):
# هذه الدالة الآن أصبحت أبسط، فقط تعيد المعالج الموجود
return LogHandlerManager._memory_handler return LogHandlerManager._memory_handler
@api.model @api.model
def _register_hook(self): def _register_hook(self):
# هذه الدالة تُستدعى عند تحميل سجل الموديلات في أودو
if LogHandlerManager._memory_handler is None: if LogHandlerManager._memory_handler is None:
_logger.info("Initializing MemoryLogHandler for Odoo Log Viewer.") _logger.info("Initializing MemoryLogHandler for Odoo Log Viewer.")
# 1. إنشاء معالج السجلات الخاص بنا
handler = MemoryLogHandler() handler = MemoryLogHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter) handler.setFormatter(formatter)
# 2. الحصول على مسجل الجذر وإضافة معالجنا إليه
root_logger = logging.getLogger() root_logger = logging.getLogger()
root_logger.addHandler(handler) root_logger.addHandler(handler)
# 3. !! التغيير الرئيسي هنا !!
# ضبط المستوى على INFO لتجاهل رسائل DEBUG المزعجة.
if root_logger.level > logging.INFO: if root_logger.level > logging.INFO:
root_logger.setLevel(logging.INFO) root_logger.setLevel(logging.INFO)
@ -62,6 +52,5 @@ class LogHandlerManager(models.AbstractModel):
def get_log_entries(self): def get_log_entries(self):
handler = self._get_memory_handler() handler = self._get_memory_handler()
if handler: if handler:
# إرجاع نسخة من القائمة لتجنب المشاكل المتعلقة بالتزامن
return list(handler.entries) return list(handler.entries)
return [] return []