diff --git a/frida/_frida/__init__.pyi b/frida/_frida/__init__.pyi index b5abab1a..7e5111f1 100644 --- a/frida/_frida/__init__.pyi +++ b/frida/_frida/__init__.pyi @@ -775,6 +775,20 @@ class Compiler(Object): ... class PackageManager(Object): + @property + def registry(self) -> str: + """ + The registry being used. + """ + ... + + @registry.setter + def registry(self, value: str) -> None: + """ + Change the registry to use. + """ + ... + def search( self, query: str, diff --git a/frida/_frida/extension.c b/frida/_frida/extension.c index aa5a482c..522ab718 100644 --- a/frida/_frida/extension.c +++ b/frida/_frida/extension.c @@ -538,6 +538,8 @@ static gboolean PyCompiler_set_options (FridaCompilerOptions * options, const gc static int PyPackageManager_init (PyPackageManager * self, PyObject * args, PyObject * kw); static void PyPackageManager_dealloc (PyPackageManager * self); static PyObject * PyPackageManager_repr (PyPackageManager * self); +static PyObject * PyPackageManager_get_registry (PyPackageManager * self, void * closure); +static int PyPackageManager_set_registry (PyPackageManager * self, PyObject * val, void * closure); static PyObject * PyPackageManager_search (PyPackageManager * self, PyObject * args, PyObject * kw); static PyObject * PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * kw); static FridaPackageInstallOptions * PyPackageManager_parse_install_options (const gchar * project_root, PyObject * specs_value); @@ -783,6 +785,12 @@ static PyMethodDef PyCompiler_methods[] = { NULL } }; +static PyGetSetDef PyPackageManager_getset[] = +{ + { "registry", (getter) PyPackageManager_get_registry, (setter) PyPackageManager_set_registry, "The registry to use.", NULL }, + { NULL } +}; + static PyMethodDef PyPackageManager_methods[] = { { "search", (PyCFunction) PyPackageManager_search, METH_VARARGS | METH_KEYWORDS, "Search for packages to install." }, @@ -969,6 +977,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.PackageManager", PackageManager, GObject, NULL, fri { Py_tp_init, PyPackageManager_init }, { Py_tp_dealloc, PyPackageManager_dealloc }, { Py_tp_repr, PyPackageManager_repr }, + { Py_tp_getset, PyPackageManager_getset }, { Py_tp_methods, PyPackageManager_methods }, ); @@ -5074,6 +5083,25 @@ PyPackageManager_repr (PyPackageManager * self) return result; } +static PyObject * +PyPackageManager_get_registry (PyPackageManager * self, void * closure) +{ + return PyUnicode_FromString (frida_package_manager_get_registry (PY_GOBJECT_HANDLE (self))); +} + +static int +PyPackageManager_set_registry (PyPackageManager * self, PyObject * val, void * closure) +{ + gchar * registry; + + if (!PyGObject_unmarshal_string (val, ®istry)) + return -1; + frida_package_manager_set_registry (PY_GOBJECT_HANDLE (self), registry); + g_free (registry); + + return 0; +} + static PyObject * PyPackageManager_search (PyPackageManager * self, PyObject * args, PyObject * kw) { diff --git a/frida/core.py b/frida/core.py index b426336d..b183b7a3 100644 --- a/frida/core.py +++ b/frida/core.py @@ -1675,6 +1675,14 @@ def __init__(self) -> None: def __repr__(self) -> str: return repr(self._impl) + @property + def registry(self): + return self._impl.registry + + @registry.setter + def registry(self, value): + self._impl.registry = value + @cancellable def search( self,