Merge branch

'GP-0_ryanmkurtz_PR-8727_niooss-ledger_pyghidra-fix-contextmanager-type-annotations'
into Ghidra_12.0 (Closes #8727)
This commit is contained in:
Ryan Kurtz
2025-12-03 11:13:55 -05:00
5 changed files with 15 additions and 14 deletions

View File

@@ -69,7 +69,7 @@ def open_project(
path: Union[str, Path],
name: str,
create: bool = False
) -> "Project": # type: ignore
) -> "Project":
"""
Opens the Ghidra project at the given location, optionally creating it if it doesn't exist.
@@ -126,7 +126,7 @@ def consume_program(
def program_context(
project: "Project",
path: Union[str, Path],
) -> "Program":
) -> Generator["Program", None, None]:
"""
Gets the Ghidra program from the given project with the given project path. The returned
program's resource cleanup is performed by a context manager.
@@ -180,7 +180,7 @@ def ghidra_script(
def transaction(
program: "Program",
description: str = "Unnamed Transaction"
):
) -> Generator[int, None, None]:
"""
Creates a context for running a Ghidra transaction.
@@ -339,7 +339,7 @@ def open_program(
loader: Union[str, JClass] = None,
program_name: str = None,
nested_project_location = True
) -> ContextManager["FlatProgramAPI"]: # type: ignore
) -> Generator["FlatProgramAPI", None, None]:
"""
Opens given binary path (or optional program name) in Ghidra and returns FlatProgramAPI object.

View File

@@ -15,7 +15,7 @@
##
import sys
import contextlib
from typing import Union, TYPE_CHECKING, Tuple, List, Callable, Any, Optional
from typing import Union, TYPE_CHECKING, Tuple, List, Callable, Generator, Any, Optional
from pyghidra.converters import * # pylint: disable=wildcard-import, unused-wildcard-import
@@ -61,7 +61,7 @@ def open_project(
path: Union[str, Path],
name: str,
create: bool = False
) -> "Project": # type: ignore
) -> "Project":
"""
Opens the Ghidra project at the given location, optionally creating it if it doesn't exist.
@@ -142,7 +142,7 @@ def consume_program(
def program_context(
project: "Project",
path: Union[str, Path],
) -> "Program":
) -> Generator["Program", None, None]:
"""
Gets the Ghidra program from the given project with the given project path. The returned
program's resource cleanup is performed by a context manager.
@@ -256,7 +256,7 @@ def ghidra_script(
def transaction(
program: "Program",
description: str = "Unnamed Transaction"
):
) -> Generator[int, None, None]:
"""
Creates a context for running a Ghidra transaction.

View File

@@ -15,7 +15,7 @@
##
import contextlib
import warnings
from typing import Union, TYPE_CHECKING, Tuple, ContextManager, List, Optional
from typing import Union, TYPE_CHECKING, Tuple, Generator, List, Optional
from pyghidra.converters import * # pylint: disable=wildcard-import, unused-wildcard-import
@@ -179,7 +179,7 @@ def open_program(
loader: Union[str, JClass] = None,
program_name: str = None,
nested_project_location = True
) -> ContextManager["FlatProgramAPI"]: # type: ignore
) -> Generator["FlatProgramAPI", None, None]:
"""
Opens given binary path (or optional program name) in Ghidra and returns FlatProgramAPI object.

View File

@@ -22,6 +22,7 @@ import sys
import threading
import types
from code import InteractiveConsole
from typing import Generator
from ghidra.app.script import ScriptControls
from ghidra.framework import Application
@@ -276,7 +277,7 @@ class PyConsole(InteractiveConsole):
self.reset()
@contextlib.contextmanager
def redirect_writer(self):
def redirect_writer(self) -> Generator[None, None, None]:
self._writer = self._err
try:
yield
@@ -292,7 +293,7 @@ class PyConsole(InteractiveConsole):
super().showtraceback()
@contextlib.contextmanager
def _run_context(self):
def _run_context(self) -> Generator[None, None, None]:
self._script.start()
success = False
try:

View File

@@ -29,7 +29,7 @@ import tempfile
import threading
from importlib.machinery import ModuleSpec
from pathlib import Path
from typing import List, NoReturn, Tuple, Union
from typing import Generator, List, NoReturn, Tuple, Union
import jpype
from jpype import imports, _jpype
@@ -43,7 +43,7 @@ logger = logging.getLogger(__name__)
@contextlib.contextmanager
def _silence_java_output(stdout=True, stderr=True):
def _silence_java_output(stdout=True, stderr=True) -> Generator[None, None, None]:
from java.io import OutputStream, PrintStream # type:ignore @UnresolvedImport
from java.lang import System # type:ignore @UnresolvedImport
out = System.out