summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2024-10-11 13:52:56 -0400
committerJosh Ferrell <josh@vector35.com>2024-10-11 13:52:56 -0400
commitf93bedb63409c692487ed67fb4fb92442a4d4809 (patch)
tree1195339814c502527e0291b874440e3e80aee613 /python
parente77c00cbd7dc2dd48495214e441c38a11be5dfff (diff)
Move ScriptingProvider log messages to a dedicated logger
Diffstat (limited to 'python')
-rw-r--r--python/scriptingprovider.py64
1 files changed, 33 insertions, 31 deletions
diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py
index 60c50070..02b070fa 100644
--- a/python/scriptingprovider.py
+++ b/python/scriptingprovider.py
@@ -48,12 +48,14 @@ from . import settings
from . import binaryview
from . import basicblock
from . import function
-from .log import log_info, log_warn, log_error, is_output_redirected_to_log
+from . import log
from .pluginmanager import RepositoryManager
from .enums import ScriptingProviderExecuteResult, ScriptingProviderInputReadyState
_WARNING_REGEX = re.compile(r'^\S+:\d+: \w+Warning: ')
+logger = log.Logger(0, "ScriptingProvider")
+
class _ThreadActionContext:
_actions = []
@@ -94,26 +96,26 @@ class ScriptingOutputListener:
try:
self.notify_output(text)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _warning(self, ctxt, text):
try:
self.notify_warning(text)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _error(self, ctxt, text):
try:
self.notify_error(text)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _input_ready_state_changed(self, ctxt, state):
try:
self.notify_input_ready_state_changed(state)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def notify_output(self, text):
pass
@@ -163,40 +165,40 @@ class ScriptingInstance:
try:
self.__class__._registered_instances.append(self)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _external_ref_released(self, ctxt):
try:
self.__class__._registered_instances.remove(self)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _execute_script_input(self, ctxt, text):
try:
return self.perform_execute_script_input(text)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
return ScriptingProviderExecuteResult.InvalidScriptInput
def _execute_script_input_from_filename(self, ctxt, filename):
try:
return self.perform_execute_script_input_from_filename(filename)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
return ScriptingProviderExecuteResult.InvalidScriptInput
def _cancel_script_input(self, ctxt):
try:
return self.perform_cancel_script_input()
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
return ScriptingProviderExecuteResult.ScriptExecutionCancelled
def _release_binary_view(self, ctxt, view):
try:
binaryview.BinaryView._cache_remove(view)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _set_current_binary_view(self, ctxt, view):
try:
@@ -207,7 +209,7 @@ class ScriptingInstance:
view = None
self.perform_set_current_binary_view(view)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _set_current_function(self, ctxt, func):
try:
@@ -217,7 +219,7 @@ class ScriptingInstance:
func = None
self.perform_set_current_function(func)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _set_current_basic_block(self, ctxt, block):
try:
@@ -236,19 +238,19 @@ class ScriptingInstance:
block = None
self.perform_set_current_basic_block(block)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _set_current_address(self, ctxt, addr):
try:
self.perform_set_current_address(addr)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _set_current_selection(self, ctxt, begin, end):
try:
self.perform_set_current_selection(begin, end)
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
def _complete_input(self, ctxt, text, state):
try:
@@ -256,14 +258,14 @@ class ScriptingInstance:
text = text.decode("utf-8")
return core.BNAllocString(self.perform_complete_input(text, state))
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
return core.BNAllocString("")
def _stop(self, ctxt):
try:
self.perform_stop()
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
@abc.abstractmethod
def perform_execute_script_input(self, text):
@@ -427,7 +429,7 @@ class ScriptingProvider(metaclass=_ScriptingProviderMetaclass):
assert script_instance is not None, "core.BNNewScriptingInstanceReference returned None"
return ctypes.cast(script_instance, ctypes.c_void_p).value
except:
- log_error(traceback.format_exc())
+ logger.log_error(traceback.format_exc())
return None
def create_instance(self) -> Optional[ScriptingInstance]:
@@ -502,7 +504,7 @@ class _PythonScriptingInstanceOutput:
interpreter = PythonScriptingInstance._interpreter.value
if interpreter is None:
- if is_output_redirected_to_log():
+ if log.is_output_redirected_to_log():
self.buffer += data
while True:
i = self.buffer.find('\n')
@@ -513,11 +515,11 @@ class _PythonScriptingInstanceOutput:
if self.is_error_output:
if _WARNING_REGEX.match(line):
- log_warn(line)
+ logger.log_warn(line)
else:
- log_error(line)
+ logger.log_error(line)
else:
- log_info(line)
+ logger.log_info(line)
else:
self.orig.write(data)
else:
@@ -1090,11 +1092,11 @@ class PythonScriptingProvider(ScriptingProvider):
__import__(module)
return True
except KeyError:
- log_error(f"Failed to find python plugin: {repo_path}/{module}")
+ logger.log_error(f"Failed to find python plugin: {repo_path}/{module}")
except ImportError as ie:
- log_error(f"Failed to import python plugin: {repo_path}/{module}: {ie}")
+ logger.log_error(f"Failed to import python plugin: {repo_path}/{module}: {ie}")
except binaryninja.UIPluginInHeadlessError:
- log_info(f"Ignored python UI plugin: {repo_path}/{module}")
+ logger.log_info(f"Ignored python UI plugin: {repo_path}/{module}")
return False
# This function can only be used to execute commands that return ASCII-only output, otherwise the decoding will fail
@@ -1209,13 +1211,13 @@ class PythonScriptingProvider(ScriptingProvider):
python_env = self._get_python_environment(using_bundled_python=not python_lib)
python_bin, status = self._get_executable_for_libpython(python_lib, python_bin_override, python_env=python_env)
if python_bin is not None and not self._pip_exists(str(python_bin), python_env=python_env):
- log_error(
+ logger.log_error(
f"Pip not installed for configured python: {python_bin}.\n"
"Please install pip or switch python versions."
)
return False
if python_bin is None:
- log_error(
+ logger.log_error(
f"Unable to discover python executable required for installing python modules: {status}\n"
"Please specify a path to a python binary in the 'Python Path Override'"
)
@@ -1226,7 +1228,7 @@ class PythonScriptingProvider(ScriptingProvider):
], env=python_env).decode("utf-8")
python_lib_version = f"{sys.version_info.major}.{sys.version_info.minor}"
if (python_bin_version != python_lib_version):
- log_error(
+ logger.log_error(
f"Python Binary Setting {python_bin_version} incompatible with python library {python_lib_version}"
)
return False
@@ -1251,12 +1253,12 @@ class PythonScriptingProvider(ScriptingProvider):
site_package_dir.mkdir(parents=True, exist_ok=True)
args.extend(["--target", str(site_package_dir)])
args.extend(list(filter(len, modules.split("\n"))))
- log_info(f"Running pip {args}")
+ logger.log_info(f"Running pip {args}")
status, result = self._run_args(args, env=python_env)
if status:
importlib.invalidate_caches()
else:
- log_error(f"Error while attempting to install requirements {result}")
+ logger.log_error(f"Error while attempting to install requirements {result}")
return status
def _module_installed(self, ctx, module: str) -> bool: