pyobjc-framework-libxpc 12.2.1__tar.gz → 13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/pyobjc_framework_libxpc.egg-info/PKG-INFO +5 -5
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/pyobjc_framework_libxpc.egg-info/SOURCES.txt +2 -2
- pyobjc_framework_libxpc-13.0/Lib/pyobjc_framework_libxpc.egg-info/pyobjc-build-info.txt +3 -0
- pyobjc_framework_libxpc-13.0/Lib/pyobjc_framework_libxpc.egg-info/requires.txt +2 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/xpc/_metadata.py +29 -3
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Modules/_xpc.m +158 -110
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Modules/pyobjc-api.h +18 -4
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Modules/pyobjc-compat.h +0 -18
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PKG-INFO +5 -5
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_activity.py +10 -10
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_session.py +1 -1
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_xpc.py +56 -8
- pyobjc_framework_libxpc-12.2.1/metadata/raw/arm64-26.5.fwinfo → pyobjc_framework_libxpc-13.0/metadata/raw/arm64-27.fwinfo +12 -7
- pyobjc_framework_libxpc-12.2.1/metadata/raw/x86_64-26.5.fwinfo → pyobjc_framework_libxpc-13.0/metadata/raw/x86_64-27.fwinfo +12 -7
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/metadata/xpc.fwinfo +8 -27
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/pyobjc_setup.py +7 -7
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/setup.py +1 -1
- pyobjc_framework_libxpc-12.2.1/Lib/pyobjc_framework_libxpc.egg-info/pyobjc-build-info.txt +0 -3
- pyobjc_framework_libxpc-12.2.1/Lib/pyobjc_framework_libxpc.egg-info/requires.txt +0 -2
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/pyobjc_framework_libxpc.egg-info/dependency_links.txt +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/pyobjc_framework_libxpc.egg-info/not-zip-safe +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/pyobjc_framework_libxpc.egg-info/top_level.txt +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/Lib/xpc/__init__.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/License.txt +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/MANIFEST.in +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/__init__.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_connection.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_debug.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_endpoint.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_listener.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_peer_requirement.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_rich_error.py +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/metadata/metadata.ini +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/pyproject.toml +0 -0
- {pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyobjc-framework-libxpc
|
|
3
|
-
Version:
|
|
3
|
+
Version: 13.0
|
|
4
4
|
Summary: Wrappers for xpc on macOS
|
|
5
5
|
Home-page: https://github.com/ronaldoussoren/pyobjc
|
|
6
6
|
Author: Ronald Oussoren
|
|
@@ -17,21 +17,21 @@ Classifier: Operating System :: MacOS :: MacOS X
|
|
|
17
17
|
Classifier: Programming Language :: Python
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
19
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.14
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.15
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.16
|
|
26
26
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
27
|
Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
|
|
28
28
|
Classifier: Programming Language :: Objective C
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
31
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.11
|
|
32
32
|
Description-Content-Type: text/x-rst; charset=UTF-8
|
|
33
|
-
Requires-Dist: pyobjc-core>=
|
|
34
|
-
Requires-Dist: pyobjc-framework-Cocoa>=
|
|
33
|
+
Requires-Dist: pyobjc-core>=13.0
|
|
34
|
+
Requires-Dist: pyobjc-framework-Cocoa>=13.0
|
|
35
35
|
Dynamic: author
|
|
36
36
|
Dynamic: author-email
|
|
37
37
|
Dynamic: classifier
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# This file is generated by objective.metadata
|
|
2
2
|
#
|
|
3
|
-
# Last update: Sun May 24 12:01:16 2026
|
|
4
|
-
#
|
|
5
3
|
# flake8: noqa
|
|
6
4
|
|
|
7
5
|
import objc, sys
|
|
@@ -213,7 +211,26 @@ functions = {
|
|
|
213
211
|
"",
|
|
214
212
|
{"retval": {"c_array_delimited_by_null": True}},
|
|
215
213
|
),
|
|
214
|
+
"xpc_dictionary_create": (
|
|
215
|
+
b"@^^t^^tQ",
|
|
216
|
+
"",
|
|
217
|
+
{
|
|
218
|
+
"retval": {"already_retained": True},
|
|
219
|
+
"arguments": {
|
|
220
|
+
0: {"type_modifier": "n", "c_array_length_in_arg": 2},
|
|
221
|
+
1: {"type_modifier": "n", "c_array_length_in_arg": 2},
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
),
|
|
216
225
|
"_xpc_object_validate": (b"v@",),
|
|
226
|
+
"xpc_string_create_with_format_and_arguments": (
|
|
227
|
+
b"@^t^v",
|
|
228
|
+
"",
|
|
229
|
+
{
|
|
230
|
+
"arguments": {0: {"c_array_delimited_by_null": True, "type_modifier": "n"}},
|
|
231
|
+
"suggestion": "Use 'xpc.xpc_string_create_with_format' instead.",
|
|
232
|
+
},
|
|
233
|
+
),
|
|
217
234
|
"xpc_dictionary_create_empty": (b"@", "", {"retval": {"already_retained": True}}),
|
|
218
235
|
"xpc_array_apply": (
|
|
219
236
|
b"B@@?",
|
|
@@ -566,7 +583,7 @@ functions = {
|
|
|
566
583
|
"",
|
|
567
584
|
{
|
|
568
585
|
"retval": {"already_retained": True},
|
|
569
|
-
"arguments": {0: {"
|
|
586
|
+
"arguments": {0: {"c_array_length_in_arg": 1, "type_modifier": "n"}},
|
|
570
587
|
},
|
|
571
588
|
),
|
|
572
589
|
"xpc_main": (
|
|
@@ -765,10 +782,19 @@ aliases = {
|
|
|
765
782
|
"XPC_TESTNORETURN": "XPC_NORETURN",
|
|
766
783
|
"XPC_RETURNS_RETAINED": "OS_OBJECT_RETURNS_RETAINED",
|
|
767
784
|
"XPC_TESTEXPORT": "XPC_NOEXPORT",
|
|
785
|
+
"XPC_CONST": "const",
|
|
768
786
|
"XPC_NONNULL_ARRAY": "_Nonnull",
|
|
769
787
|
"XPC_ERROR_KEY_DESCRIPTION": "_xpc_error_key_description",
|
|
788
|
+
"XPC_TESTCONST": "XPC_CONST",
|
|
789
|
+
"XPC_ABORTLIKE": "__abortlike",
|
|
770
790
|
"XPC_EVENT_KEY_NAME": "_xpc_event_key_name",
|
|
771
791
|
}
|
|
772
792
|
expressions = {}
|
|
793
|
+
formal_protocols = {
|
|
794
|
+
"OS_xpc_listener": "OS_xpc_listener",
|
|
795
|
+
"OS_xpc_object": "OS_xpc_object",
|
|
796
|
+
"OS_xpc_peer_requirement": "OS_xpc_peer_requirement",
|
|
797
|
+
"OS_xpc_session": "OS_xpc_session",
|
|
798
|
+
}
|
|
773
799
|
|
|
774
800
|
# END OF FILE
|
|
@@ -2,46 +2,60 @@
|
|
|
2
2
|
#include "Python.h"
|
|
3
3
|
#include "pyobjc-api.h"
|
|
4
4
|
|
|
5
|
+
#ifdef USE_STATIC_ANALYZER
|
|
6
|
+
#include "../../pyobjc-core/Modules/objc/python-api-used.h"
|
|
7
|
+
#endif
|
|
8
|
+
|
|
5
9
|
#include <xpc/xpc.h>
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
12
|
+
|
|
13
|
+
static PyObject* _Nullable mod_xpc_dictionary_create(
|
|
14
|
+
PyObject* meth __attribute__((__unused__)), PyObject* _Nonnull const* _Nonnull args,
|
|
15
|
+
size_t nargs)
|
|
9
16
|
{
|
|
10
|
-
PyObject*
|
|
11
|
-
PyObject*
|
|
12
|
-
|
|
17
|
+
PyObject* keys;
|
|
18
|
+
PyObject* values;
|
|
19
|
+
size_t nitems;
|
|
20
|
+
|
|
21
|
+
if (PyObjC_CheckArgCount(meth, 3, 3, nargs) == -1) {
|
|
22
|
+
return NULL;
|
|
23
|
+
}
|
|
13
24
|
|
|
14
|
-
if (
|
|
25
|
+
if (PyObjC_PythonToObjC(@encode(size_t), args[2], &nitems) == -1) {
|
|
15
26
|
return NULL;
|
|
16
27
|
}
|
|
17
28
|
|
|
18
|
-
keys = PySequence_Tuple(
|
|
29
|
+
keys = PySequence_Tuple(args[0]);
|
|
19
30
|
if (keys == NULL) {
|
|
20
31
|
return NULL;
|
|
21
32
|
}
|
|
22
|
-
values = PySequence_Tuple(
|
|
33
|
+
values = PySequence_Tuple(args[1]);
|
|
23
34
|
if (values == NULL) {
|
|
24
35
|
Py_DECREF(keys);
|
|
25
36
|
return NULL;
|
|
26
37
|
}
|
|
27
38
|
|
|
28
|
-
|
|
39
|
+
assert(PyTuple_Check(keys));
|
|
40
|
+
assert(PyTuple_Check(values));
|
|
41
|
+
|
|
42
|
+
if ((size_t)PyTuple_GET_SIZE(keys) != nitems) {
|
|
29
43
|
Py_DECREF(keys);
|
|
30
44
|
Py_DECREF(values);
|
|
31
|
-
PyErr_Format(PyExc_ValueError,
|
|
32
|
-
nitems);
|
|
45
|
+
PyErr_Format(PyExc_ValueError,
|
|
46
|
+
"Expecting sequence of exactly %ld items for 'keys'", nitems);
|
|
33
47
|
return NULL;
|
|
34
48
|
}
|
|
35
49
|
|
|
36
|
-
if (
|
|
50
|
+
if ((size_t)PyTuple_GET_SIZE(values) != nitems) {
|
|
37
51
|
Py_DECREF(keys);
|
|
38
52
|
Py_DECREF(values);
|
|
39
|
-
PyErr_Format(PyExc_ValueError,
|
|
40
|
-
nitems);
|
|
53
|
+
PyErr_Format(PyExc_ValueError,
|
|
54
|
+
"Expecting sequence of exactly %ld items for 'values'", nitems);
|
|
41
55
|
return NULL;
|
|
42
56
|
}
|
|
43
57
|
|
|
44
|
-
for (
|
|
58
|
+
for (size_t i = 0; i < nitems; i++) {
|
|
45
59
|
if (!PyBytes_Check(PyTuple_GET_ITEM(keys, i))) {
|
|
46
60
|
PyErr_SetString(PyExc_TypeError, "Keys should be sequence of bytes");
|
|
47
61
|
Py_DECREF(keys);
|
|
@@ -51,22 +65,26 @@ mod_xpc_dictionary_create(PyObject* mod __attribute__((__unused__)), PyObject* a
|
|
|
51
65
|
}
|
|
52
66
|
|
|
53
67
|
const char** key_array = PyMem_Malloc(sizeof(char*) * nitems);
|
|
54
|
-
if (key_array == NULL) {
|
|
68
|
+
if (key_array == NULL) { // LCOV_BR_EXCL_LINE
|
|
69
|
+
// LCOV_EXCL_START
|
|
55
70
|
Py_DECREF(keys);
|
|
56
71
|
Py_DECREF(values);
|
|
57
72
|
PyErr_NoMemory();
|
|
58
73
|
return NULL;
|
|
74
|
+
// LCOV_EXCL_STOP
|
|
59
75
|
}
|
|
60
76
|
id* value_array = PyMem_Malloc(sizeof(id) * nitems);
|
|
61
|
-
if (value_array == NULL) {
|
|
77
|
+
if (value_array == NULL) { // LCOV_BR_EXCL_LINE
|
|
78
|
+
// LCOV_EXCL_START
|
|
62
79
|
Py_DECREF(keys);
|
|
63
80
|
Py_DECREF(values);
|
|
64
81
|
PyMem_Free(key_array);
|
|
65
82
|
PyErr_NoMemory();
|
|
66
83
|
return NULL;
|
|
84
|
+
// LCOV_EXCL_STOP
|
|
67
85
|
}
|
|
68
86
|
|
|
69
|
-
for (
|
|
87
|
+
for (size_t i = 0; i < nitems; i++) {
|
|
70
88
|
key_array[i] = PyBytes_AsString(PyTuple_GET_ITEM(keys, i));
|
|
71
89
|
if (depythonify_python_object(PyTuple_GET_ITEM(values, i), value_array + i)
|
|
72
90
|
== -1) {
|
|
@@ -74,6 +92,7 @@ mod_xpc_dictionary_create(PyObject* mod __attribute__((__unused__)), PyObject* a
|
|
|
74
92
|
Py_DECREF(values);
|
|
75
93
|
PyMem_Free(key_array);
|
|
76
94
|
PyMem_Free(value_array);
|
|
95
|
+
return NULL;
|
|
77
96
|
}
|
|
78
97
|
}
|
|
79
98
|
|
|
@@ -89,11 +108,6 @@ mod_xpc_dictionary_create(PyObject* mod __attribute__((__unused__)), PyObject* a
|
|
|
89
108
|
}
|
|
90
109
|
|
|
91
110
|
static PyMethodDef mod_methods[] = {
|
|
92
|
-
{.ml_name = "xpc_dictionary_create",
|
|
93
|
-
.ml_meth = (PyCFunction)mod_xpc_dictionary_create,
|
|
94
|
-
.ml_flags = METH_VARARGS,
|
|
95
|
-
.ml_doc = "xpc_dictionary_create(keys, values, nitem, /)" CLINIC_SEP},
|
|
96
|
-
|
|
97
111
|
{0, 0, 0, 0} /* sentinel */
|
|
98
112
|
};
|
|
99
113
|
|
|
@@ -104,14 +118,13 @@ add_constant(PyObject* m, const char* name, char* typestr, const void* value)
|
|
|
104
118
|
int r;
|
|
105
119
|
|
|
106
120
|
v = PyObjC_ObjCToPython(typestr, (void*)value);
|
|
107
|
-
if (v == NULL) {
|
|
108
|
-
return -1;
|
|
121
|
+
if (v == NULL) { // LCOV_BR_EXCL_LINE
|
|
122
|
+
return -1; // LCOV_EXCL_LINE
|
|
109
123
|
}
|
|
110
124
|
|
|
111
125
|
r = PyModule_AddObject(m, name, v);
|
|
112
|
-
if (r == -1)
|
|
113
|
-
Py_DECREF(v);
|
|
114
|
-
}
|
|
126
|
+
if (r == -1) // LCOV_BR_EXCL_LINE
|
|
127
|
+
Py_DECREF(v); // LCOV_EXCL_LINE
|
|
115
128
|
|
|
116
129
|
return r;
|
|
117
130
|
}
|
|
@@ -123,14 +136,13 @@ add_bytes_constant(PyObject* m, const char* name, const char* value)
|
|
|
123
136
|
int r;
|
|
124
137
|
|
|
125
138
|
v = PyBytes_FromString(value);
|
|
126
|
-
if (v == NULL) {
|
|
127
|
-
return -1;
|
|
139
|
+
if (v == NULL) { // LCOV_BR_EXCL_LINE
|
|
140
|
+
return -1; // LCOV_EXCL_LINE
|
|
128
141
|
}
|
|
129
142
|
|
|
130
143
|
r = PyModule_AddObject(m, name, v);
|
|
131
|
-
if (r == -1)
|
|
132
|
-
Py_DECREF(v);
|
|
133
|
-
}
|
|
144
|
+
if (r == -1) // LCOV_BR_EXCL_LINE
|
|
145
|
+
Py_DECREF(v); // LCOV_EXCL_LINE
|
|
134
146
|
|
|
135
147
|
return r;
|
|
136
148
|
}
|
|
@@ -180,163 +192,198 @@ static struct int64_constants {
|
|
|
180
192
|
static int
|
|
181
193
|
mod_exec_module(PyObject* module)
|
|
182
194
|
{
|
|
183
|
-
if (PyObjC_ImportAPI(module) == -1)
|
|
184
|
-
return -1;
|
|
195
|
+
if (PyObjC_ImportAPI(module) == -1) // LCOV_BR_EXCL_LINE
|
|
196
|
+
return -1; // LCOV_EXCL_LINE
|
|
197
|
+
|
|
198
|
+
if (PyObjCRegister_FunctionCaller( // LCOV_BR_EXCL_LINE
|
|
199
|
+
xpc_dictionary_create, mod_xpc_dictionary_create)
|
|
200
|
+
== -1) { // LCOV_BR_EXCL_LINE
|
|
201
|
+
return -1; // LCOV_EXCL_LINE
|
|
202
|
+
}
|
|
185
203
|
|
|
186
204
|
/*
|
|
187
205
|
* Register a number of struct pointer types that are actually Objective-C objects
|
|
188
206
|
*/
|
|
189
|
-
if (PyObjCPointerWrapper_RegisterID("xpc_activity_t", "^{_xpc_activity_s=}")
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
goto error;
|
|
196
|
-
if (PyObjCPointerWrapper_RegisterID("
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
207
|
+
if (PyObjCPointerWrapper_RegisterID("xpc_activity_t", "^{_xpc_activity_s=}")
|
|
208
|
+
< 0) // LCOV_BR_EXCL_LINE
|
|
209
|
+
goto error; // LCOV_EXCL_LINE
|
|
210
|
+
|
|
211
|
+
if (PyObjCPointerWrapper_RegisterID("xpc_object_t", "^{_xpc_object_s=}")
|
|
212
|
+
< 0) // LCOV_BR_EXCL_LINE
|
|
213
|
+
goto error; // LCOV_EXCL_LINE
|
|
214
|
+
if (PyObjCPointerWrapper_RegisterID("xpc_type_t", "^{_xpc_type_s=}")
|
|
215
|
+
< 0) // LCOV_BR_EXCL_LINE
|
|
216
|
+
goto error; // LCOV_EXCL_LINE
|
|
217
|
+
if (PyObjCPointerWrapper_RegisterID("xpc_connection_t", "^{_xpc_connection_s=}")
|
|
218
|
+
< 0) // LCOV_BR_EXCL_LINE
|
|
219
|
+
goto error; // LCOV_EXCL_LINE
|
|
220
|
+
if (PyObjCPointerWrapper_RegisterID("xpc_endpoint", "^{_xpc_endpoint_s=}")
|
|
221
|
+
< 0) // LCOV_BR_EXCL_LINE
|
|
222
|
+
goto error; // LCOV_EXCL_LINE
|
|
200
223
|
|
|
201
224
|
for (struct bytes_constants* cur = BYTES_CONSTANTS; cur->name != NULL; cur++) {
|
|
202
|
-
if (cur->value == NULL)
|
|
203
|
-
continue;
|
|
204
|
-
if (add_bytes_constant(module, cur->name, *(cur->value))
|
|
205
|
-
|
|
225
|
+
if (cur->value == NULL) // LCOV_BR_EXCL_LINE
|
|
226
|
+
continue; // LCOV_EXCL_LINE
|
|
227
|
+
if (add_bytes_constant(module, cur->name, *(cur->value))
|
|
228
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
229
|
+
goto error; // LCOV_EXCL_LINE
|
|
206
230
|
}
|
|
207
231
|
|
|
208
232
|
for (struct int64_constants* cur = INT64_CONSTANTS; cur->name != NULL; cur++) {
|
|
209
|
-
if (cur->value == NULL)
|
|
210
|
-
continue;
|
|
233
|
+
if (cur->value == NULL) // LCOV_BR_EXCL_LINE
|
|
234
|
+
continue; // LCOV_EXCL_LINE
|
|
211
235
|
PyObject* v = PyLong_FromLong(*(cur->value));
|
|
212
|
-
if (v == NULL)
|
|
213
|
-
goto error;
|
|
236
|
+
if (v == NULL) // LCOV_BR_EXCL_LINE
|
|
237
|
+
goto error; // LCOV_EXCL_LINE
|
|
214
238
|
|
|
215
|
-
if (PyModule_AddObject(module, cur->name, v) == -1) {
|
|
239
|
+
if (PyModule_AddObject(module, cur->name, v) == -1) { // LCOV_BR_EXCL_LINE
|
|
240
|
+
// LCOV_EXCL_START
|
|
216
241
|
Py_DECREF(v);
|
|
217
242
|
goto error;
|
|
243
|
+
// LCOV_EXCL_STOP
|
|
218
244
|
}
|
|
219
245
|
}
|
|
220
246
|
|
|
221
247
|
id v = (id)XPC_TYPE_ACTIVITY;
|
|
222
|
-
if (add_constant(module, "XPC_TYPE_ACTIVITY", @encode(id), &v)
|
|
223
|
-
|
|
248
|
+
if (add_constant(module, "XPC_TYPE_ACTIVITY", @encode(id), &v)
|
|
249
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
250
|
+
goto error; // LCOV_EXCL_LINE
|
|
224
251
|
|
|
225
252
|
v = (id)XPC_ACTIVITY_CHECK_IN;
|
|
226
|
-
if (add_constant(module, "XPC_ACTIVITY_CHECK_IN", @encode(id), &v)
|
|
227
|
-
|
|
253
|
+
if (add_constant(module, "XPC_ACTIVITY_CHECK_IN", @encode(id), &v)
|
|
254
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
255
|
+
goto error; // LCOV_EXCL_LINE
|
|
228
256
|
|
|
229
257
|
v = (id)XPC_TYPE_ENDPOINT;
|
|
230
|
-
if (add_constant(module, "XPC_TYPE_ENDPOINT", @encode(id), &v)
|
|
231
|
-
|
|
258
|
+
if (add_constant(module, "XPC_TYPE_ENDPOINT", @encode(id), &v)
|
|
259
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
260
|
+
goto error; // LCOV_EXCL_LINE
|
|
232
261
|
|
|
233
262
|
xpc_object_t d;
|
|
234
263
|
|
|
235
264
|
d = XPC_ERROR_CONNECTION_INTERRUPTED;
|
|
236
265
|
if (add_constant(module, "XPC_ERROR_CONNECTION_INTERRUPTED", @encode(xpc_object_t),
|
|
237
266
|
&d)
|
|
238
|
-
!= 0)
|
|
239
|
-
goto error;
|
|
267
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
268
|
+
goto error; // LCOV_EXCL_LINE
|
|
240
269
|
|
|
241
270
|
d = XPC_ERROR_CONNECTION_INVALID;
|
|
242
271
|
if (add_constant(module, "XPC_ERROR_CONNECTION_INVALID", @encode(xpc_object_t), &d)
|
|
243
|
-
!= 0)
|
|
244
|
-
goto error;
|
|
272
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
273
|
+
goto error; // LCOV_EXCL_LINE
|
|
245
274
|
|
|
246
275
|
d = XPC_ERROR_TERMINATION_IMMINENT;
|
|
247
276
|
if (add_constant(module, "XPC_ERROR_TERMINATION_IMMINENT", @encode(xpc_object_t), &d)
|
|
248
|
-
!= 0)
|
|
249
|
-
goto error;
|
|
277
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
278
|
+
goto error; // LCOV_EXCL_LINE
|
|
250
279
|
|
|
251
280
|
#if PyObjC_BUILD_RELEASE >= 1200
|
|
252
|
-
if (__builtin_available(macOS 12.0, *)) {
|
|
281
|
+
if (__builtin_available(macOS 12.0, *)) { // LCOV_BR_EXCL_LINE
|
|
253
282
|
d = XPC_ERROR_PEER_CODE_SIGNING_REQUIREMENT;
|
|
254
283
|
if (add_constant(module, "XPC_ERROR_PEER_CODE_SIGNING_REQUIREMENT",
|
|
255
284
|
@encode(xpc_object_t), &d)
|
|
256
|
-
!= 0)
|
|
257
|
-
goto error;
|
|
285
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
286
|
+
goto error; // LCOV_EXCL_LINE
|
|
258
287
|
}
|
|
259
288
|
#endif /* PyObjC_BUILD_RELEASE >= 1200 */
|
|
260
289
|
|
|
261
290
|
xpc_type_t t;
|
|
262
291
|
t = XPC_TYPE_NULL;
|
|
263
|
-
if (add_constant(module, "XPC_TYPE_NULL", @encode(xpc_type_t), &t)
|
|
264
|
-
|
|
292
|
+
if (add_constant(module, "XPC_TYPE_NULL", @encode(xpc_type_t), &t)
|
|
293
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
294
|
+
goto error; // LCOV_EXCL_LINE
|
|
265
295
|
|
|
266
296
|
t = XPC_TYPE_BOOL;
|
|
267
|
-
if (add_constant(module, "XPC_TYPE_BOOL", @encode(xpc_type_t), &t)
|
|
268
|
-
|
|
297
|
+
if (add_constant(module, "XPC_TYPE_BOOL", @encode(xpc_type_t), &t)
|
|
298
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
299
|
+
goto error; // LCOV_EXCL_LINE
|
|
269
300
|
|
|
270
301
|
t = XPC_TYPE_INT64;
|
|
271
|
-
if (add_constant(module, "XPC_TYPE_INT64", @encode(xpc_type_t), &t)
|
|
272
|
-
|
|
302
|
+
if (add_constant(module, "XPC_TYPE_INT64", @encode(xpc_type_t), &t)
|
|
303
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
304
|
+
goto error; // LCOV_EXCL_LINE
|
|
273
305
|
|
|
274
306
|
t = XPC_TYPE_UINT64;
|
|
275
|
-
if (add_constant(module, "XPC_TYPE_UINT64", @encode(xpc_type_t), &t)
|
|
276
|
-
|
|
307
|
+
if (add_constant(module, "XPC_TYPE_UINT64", @encode(xpc_type_t), &t)
|
|
308
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
309
|
+
goto error; // LCOV_EXCL_LINE
|
|
277
310
|
|
|
278
311
|
t = XPC_TYPE_DOUBLE;
|
|
279
|
-
if (add_constant(module, "XPC_TYPE_DOUBLE", @encode(xpc_type_t), &t)
|
|
280
|
-
|
|
312
|
+
if (add_constant(module, "XPC_TYPE_DOUBLE", @encode(xpc_type_t), &t)
|
|
313
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
314
|
+
goto error; // LCOV_EXCL_LINE
|
|
281
315
|
|
|
282
316
|
t = XPC_TYPE_DATE;
|
|
283
|
-
if (add_constant(module, "XPC_TYPE_DATE", @encode(xpc_type_t), &t)
|
|
284
|
-
|
|
317
|
+
if (add_constant(module, "XPC_TYPE_DATE", @encode(xpc_type_t), &t)
|
|
318
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
319
|
+
goto error; // LCOV_EXCL_LINE
|
|
285
320
|
|
|
286
321
|
t = XPC_TYPE_DATA;
|
|
287
|
-
if (add_constant(module, "XPC_TYPE_DATA", @encode(xpc_type_t), &t)
|
|
288
|
-
|
|
322
|
+
if (add_constant(module, "XPC_TYPE_DATA", @encode(xpc_type_t), &t)
|
|
323
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
324
|
+
goto error; // LCOV_EXCL_LINE
|
|
289
325
|
|
|
290
326
|
t = XPC_TYPE_STRING;
|
|
291
|
-
if (add_constant(module, "XPC_TYPE_STRING", @encode(xpc_type_t), &t)
|
|
292
|
-
|
|
327
|
+
if (add_constant(module, "XPC_TYPE_STRING", @encode(xpc_type_t), &t)
|
|
328
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
329
|
+
goto error; // LCOV_EXCL_LINE
|
|
293
330
|
|
|
294
331
|
t = XPC_TYPE_UUID;
|
|
295
|
-
if (add_constant(module, "XPC_TYPE_UUID", @encode(xpc_type_t), &t)
|
|
296
|
-
|
|
332
|
+
if (add_constant(module, "XPC_TYPE_UUID", @encode(xpc_type_t), &t)
|
|
333
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
334
|
+
goto error; // LCOV_EXCL_LINE
|
|
297
335
|
|
|
298
336
|
t = XPC_TYPE_FD;
|
|
299
|
-
if (add_constant(module, "XPC_TYPE_FD", @encode(xpc_type_t), &t)
|
|
300
|
-
|
|
337
|
+
if (add_constant(module, "XPC_TYPE_FD", @encode(xpc_type_t), &t)
|
|
338
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
339
|
+
goto error; // LCOV_EXCL_LINE
|
|
301
340
|
|
|
302
341
|
t = XPC_TYPE_SHMEM;
|
|
303
|
-
if (add_constant(module, "XPC_TYPE_SHMEM", @encode(xpc_type_t), &t)
|
|
304
|
-
|
|
342
|
+
if (add_constant(module, "XPC_TYPE_SHMEM", @encode(xpc_type_t), &t)
|
|
343
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
344
|
+
goto error; // LCOV_EXCL_LINE
|
|
305
345
|
|
|
306
346
|
t = XPC_TYPE_ARRAY;
|
|
307
|
-
if (add_constant(module, "XPC_TYPE_ARRAY", @encode(xpc_type_t), &t)
|
|
308
|
-
|
|
347
|
+
if (add_constant(module, "XPC_TYPE_ARRAY", @encode(xpc_type_t), &t)
|
|
348
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
349
|
+
goto error; // LCOV_EXCL_LINE
|
|
309
350
|
|
|
310
351
|
t = XPC_TYPE_DICTIONARY;
|
|
311
|
-
if (add_constant(module, "XPC_TYPE_DICTIONARY", @encode(xpc_type_t), &t)
|
|
312
|
-
|
|
352
|
+
if (add_constant(module, "XPC_TYPE_DICTIONARY", @encode(xpc_type_t), &t)
|
|
353
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
354
|
+
goto error; // LCOV_EXCL_LINE
|
|
313
355
|
|
|
314
356
|
t = XPC_TYPE_ERROR;
|
|
315
|
-
if (add_constant(module, "XPC_TYPE_ERROR", @encode(xpc_type_t), &t)
|
|
316
|
-
|
|
357
|
+
if (add_constant(module, "XPC_TYPE_ERROR", @encode(xpc_type_t), &t)
|
|
358
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
359
|
+
goto error; // LCOV_EXCL_LINE
|
|
317
360
|
|
|
318
361
|
#if PyObjC_BUILD_RELEASE >= 1300
|
|
319
362
|
t = XPC_TYPE_SESSION;
|
|
320
|
-
if (add_constant(module, "XPC_TYPE_SESSION", @encode(xpc_type_t), &t)
|
|
321
|
-
|
|
363
|
+
if (add_constant(module, "XPC_TYPE_SESSION", @encode(xpc_type_t), &t)
|
|
364
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
365
|
+
goto error; // LCOV_EXCL_LINE
|
|
322
366
|
|
|
323
367
|
t = XPC_TYPE_RICH_ERROR;
|
|
324
|
-
if (add_constant(module, "XPC_TYPE_RICH_ERROR", @encode(xpc_type_t), &t)
|
|
325
|
-
|
|
326
|
-
|
|
368
|
+
if (add_constant(module, "XPC_TYPE_RICH_ERROR", @encode(xpc_type_t), &t)
|
|
369
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
370
|
+
goto error; // LCOV_EXCL_LINE
|
|
371
|
+
#endif /* PyObjC_BUILD_RELEASE >= 1300 */
|
|
327
372
|
|
|
328
373
|
xpc_object_t b = XPC_BOOL_TRUE;
|
|
329
|
-
if (add_constant(module, "XPC_BOOL_TRUE", @encode(xpc_object_t), &b)
|
|
330
|
-
|
|
374
|
+
if (add_constant(module, "XPC_BOOL_TRUE", @encode(xpc_object_t), &b)
|
|
375
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
376
|
+
goto error; // LCOV_EXCL_LINE
|
|
331
377
|
|
|
332
378
|
b = XPC_BOOL_FALSE;
|
|
333
|
-
if (add_constant(module, "XPC_BOOL_FALSE", @encode(xpc_object_t), &b)
|
|
334
|
-
|
|
379
|
+
if (add_constant(module, "XPC_BOOL_FALSE", @encode(xpc_object_t), &b)
|
|
380
|
+
!= 0) // LCOV_BR_EXCL_LINE
|
|
381
|
+
goto error; // LCOV_EXCL_LINE
|
|
335
382
|
|
|
336
383
|
return 0;
|
|
337
384
|
|
|
338
385
|
error:
|
|
339
|
-
return -1;
|
|
386
|
+
return -1; // LCOV_EXCL_LINE
|
|
340
387
|
}
|
|
341
388
|
|
|
342
389
|
static struct PyModuleDef_Slot mod_slots[] = {
|
|
@@ -371,10 +418,11 @@ static struct PyModuleDef mod_module = {
|
|
|
371
418
|
.m_free = NULL,
|
|
372
419
|
};
|
|
373
420
|
|
|
374
|
-
PyObject* PyInit__xpc(void);
|
|
421
|
+
PyObject* _Nullable PyInit__xpc(void);
|
|
375
422
|
|
|
376
|
-
PyObject* __attribute__((__visibility__("default")))
|
|
423
|
+
PyObject* _Nullable __attribute__((__visibility__("default")))
|
|
377
424
|
PyInit__xpc(void)
|
|
378
425
|
{
|
|
379
426
|
return PyModuleDef_Init(&mod_module);
|
|
380
427
|
}
|
|
428
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -60,6 +60,11 @@ typedef int(RegisterMethodMappingFunctionType)(
|
|
|
60
60
|
PyObject* _Nonnull const* _Nonnull, size_t),
|
|
61
61
|
IMP _Nullable (*_Nonnull)(PyObject* _Nonnull, PyObject* _Nonnull));
|
|
62
62
|
|
|
63
|
+
#ifndef PyObjC_FUNCTION_CALL_H
|
|
64
|
+
typedef PyObject* _Nullable (*PyObjC_FunctionCallFunc)(
|
|
65
|
+
PyObject* meth, PyObject* _Nonnull const* _Nonnull args, size_t nargs);
|
|
66
|
+
#endif
|
|
67
|
+
|
|
63
68
|
struct pyobjc_api {
|
|
64
69
|
int api_version; /* API version */
|
|
65
70
|
size_t struct_len; /* Length of this struct */
|
|
@@ -117,6 +122,9 @@ struct pyobjc_api {
|
|
|
117
122
|
|
|
118
123
|
PyObject* _Nullable (*_Nonnull createopaquepointertype)(const char*, const char*,
|
|
119
124
|
const char*);
|
|
125
|
+
int (*_Nonnull register_functioncaller)(void*, PyObjC_FunctionCallFunc);
|
|
126
|
+
PyObject* _Nullable (*_Nonnull create_registered_struct)(
|
|
127
|
+
const char*, Py_ssize_t, const char* _Nonnull* _Nullable, Py_ssize_t*);
|
|
120
128
|
};
|
|
121
129
|
|
|
122
130
|
#ifndef PYOBJC_BUILD
|
|
@@ -159,6 +167,8 @@ static struct pyobjc_api* PyObjC_API;
|
|
|
159
167
|
#define PyObjC_CheckArgCount (PyObjC_API->checkargcount)
|
|
160
168
|
#define PyObjC_CheckNoKwnames (PyObjC_API->checknokwnames)
|
|
161
169
|
#define PyObjCCreateOpaquePointerType (PyObjC_API->createopaquepointertype)
|
|
170
|
+
#define PyObjCRegister_FunctionCaller (PyObjC_API->register_functioncaller)
|
|
171
|
+
#define PyObjC_CreateRegisteredStruct (PyObjC_API->create_registered_struct)
|
|
162
172
|
|
|
163
173
|
typedef void (*PyObjC_Function_Pointer)(void);
|
|
164
174
|
typedef struct PyObjC_function_map {
|
|
@@ -178,21 +188,25 @@ static inline int
|
|
|
178
188
|
PyObjC_ImportAPI(PyObject* calling_module)
|
|
179
189
|
{
|
|
180
190
|
PyObjC_API = (struct pyobjc_api*)PyCapsule_Import("objc." PYOBJC_API_NAME, 0);
|
|
181
|
-
if (PyObjC_API == NULL) {
|
|
182
|
-
return -1;
|
|
191
|
+
if (PyObjC_API == NULL) { // LCOV_BR_EXCL_LINE
|
|
192
|
+
return -1; // LCOV_EXCL_LINE
|
|
183
193
|
}
|
|
184
|
-
if (PyObjC_API->api_version != PYOBJC_API_VERSION) {
|
|
194
|
+
if (PyObjC_API->api_version != PYOBJC_API_VERSION) { // LCOV_BR_EXCL_LINE
|
|
195
|
+
// LCOV_EXCL_START
|
|
185
196
|
PyErr_Format(PyExc_RuntimeError,
|
|
186
197
|
"Wrong version of PyObjC C API (got %d, expected %d)",
|
|
187
198
|
(int)PyObjC_API->api_version, (int)PYOBJC_API_VERSION);
|
|
188
199
|
return -1;
|
|
200
|
+
// LCOV_EXCL_STOP
|
|
189
201
|
}
|
|
190
202
|
|
|
191
|
-
if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) {
|
|
203
|
+
if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) { // LCOV_EXCL_LINE
|
|
204
|
+
// LCOV_EXCL_START
|
|
192
205
|
PyErr_Format(PyExc_RuntimeError,
|
|
193
206
|
"Wrong struct-size of PyObjC C API (got %d, expected %d)",
|
|
194
207
|
(int)PyObjC_API->struct_len, (int)sizeof(struct pyobjc_api));
|
|
195
208
|
return -1;
|
|
209
|
+
// LCOV_EXCL_STOP
|
|
196
210
|
}
|
|
197
211
|
|
|
198
212
|
/* Current pyobjc implementation doesn't allow deregistering
|
|
@@ -167,24 +167,6 @@ _PyObjCTuple_GetItem(PyObject* tuple, Py_ssize_t idx)
|
|
|
167
167
|
PyGILState_Release(_GILState); \
|
|
168
168
|
} while (0)
|
|
169
169
|
|
|
170
|
-
#if PY_VERSION_HEX < 0x030a0000
|
|
171
|
-
|
|
172
|
-
static inline PyObject*
|
|
173
|
-
Py_NewRef(PyObject* o)
|
|
174
|
-
{
|
|
175
|
-
Py_INCREF(o);
|
|
176
|
-
return o;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
static inline PyObject*
|
|
180
|
-
Py_XNewRef(PyObject* o)
|
|
181
|
-
{
|
|
182
|
-
Py_XINCREF(o);
|
|
183
|
-
return o;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
#endif /* PY_VERSION_HEX < 0x030a0000 */
|
|
187
|
-
|
|
188
170
|
#if PY_VERSION_HEX < 0x030d0000
|
|
189
171
|
#define Py_BEGIN_CRITICAL_SECTION(value) \
|
|
190
172
|
{ \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyobjc-framework-libxpc
|
|
3
|
-
Version:
|
|
3
|
+
Version: 13.0
|
|
4
4
|
Summary: Wrappers for xpc on macOS
|
|
5
5
|
Home-page: https://github.com/ronaldoussoren/pyobjc
|
|
6
6
|
Author: Ronald Oussoren
|
|
@@ -17,21 +17,21 @@ Classifier: Operating System :: MacOS :: MacOS X
|
|
|
17
17
|
Classifier: Programming Language :: Python
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
19
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.14
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.15
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.16
|
|
26
26
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
27
27
|
Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
|
|
28
28
|
Classifier: Programming Language :: Objective C
|
|
29
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
30
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
31
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.11
|
|
32
32
|
Description-Content-Type: text/x-rst; charset=UTF-8
|
|
33
|
-
Requires-Dist: pyobjc-core>=
|
|
34
|
-
Requires-Dist: pyobjc-framework-Cocoa>=
|
|
33
|
+
Requires-Dist: pyobjc-core>=13.0
|
|
34
|
+
Requires-Dist: pyobjc-framework-Cocoa>=13.0
|
|
35
35
|
Dynamic: author
|
|
36
36
|
Dynamic: author-email
|
|
37
37
|
Dynamic: classifier
|
|
@@ -7,8 +7,16 @@ xpc_activity_handler_t = b"v@"
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class TestActivity(TestCase):
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
def test_enums(self):
|
|
11
|
+
self.assertIsEnumType(xpc.xpc_activity_state_t)
|
|
12
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_CHECK_IN, 0)
|
|
13
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_WAIT, 1)
|
|
14
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_RUN, 2)
|
|
15
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_DEFER, 3)
|
|
16
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_CONTINUE, 4)
|
|
17
|
+
self.assertEqual(xpc.XPC_ACTIVITY_STATE_DONE, 5)
|
|
18
|
+
|
|
19
|
+
def test_constants(self):
|
|
12
20
|
self.assertIsInstance(xpc.XPC_ACTIVITY_INTERVAL, bytes)
|
|
13
21
|
self.assertIsInstance(xpc.XPC_ACTIVITY_REPEATING, bytes)
|
|
14
22
|
self.assertIsInstance(xpc.XPC_ACTIVITY_DELAY, bytes)
|
|
@@ -33,14 +41,6 @@ class TestActivity(TestCase):
|
|
|
33
41
|
|
|
34
42
|
self.assertIsInstance(xpc.XPC_ACTIVITY_CHECK_IN, objc.objc_object)
|
|
35
43
|
|
|
36
|
-
self.assertIsEnumType(xpc.xpc_activity_state_t)
|
|
37
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_CHECK_IN, 0)
|
|
38
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_WAIT, 1)
|
|
39
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_RUN, 2)
|
|
40
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_DEFER, 3)
|
|
41
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_CONTINUE, 4)
|
|
42
|
-
self.assertEqual(xpc.XPC_ACTIVITY_STATE_DONE, 5)
|
|
43
|
-
|
|
44
44
|
@min_os_level("12.0")
|
|
45
45
|
def test_constants12_0(self):
|
|
46
46
|
self.assertIsInstance(xpc.XPC_ACTIVITY_PREVENT_DEVICE_SLEEP, bytes)
|
|
@@ -8,7 +8,7 @@ xpc_session_reply_handler_t = b"v@@"
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class TestSession(TestCase):
|
|
11
|
-
def
|
|
11
|
+
def test_enums(self):
|
|
12
12
|
self.assertIsEnumType(xpc.xpc_session_create_flags_t)
|
|
13
13
|
self.assertEqual(xpc.XPC_SESSION_CREATE_NONE, 0)
|
|
14
14
|
self.assertEqual(xpc.XPC_SESSION_CREATE_INACTIVE, 1 << 0)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from PyObjCTools.TestSupport import TestCase, min_os_level
|
|
1
|
+
from PyObjCTools.TestSupport import TestCase, min_os_level, NoObjCClass
|
|
2
2
|
|
|
3
3
|
import xpc
|
|
4
4
|
import objc
|
|
@@ -10,7 +10,7 @@ xpc_handler_t = b"v@"
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class TestXPC(TestCase):
|
|
13
|
-
def
|
|
13
|
+
def test_callable_metadata_is_sane(self):
|
|
14
14
|
to_exclude = set()
|
|
15
15
|
for class_name in (
|
|
16
16
|
"XPC_TYPE_ACTIVITY",
|
|
@@ -134,7 +134,15 @@ class TestXPC(TestCase):
|
|
|
134
134
|
self.assertArgIsNullTerminated(xpc.xpc_string_create_with_format, 0)
|
|
135
135
|
self.assertArgIsPrintf(xpc.xpc_string_create_with_format, 0)
|
|
136
136
|
|
|
137
|
-
self.
|
|
137
|
+
with self.assertRaisesRegex(
|
|
138
|
+
TypeError, "Use 'xpc.xpc_string_create_with_format' instead."
|
|
139
|
+
):
|
|
140
|
+
xpc.xpc_string_create_with_format_and_arguments("foo", [])
|
|
141
|
+
|
|
142
|
+
self.assertArgIsIn(xpc.xpc_string_create_with_format_and_arguments, 0)
|
|
143
|
+
self.assertArgIsNullTerminated(
|
|
144
|
+
xpc.xpc_string_create_with_format_and_arguments, 0
|
|
145
|
+
)
|
|
138
146
|
|
|
139
147
|
xpc.xpc_string_get_length
|
|
140
148
|
|
|
@@ -205,11 +213,51 @@ class TestXPC(TestCase):
|
|
|
205
213
|
self.assertResultIsRetained(xpc.xpc_array_create_connection)
|
|
206
214
|
|
|
207
215
|
# Manual binding:
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
216
|
+
self.assertResultIsRetained(xpc.xpc_dictionary_create)
|
|
217
|
+
self.assertArgIsIn(xpc.xpc_dictionary_create, 0)
|
|
218
|
+
self.assertArgSizeInArg(xpc.xpc_dictionary_create, 0, 2)
|
|
219
|
+
self.assertArgIsIn(xpc.xpc_dictionary_create, 1)
|
|
220
|
+
self.assertArgSizeInArg(xpc.xpc_dictionary_create, 1, 2)
|
|
221
|
+
|
|
222
|
+
with self.assertRaisesRegex(TypeError, "expected 3 arguments, got 0"):
|
|
223
|
+
xpc.xpc_dictionary_create()
|
|
224
|
+
|
|
225
|
+
with self.assertRaisesRegex(TypeError, "'int' object is not iterable"):
|
|
226
|
+
xpc.xpc_dictionary_create(42, [xpc.XPC_BOOL_TRUE, xpc.XPC_BOOL_FALSE], 2)
|
|
227
|
+
|
|
228
|
+
with self.assertRaisesRegex(TypeError, "'int' object is not iterable"):
|
|
229
|
+
xpc.xpc_dictionary_create([b"key1", b"key2"], 42, 2)
|
|
230
|
+
|
|
231
|
+
with self.assertRaisesRegex(
|
|
232
|
+
ValueError, "depythonifying 'unsigned long long', got 'type'"
|
|
233
|
+
):
|
|
234
|
+
xpc.xpc_dictionary_create(
|
|
235
|
+
[b"key1", b"key2"], [xpc.XPC_BOOL_TRUE, xpc.XPC_BOOL_FALSE], object
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
with self.assertRaisesRegex(
|
|
239
|
+
ValueError, "Expecting sequence of exactly 9 items for"
|
|
240
|
+
):
|
|
241
|
+
value = xpc.xpc_dictionary_create(
|
|
242
|
+
[b"key1", b"key2"], [xpc.XPC_BOOL_TRUE, xpc.XPC_BOOL_FALSE], 9
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
with self.assertRaisesRegex(
|
|
246
|
+
ValueError, "Expecting sequence of exactly 2 items for"
|
|
247
|
+
):
|
|
248
|
+
value = xpc.xpc_dictionary_create(
|
|
249
|
+
[b"key1", b"key2"], [xpc.XPC_BOOL_TRUE], 2
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
with self.assertRaisesRegex(TypeError, "Keys should be sequence of bytes"):
|
|
253
|
+
value = xpc.xpc_dictionary_create(
|
|
254
|
+
["key1", "key2"], [xpc.XPC_BOOL_TRUE, xpc.XPC_BOOL_FALSE], 2
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
with self.assertRaisesRegex(TypeError, "Cannot proxy"):
|
|
258
|
+
value = xpc.xpc_dictionary_create(
|
|
259
|
+
[b"key1", b"key2"], [NoObjCClass(), xpc.XPC_BOOL_FALSE], 2
|
|
260
|
+
)
|
|
213
261
|
|
|
214
262
|
value = xpc.xpc_dictionary_create(
|
|
215
263
|
[b"key1", b"key2"], [xpc.XPC_BOOL_TRUE, xpc.XPC_BOOL_FALSE], 2
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
// GENERATED FILE DO NOT EDIT
|
|
2
2
|
//
|
|
3
3
|
// This file was generated by objective.metadata
|
|
4
|
-
// Last update: Sun May 24 12:01:16 2026
|
|
5
4
|
{
|
|
6
5
|
"arch": "arm64",
|
|
7
6
|
"definitions": {
|
|
8
7
|
"aliases": {
|
|
8
|
+
"XPC_ABORTLIKE": "__abortlike",
|
|
9
|
+
"XPC_CONST": "const",
|
|
9
10
|
"XPC_ERROR_KEY_DESCRIPTION": "_xpc_error_key_description",
|
|
10
11
|
"XPC_EVENT_KEY_NAME": "_xpc_event_key_name",
|
|
11
12
|
"XPC_NONNULL_ARRAY": "_Nonnull",
|
|
12
13
|
"XPC_RETURNS_RETAINED": "OS_OBJECT_RETURNS_RETAINED",
|
|
14
|
+
"XPC_TESTCONST": "XPC_CONST",
|
|
13
15
|
"XPC_TESTEXPORT": "XPC_NOEXPORT",
|
|
14
16
|
"XPC_TESTNORETURN": "XPC_NORETURN"
|
|
15
17
|
},
|
|
@@ -362,11 +364,14 @@
|
|
|
362
364
|
"XPC_BRIDGEREF_BEGIN_WITH_REF": "def XPC_BRIDGEREF_BEGIN_WITH_REF(xo): return (xo)",
|
|
363
365
|
"XPC_BRIDGEREF_END": "def XPC_BRIDGEREF_END(xo): return (xo)",
|
|
364
366
|
"XPC_BRIDGEREF_MIDDLE": "def XPC_BRIDGEREF_MIDDLE(xo): return (xo)",
|
|
365
|
-
"
|
|
366
|
-
"
|
|
367
|
-
"
|
|
367
|
+
"XPC_CONCAT": "def XPC_CONCAT(_A, _B): return XPC_CONCAT_(_A, _B)",
|
|
368
|
+
"XPC_CONCAT_": "def XPC_CONCAT_(_A, _B): return _A ## _B",
|
|
369
|
+
"XPC_DEPRECATED": "def XPC_DEPRECATED(_M): return XPC_ATTRIBUTE(deprecated, _M)",
|
|
370
|
+
"XPC_PRINTF": "def XPC_PRINTF(_M, _N): return XPC_ATTRIBUTE(format, printf, _M, _N)",
|
|
371
|
+
"XPC_RETURNS_ALIGNED": "def XPC_RETURNS_ALIGNED(_N): return XPC_ATTRIBUTE(assume_aligned, _N)",
|
|
372
|
+
"XPC_SWIFT_NAME": "def XPC_SWIFT_NAME(_Name): return XPC_ATTRIBUTE(swift_name, _Name)",
|
|
368
373
|
"XPC_SWIFT_UNAVAILABLE": "def XPC_SWIFT_UNAVAILABLE(msg): return __swift_unavailable(msg)",
|
|
369
|
-
"XPC_UNAVAILABLE": "def XPC_UNAVAILABLE(m): return
|
|
374
|
+
"XPC_UNAVAILABLE": "def XPC_UNAVAILABLE(m): return XPC_ATTRIBUTE(unavailable, m)",
|
|
370
375
|
"XPC_UNSAFE_FORGE_SINGLE": "def XPC_UNSAFE_FORGE_SINGLE(_type, _ptr): return ((_type)(_ptr))",
|
|
371
376
|
"XPC_UNSAFE_FORGE_SIZED_BY": "def XPC_UNSAFE_FORGE_SIZED_BY(_type, _ptr, _size): return ((_type)(_ptr))",
|
|
372
377
|
"_xpc_unreachable": "def _xpc_unreachable(): return __builtin_unreachable()"
|
|
@@ -3364,6 +3369,6 @@
|
|
|
3364
3369
|
"rich_error.h",
|
|
3365
3370
|
"session.h"
|
|
3366
3371
|
],
|
|
3367
|
-
"release": "
|
|
3368
|
-
"sdk": "
|
|
3372
|
+
"release": "macOS 27.2",
|
|
3373
|
+
"sdk": "Xcode 27.2 (27B5038i)/MacOSX27.sdk"
|
|
3369
3374
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
// GENERATED FILE DO NOT EDIT
|
|
2
2
|
//
|
|
3
3
|
// This file was generated by objective.metadata
|
|
4
|
-
// Last update: Sun May 24 12:01:14 2026
|
|
5
4
|
{
|
|
6
5
|
"arch": "x86_64",
|
|
7
6
|
"definitions": {
|
|
8
7
|
"aliases": {
|
|
8
|
+
"XPC_ABORTLIKE": "__abortlike",
|
|
9
|
+
"XPC_CONST": "const",
|
|
9
10
|
"XPC_ERROR_KEY_DESCRIPTION": "_xpc_error_key_description",
|
|
10
11
|
"XPC_EVENT_KEY_NAME": "_xpc_event_key_name",
|
|
11
12
|
"XPC_NONNULL_ARRAY": "_Nonnull",
|
|
12
13
|
"XPC_RETURNS_RETAINED": "OS_OBJECT_RETURNS_RETAINED",
|
|
14
|
+
"XPC_TESTCONST": "XPC_CONST",
|
|
13
15
|
"XPC_TESTEXPORT": "XPC_NOEXPORT",
|
|
14
16
|
"XPC_TESTNORETURN": "XPC_NORETURN"
|
|
15
17
|
},
|
|
@@ -362,11 +364,14 @@
|
|
|
362
364
|
"XPC_BRIDGEREF_BEGIN_WITH_REF": "def XPC_BRIDGEREF_BEGIN_WITH_REF(xo): return (xo)",
|
|
363
365
|
"XPC_BRIDGEREF_END": "def XPC_BRIDGEREF_END(xo): return (xo)",
|
|
364
366
|
"XPC_BRIDGEREF_MIDDLE": "def XPC_BRIDGEREF_MIDDLE(xo): return (xo)",
|
|
365
|
-
"
|
|
366
|
-
"
|
|
367
|
-
"
|
|
367
|
+
"XPC_CONCAT": "def XPC_CONCAT(_A, _B): return XPC_CONCAT_(_A, _B)",
|
|
368
|
+
"XPC_CONCAT_": "def XPC_CONCAT_(_A, _B): return _A ## _B",
|
|
369
|
+
"XPC_DEPRECATED": "def XPC_DEPRECATED(_M): return XPC_ATTRIBUTE(deprecated, _M)",
|
|
370
|
+
"XPC_PRINTF": "def XPC_PRINTF(_M, _N): return XPC_ATTRIBUTE(format, printf, _M, _N)",
|
|
371
|
+
"XPC_RETURNS_ALIGNED": "def XPC_RETURNS_ALIGNED(_N): return XPC_ATTRIBUTE(assume_aligned, _N)",
|
|
372
|
+
"XPC_SWIFT_NAME": "def XPC_SWIFT_NAME(_Name): return XPC_ATTRIBUTE(swift_name, _Name)",
|
|
368
373
|
"XPC_SWIFT_UNAVAILABLE": "def XPC_SWIFT_UNAVAILABLE(msg): return __swift_unavailable(msg)",
|
|
369
|
-
"XPC_UNAVAILABLE": "def XPC_UNAVAILABLE(m): return
|
|
374
|
+
"XPC_UNAVAILABLE": "def XPC_UNAVAILABLE(m): return XPC_ATTRIBUTE(unavailable, m)",
|
|
370
375
|
"XPC_UNSAFE_FORGE_SINGLE": "def XPC_UNSAFE_FORGE_SINGLE(_type, _ptr): return ((_type)(_ptr))",
|
|
371
376
|
"XPC_UNSAFE_FORGE_SIZED_BY": "def XPC_UNSAFE_FORGE_SIZED_BY(_type, _ptr, _size): return ((_type)(_ptr))",
|
|
372
377
|
"_xpc_unreachable": "def _xpc_unreachable(): return __builtin_unreachable()"
|
|
@@ -3364,6 +3369,6 @@
|
|
|
3364
3369
|
"rich_error.h",
|
|
3365
3370
|
"session.h"
|
|
3366
3371
|
],
|
|
3367
|
-
"release": "
|
|
3368
|
-
"sdk": "
|
|
3372
|
+
"release": "macOS 27.2",
|
|
3373
|
+
"sdk": "Xcode 27.2 (27B5038i)/MacOSX27.sdk"
|
|
3369
3374
|
}
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// for information on how to update this file.
|
|
3
3
|
{
|
|
4
4
|
"definitions": {
|
|
5
|
-
"classes": {},
|
|
6
|
-
"formal_protocols": {},
|
|
7
5
|
"typed_enum": {
|
|
8
6
|
"xpc_activity_state_t": { "type": "q" },
|
|
9
7
|
"xpc_session_create_flags_t": { "type": "q" }
|
|
@@ -277,17 +275,9 @@
|
|
|
277
275
|
},
|
|
278
276
|
"retval": { "already_retained": true }
|
|
279
277
|
},
|
|
280
|
-
"xpc_connection_get_context": {
|
|
281
|
-
"retval": {}
|
|
282
|
-
},
|
|
283
278
|
"xpc_connection_get_name": {
|
|
284
279
|
"retval": { "type_override": "^t", "c_array_delimited_by_null": true }
|
|
285
280
|
},
|
|
286
|
-
"xpc_connection_set_context": {
|
|
287
|
-
"args": {
|
|
288
|
-
"1": {}
|
|
289
|
-
}
|
|
290
|
-
},
|
|
291
281
|
"xpc_connection_set_finalizer_f": {
|
|
292
282
|
"args": {
|
|
293
283
|
"1": {
|
|
@@ -331,7 +321,7 @@
|
|
|
331
321
|
},
|
|
332
322
|
"xpc_data_create": {
|
|
333
323
|
"args": {
|
|
334
|
-
"0": { "type_modifier": "n", "
|
|
324
|
+
"0": { "type_modifier": "n", "c_array_length_in_arg": 1}
|
|
335
325
|
},
|
|
336
326
|
"retval": {
|
|
337
327
|
"already_retained": true
|
|
@@ -354,10 +344,9 @@
|
|
|
354
344
|
"retval": { "type_override": "^t", "c_array_delimited_by_null": true }
|
|
355
345
|
},
|
|
356
346
|
"xpc_dictionary_create": {
|
|
357
|
-
"ignore": true,
|
|
358
347
|
"args": {
|
|
359
|
-
"0": { "c_array_length_in_arg": 2, "type_modifier": "n" },
|
|
360
|
-
"1": { "c_array_length_in_arg": 2, "type_modifier": "n" }
|
|
348
|
+
"0": { "c_array_length_in_arg": 2, "type_modifier": "n", "type_override": "^^t" },
|
|
349
|
+
"1": { "c_array_length_in_arg": 2, "type_modifier": "n", "type_override": "^^t" }
|
|
361
350
|
},
|
|
362
351
|
"retval": { "already_retained": true }
|
|
363
352
|
},
|
|
@@ -489,9 +478,6 @@
|
|
|
489
478
|
"1": { "type_override": "^t", "type_modifier": "n", "c_array_delimited_by_null": true }
|
|
490
479
|
}
|
|
491
480
|
},
|
|
492
|
-
"xpc_get_type": {
|
|
493
|
-
"retval": {}
|
|
494
|
-
},
|
|
495
481
|
"xpc_main": {
|
|
496
482
|
"args": {
|
|
497
483
|
"0": {
|
|
@@ -623,14 +609,13 @@
|
|
|
623
609
|
"args": {
|
|
624
610
|
"0": { "type_override": "^t", "type_modifier": "n", "c_array_delimited_by_null": true, "printf_format": true }
|
|
625
611
|
},
|
|
626
|
-
"retval": { "already_retained": true }
|
|
627
|
-
"variadic": true
|
|
612
|
+
"retval": { "already_retained": true }
|
|
628
613
|
},
|
|
629
614
|
"xpc_string_create_with_format_and_arguments": {
|
|
630
|
-
"
|
|
615
|
+
"suggestion": "Use 'xpc.xpc_string_create_with_format' instead.",
|
|
631
616
|
"args": {
|
|
632
|
-
"0": {},
|
|
633
|
-
"1": {}
|
|
617
|
+
"0": { "type_override": "^t", "type_modifier": "n", "c_array_delimited_by_null": true },
|
|
618
|
+
"1": { "type_override": "^v" }
|
|
634
619
|
}
|
|
635
620
|
},
|
|
636
621
|
"xpc_string_get_string_ptr": {
|
|
@@ -640,9 +625,6 @@
|
|
|
640
625
|
"retval": { "type_override": "^t", "c_array_delimited_by_null": true }
|
|
641
626
|
},
|
|
642
627
|
"xpc_type_get_name": {
|
|
643
|
-
"args": {
|
|
644
|
-
"0": {}
|
|
645
|
-
},
|
|
646
628
|
"retval": { "type_override": "^t", "c_array_delimited_by_null": true }
|
|
647
629
|
},
|
|
648
630
|
"xpc_uuid_get_bytes": {
|
|
@@ -651,7 +633,6 @@
|
|
|
651
633
|
"xpc_connection_copy_invalidation_reason": {
|
|
652
634
|
"retval": { "type_override": "^t", "c_array_delimited_by_null": true }
|
|
653
635
|
}
|
|
654
|
-
}
|
|
655
|
-
"informal_protocols": {}
|
|
636
|
+
}
|
|
656
637
|
}
|
|
657
638
|
}
|
|
@@ -110,13 +110,11 @@ class oc_egg_info(egg_info.egg_info):
|
|
|
110
110
|
else:
|
|
111
111
|
sdk_version = os.path.basename(sdk_root)
|
|
112
112
|
|
|
113
|
-
build_info = textwrap.dedent(
|
|
114
|
-
f"""\
|
|
113
|
+
build_info = textwrap.dedent(f"""\
|
|
115
114
|
macOS {macos_version} ({macos_build})
|
|
116
115
|
{clang_version}
|
|
117
116
|
SDK: {sdk_version}
|
|
118
|
-
"""
|
|
119
|
-
)
|
|
117
|
+
""")
|
|
120
118
|
|
|
121
119
|
self.write_file(
|
|
122
120
|
"pyobjc-build-info.txt",
|
|
@@ -204,7 +202,7 @@ class oc_test(Command):
|
|
|
204
202
|
"errors": len(result.errors),
|
|
205
203
|
"xfails": len(getattr(result, "expectedFailures", [])),
|
|
206
204
|
"xpass": len(getattr(result, "unexpectedSuccesses", [])),
|
|
207
|
-
"skip
|
|
205
|
+
"skip": len(getattr(result, "skipped", [])),
|
|
208
206
|
"testSeconds": (time_after - time_before),
|
|
209
207
|
}
|
|
210
208
|
print(f"SUMMARY: {summary}")
|
|
@@ -228,12 +226,12 @@ Operating System :: MacOS :: MacOS X
|
|
|
228
226
|
Programming Language :: Python
|
|
229
227
|
Programming Language :: Python :: 3
|
|
230
228
|
Programming Language :: Python :: 3 :: Only
|
|
231
|
-
Programming Language :: Python :: 3.10
|
|
232
229
|
Programming Language :: Python :: 3.11
|
|
233
230
|
Programming Language :: Python :: 3.12
|
|
234
231
|
Programming Language :: Python :: 3.13
|
|
235
232
|
Programming Language :: Python :: 3.14
|
|
236
233
|
Programming Language :: Python :: 3.15
|
|
234
|
+
Programming Language :: Python :: 3.16
|
|
237
235
|
Programming Language :: Python :: Implementation :: CPython
|
|
238
236
|
Programming Language :: Python :: Free Threading :: 3 - Stable
|
|
239
237
|
Programming Language :: Objective C
|
|
@@ -499,6 +497,8 @@ def Extension(*args, **kwds):
|
|
|
499
497
|
"-DPyObjC_BUILD_RELEASE=%02d%02d"
|
|
500
498
|
% (tuple(map(int, version.split(".")[:2])))
|
|
501
499
|
)
|
|
500
|
+
ldflags.append("-isysroot")
|
|
501
|
+
ldflags.append(data)
|
|
502
502
|
else:
|
|
503
503
|
cflags.append(
|
|
504
504
|
"-DPyObjC_BUILD_RELEASE=%02d%02d"
|
|
@@ -677,7 +677,7 @@ def setup(
|
|
|
677
677
|
zip_safe=False,
|
|
678
678
|
license="MIT",
|
|
679
679
|
classifiers=CLASSIFIERS,
|
|
680
|
-
python_requires=">=3.
|
|
680
|
+
python_requires=">=3.11",
|
|
681
681
|
keywords=["PyObjC"] + [p for p in k["packages"] if p not in ("PyObjCTools",)],
|
|
682
682
|
options=options,
|
|
683
683
|
**k,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_connection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_peer_requirement.py
RENAMED
|
File without changes
|
{pyobjc_framework_libxpc-12.2.1 → pyobjc_framework_libxpc-13.0}/PyObjCTest/test_rich_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|