65 lines
2 KiB
Python
65 lines
2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
#
|
||
|
# ixkit - odoo spy
|
||
|
#
|
||
|
#@purpose : inject new method |replace exist method on target class
|
||
|
#@author : Artificer@ixkit.com
|
||
|
#@date : 2024-2-15
|
||
|
#@version : 1.0.0
|
||
|
#
|
||
|
#-----------------------------------------------------------------------
|
||
|
|
||
|
from odoo.addons.base.models.ir_qweb import IrQWeb
|
||
|
from odoo.addons.base.models.assetsbundle import XMLAsset
|
||
|
|
||
|
from ..addons.base.models import ir_qweb_up
|
||
|
from ..addons.base.models import assetsbundle_up
|
||
|
|
||
|
|
||
|
from ...land.lang.pattern import singleton
|
||
|
from ...land.lang import class_helper
|
||
|
|
||
|
from odoo.http import Session
|
||
|
from ..root.http_up import __setattr__,clear
|
||
|
|
||
|
@singleton
|
||
|
class Injector(object):
|
||
|
|
||
|
def __init__(self):
|
||
|
self._reset()
|
||
|
|
||
|
def _reset(self):
|
||
|
self.qweb_load = None
|
||
|
self.asset_fetch_content = None
|
||
|
self.session__setattr__ = None
|
||
|
self.session_clear = None
|
||
|
|
||
|
def hook(self):
|
||
|
if (not self.qweb_load is None):
|
||
|
return True
|
||
|
|
||
|
self.qweb_load = class_helper.set_class_method(IrQWeb,ir_qweb_up._load,back_orginal=True)
|
||
|
|
||
|
self.asset_fetch_content = class_helper.set_class_method(XMLAsset,assetsbundle_up._fetch_content,back_orginal=True)
|
||
|
|
||
|
self.session__setattr__ = class_helper.set_class_method(Session,__setattr__,back_orginal=True)
|
||
|
self.session_clear = class_helper.set_class_method(Session,clear,back_orginal=True)
|
||
|
|
||
|
return True
|
||
|
|
||
|
def unhook(self):
|
||
|
if (not self.qweb_load is None):
|
||
|
class_helper.set_class_method(IrQWeb,self.qweb_load)
|
||
|
|
||
|
if (not self.asset_fetch_content is None):
|
||
|
class_helper.set_class_method(XMLAsset,self.asset_fetch_content)
|
||
|
|
||
|
if (not self.session__setattr__ is None):
|
||
|
class_helper.set_class_method(Session,self.session__setattr__)
|
||
|
|
||
|
if (not self.session_clear is None):
|
||
|
class_helper.set_class_method(Session,self.session_clear)
|
||
|
|
||
|
self._reset()
|
||
|
|
||
|
return True
|