Compare commits

..

100 Commits

Author SHA1 Message Date
Ole André Vadla Ravnås d28a2a4988 subprojects: Prepare for release 2026-01-23 22:31:27 +01:00
Ole André Vadla Ravnås 1fc39289ef subprojects: Bump outdated 2026-01-23 22:30:37 +01:00
Ole André Vadla Ravnås 2c757a08f3 subprojects: Prepare for release 2026-01-20 23:12:51 +01:00
Ole André Vadla Ravnås fc735c048f subprojects: Bump outdated 2026-01-20 23:09:30 +01:00
Ole André Vadla Ravnås 4d84536160 subprojects: Bump outdated 2026-01-20 20:26:47 +01:00
Ole André Vadla Ravnås 9e51c78c5c submodules: Bump releng 2026-01-20 20:26:47 +01:00
Ole André Vadla Ravnås a6d51e8384 subprojects: Bump outdated 2026-01-20 18:54:35 +01:00
Ole André Vadla Ravnås 3e80ed726d submodules: Bump releng 2026-01-20 18:54:35 +01:00
Ole André Vadla Ravnås 985410b6ff subprojects: Prepare for release 2026-01-17 08:43:35 +01:00
Ole André Vadla Ravnås 21c7b9ee6a subprojects: Bump outdated 2026-01-17 00:24:37 +01:00
Ole André Vadla Ravnås 7fba1cdc67 subprojects: Bump outdated 2026-01-16 15:32:05 +01:00
Ole André Vadla Ravnås a709856e2a subprojects: Bump outdated 2026-01-16 13:44:50 +01:00
Ole André Vadla Ravnås c3afe6089d submodules: Bump releng 2026-01-16 13:44:49 +01:00
Ole André Vadla Ravnås 6435a78d13 subprojects: Bump outdated 2026-01-15 18:08:16 +01:00
Ole André Vadla Ravnås 09175036ea submodules: Bump releng 2026-01-15 18:08:16 +01:00
Ole André Vadla Ravnås e0c90c5203 subprojects: Bump outdated 2026-01-11 00:48:16 +01:00
Abhi 9f463fb602 Fix regressions reported by mypi and black (#269) 2026-01-07 09:14:51 +01:00
Ole André Vadla Ravnås 9fdee2270f subprojects: Bump outdated 2026-01-06 22:40:32 +01:00
Ole André Vadla Ravnås 6e536a56b1 submodules: Bump releng 2026-01-06 22:40:32 +01:00
Ole André Vadla Ravnås 74925d082e subprojects: Prepare for release 2025-12-15 21:28:40 +01:00
Etienne Maheux bf1245ddb0 typing: Remove generic @overload on handlers
Generic @overload definitions on signal handlers were masking
type-checking errors.
2025-12-15 21:23:57 +01:00
Etienne Maheux 0f247e9439 typing: Improve @cancellable; add flag literals
Refine @cancellable typing to better model control flow and
introduce Literal types for optional Compiler flags to
improve static checking and autocomplete.
2025-12-15 21:23:57 +01:00
Ole André Vadla Ravnås 17aae5fe5c subprojects: Bump outdated 2025-12-15 21:17:51 +01:00
Ole André Vadla Ravnås 477a90534e submodules: Bump releng 2025-12-15 21:17:51 +01:00
Ole André Vadla Ravnås c87cdca293 subprojects: Prepare for release 2025-11-05 18:59:11 +01:00
Ole André Vadla Ravnås 30968b3805 subprojects: Bump outdated 2025-11-05 18:57:30 +01:00
Ole André Vadla Ravnås 5e3f27d0cb subprojects: Prepare for release 2025-11-04 10:30:58 +01:00
Ole André Vadla Ravnås 904461eb01 subprojects: Bump outdated 2025-11-04 10:29:40 +01:00
Ole André Vadla Ravnås dc652faa90 package-manager: Plug leak in specs option parsing 2025-11-04 10:23:37 +01:00
Ole André Vadla Ravnås f5ba22ad36 compiler: Expose platform and externals options 2025-11-04 10:23:00 +01:00
Ole André Vadla Ravnås dccb6810ca subprojects: Prepare for release 2025-11-01 00:38:17 +01:00
Ole André Vadla Ravnås 82441c6d61 subprojects: Bump outdated 2025-11-01 00:36:38 +01:00
Ole André Vadla Ravnås 323dca48c2 subprojects: Prepare for release 2025-10-31 20:24:11 +01:00
Ole André Vadla Ravnås ef71f0fa92 subprojects: Bump outdated 2025-10-31 20:21:50 +01:00
Ole André Vadla Ravnås e92e829f6d subprojects: Prepare for release 2025-10-29 16:48:00 +01:00
Ole André Vadla Ravnås 5793fb5528 subprojects: Bump outdated 2025-10-29 16:45:57 +01:00
Ole André Vadla Ravnås cac6993d87 subprojects: Prepare for release 2025-10-24 15:25:21 +02:00
Ole André Vadla Ravnås 714b7f8626 subprojects: Bump outdated 2025-10-24 15:23:52 +02:00
Ole André Vadla Ravnås ab0b9e98ae submodules: Bump releng 2025-10-24 15:23:52 +02:00
Ole André Vadla Ravnås 19a7fa4f45 subprojects: Prepare for release 2025-10-11 19:22:55 +02:00
Ole André Vadla Ravnås 38552a368a subprojects: Bump outdated 2025-10-11 11:47:08 +02:00
Ole André Vadla Ravnås 38724cab58 subprojects: Bump outdated 2025-10-11 11:09:13 +02:00
Ole André Vadla Ravnås b60d085ad9 subprojects: Bump outdated 2025-10-01 10:53:01 +02:00
Ole André Vadla Ravnås 1a4afbcc62 subprojects: Bump outdated 2025-10-01 10:50:11 +02:00
Ole André Vadla Ravnås 9e15cab647 subprojects: Prepare for release 2025-09-19 17:16:25 +02:00
Ole André Vadla Ravnås 9ef1c9c1f7 subprojects: Bump outdated 2025-09-19 17:14:35 +02:00
Ole André Vadla Ravnås 3da6af4759 subprojects: Prepare for release 2025-09-18 07:39:44 +02:00
Ole André Vadla Ravnås a9075822b1 subprojects: Bump outdated 2025-09-17 22:10:34 +02:00
Ole André Vadla Ravnås 2e61509c04 submodules: Bump releng 2025-09-17 22:10:34 +02:00
Ole André Vadla Ravnås aa9396c6b0 subprojects: Prepare for release 2025-09-15 22:57:06 +02:00
Ole André Vadla Ravnås 6530b2a7d4 subprojects: Bump outdated 2025-09-15 22:12:16 +02:00
Ole André Vadla Ravnås 2d833af062 subprojects: Bump outdated 2025-09-11 10:32:08 +02:00
Ole André Vadla Ravnås 9f6ab2d384 subprojects: Prepare for release 2025-08-20 12:07:22 +02:00
Ole André Vadla Ravnås a005f1bf4c subprojects: Bump outdated 2025-08-20 12:06:15 +02:00
Ole André Vadla Ravnås 59a24aa48f subprojects: Prepare for release 2025-08-12 10:15:48 +02:00
Ole André Vadla Ravnås 782d626419 subprojects: Bump outdated 2025-08-12 09:48:45 +02:00
Ole André Vadla Ravnås 3aa122f4fd subprojects: Prepare for release 2025-08-02 09:42:51 +02:00
Ole André Vadla Ravnås ef315fc0ad subprojects: Bump outdated 2025-08-02 08:53:40 +02:00
Ole André Vadla Ravnås daf93eea54 subprojects: Bump outdated 2025-08-01 20:21:16 +02:00
Ole André Vadla Ravnås 5d02a36906 submodules: Bump releng 2025-08-01 20:21:16 +02:00
Ole André Vadla Ravnås ba8daa423d subprojects: Bump outdated 2025-08-01 18:18:22 +02:00
Ole André Vadla Ravnås afb27bfa7c subprojects: Bump outdated 2025-08-01 15:48:53 +02:00
Ole André Vadla Ravnås 93a201acf2 submodules: Bump releng 2025-08-01 15:48:53 +02:00
Ole André Vadla Ravnås ca1cdad96a subprojects: Prepare for release 2025-07-24 11:16:46 +02:00
Ole André Vadla Ravnås fbc83cc9bf subprojects: Bump outdated 2025-07-24 11:15:23 +02:00
Ole André Vadla Ravnås b838e1df9a subprojects: Prepare for release 2025-07-21 15:06:22 +02:00
Ole André Vadla Ravnås e2409be987 subprojects: Bump outdated 2025-07-21 15:04:50 +02:00
Ole André Vadla Ravnås b061ea43d2 subprojects: Prepare for release 2025-07-18 10:32:24 +02:00
Ole André Vadla Ravnås a50a62999a subprojects: Bump outdated 2025-07-18 10:28:42 +02:00
Ole André Vadla Ravnås 3a47d33ee8 submodules: Bump releng 2025-07-18 10:28:42 +02:00
Ole André Vadla Ravnås ea93d827bb subprojects: Prepare for release 2025-07-03 16:10:18 +02:00
Ole André Vadla Ravnås 8d4c05f664 subprojects: Bump outdated 2025-07-03 16:09:28 +02:00
Ole André Vadla Ravnås 2f78c96622 subprojects: Prepare for release 2025-07-03 12:57:05 +02:00
Ole André Vadla Ravnås 4b5aa28119 subprojects: Bump outdated 2025-07-03 12:55:57 +02:00
Ole André Vadla Ravnås 4f87afa0f1 subprojects: Prepare for release 2025-07-02 12:59:12 +02:00
Ole André Vadla Ravnås 82272945ac subprojects: Bump outdated 2025-07-02 12:56:24 +02:00
Ole André Vadla Ravnås bf496a81d9 subprojects: Prepare for release 2025-07-02 00:09:19 +02:00
Ole André Vadla Ravnås c2dcae3ff4 subprojects: Bump outdated 2025-07-02 00:08:44 +02:00
Ole André Vadla Ravnås 0cb42c47dc subprojects: Prepare for release 2025-07-01 23:40:07 +02:00
Ole André Vadla Ravnås 0e3a9fb551 subprojects: Bump outdated 2025-07-01 23:39:09 +02:00
Ole André Vadla Ravnås 4e16e5c667 package-manager: Fix the PackageRole declaration 2025-07-01 21:25:59 +02:00
Ole André Vadla Ravnås 09d6c7b044 package-manager: Update to the new API 2025-07-01 21:22:01 +02:00
Ole André Vadla Ravnås e11efce5c2 subprojects: Prepare for release 2025-06-27 15:59:55 +02:00
Ole André Vadla Ravnås e174be9998 subprojects: Bump outdated 2025-06-27 15:58:47 +02:00
Ole André Vadla Ravnås eae3d1dc65 subprojects: Bump outdated 2025-06-27 15:50:40 +02:00
Ole André Vadla Ravnås 2d26b94c7d subprojects: Prepare for release 2025-06-23 18:44:30 +02:00
Ole André Vadla Ravnås f396958dfe subprojects: Bump outdated 2025-06-23 18:41:22 +02:00
Ole André Vadla Ravnås 93fb33206f subprojects: Prepare for release 2025-06-20 15:45:37 +02:00
Ole André Vadla Ravnås aed3c1b7bf subprojects: Bump outdated 2025-06-20 15:44:21 +02:00
Ole André Vadla Ravnås 690da0652d package-manager: Remove unused install phase 2025-06-20 11:48:08 +02:00
Ole André Vadla Ravnås bec6221c02 subprojects: Prepare for release 2025-06-20 01:13:59 +02:00
Ole André Vadla Ravnås 53479e1814 subprojects: Bump outdated 2025-06-20 01:12:37 +02:00
Ole André Vadla Ravnås 68bc65ecd4 subprojects: Prepare for release 2025-06-19 23:25:49 +02:00
Ole André Vadla Ravnås 6492081c92 subprojects: Bump outdated 2025-06-19 23:23:57 +02:00
Ole André Vadla Ravnås 262b984e23 subprojects: Prepare for release 2025-06-19 21:03:48 +02:00
Ole André Vadla Ravnås 730ec03652 subprojects: Bump outdated 2025-06-19 21:01:50 +02:00
Ole André Vadla Ravnås 25f96f92d3 subprojects: Bump outdated 2025-06-19 20:19:02 +02:00
Ole André Vadla Ravnås dec23f9ef5 extension: Expose PackageManager.registry 2025-06-19 12:17:09 +02:00
Ole André Vadla Ravnås 906d27bcb7 extension: Add missing toplevel counter logic
We previously only bumped it when instantiating DeviceManager and
PortalService objects. We also need to do it for Compiler,
PackageManager, and FileMonitor. Otherwise signal emissions won't
work in some applications.
2025-06-19 11:51:38 +02:00
Ole André Vadla Ravnås b0018c9812 extension: Add __repr__ to PackageManager types 2025-06-19 11:51:38 +02:00
5 changed files with 370 additions and 110 deletions
+26
View File
@@ -754,8 +754,13 @@ class Compiler(Object):
self,
entrypoint: str,
project_root: Optional[str] = None,
output_format: Optional[str] = None,
bundle_format: Optional[str] = None,
type_check: Optional[str] = None,
source_maps: Optional[str] = None,
compression: Optional[str] = None,
platform: Optional[str] = None,
externals: Optional[Sequence[str]] = None,
) -> str:
"""
Build an agent.
@@ -766,8 +771,13 @@ class Compiler(Object):
self,
entrypoint: str,
project_root: Optional[str] = None,
output_format: Optional[str] = None,
bundle_format: Optional[str] = None,
type_check: Optional[str] = None,
source_maps: Optional[str] = None,
compression: Optional[str] = None,
platform: Optional[str] = None,
externals: Optional[Sequence[str]] = None,
) -> None:
"""
Continuously build an agent.
@@ -775,6 +785,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,
@@ -789,7 +813,9 @@ class PackageManager(Object):
def install(
self,
project_root: Optional[str] = None,
role: Optional[str] = None,
specs: Optional[Sequence[str]] = None,
omits: Optional[Sequence[str]] = None,
) -> PackageInstallResult:
"""
Install one or more packages.
+274 -17
View File
@@ -529,32 +529,43 @@ static gchar * frida_python_authentication_service_authenticate_finish (FridaAut
static void frida_python_authentication_service_do_authenticate (GTask * task, FridaPythonAuthenticationService * self);
static int PyCompiler_init (PyCompiler * self, PyObject * args, PyObject * kw);
static void PyCompiler_dealloc (PyCompiler * self);
static PyObject * PyCompiler_build (PyCompiler * self, PyObject * args, PyObject * kw);
static PyObject * PyCompiler_watch (PyCompiler * self, PyObject * args, PyObject * kw);
static gboolean PyCompiler_set_options (FridaCompilerOptions * options, const gchar * project_root_value, const gchar * output_format_value,
const gchar * bundle_format_value, const gchar * type_check_value, const gchar * source_maps_value, const gchar * compression_value);
const gchar * bundle_format_value, const gchar * type_check_value, const gchar * source_maps_value, const gchar * compression_value,
const gchar * platform_value, PyObject * externals_value);
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);
static FridaPackageInstallOptions * PyPackageManager_parse_install_options (const gchar * project_root, const char * role_value,
PyObject * specs_value, PyObject * omits_value);
static PyObject * PyPackage_new_take_handle (FridaPackage * handle);
static int PyPackage_init (PyPackage * self, PyObject * args, PyObject * kw);
static void PyPackage_init_from_handle (PyPackage * self, FridaPackage * handle);
static void PyPackage_dealloc (PyPackage * self);
static PyObject * PyPackage_repr (PyPackage * self);
static PyObject * PyPackageSearchResult_new_take_handle (FridaPackageSearchResult * handle);
static int PyPackageSearchResult_init (PyPackageSearchResult * self, PyObject * args, PyObject * kw);
static void PyPackageSearchResult_init_from_handle (PyPackageSearchResult * self, FridaPackageSearchResult * handle);
static void PyPackageSearchResult_dealloc (PyPackageSearchResult * self);
static PyObject * PyPackageSearchResult_repr (PyPackageSearchResult * self);
static PyObject * PyPackageInstallResult_new_take_handle (FridaPackageInstallResult * handle);
static int PyPackageInstallResult_init (PyPackageInstallResult * self, PyObject * args, PyObject * kw);
static void PyPackageInstallResult_init_from_handle (PyPackageInstallResult * self, FridaPackageInstallResult * handle);
static void PyPackageInstallResult_dealloc (PyPackageInstallResult * self);
static PyObject * PyPackageInstallResult_repr (PyPackageInstallResult * self);
static int PyFileMonitor_init (PyFileMonitor * self, PyObject * args, PyObject * kw);
static void PyFileMonitor_dealloc (PyFileMonitor * self);
static PyObject * PyFileMonitor_enable (PyFileMonitor * self);
static PyObject * PyFileMonitor_disable (PyFileMonitor * self);
@@ -776,6 +787,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." },
@@ -953,12 +970,16 @@ PYFRIDA_DEFINE_TYPE ("_frida.EndpointParameters", EndpointParameters, GObject, N
PYFRIDA_DEFINE_TYPE ("_frida.Compiler", Compiler, GObject, NULL, frida_unref,
{ Py_tp_doc, "Frida Compiler" },
{ Py_tp_init, PyCompiler_init },
{ Py_tp_dealloc, PyCompiler_dealloc },
{ Py_tp_methods, PyCompiler_methods },
);
PYFRIDA_DEFINE_TYPE ("_frida.PackageManager", PackageManager, GObject, NULL, frida_unref,
{ Py_tp_doc, "Frida Package Manager" },
{ 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 },
);
@@ -966,6 +987,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.Package", Package, GObject, PyPackage_init_from_han
{ Py_tp_doc, "Frida Package" },
{ Py_tp_init, PyPackage_init },
{ Py_tp_dealloc, PyPackage_dealloc },
{ Py_tp_repr, PyPackage_repr },
{ Py_tp_members, PyPackage_members },
);
@@ -973,6 +995,7 @@ PYFRIDA_DEFINE_TYPE ("_frida.PackageSearchResult", PackageSearchResult, GObject,
{ Py_tp_doc, "Frida Package Search Result" },
{ Py_tp_init, PyPackageSearchResult_init },
{ Py_tp_dealloc, PyPackageSearchResult_dealloc },
{ Py_tp_repr, PyPackageSearchResult_repr },
{ Py_tp_members, PyPackageSearchResult_members },
);
@@ -980,12 +1003,14 @@ PYFRIDA_DEFINE_TYPE ("_frida.PackageInstallResult", PackageInstallResult, GObjec
{ Py_tp_doc, "Frida Package Install Result" },
{ Py_tp_init, PyPackageInstallResult_init },
{ Py_tp_dealloc, PyPackageInstallResult_dealloc },
{ Py_tp_repr, PyPackageInstallResult_repr },
{ Py_tp_members, PyPackageInstallResult_members },
);
PYFRIDA_DEFINE_TYPE ("_frida.FileMonitor", FileMonitor, GObject, NULL, frida_unref,
{ Py_tp_doc, "Frida File Monitor" },
{ Py_tp_init, PyFileMonitor_init },
{ Py_tp_dealloc, PyFileMonitor_dealloc },
{ Py_tp_methods, PyFileMonitor_methods },
);
@@ -4861,17 +4886,27 @@ PyCompiler_init (PyCompiler * self, PyObject * args, PyObject * kw)
if (PyGObject_tp_init ((PyObject *) self, args, kw) < 0)
return -1;
g_atomic_int_inc (&toplevel_objects_alive);
PyGObject_take_handle (&self->parent, frida_compiler_new (NULL), PYFRIDA_TYPE (Compiler));
return 0;
}
static void
PyCompiler_dealloc (PyCompiler * self)
{
g_atomic_int_dec_and_test (&toplevel_objects_alive);
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyCompiler_build (PyCompiler * self, PyObject * args, PyObject * kw)
{
PyObject * result;
static char * keywords[] =
{ "entrypoint", "project_root", "output_format", "bundle_format", "type_check", "source_maps", "compression", NULL };
static char * keywords[] = { "entrypoint", "project_root", "output_format", "bundle_format", "type_check", "source_maps", "compression",
"platform", "externals", NULL };
const char * entrypoint;
const char * project_root = NULL;
const char * output_format = NULL;
@@ -4879,17 +4914,19 @@ PyCompiler_build (PyCompiler * self, PyObject * args, PyObject * kw)
const char * type_check = NULL;
const char * source_maps = NULL;
const char * compression = NULL;
const char * platform = NULL;
PyObject * externals = NULL;
FridaBuildOptions * options;
GError * error = NULL;
gchar * bundle;
if (!PyArg_ParseTupleAndKeywords (args, kw, "s|ssssss", keywords, &entrypoint, &project_root, &output_format, &bundle_format, &type_check,
&source_maps, &compression))
if (!PyArg_ParseTupleAndKeywords (args, kw, "s|sssssssO", keywords, &entrypoint, &project_root, &output_format, &bundle_format,
&type_check, &source_maps, &compression, &platform, &externals))
return NULL;
options = frida_build_options_new ();
if (!PyCompiler_set_options (FRIDA_COMPILER_OPTIONS (options), project_root, output_format, bundle_format, type_check, source_maps,
compression))
compression, platform, externals))
goto invalid_option_value;
Py_BEGIN_ALLOW_THREADS
@@ -4916,8 +4953,8 @@ invalid_option_value:
static PyObject *
PyCompiler_watch (PyCompiler * self, PyObject * args, PyObject * kw)
{
static char * keywords[] =
{ "entrypoint", "project_root", "output_format", "bundle_format", "type_check", "source_maps", "compression", NULL };
static char * keywords[] = { "entrypoint", "project_root", "output_format", "bundle_format", "type_check", "source_maps", "compression",
"platform", "externals", NULL };
const char * entrypoint;
const char * project_root = NULL;
const char * output_format = NULL;
@@ -4925,16 +4962,18 @@ PyCompiler_watch (PyCompiler * self, PyObject * args, PyObject * kw)
const char * type_check = NULL;
const char * source_maps = NULL;
const char * compression = NULL;
const char * platform = NULL;
PyObject * externals = NULL;
FridaWatchOptions * options;
GError * error = NULL;
if (!PyArg_ParseTupleAndKeywords (args, kw, "s|ssssss", keywords, &entrypoint, &project_root, &output_format, &bundle_format, &type_check,
&source_maps, &compression))
if (!PyArg_ParseTupleAndKeywords (args, kw, "s|sssssssO", keywords, &entrypoint, &project_root, &output_format, &bundle_format,
&type_check, &source_maps, &compression, &platform, &externals))
return NULL;
options = frida_watch_options_new ();
if (!PyCompiler_set_options (FRIDA_COMPILER_OPTIONS (options), project_root, output_format, bundle_format, type_check, source_maps,
compression))
compression, platform, externals))
goto invalid_option_value;
Py_BEGIN_ALLOW_THREADS
@@ -4957,7 +4996,8 @@ invalid_option_value:
static gboolean
PyCompiler_set_options (FridaCompilerOptions * options, const gchar * project_root_value, const gchar * output_format_value,
const gchar * bundle_format_value, const gchar * type_check_value, const gchar * source_maps_value, const gchar * compression_value)
const gchar * bundle_format_value, const gchar * type_check_value, const gchar * source_maps_value, const gchar * compression_value,
const gchar * platform_value, PyObject * externals_value)
{
if (project_root_value != NULL)
frida_compiler_options_set_project_root (options, project_root_value);
@@ -5012,6 +5052,43 @@ PyCompiler_set_options (FridaCompilerOptions * options, const gchar * project_ro
frida_compiler_options_set_compression (options, compression);
}
if (platform_value != NULL)
{
FridaJsPlatform platform;
if (!PyGObject_unmarshal_enum (platform_value, FRIDA_TYPE_JS_PLATFORM, &platform))
return FALSE;
frida_compiler_options_set_platform (options, platform);
}
if (externals_value != NULL)
{
gint n, i;
n = PySequence_Size (externals_value);
if (n == -1)
return FALSE;
for (i = 0; i != n; i++)
{
PyObject * element;
gchar * external = NULL;
element = PySequence_GetItem (externals_value, i);
if (element == NULL)
return FALSE;
PyGObject_unmarshal_string (element, &external);
Py_DecRef (element);
if (external == NULL)
return FALSE;
frida_compiler_options_add_external (options, external);
g_free (external);
}
}
return TRUE;
}
@@ -5022,11 +5099,53 @@ PyPackageManager_init (PyPackageManager * self, PyObject * args, PyObject * kw)
if (PyGObject_tp_init ((PyObject *) self, args, kw) < 0)
return -1;
g_atomic_int_inc (&toplevel_objects_alive);
PyGObject_take_handle (&self->parent, frida_package_manager_new (), PYFRIDA_TYPE (PackageManager));
return 0;
}
static void
PyPackageManager_dealloc (PyPackageManager * self)
{
g_atomic_int_dec_and_test (&toplevel_objects_alive);
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyPackageManager_repr (PyPackageManager * self)
{
PyObject * result;
gchar * repr;
repr = g_strdup_printf ("PackageManager(registry=\"%s\")", frida_package_manager_get_registry (PY_GOBJECT_HANDLE (self)));
result = PyUnicode_FromString (repr);
g_free (repr);
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, &registry))
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)
{
@@ -5065,16 +5184,18 @@ static PyObject *
PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * kw)
{
FridaPackageInstallResult * result;
static char * keywords[] = { "project_root", "specs", NULL };
static char * keywords[] = { "project_root", "role", "specs", "omits", NULL };
const char * project_root = NULL;
const char * role_value = NULL;
PyObject * specs = NULL;
PyObject * omits = NULL;
FridaPackageInstallOptions * options;
GError * error = NULL;
if (!PyArg_ParseTupleAndKeywords (args, kw, "|sO", keywords, &project_root, &specs))
if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssOO", keywords, &project_root, &role_value, &specs, &omits))
return NULL;
options = PyPackageManager_parse_install_options (project_root, specs);
options = PyPackageManager_parse_install_options (project_root, role_value, specs, omits);
Py_BEGIN_ALLOW_THREADS
result = frida_package_manager_install_sync (PY_GOBJECT_HANDLE (self), options, g_cancellable_get_current (), &error);
@@ -5089,7 +5210,7 @@ PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * k
}
static FridaPackageInstallOptions *
PyPackageManager_parse_install_options (const gchar * project_root, PyObject * specs_value)
PyPackageManager_parse_install_options (const gchar * project_root, const char * role_value, PyObject * specs_value, PyObject * omits_value)
{
FridaPackageInstallOptions * options;
@@ -5098,6 +5219,16 @@ PyPackageManager_parse_install_options (const gchar * project_root, PyObject * s
if (project_root != NULL)
frida_package_install_options_set_project_root (options, project_root);
if (role_value != NULL)
{
FridaPackageRole role;
if (!PyGObject_unmarshal_enum (role_value, FRIDA_TYPE_PACKAGE_ROLE, &role))
goto propagate_error;
frida_package_install_options_set_role (options, role);
}
if (specs_value != NULL)
{
gint n, i;
@@ -5120,6 +5251,37 @@ PyPackageManager_parse_install_options (const gchar * project_root, PyObject * s
goto propagate_error;
frida_package_install_options_add_spec (options, spec);
g_free (spec);
}
}
if (omits_value != NULL)
{
gint n, i;
n = PySequence_Size (omits_value);
if (n == -1)
goto propagate_error;
for (i = 0; i != n; i++)
{
PyObject * element;
gchar * str = NULL;
FridaPackageRole role;
element = PySequence_GetItem (omits_value, i);
if (element == NULL)
goto propagate_error;
PyGObject_unmarshal_string (element, &str);
Py_DecRef (element);
if (str == NULL)
goto propagate_error;
if (!PyGObject_unmarshal_enum (str, FRIDA_TYPE_PACKAGE_ROLE, &role))
goto propagate_error;
frida_package_install_options_add_omit (options, role);
}
}
@@ -5174,6 +5336,43 @@ PyPackage_dealloc (PyPackage * self)
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyPackage_repr (PyPackage * self)
{
PyObject * result;
FridaPackage * handle;
GString * repr;
const gchar * description, * url;
handle = PY_GOBJECT_HANDLE (self);
repr = g_string_sized_new (256);
g_string_append_printf (repr, "Package(name=\"%s\", version=\"%s\"",
frida_package_get_name (handle),
frida_package_get_version (handle));
description = frida_package_get_description (handle);
if (description != NULL)
{
gchar * escaped = g_strescape (description, NULL);
g_string_append_printf (repr, ", description=\"%s\"", escaped);
g_free (escaped);
}
url = frida_package_get_url (handle);
if (url != NULL)
g_string_append_printf (repr, ", url=\"%s\"", url);
g_string_append (repr, ")");
result = PyUnicode_FromString (repr->str);
g_string_free (repr, TRUE);
return result;
}
static PyObject *
PyPackageList_marshal (FridaPackageList * list)
@@ -5223,6 +5422,30 @@ PyPackageSearchResult_dealloc (PyPackageSearchResult * self)
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyPackageSearchResult_repr (PyPackageSearchResult * self)
{
PyObject * result;
GString * repr;
gint num_packages;
repr = g_string_new ("PackageSearchResult(packages=");
num_packages = frida_package_list_size (frida_package_search_result_get_packages (PY_GOBJECT_HANDLE (self)));
if (num_packages != 0)
g_string_append_printf (repr, "[<%u package%s>]", num_packages, (num_packages == 1) ? "" : "s");
else
g_string_append (repr, "[]");
g_string_append_printf (repr, ", total=%u)", self->total);
result = PyUnicode_FromString (repr->str);
g_string_free (repr, TRUE);
return result;
}
static PyObject *
PyPackageInstallResult_new_take_handle (FridaPackageInstallResult * handle)
@@ -5255,6 +5478,30 @@ PyPackageInstallResult_dealloc (PyPackageInstallResult * self)
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyPackageInstallResult_repr (PyPackageInstallResult * self)
{
PyObject * result;
GString * repr;
gint num_packages;
repr = g_string_new ("PackageInstallResult(packages=");
num_packages = frida_package_list_size (frida_package_install_result_get_packages (PY_GOBJECT_HANDLE (self)));
if (num_packages != 0)
g_string_append_printf (repr, "[<%u package%s>]", num_packages, (num_packages == 1) ? "" : "s");
else
g_string_append (repr, "[]");
g_string_append (repr, ")");
result = PyUnicode_FromString (repr->str);
g_string_free (repr, TRUE);
return result;
}
static int
PyFileMonitor_init (PyFileMonitor * self, PyObject * args, PyObject * kw)
@@ -5267,11 +5514,21 @@ PyFileMonitor_init (PyFileMonitor * self, PyObject * args, PyObject * kw)
if (!PyArg_ParseTuple (args, "s", &path))
return -1;
g_atomic_int_inc (&toplevel_objects_alive);
PyGObject_take_handle (&self->parent, frida_file_monitor_new (path), PYFRIDA_TYPE (FileMonitor));
return 0;
}
static void
PyFileMonitor_dealloc (PyFileMonitor * self)
{
g_atomic_int_dec_and_test (&toplevel_objects_alive);
PyGObject_tp_dealloc ((PyObject *) self);
}
static PyObject *
PyFileMonitor_enable (PyFileMonitor * self)
{
+68 -91
View File
@@ -33,10 +33,15 @@ if sys.version_info >= (3, 8):
else:
from typing_extensions import Literal, TypedDict
if sys.version_info >= (3, 11):
from typing import NotRequired
if sys.version_info >= (3, 10):
from typing import ParamSpec
else:
from typing_extensions import NotRequired
from typing_extensions import ParamSpec
if sys.version_info >= (3, 11):
from typing import NotRequired, cast
else:
from typing_extensions import NotRequired, cast
from . import _frida
@@ -72,15 +77,18 @@ def _filter_missing_kwargs(d: MutableMapping[Any, Any]) -> None:
d.pop(key)
R = TypeVar("R")
P = ParamSpec("P")
R = TypeVar("R", covariant=True)
def cancellable(f: Callable[..., R]) -> Callable[..., R]:
def cancellable(f: Callable[P, R]) -> Callable[P, R]:
# currently there is no way to type properly the extended callable with optional cancellable parameter
# ref: https://github.com/python/typing/discussions/1905#discussioncomment-11696995
@functools.wraps(f)
def wrapper(*args: Any, **kwargs: Any) -> R:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
cancellable = kwargs.pop("cancellable", None)
if cancellable is not None:
with cancellable:
with cast(Cancellable, cancellable):
return f(*args, **kwargs)
return f(*args, **kwargs)
@@ -351,9 +359,6 @@ class Script:
@overload
def on(self, signal: Literal["message"], callback: ScriptMessageCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -370,9 +375,6 @@ class Script:
@overload
def off(self, signal: Literal["message"], callback: ScriptMessageCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
@@ -693,34 +695,22 @@ class Session:
_filter_missing_kwargs(kwargs)
return PortalMembership(self._impl.join_portal(address, **kwargs))
@overload
def on(
self,
signal: Literal["detached"],
callback: SessionDetachedCallback,
) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
) -> None:
"""
Add a signal handler
"""
self._impl.on(signal, callback)
@overload
def off(
self,
signal: Literal["detached"],
callback: SessionDetachedCallback,
) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
) -> None:
"""
Remove a signal handler
"""
@@ -763,9 +753,6 @@ class Bus:
@overload
def on(self, signal: Literal["message"], callback: BusMessageCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -782,9 +769,6 @@ class Bus:
@overload
def off(self, signal: Literal["message"], callback: BusMessageCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
@@ -842,9 +826,6 @@ class Service:
@overload
def on(self, signal: Literal["message"], callback: ServiceMessageCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -858,9 +839,6 @@ class Service:
@overload
def off(self, signal: Literal["message"], callback: ServiceMessageCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
@@ -1144,9 +1122,6 @@ class Device:
@overload
def on(self, signal: Literal["lost"], callback: DeviceLostCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -1178,9 +1153,6 @@ class Device:
@overload
def off(self, signal: Literal["lost"], callback: DeviceLostCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
@@ -1298,9 +1270,6 @@ class DeviceManager:
@overload
def on(self, signal: Literal["changed"], callback: DeviceManagerChangedCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -1317,9 +1286,6 @@ class DeviceManager:
@overload
def off(self, signal: Literal["changed"], callback: DeviceManagerChangedCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
@@ -1490,9 +1456,6 @@ class PortalService:
@overload
def on(self, signal: Literal["message"], callback: PortalServiceMessageCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
@@ -1554,6 +1517,13 @@ CompilerFinishedCallback = Callable[[], None]
CompilerOutputCallback = Callable[[str], None]
CompilerDiagnosticsCallback = Callable[[List[CompilerDiagnostic]], None]
CompilerOutputFormat = Literal["unescaped", "hex-bytes", "c-string"]
CompilerBundleFormat = Literal["esm", "iife"]
CompilerTypeCheck = Literal["full", "none"]
CompilerSourceMaps = Literal["included", "omitted"]
CompilerCompression = Literal["none", "terser"]
CompilerPlatform = Literal["neutral", "gum", "browser"]
class Compiler:
def __init__(self) -> None:
@@ -1567,19 +1537,23 @@ class Compiler:
self,
entrypoint: str,
project_root: Optional[str] = None,
output_format: Optional[str] = None,
bundle_format: Optional[str] = None,
type_check: Optional[str] = None,
source_maps: Optional[str] = None,
compression: Optional[str] = None,
output_format: Optional[CompilerOutputFormat] = None,
bundle_format: Optional[CompilerBundleFormat] = None,
type_check: Optional[CompilerTypeCheck] = None,
source_maps: Optional[CompilerSourceMaps] = None,
compression: Optional[CompilerCompression] = None,
platform: Optional[CompilerPlatform] = None,
externals: Optional[Sequence[str]] = None,
) -> str:
kwargs = {
kwargs: dict[str, Any] = {
"project_root": project_root,
"output_format": output_format,
"bundle_format": bundle_format,
"type_check": type_check,
"source_maps": source_maps,
"compression": compression,
"platform": platform,
"externals": externals,
}
_filter_missing_kwargs(kwargs)
return self._impl.build(entrypoint, **kwargs)
@@ -1589,19 +1563,23 @@ class Compiler:
self,
entrypoint: str,
project_root: Optional[str] = None,
output_format: Optional[str] = None,
bundle_format: Optional[str] = None,
type_check: Optional[str] = None,
source_maps: Optional[str] = None,
compression: Optional[str] = None,
output_format: Optional[CompilerOutputFormat] = None,
bundle_format: Optional[CompilerBundleFormat] = None,
type_check: Optional[CompilerTypeCheck] = None,
source_maps: Optional[CompilerSourceMaps] = None,
compression: Optional[CompilerCompression] = None,
platform: Optional[CompilerPlatform] = None,
externals: Optional[Sequence[str]] = None,
) -> None:
kwargs = {
kwargs: dict[str, Any] = {
"project_root": project_root,
"output_format": output_format,
"bundle_format": bundle_format,
"type_check": type_check,
"source_maps": source_maps,
"compression": compression,
"platform": platform,
"externals": externals,
}
_filter_missing_kwargs(kwargs)
return self._impl.watch(entrypoint, **kwargs)
@@ -1618,10 +1596,11 @@ class Compiler:
@overload
def on(self, signal: Literal["diagnostics"], callback: CompilerDiagnosticsCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Add a signal handler
"""
self._impl.on(signal, callback)
@overload
@@ -1636,10 +1615,11 @@ class Compiler:
@overload
def off(self, signal: Literal["diagnostics"], callback: CompilerDiagnosticsCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
"""
Remove a signal handler
"""
self._impl.off(signal, callback)
@@ -1649,16 +1629,11 @@ PackageManagerInstallProgressCallback = Callable[
"initializing",
"preparing-dependencies",
"resolving-package",
"using-lockfile-data",
"metadata-fetched",
"fetching-resource",
"package-already-installed",
"downloading-package",
"package-installed",
"resolving-and-installing-all",
"awaiting-completion",
"dependencies-processed",
"finalizing-manifests",
"complete",
],
float,
@@ -1667,6 +1642,8 @@ PackageManagerInstallProgressCallback = Callable[
None,
]
PackageRole = Literal["runtime", "development", "optional", "peer"]
class PackageManager:
def __init__(self) -> None:
@@ -1675,6 +1652,14 @@ class PackageManager:
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,
@@ -1693,31 +1678,23 @@ class PackageManager:
def install(
self,
project_root: Optional[str] = None,
role: Optional[PackageRole] = None,
specs: Optional[Sequence[str]] = None,
omits: Optional[Sequence[PackageRole]] = None,
) -> _frida.PackageInstallResult:
kwargs: Dict[str, Any] = {
"project_root": project_root,
"role": role,
"specs": specs,
"omits": omits,
}
_filter_missing_kwargs(kwargs)
return self._impl.install(**kwargs)
@overload
def on(self, signal: Literal["install-progress"], callback: PackageManagerInstallProgressCallback) -> None: ...
@overload
def on(self, signal: str, callback: Callable[..., Any]) -> None: ...
def on(self, signal: str, callback: Callable[..., Any]) -> None:
def on(self, signal: Literal["install-progress"], callback: PackageManagerInstallProgressCallback) -> None:
self._impl.on(signal, callback)
@overload
def off(self, signal: Literal["install-progress"], callback: PackageManagerInstallProgressCallback) -> None: ...
@overload
def off(self, signal: str, callback: Callable[..., Any]) -> None: ...
def off(self, signal: str, callback: Callable[..., Any]) -> None:
def off(self, signal: Literal["install-progress"], callback: PackageManagerInstallProgressCallback) -> None:
self._impl.off(signal, callback)
+1 -1
Submodule releng updated: e10baa39a2...60585cf5cf
+1 -1
View File
@@ -1,6 +1,6 @@
[wrap-git]
url = https://github.com/frida/frida-core.git
revision = 17.2.0
revision = 17.6.2
depth = 1
[provide]