Skip to content

Commit a2491bc

Browse files
oleavrAbhiTheModder
authored andcommitted
package-manager: Update to the new API
1 parent c362630 commit a2491bc

File tree

3 files changed

+57
-10
lines changed

3 files changed

+57
-10
lines changed

frida/_frida/__init__.pyi

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
1+
from typing import Any, Callable, Dict, List, Literal, Optional, Sequence, Tuple, Union
22

33
# Exceptions
44
class AddressInUseError(Exception): ...
@@ -774,6 +774,8 @@ class Compiler(Object):
774774
"""
775775
...
776776

777+
PackageRole = Literal["runtime", "development", "optional", "peer"]
778+
777779
class PackageManager(Object):
778780
@property
779781
def registry(self) -> str:
@@ -803,7 +805,9 @@ class PackageManager(Object):
803805
def install(
804806
self,
805807
project_root: Optional[str] = None,
808+
role: Optional[PackageRole] = None,
806809
specs: Optional[Sequence[str]] = None,
810+
omits: Optional[Sequence[PackageRole]] = None,
807811
) -> PackageInstallResult:
808812
"""
809813
Install one or more packages.

frida/_frida/extension.c

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,8 @@ static PyObject * PyPackageManager_get_registry (PyPackageManager * self, void *
542542
static int PyPackageManager_set_registry (PyPackageManager * self, PyObject * val, void * closure);
543543
static PyObject * PyPackageManager_search (PyPackageManager * self, PyObject * args, PyObject * kw);
544544
static PyObject * PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * kw);
545-
static FridaPackageInstallOptions * PyPackageManager_parse_install_options (const gchar * project_root, PyObject * specs_value);
545+
static FridaPackageInstallOptions * PyPackageManager_parse_install_options (const gchar * project_root, const char * role_value,
546+
PyObject * specs_value, PyObject * omits_value);
546547

547548
static PyObject * PyPackage_new_take_handle (FridaPackage * handle);
548549
static int PyPackage_init (PyPackage * self, PyObject * args, PyObject * kw);
@@ -5140,16 +5141,18 @@ static PyObject *
51405141
PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * kw)
51415142
{
51425143
FridaPackageInstallResult * result;
5143-
static char * keywords[] = { "project_root", "specs", NULL };
5144+
static char * keywords[] = { "project_root", "role", "specs", "omits", NULL };
51445145
const char * project_root = NULL;
5146+
const char * role_value = NULL;
51455147
PyObject * specs = NULL;
5148+
PyObject * omits = NULL;
51465149
FridaPackageInstallOptions * options;
51475150
GError * error = NULL;
51485151

5149-
if (!PyArg_ParseTupleAndKeywords (args, kw, "|sO", keywords, &project_root, &specs))
5152+
if (!PyArg_ParseTupleAndKeywords (args, kw, "|ssOO", keywords, &project_root, &role_value, &specs, &omits))
51505153
return NULL;
51515154

5152-
options = PyPackageManager_parse_install_options (project_root, specs);
5155+
options = PyPackageManager_parse_install_options (project_root, role_value, specs, omits);
51535156

51545157
Py_BEGIN_ALLOW_THREADS
51555158
result = frida_package_manager_install_sync (PY_GOBJECT_HANDLE (self), options, g_cancellable_get_current (), &error);
@@ -5164,7 +5167,7 @@ PyPackageManager_install (PyPackageManager * self, PyObject * args, PyObject * k
51645167
}
51655168

51665169
static FridaPackageInstallOptions *
5167-
PyPackageManager_parse_install_options (const gchar * project_root, PyObject * specs_value)
5170+
PyPackageManager_parse_install_options (const gchar * project_root, const char * role_value, PyObject * specs_value, PyObject * omits_value)
51685171
{
51695172
FridaPackageInstallOptions * options;
51705173

@@ -5173,6 +5176,16 @@ PyPackageManager_parse_install_options (const gchar * project_root, PyObject * s
51735176
if (project_root != NULL)
51745177
frida_package_install_options_set_project_root (options, project_root);
51755178

5179+
if (role_value != NULL)
5180+
{
5181+
FridaPackageRole role;
5182+
5183+
if (!PyGObject_unmarshal_enum (role_value, FRIDA_TYPE_PACKAGE_ROLE, &role))
5184+
goto propagate_error;
5185+
5186+
frida_package_install_options_set_role (options, role);
5187+
}
5188+
51765189
if (specs_value != NULL)
51775190
{
51785191
gint n, i;
@@ -5198,6 +5211,35 @@ PyPackageManager_parse_install_options (const gchar * project_root, PyObject * s
51985211
}
51995212
}
52005213

5214+
if (omits_value != NULL)
5215+
{
5216+
gint n, i;
5217+
5218+
n = PySequence_Size (omits_value);
5219+
if (n == -1)
5220+
goto propagate_error;
5221+
5222+
for (i = 0; i != n; i++)
5223+
{
5224+
PyObject * element;
5225+
gchar * str = NULL;
5226+
FridaPackageRole role;
5227+
5228+
element = PySequence_GetItem (omits_value, i);
5229+
if (element == NULL)
5230+
goto propagate_error;
5231+
PyGObject_unmarshal_string (element, &str);
5232+
Py_DecRef (element);
5233+
if (str == NULL)
5234+
goto propagate_error;
5235+
5236+
if (!PyGObject_unmarshal_enum (str, FRIDA_TYPE_PACKAGE_ROLE, &role))
5237+
goto propagate_error;
5238+
5239+
frida_package_install_options_add_omit (options, role);
5240+
}
5241+
}
5242+
52015243
return options;
52025244

52035245
propagate_error:

frida/core.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
ProcessTarget = Union[int, str]
4848
Spawn = _frida.Spawn
49+
PackageRole = _frida.PackageRole
4950

5051

5152
@dataclasses.dataclass
@@ -1649,15 +1650,11 @@ def off(self, signal: str, callback: Callable[..., Any]) -> None:
16491650
"initializing",
16501651
"preparing-dependencies",
16511652
"resolving-package",
1652-
"using-lockfile-data",
1653-
"metadata-fetched",
16541653
"fetching-resource",
16551654
"package-already-installed",
16561655
"downloading-package",
16571656
"package-installed",
16581657
"resolving-and-installing-all",
1659-
"dependencies-processed",
1660-
"finalizing-manifests",
16611658
"complete",
16621659
],
16631660
float,
@@ -1700,11 +1697,15 @@ def search(
17001697
def install(
17011698
self,
17021699
project_root: Optional[str] = None,
1700+
role: Optional[PackageRole] = None,
17031701
specs: Optional[Sequence[str]] = None,
1702+
omits: Optional[Sequence[PackageRole]] = None,
17041703
) -> _frida.PackageInstallResult:
17051704
kwargs: Dict[str, Any] = {
17061705
"project_root": project_root,
1706+
"role": role,
17071707
"specs": specs,
1708+
"omits": omits,
17081709
}
17091710
_filter_missing_kwargs(kwargs)
17101711
return self._impl.install(**kwargs)

0 commit comments

Comments
 (0)