pymobiledevice3 5.0.4__py3-none-any.whl → 7.0.6__py3-none-any.whl

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.
Files changed (79) hide show
  1. misc/understanding_idevice_protocol_layers.md +10 -5
  2. pymobiledevice3/__main__.py +171 -46
  3. pymobiledevice3/_version.py +2 -2
  4. pymobiledevice3/bonjour.py +22 -21
  5. pymobiledevice3/cli/activation.py +24 -22
  6. pymobiledevice3/cli/afc.py +49 -41
  7. pymobiledevice3/cli/amfi.py +13 -18
  8. pymobiledevice3/cli/apps.py +71 -65
  9. pymobiledevice3/cli/backup.py +134 -93
  10. pymobiledevice3/cli/bonjour.py +31 -29
  11. pymobiledevice3/cli/cli_common.py +175 -232
  12. pymobiledevice3/cli/companion_proxy.py +12 -12
  13. pymobiledevice3/cli/crash.py +95 -52
  14. pymobiledevice3/cli/developer/__init__.py +62 -0
  15. pymobiledevice3/cli/developer/accessibility/__init__.py +65 -0
  16. pymobiledevice3/cli/developer/accessibility/settings.py +43 -0
  17. pymobiledevice3/cli/developer/arbitration.py +50 -0
  18. pymobiledevice3/cli/developer/condition.py +33 -0
  19. pymobiledevice3/cli/developer/core_device.py +294 -0
  20. pymobiledevice3/cli/developer/debugserver.py +244 -0
  21. pymobiledevice3/cli/developer/dvt/__init__.py +438 -0
  22. pymobiledevice3/cli/developer/dvt/core_profile_session.py +295 -0
  23. pymobiledevice3/cli/developer/dvt/simulate_location.py +56 -0
  24. pymobiledevice3/cli/developer/dvt/sysmon/__init__.py +69 -0
  25. pymobiledevice3/cli/developer/dvt/sysmon/process.py +188 -0
  26. pymobiledevice3/cli/developer/fetch_symbols.py +108 -0
  27. pymobiledevice3/cli/developer/simulate_location.py +51 -0
  28. pymobiledevice3/cli/diagnostics/__init__.py +75 -0
  29. pymobiledevice3/cli/diagnostics/battery.py +47 -0
  30. pymobiledevice3/cli/idam.py +42 -0
  31. pymobiledevice3/cli/lockdown.py +70 -75
  32. pymobiledevice3/cli/mounter.py +99 -57
  33. pymobiledevice3/cli/notification.py +38 -26
  34. pymobiledevice3/cli/pcap.py +36 -20
  35. pymobiledevice3/cli/power_assertion.py +15 -16
  36. pymobiledevice3/cli/processes.py +11 -17
  37. pymobiledevice3/cli/profile.py +120 -75
  38. pymobiledevice3/cli/provision.py +27 -26
  39. pymobiledevice3/cli/remote.py +109 -100
  40. pymobiledevice3/cli/restore.py +134 -129
  41. pymobiledevice3/cli/springboard.py +50 -50
  42. pymobiledevice3/cli/syslog.py +145 -65
  43. pymobiledevice3/cli/usbmux.py +66 -27
  44. pymobiledevice3/cli/version.py +2 -5
  45. pymobiledevice3/cli/webinspector.py +232 -156
  46. pymobiledevice3/exceptions.py +6 -2
  47. pymobiledevice3/lockdown.py +5 -1
  48. pymobiledevice3/lockdown_service_provider.py +5 -0
  49. pymobiledevice3/remote/remote_service_discovery.py +18 -10
  50. pymobiledevice3/restore/device.py +28 -4
  51. pymobiledevice3/restore/restore.py +2 -2
  52. pymobiledevice3/service_connection.py +15 -12
  53. pymobiledevice3/services/afc.py +731 -220
  54. pymobiledevice3/services/device_link.py +45 -31
  55. pymobiledevice3/services/idam.py +20 -0
  56. pymobiledevice3/services/lockdown_service.py +12 -9
  57. pymobiledevice3/services/mobile_config.py +1 -0
  58. pymobiledevice3/services/mobilebackup2.py +6 -3
  59. pymobiledevice3/services/os_trace.py +97 -55
  60. pymobiledevice3/services/remote_fetch_symbols.py +13 -8
  61. pymobiledevice3/services/screenshot.py +2 -2
  62. pymobiledevice3/services/web_protocol/alert.py +8 -8
  63. pymobiledevice3/services/web_protocol/automation_session.py +87 -79
  64. pymobiledevice3/services/web_protocol/cdp_screencast.py +2 -1
  65. pymobiledevice3/services/web_protocol/driver.py +71 -70
  66. pymobiledevice3/services/web_protocol/element.py +58 -56
  67. pymobiledevice3/services/web_protocol/selenium_api.py +47 -47
  68. pymobiledevice3/services/web_protocol/session_protocol.py +3 -2
  69. pymobiledevice3/services/web_protocol/switch_to.py +23 -19
  70. pymobiledevice3/services/webinspector.py +42 -67
  71. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/METADATA +5 -3
  72. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/RECORD +76 -61
  73. pymobiledevice3/cli/completions.py +0 -50
  74. pymobiledevice3/cli/developer.py +0 -1539
  75. pymobiledevice3/cli/diagnostics.py +0 -110
  76. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/WHEEL +0 -0
  77. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/entry_points.txt +0 -0
  78. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/licenses/LICENSE +0 -0
  79. {pymobiledevice3-5.0.4.dist-info → pymobiledevice3-7.0.6.dist-info}/top_level.txt +0 -0
@@ -3,12 +3,9 @@ import contextlib
3
3
  import json
4
4
  import logging
5
5
  import uuid
6
- from collections.abc import Coroutine
7
6
  from dataclasses import dataclass, fields
8
7
  from enum import Enum
9
- from typing import Any, Optional, Union
10
-
11
- import nest_asyncio
8
+ from typing import Optional, Union
12
9
 
13
10
  from pymobiledevice3.exceptions import (
14
11
  LaunchingApplicationError,
@@ -122,21 +119,12 @@ class WebinspectorService:
122
119
  SERVICE_NAME = "com.apple.webinspector"
123
120
  RSD_SERVICE_NAME = "com.apple.webinspector.shim.remote"
124
121
 
125
- def __init__(self, lockdown: LockdownServiceProvider, loop=None):
126
- if loop is None:
127
- try:
128
- loop = asyncio.get_running_loop()
129
- except RuntimeError:
130
- loop = asyncio.new_event_loop()
131
- asyncio.set_event_loop(loop)
132
- nest_asyncio.apply(loop)
133
-
122
+ def __init__(self, lockdown: LockdownServiceProvider):
134
123
  if isinstance(lockdown, LockdownClient):
135
124
  self.service_name = self.SERVICE_NAME
136
125
  else:
137
126
  self.service_name = self.RSD_SERVICE_NAME
138
127
 
139
- self.loop = loop
140
128
  self.logger = logging.getLogger(__name__)
141
129
  self.lockdown = lockdown
142
130
  self.service: Optional[ServiceConnection] = None
@@ -158,20 +146,20 @@ class WebinspectorService:
158
146
  }
159
147
  self._recv_task: Optional[asyncio.Task] = None
160
148
 
161
- def connect(self, timeout: Optional[Union[float, int]] = None):
162
- self.service = self.await_(self.lockdown.aio_start_lockdown_service(self.service_name))
163
- self.await_(self._report_identifier())
149
+ async def connect(self, timeout: Optional[Union[float, int]] = None):
150
+ self.service = await self.lockdown.aio_start_lockdown_service(self.service_name)
151
+ await self._report_identifier()
164
152
  try:
165
- self._handle_recv(self._await_with_timeout(self._recv_message(), timeout))
153
+ await self._handle_recv(await asyncio.wait_for(self._recv_message(), timeout))
166
154
  except asyncio.TimeoutError as e:
167
155
  raise WebInspectorNotEnabledError from e
168
- self._recv_task = self.loop.create_task(self._receiving_task())
156
+ self._recv_task = asyncio.create_task(self._receiving_task())
169
157
 
170
- def close(self):
158
+ async def close(self):
171
159
  self._recv_task.cancel()
172
160
  with contextlib.suppress(asyncio.CancelledError):
173
- self.await_(self._recv_task)
174
- self.await_(self.service.aio_close())
161
+ await self._recv_task
162
+ await self.service.aio_close()
175
163
 
176
164
  async def _recv_message(self):
177
165
  while True:
@@ -182,19 +170,19 @@ class WebinspectorService:
182
170
 
183
171
  async def _receiving_task(self):
184
172
  while True:
185
- self._handle_recv(await self._recv_message())
173
+ await self._handle_recv(await self._recv_message())
186
174
 
187
- def automation_session(self, app: Application) -> AutomationSession:
175
+ async def automation_session(self, app: Application) -> AutomationSession:
188
176
  if self.state == "WIRAutomationAvailabilityNotAvailable":
189
177
  raise RemoteAutomationNotEnabledError()
190
178
  session_id = str(uuid.uuid4()).upper()
191
- self.await_(self._forward_automation_session_request(session_id, app.id_))
192
- self.await_(self._forward_get_listing(app.id_))
193
- page = self.await_(self._wait_for_page(session_id))
194
- self.await_(self._forward_socket_setup(session_id, app.id_, page.id_))
195
- self.await_(self._forward_get_listing(app.id_))
179
+ await self._forward_automation_session_request(session_id, app.id_)
180
+ await self._forward_get_listing(app.id_)
181
+ page = await self._wait_for_page(session_id)
182
+ await self._forward_socket_setup(session_id, app.id_, page.id_)
183
+ await self._forward_get_listing(app.id_)
196
184
  while not page.automation_connection_id:
197
- self.await_(asyncio.sleep(0))
185
+ await asyncio.sleep(0)
198
186
  return AutomationSession(SessionProtocol(self, session_id, app, page))
199
187
 
200
188
  async def inspector_session(self, app: Application, page: Page) -> InspectorSession:
@@ -204,20 +192,20 @@ class WebinspectorService:
204
192
  wait_target=page.type_ != WirTypes.JAVASCRIPT,
205
193
  )
206
194
 
207
- def get_open_pages(self) -> dict:
195
+ async def get_open_pages(self) -> dict:
208
196
  apps = {}
209
- self.await_(asyncio.gather(*[self._forward_get_listing(app) for app in self.connected_application]))
197
+ await asyncio.gather(*[self._forward_get_listing(app) for app in self.connected_application])
210
198
  for app in self.connected_application:
211
199
  if self.application_pages.get(app, False):
212
200
  apps[self.connected_application[app].name] = self.application_pages[app].values()
213
201
  return apps
214
202
 
215
- def get_open_application_pages(self, timeout: float) -> list[ApplicationPage]:
203
+ async def get_open_application_pages(self, timeout: float) -> list[ApplicationPage]:
216
204
  # Query all connected applications
217
- self.await_(self._get_connected_applications())
205
+ await self._get_connected_applications()
218
206
 
219
207
  # Give some time for `webinspectord` to reply with all inspectable applications
220
- self.await_(asyncio.sleep(timeout))
208
+ await asyncio.sleep(timeout)
221
209
 
222
210
  result = []
223
211
  for app in self.connected_application:
@@ -226,11 +214,11 @@ class WebinspectorService:
226
214
  result.append(ApplicationPage(self.connected_application[app], page))
227
215
  return result
228
216
 
229
- def open_app(self, bundle: str, timeout: Union[float, int] = 3) -> Application:
230
- self.await_(self._request_application_launch(bundle))
231
- self.get_open_pages()
217
+ async def open_app(self, bundle: str, timeout: Union[float, int] = 3) -> Application:
218
+ await self._request_application_launch(bundle)
219
+ await self.get_open_pages()
232
220
  try:
233
- return self._await_with_timeout(self._wait_for_application(bundle), timeout)
221
+ return await asyncio.wait_for(self._wait_for_application(bundle), timeout)
234
222
  except TimeoutError as e:
235
223
  raise LaunchingApplicationError() from e
236
224
 
@@ -245,43 +233,29 @@ class WebinspectorService:
245
233
  for page in self.application_pages[app_id]:
246
234
  if page == page_id:
247
235
  return self.connected_application[app_id], self.application_pages[app_id][page_id]
236
+ raise KeyError(f"Page with id {page_id} not found")
248
237
 
249
- def flush_input(self, duration: Union[float, int] = 0):
250
- return self.await_(asyncio.sleep(duration))
251
-
252
- def await_(self, awaitable: Coroutine) -> Any:
253
- return self.loop.run_until_complete(awaitable)
254
-
255
- def _await_with_timeout(self, coro: Coroutine, timeout: Optional[float] = None) -> Any:
256
- # Create a task explicitly so we're definitely inside a Task
257
- task = self.loop.create_task(coro)
258
- done, _pending = self.loop.run_until_complete(asyncio.wait({task}, timeout=timeout))
259
- if not done:
260
- task.cancel()
261
- # Give the task a chance to cancel cleanly
262
- with contextlib.suppress(asyncio.CancelledError):
263
- self.loop.run_until_complete(task)
264
- raise WebInspectorNotEnabledError()
265
- return task.result()
238
+ async def flush_input(self, duration: Union[float, int] = 0):
239
+ return await asyncio.sleep(duration)
266
240
 
267
- def _handle_recv(self, plist):
268
- self.receive_handlers[plist["__selector"]](plist["__argument"])
241
+ async def _handle_recv(self, plist):
242
+ await self.receive_handlers[plist["__selector"]](plist["__argument"])
269
243
 
270
- def _handle_report_current_state(self, arg):
244
+ async def _handle_report_current_state(self, arg):
271
245
  self.state = arg["WIRAutomationAvailabilityKey"]
272
246
 
273
- def _handle_report_connected_application_list(self, arg):
247
+ async def _handle_report_connected_application_list(self, arg):
274
248
  self.connected_application = {}
275
249
  for key, application in arg["WIRApplicationDictionaryKey"].items():
276
250
  self.connected_application[key] = Application.from_application_dictionary(application)
277
251
 
278
252
  # Immediately also query the application pages
279
- self.await_(self._forward_get_listing(self.connected_application[key].id_))
253
+ await self._forward_get_listing(self.connected_application[key].id_)
280
254
 
281
- def _handle_report_connected_driver_list(self, arg):
255
+ async def _handle_report_connected_driver_list(self, arg):
282
256
  pass
283
257
 
284
- def _handle_application_sent_listing(self, arg):
258
+ async def _handle_application_sent_listing(self, arg):
285
259
  if arg["WIRApplicationIdentifierKey"] in self.application_pages:
286
260
  # Update existing application pages
287
261
  for id_, page in arg["WIRListingKey"].items():
@@ -296,15 +270,15 @@ class WebinspectorService:
296
270
  pages[id_] = Page.from_page_dictionary(page)
297
271
  self.application_pages[arg["WIRApplicationIdentifierKey"]] = pages
298
272
 
299
- def _handle_application_updated(self, arg):
273
+ async def _handle_application_updated(self, arg):
300
274
  app = Application.from_application_dictionary(arg)
301
275
  self.connected_application[app.id_] = app
302
276
 
303
- def _handle_application_connected(self, arg):
277
+ async def _handle_application_connected(self, arg):
304
278
  app = Application.from_application_dictionary(arg)
305
279
  self.connected_application[app.id_] = app
306
280
 
307
- def _handle_application_sent_data(self, arg):
281
+ async def _handle_application_sent_data(self, arg):
308
282
  response = json.loads(arg["WIRMessageDataKey"])
309
283
 
310
284
  if "id" in response:
@@ -312,7 +286,7 @@ class WebinspectorService:
312
286
  else:
313
287
  self.wir_events.append(response)
314
288
 
315
- def _handle_application_disconnected(self, arg):
289
+ async def _handle_application_disconnected(self, arg):
316
290
  self.connected_application.pop(arg["WIRApplicationIdentifierKey"], None)
317
291
  self.application_pages.pop(arg["WIRApplicationIdentifierKey"], None)
318
292
 
@@ -386,6 +360,7 @@ class WebinspectorService:
386
360
  for page in self.application_pages[app_id]:
387
361
  if page.type_ == WirTypes.AUTOMATION and page.automation_session_id == session_id:
388
362
  return page
363
+ raise KeyError(f"Automation session with id {session_id} not found")
389
364
 
390
365
  async def _wait_for_page(self, session_id: str):
391
366
  while True:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymobiledevice3
3
- Version: 5.0.4
3
+ Version: 7.0.6
4
4
  Summary: Pure python3 implementation for working with iDevices (iPhone, etc...)
5
5
  Author-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
6
6
  Maintainer-email: doronz88 <doron88@gmail.com>, matan <matan1008@gmail.com>
@@ -21,8 +21,8 @@ Requires-Python: >=3.9
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
23
  Requires-Dist: construct>=2.9.29
24
+ Requires-Dist: construct-typing>=0.7.0
24
25
  Requires-Dist: asn1
25
- Requires-Dist: click
26
26
  Requires-Dist: coloredlogs
27
27
  Requires-Dist: IPython
28
28
  Requires-Dist: bpylist2>=4.0.1
@@ -46,7 +46,7 @@ Requires-Dist: wsproto
46
46
  Requires-Dist: nest_asyncio>=1.5.5
47
47
  Requires-Dist: Pillow
48
48
  Requires-Dist: inquirer3>=0.6.0
49
- Requires-Dist: ipsw_parser>=1.3.4
49
+ Requires-Dist: ipsw_parser>=1.5.0
50
50
  Requires-Dist: ifaddr
51
51
  Requires-Dist: hyperframe
52
52
  Requires-Dist: srptools
@@ -60,6 +60,8 @@ Requires-Dist: sslpsk-pmd3>=1.0.3; python_version < "3.13"
60
60
  Requires-Dist: python-pcapng>=2.1.1
61
61
  Requires-Dist: plumbum
62
62
  Requires-Dist: pyimg4>=0.8.8
63
+ Requires-Dist: typer>=0.20.0
64
+ Requires-Dist: typer-injector>=0.2.0
63
65
  Provides-Extra: test
64
66
  Requires-Dist: pytest; extra == "test"
65
67
  Requires-Dist: pytest-asyncio; extra == "test"
@@ -4,52 +4,66 @@ misc/RemoteXPC.md,sha256=1wfXK_LWKDi-hZlScHffAsD1ZIWjR7bNIA2B82BhW4Y,34110
4
4
  misc/plist_sniffer.py,sha256=lL6jJ3bBIlj6U-AEUCijkMFyd_B0kB8x_gV2qvu_KuM,1912
5
5
  misc/pyinstaller.md,sha256=-j0uoOoaSoUQSpYhLzszT3oqrgEuBz3jXXvMp2Ix0D8,933
6
6
  misc/remotexpc_sniffer.py,sha256=EMhJusdbOhFHJCYF2TLtNABAnzAibIeq8hxRu4xaVhA,7979
7
- misc/understanding_idevice_protocol_layers.md,sha256=8tEqRXWOUPoxOJLZVh7C7H9JGCh2sQ3B5UH8_AymaQc,18805
7
+ misc/understanding_idevice_protocol_layers.md,sha256=FMJQ-ik2j9kFLPS15JzDZg62uk1FzxDnfHO6Nf5EM-A,19207
8
8
  misc/usbmux_sniff.sh,sha256=iWtbucOEQ9_UEFXk9x-2VNt48Jg5zrPsnUbZ_LfZxwA,212
9
9
  pymobiledevice3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- pymobiledevice3/__main__.py,sha256=WJBmZzs3cLxfLnLcpLqKy4TUUqTtoHbqIbe2e4WgDlE,11745
11
- pymobiledevice3/_version.py,sha256=O1_inB8IUVBc2LQXe_mNjjWC4Jb2CHi-hHvh3v5XBKQ,704
12
- pymobiledevice3/bonjour.py,sha256=b86PHgFHASV2XvD1j5anc18QDJMtpz3dBwemFYjrTJE,13384
10
+ pymobiledevice3/__main__.py,sha256=Ogsyro4MUVVSciEtg8kZufL81AHcjuphItnaL0BT10Q,16386
11
+ pymobiledevice3/_version.py,sha256=BkZN37c4YwoiwmszvapxWzYoniLXefgepLHi-aFamZ8,704
12
+ pymobiledevice3/bonjour.py,sha256=lmx3uCaiolF59AieftmTKqktNod5ZDyJ06oRZdYKHSE,13681
13
13
  pymobiledevice3/ca.py,sha256=5_Y4F-zDFX_KeDL-M_TRCKKyrRRb9h1lBE8MGTWv91o,10606
14
14
  pymobiledevice3/common.py,sha256=FZzF0BQYV5fCEUPbLo6jbt2Ig9s5YwR8AvX_iR124Ew,329
15
- pymobiledevice3/exceptions.py,sha256=gc3vPHaeSWaEQ9eY7XRsQCRabPXcCAP3Gr5wwY1eaeE,10654
15
+ pymobiledevice3/exceptions.py,sha256=hEAAvzGRZ4Ij9IKwu9BaBhKZAM57VEZxfcrDf76eCCA,10892
16
16
  pymobiledevice3/irecv.py,sha256=623PDDVXQGPXtNPE-134sp0Gnys7VkWmb0ZQPZ2xrsE,10570
17
17
  pymobiledevice3/irecv_devices.py,sha256=Mpp0AZYwFxqtqS9dTPdLZfxnj6UiDf8HbGGrHpsSnIA,44220
18
- pymobiledevice3/lockdown.py,sha256=MA5rZSjB3V6M6p-TmvyY4aA3FXVVDLlB-DG4uzGKjfw,39460
19
- pymobiledevice3/lockdown_service_provider.py,sha256=pR5x8-qh0I9wVZi-wg3Hiy8oNG6ZcUaOeUEy2Q-p6Eg,1722
18
+ pymobiledevice3/lockdown.py,sha256=CgT3FApB3SLXbvbL3I7OFN7IkiPpSKjdxA1Zr0I6xIs,39576
19
+ pymobiledevice3/lockdown_service_provider.py,sha256=mj5Hf3fNWdVYYUayKnLO3NWNgvD0xDMAiSIXKDcXCuk,1814
20
20
  pymobiledevice3/pair_records.py,sha256=4T32UPcBuN_4e-QFzGLoDoUBg3k7hgQh72Yo3CTi18M,6001
21
- pymobiledevice3/service_connection.py,sha256=V6gAJABjduFidl5SqIFJOy_HkCDLdJFlDOAsiniJJPc,14880
21
+ pymobiledevice3/service_connection.py,sha256=7-FxkycdgzAMcPqn5j5K4z8Zj5O_EOAj67j9DhkJcOY,15041
22
22
  pymobiledevice3/tcp_forwarder.py,sha256=imOTd76bh5bknOMJ4KAnWoe68eL3F3TpYlNM8eR7eXA,8971
23
23
  pymobiledevice3/usbmux.py,sha256=GmQTB3V5_6oYErBlZrFRi7XjPKVU1p0RUj147vT9-eg,16835
24
24
  pymobiledevice3/utils.py,sha256=Udx6xubsWYtJU9x7R-PrlSHseY438ua9_DPvzHd3XrQ,2210
25
25
  pymobiledevice3/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- pymobiledevice3/cli/activation.py,sha256=NT5-RXrCjqUVk14G0DxRy35BMPEI1nQ9wGxCiyaEtSk,1311
27
- pymobiledevice3/cli/afc.py,sha256=qd1Th1Url4vWGpTohKdL7p5pS-iCsD6IAh3c4q5JeiY,2117
28
- pymobiledevice3/cli/amfi.py,sha256=mgIXyJt3LZXGVrXm1PfUCjms3DFAi8jf4U_KyVdKry4,955
29
- pymobiledevice3/cli/apps.py,sha256=wazlXmLNYnsLord4ZD-7w0HpBq47Hi168o_HXNk4iCs,3834
30
- pymobiledevice3/cli/backup.py,sha256=od72Hz_A850MerrGO68EEnatYccJ4-ry6QnAxAlQZlo,6715
31
- pymobiledevice3/cli/bonjour.py,sha256=y5WQtdJuLHJMV4jd2wwIgu72hqS_48BZqAHJyXWQ8is,2908
32
- pymobiledevice3/cli/cli_common.py,sha256=Czm8H93QSGVI5lfE0cc9TQqgx-vqcKuZN2YJrPCQT64,13219
33
- pymobiledevice3/cli/companion_proxy.py,sha256=MXJOYo2N6phkfIMIGajTyhiMbGly0aacNirZMaAWhBY,577
34
- pymobiledevice3/cli/completions.py,sha256=zVLU9H-E99evvFWyfXEZjvBsbBZDKbKlcexqdYda_fM,1722
35
- pymobiledevice3/cli/crash.py,sha256=VSZP3PMBmSM3j0ivBeF6oIjj3d2EKDIno5kLcopRi_4,3177
36
- pymobiledevice3/cli/developer.py,sha256=X9B6JtBo44852_RHCNHj4YvqIARhXRBos7WYehOSI0w,60912
37
- pymobiledevice3/cli/diagnostics.py,sha256=FvmIGup9IAPj_gGcJDzjLQkKUvGOtrEA01eXf5iio1w,3628
38
- pymobiledevice3/cli/lockdown.py,sha256=Vl0hbgNtjD-cHpgMoH_x8zzbKUt66paHwHPzUGl_fjM,7104
39
- pymobiledevice3/cli/mounter.py,sha256=RLLNJB1tGfEP99ZknevTzfR0cVfC9RvzWUUa0sIyqP4,7595
40
- pymobiledevice3/cli/notification.py,sha256=J0sf1e17hP2bLSpzGWoVSFSKqdjvyk53SY18qB4QEQI,1954
41
- pymobiledevice3/cli/pcap.py,sha256=fmHiy_KK-uRMcEK6nHNBKyhp5v1y05Yv_hzwe5BFBYw,2193
42
- pymobiledevice3/cli/power_assertion.py,sha256=Z2T0tSi_sh2B1Ba2x6C7M7EMrKT3jcw42toG0WMbCqA,914
43
- pymobiledevice3/cli/processes.py,sha256=HxPTLS520W31Ixn5CyC7tysfiBvbEutbuqTw-Dpf0nQ,1096
44
- pymobiledevice3/cli/profile.py,sha256=gW3KT16A5xdHlW8LKPL_Xarof8SAa5HCC6Ud3vQPyGg,7817
45
- pymobiledevice3/cli/provision.py,sha256=SofHAYdmxb54n9KSRyPKol6jOMUXN1hBACr2VBQrOFc,1955
46
- pymobiledevice3/cli/remote.py,sha256=xkIVR4bu1Vdpw-sswH1b-pekBM6rV6AS7YUeYQU5UyY,12375
47
- pymobiledevice3/cli/restore.py,sha256=xwiUIofoyCMxDSgRq4bndAn5GNUq1P-RcC446M_6I7Y,8085
48
- pymobiledevice3/cli/springboard.py,sha256=hVoLqLU_gHxXa6q17ar61lc2ovmWejeu-rvxQpHXWD0,3094
49
- pymobiledevice3/cli/syslog.py,sha256=NwUzgqUBgHsnx-nVqH9f4A9yQJbXrIoTLIoyqmKTwTc,7543
50
- pymobiledevice3/cli/usbmux.py,sha256=Bx-5OSxEbHBhLeYaRt9LvZzp3RIazn49Q86pFi-EtpQ,2354
51
- pymobiledevice3/cli/version.py,sha256=N7UY328WNR6FpQ2w7aACyL74XQxkRmi53WV5SVlCgCo,345
52
- pymobiledevice3/cli/webinspector.py,sha256=cQWORMUtMwxzWbWPfsECj3E63NO7HnQcwUGFO_VkWWo,15558
26
+ pymobiledevice3/cli/activation.py,sha256=FDqkBa1ew_d_8MLmq8nelF8D1eBcqm9kqTCAH03sTUU,1335
27
+ pymobiledevice3/cli/afc.py,sha256=K9TEy-7p4MdV6XKtO_yiiLJ2M_lOrbjdsBWuSfwSXdw,2042
28
+ pymobiledevice3/cli/amfi.py,sha256=3cpKYYNuyT58ojggsiI3LoBVhbOEvOOncabSK_w3J1c,925
29
+ pymobiledevice3/cli/apps.py,sha256=rieU0xT9y8mdzwkXXif3OIJaxMnDv6rdEUFVFc-ljkk,3518
30
+ pymobiledevice3/cli/backup.py,sha256=Qt-iUARMtdMeFujawN1kpxC39u2q3IKocUDkpCrTFYM,6814
31
+ pymobiledevice3/cli/bonjour.py,sha256=UMPJU1oOu6pnvhM0MKInlXkag70Z9D-wUzLhFWc8WYs,2837
32
+ pymobiledevice3/cli/cli_common.py,sha256=FZJtZgnMZcCg2X2daJBvqOgbhiGbcG5aDFQ_pf59Ugo,9841
33
+ pymobiledevice3/cli/companion_proxy.py,sha256=Zp1PJKE36mNs2lbnmwevDoVC7jTX5FSuQApTcmvEhJg,611
34
+ pymobiledevice3/cli/crash.py,sha256=wss34L3at8qwL_z5ExGabofBbQ99cP_CGJJm8vuF36g,3506
35
+ pymobiledevice3/cli/idam.py,sha256=a_xnURhQlmfnrTGY5KwOIbl9f-1rAjuGG-q6QfOfSE4,1105
36
+ pymobiledevice3/cli/lockdown.py,sha256=GoDnSiX2Ts8XFz3ZIVJLf3HBhiO5SuKBW3zOj63GjbU,6393
37
+ pymobiledevice3/cli/mounter.py,sha256=wKFyn2liZspAVu7GWAfJiA_CyTLmDFeN9mg9YISMK_M,7930
38
+ pymobiledevice3/cli/notification.py,sha256=rHC8z1RFpQpQAnsbqGC2ozqFjzvJ98FXw2WdAPJE0sw,2143
39
+ pymobiledevice3/cli/pcap.py,sha256=50_jpjxC5GRJeD3PnrVnp5CkJhw1ZOM-LKxwsotif1E,2431
40
+ pymobiledevice3/cli/power_assertion.py,sha256=Dwv_ykYpxB8sHsNkN0KTgCP8xL-zpE0m7chBsdBYRHM,817
41
+ pymobiledevice3/cli/processes.py,sha256=iMjASV8LTCVMzDtx-H9vURI6V6FknVzMOtFFxTxsGNA,1027
42
+ pymobiledevice3/cli/profile.py,sha256=FCFsr7t3eRN92bOtinBK37zxG-XuSNdji5CdD_smhvw,7392
43
+ pymobiledevice3/cli/provision.py,sha256=tlJ2n7GdCdDMK5kLguo9Zp7l81PcIdzlS8efYylxAlA,1944
44
+ pymobiledevice3/cli/remote.py,sha256=tjoMjjUg32SPaIdZbwtu2Frno5Ly9is3p_E6FyjWxUU,12711
45
+ pymobiledevice3/cli/restore.py,sha256=j1T9-eZi2AsvQqJ0EKpXuaWPuttoVUPy0xbYYfH6B_s,7485
46
+ pymobiledevice3/cli/springboard.py,sha256=S76Kth2DbqsjGRFVOns40-L4RCqFnuMFuy7bVHbmw9M,3111
47
+ pymobiledevice3/cli/syslog.py,sha256=tqQLecHGcb0v_3Lq54XyEDojdxJSFpvMnQ8B7P_lU58,8945
48
+ pymobiledevice3/cli/usbmux.py,sha256=9HeKkk8cu9RXA_xpB-FgT5lv-12hhb9aeUrgnqV25uE,2906
49
+ pymobiledevice3/cli/version.py,sha256=59NxyLVJWcqNpoKo-XTc5RYGmweuJUmKgKnLwaLzD5o,326
50
+ pymobiledevice3/cli/webinspector.py,sha256=grfwKDAQ1oh7WA_VWCM6qGQzo8osIOY2PjpYXJ1hzCs,17946
51
+ pymobiledevice3/cli/developer/__init__.py,sha256=idQOgVsitt3nfolyhZuA6KHN2j44JNVq-d41I6ychpY,2015
52
+ pymobiledevice3/cli/developer/arbitration.py,sha256=7Eod6-dlSjAMBljbsIGHL_QG9LFbOPIXqpS9Y_4-Q3Y,1576
53
+ pymobiledevice3/cli/developer/condition.py,sha256=lb5BS8lVcgsb2yBgBsN2nK-j2u1_iVm_tBd1pSRHZB0,1294
54
+ pymobiledevice3/cli/developer/core_device.py,sha256=QzMVfghq3fKLI2NQ2Kg7r_zyFIWGCBt7ZS-GTLWDZs4,10895
55
+ pymobiledevice3/cli/developer/debugserver.py,sha256=4_BiZi69i31t6j7gpGEvt9m8Zo0yJsBQH7zQySyr68M,9315
56
+ pymobiledevice3/cli/developer/fetch_symbols.py,sha256=57HzVyUJPXL_I8EiqWArJ2Fczb2yX9y6nDMgjZcADo0,4353
57
+ pymobiledevice3/cli/developer/simulate_location.py,sha256=IVJQPYKUrQcsdpCxf2D2sgy6Nb3mUOFvK-Og_y5lfDM,1555
58
+ pymobiledevice3/cli/developer/accessibility/__init__.py,sha256=VpJSdnkEZhUuJXWy08wqgqObXv1PgZ2Ht4qy-560QRk,2271
59
+ pymobiledevice3/cli/developer/accessibility/settings.py,sha256=QKgQ7XK6LNrlE-1nnWVGL2Mix385Huf-diptgY91apA,1170
60
+ pymobiledevice3/cli/developer/dvt/__init__.py,sha256=DrmpUNrx0xGLJcs6npYoWpbymmvNHo7aaT7ml2HBdXk,15730
61
+ pymobiledevice3/cli/developer/dvt/core_profile_session.py,sha256=Ni6znP0mg-XKLu0aXm8ZZDEKziKokQYMjwbTu2TzFxk,9968
62
+ pymobiledevice3/cli/developer/dvt/simulate_location.py,sha256=QLjjllbjuM205joFlRXdo7cIjvkFdXJ2f5pKzT9sHOY,1816
63
+ pymobiledevice3/cli/developer/dvt/sysmon/__init__.py,sha256=PSTruXzQQLGvVuc1j7aKEafXFYgFMOCuNiMjbtDqKrM,2283
64
+ pymobiledevice3/cli/developer/dvt/sysmon/process.py,sha256=WlnFqoAc3yuk0lM2hxGFP1s_9A_X4w665od5AEgrH3A,6255
65
+ pymobiledevice3/cli/diagnostics/__init__.py,sha256=CH7dccvgEF8X-7HBICpRjkVWZrDpoVkeRsNe83LLeto,2489
66
+ pymobiledevice3/cli/diagnostics/battery.py,sha256=R6Fk-QhIMkgQTVTdbFgd-1LmzJRIpe08GlEjR-Q8Tnw,1453
53
67
  pymobiledevice3/osu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
68
  pymobiledevice3/osu/os_utils.py,sha256=TP4-mTWZig4uwvLV6Ku0z7qrA2OU7ANKzwyCYYWsXhc,3296
55
69
  pymobiledevice3/osu/posix_util.py,sha256=dFTYABFQxK2m7eXumVbfAuzrVVoV7-TduRNN0KY_axc,3450
@@ -58,7 +72,7 @@ pymobiledevice3/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
58
72
  pymobiledevice3/remote/common.py,sha256=epLBlSCw8e8w2XvgsCuZfZYAwzHCQpBZ_S6U-_rl8oE,288
59
73
  pymobiledevice3/remote/module_imports.py,sha256=DwExSL1r4kkFIWmXiQpqPo-cGl4duYd33kJGyVckYuA,829
60
74
  pymobiledevice3/remote/remote_service.py,sha256=fCyzm4oT_WEorAXVHVLYnIOyTOuMGhX69Co3HkUdRYY,867
61
- pymobiledevice3/remote/remote_service_discovery.py,sha256=BwnUhVQBrFA3wxuR_PT7JgtXtyuemJQuot0_23i-0G8,7376
75
+ pymobiledevice3/remote/remote_service_discovery.py,sha256=lBIGzkeM8zyOP3pRDG2sMZ_9p5gyGpvc2CxurcZ0pwc,7721
62
76
  pymobiledevice3/remote/remotexpc.py,sha256=tyGHn-IMDiM7WeGhfKMC1yH-ONEto-zCVpnvhE4i2Yw,8266
63
77
  pymobiledevice3/remote/tunnel_service.py,sha256=AmqvIb-0fUT9KzJub3QcMbtHtHuBBDh4ZKHIeAmkyk8,45961
64
78
  pymobiledevice3/remote/utils.py,sha256=RPyDYCLqe638FoPIJ7Lcmx05BJqM2PseJe9lc3Al3bM,2550
@@ -87,50 +101,51 @@ pymobiledevice3/restore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
87
101
  pymobiledevice3/restore/asr.py,sha256=eVzTQ8hDzncfd49z3cB0VUvtgVob-omO5vUY7y2QZFY,4048
88
102
  pymobiledevice3/restore/base_restore.py,sha256=7Savyn6TlqWpAG0OhILqb587mpx5yLJeOWljwLhxbVo,5795
89
103
  pymobiledevice3/restore/consts.py,sha256=-_CIR3Fb78lGo3VNxtUvBaro5rUqPozHb4KB4ihntis,2167
90
- pymobiledevice3/restore/device.py,sha256=Xq4k94BIBovheLElL9zeRm9FTdvp8EbuIpfWy__tJxU,2710
104
+ pymobiledevice3/restore/device.py,sha256=1dRRhFbSMONy8SIvXkbghZb6uM2LPJqp9junr1iE7II,3427
91
105
  pymobiledevice3/restore/fdr.py,sha256=MwoDBiVmHrY5Duw4ViZnwpUjOx_lAzihi-yTznanKJ8,6182
92
106
  pymobiledevice3/restore/ftab.py,sha256=RxjVkB7tHOW_RjHNu0hKt06qJ4HxitsfkW9dyk64Hzk,1509
93
107
  pymobiledevice3/restore/img4.py,sha256=gEjULbDVsV6w24NLtOuBQUyU9DEwA3mt0wrcsfll67o,4790
94
108
  pymobiledevice3/restore/mbn.py,sha256=xZvpY9ompqQW1NgW31X2eNVK5X4T7H66egjgfai09CU,18981
95
109
  pymobiledevice3/restore/recovery.py,sha256=I-2dJvV-7MwiRH14YrZE_qa0gL4BxqE01huvSon_m4Y,17104
96
- pymobiledevice3/restore/restore.py,sha256=0wBRUOP_gETKvhPEbmqGevqLqBBV7srLMv-eHDs3KX4,57700
110
+ pymobiledevice3/restore/restore.py,sha256=jcFY5PYaykzTdzzqx2ww-YmZRJF0lWMnAr9lAbjW3Cg,57700
97
111
  pymobiledevice3/restore/restore_options.py,sha256=Qu_Z7JnGSNnSMPw69qu9m--vgXkquo7nxeM-aUqppOU,7354
98
112
  pymobiledevice3/restore/restored_client.py,sha256=tv1hyIV7UBDb_OUwj_w6qJsH_x36oBAVHnTS9-t4jh8,3637
99
113
  pymobiledevice3/restore/tss.py,sha256=EY8XpUaexHyDTtUCuXQnOgLVIFAikcs9p0ysNSG1Q0U,30818
100
114
  pymobiledevice3/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
115
  pymobiledevice3/services/accessibilityaudit.py,sha256=7AvGqfAqvsSULib06mpxP94-P-Zr4SwSZohgmbXLuog,15474
102
- pymobiledevice3/services/afc.py,sha256=aUukrV6gnip866DxA-uQBOP89E0EWKJWTuu5JH9DylA,35644
116
+ pymobiledevice3/services/afc.py,sha256=Y9cF_YdndyMxSZZZlsapUGOVI1IdqAGCiYRyQn1HIvI,55095
103
117
  pymobiledevice3/services/amfi.py,sha256=SWGh5UQtf3YhD_4cT8M3dhH1sPE-mnIzkmiZjJ8d2x4,2522
104
118
  pymobiledevice3/services/companion.py,sha256=6rvL1KF2-Gflv77rL9txINMoiQplVouL_nnGKNq-Maw,2612
105
119
  pymobiledevice3/services/crash_reports.py,sha256=ODsgT3WgpOHIFM-ht9za_-xI9AAh7dKiq50NsRB5q3I,10945
106
120
  pymobiledevice3/services/debugserver_applist.py,sha256=Pm65WDKua_zG8veFPp5uemuox6A49gydMlJD6UVvjhA,548
107
121
  pymobiledevice3/services/device_arbitration.py,sha256=xdVC8nhpQ0VdsCSzpaUGme7TfZw3rftJZrYnrjfYHj4,1134
108
- pymobiledevice3/services/device_link.py,sha256=fRHuMrEcoebEyem-rIZbK7_VA1V2UFfAM3fi8ts0d-c,8566
122
+ pymobiledevice3/services/device_link.py,sha256=TVrNB215eHvc7qMRv5CeyVKZgsEBf66aaEWXzp6VPEE,9542
109
123
  pymobiledevice3/services/diagnostics.py,sha256=Azx2g30hio3RQNRJ-5zs94qMUPeV4Qoix9T_Krdp8cU,29909
110
124
  pymobiledevice3/services/dtfetchsymbols.py,sha256=xyi5bXxPSrYaZSFx46zkbpDUk2qNEMAWAk0TZnQuquU,1505
111
125
  pymobiledevice3/services/file_relay.py,sha256=8VFaqqvKvb21OvUxvSgKaC5av5SyRzwybyxmBnGnpME,1368
112
126
  pymobiledevice3/services/heartbeat.py,sha256=X2jGCaJV1b_T1TyqZh09-DaK6zw00M9hmXpXQrZw7kU,1147
113
127
  pymobiledevice3/services/house_arrest.py,sha256=mjpojdZ0tiGpKV00BogjM9L85lMHiFonNU7J639m8VA,1655
128
+ pymobiledevice3/services/idam.py,sha256=knkP6EEYh8J0QI36M4ik86t2PFM6_JxabjJagLHV8iI,834
114
129
  pymobiledevice3/services/installation_proxy.py,sha256=MIWdB6CYEEeG5eGcciHu2wvtn_vPJ2e5s47biMbkaYA,11619
115
- pymobiledevice3/services/lockdown_service.py,sha256=SJ27hianKLPapPYz5HeEad4Yzx1oU8-m3osDgfLBfiw,1534
130
+ pymobiledevice3/services/lockdown_service.py,sha256=YRendifSVgXnODHwKhKZRpBKSi7ChSlFZuTJaMzEzP0,1684
116
131
  pymobiledevice3/services/misagent.py,sha256=CGh1EhN_f1rV9RhZfP53OBirXdY0elX_nZS-fhMbiPk,1937
117
132
  pymobiledevice3/services/mobile_activation.py,sha256=0zvQn2CMmf47--OtDqv3eOK5Ofu-eBw-ab1TxZSrOlY,9230
118
- pymobiledevice3/services/mobile_config.py,sha256=EjCaBaM4te73Gj_yoOIj_5PC5olNefsrjP8iYlW4nl4,18128
133
+ pymobiledevice3/services/mobile_config.py,sha256=2UmdqYNikznxI6bA2lkyIWS3NcHg3pTb5i6yLl8yZAY,18170
119
134
  pymobiledevice3/services/mobile_image_mounter.py,sha256=PZEN9O7XtLW9VH1qNTJ19zo_tFZhX68bTX0O-Uy9sck,15034
120
- pymobiledevice3/services/mobilebackup2.py,sha256=M2sVY-vXl6f25QFom-z5bUkeTdA4Twbiw1tH-4Tb79M,18303
135
+ pymobiledevice3/services/mobilebackup2.py,sha256=8oEy-GG2UKoy8Kf7rCC-rbTJJgDWM-4rdgWtykNT4eM,18349
121
136
  pymobiledevice3/services/notification_proxy.py,sha256=mk4kxLRi6aDTXKOazgldliZG4q0bME7jBcxPyJsSpDw,2125
122
- pymobiledevice3/services/os_trace.py,sha256=r4G1YZRzhwevb54pDAA3vTdMJhxRaoJHNJbCHs-J0TU,6720
137
+ pymobiledevice3/services/os_trace.py,sha256=nTODlyWvb10fpqWHDU3m7i9sADIMF0ezfyo9Ql2BZa8,7422
123
138
  pymobiledevice3/services/pcapd.py,sha256=Gd6xN9eBHnLIQ5M2LM-y4Z-eCquxVEnSKuyBECwZlRs,11960
124
139
  pymobiledevice3/services/power_assertion.py,sha256=hh-9tpPbNctAegsV0IYE3ilikT-o4t758-y3u0Td9wM,1212
125
140
  pymobiledevice3/services/preboard.py,sha256=QJ1miS0e2lY9y4sS4GxsMZh-uxKDeDi6upgPTyqTpfs,894
126
- pymobiledevice3/services/remote_fetch_symbols.py,sha256=V2NcKalJ9i24V5gJkW-JrVJV5WRAJrkCSFJd9CnzN50,1831
141
+ pymobiledevice3/services/remote_fetch_symbols.py,sha256=dVGCN81ujdL7Ouokh5j7ZMNPu0ypEb1ica4oAcY7OGU,2096
127
142
  pymobiledevice3/services/remote_server.py,sha256=8eH4i2mMSxVQzf5mUPJwQnlFpHPH0ahsgVe1ZL2qP7A,20309
128
143
  pymobiledevice3/services/restore_service.py,sha256=6wRRf_aQBx7JLLmpS3eDLLleK-2qzxDE9jWzkF-Fb_o,1887
129
- pymobiledevice3/services/screenshot.py,sha256=dPAKkvZWVHCcld_NSR5ZwmsfkQIOdKIyB7LgHggdxo0,1315
144
+ pymobiledevice3/services/screenshot.py,sha256=OjJIHByT6PDyWrqNQObm6I_SkrjAjguXtyB3OD_l0Rs,1358
130
145
  pymobiledevice3/services/simulate_location.py,sha256=Let7iupWt8WNYblhIMTlvY-RZQx7IrCTQ6YTo5VVKhY,1162
131
146
  pymobiledevice3/services/springboard.py,sha256=Pn6cyNOTVrFN8_x43pj6cE1fPR7HeJ-vd6stD4K0lBg,2474
132
147
  pymobiledevice3/services/syslog.py,sha256=EeV-nOlAyOkGKBUTfFwe-QzaJhnW8XUHWHvRk4BNzxM,1563
133
- pymobiledevice3/services/webinspector.py,sha256=RZRkX_ugwWjn6IzVpsCEAxF5039HbUXV9jI9N2V_x54,16713
148
+ pymobiledevice3/services/webinspector.py,sha256=MgYfjExwBMCkHTqKteW5RfzrKZiqsxIBX5M_0wLTRbU,15803
134
149
  pymobiledevice3/services/dvt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
150
  pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py,sha256=PZOhnYkEirqWtU0RUNun0tdjSitDXWxcl4p_P7mBELk,1072
136
151
  pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py,sha256=pO6C_CI34kP0IcY3JalZ9SKfmYaraPlk-8YiFJuT4fc,1179
@@ -151,23 +166,23 @@ pymobiledevice3/services/dvt/instruments/screenshot.py,sha256=JKz8UFWTkroMTIEnXB
151
166
  pymobiledevice3/services/dvt/instruments/sysmontap.py,sha256=Tscf05j2xNfTKcYsBL1KEXHkrs0I1sS7YAKt-AtlcFU,1594
152
167
  pymobiledevice3/services/dvt/testmanaged/xcuitest.py,sha256=nv3wtZi5INXGanIzun-5HLAGccXeOAEDKk8HiMeVFqA,12267
153
168
  pymobiledevice3/services/web_protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
- pymobiledevice3/services/web_protocol/alert.py,sha256=1H_1ML3M-90nePsxHPuUNZAfnsmNUXyDiQ40jkV9zJE,830
155
- pymobiledevice3/services/web_protocol/automation_session.py,sha256=Osdbt_On4oy5NGr7bmiY8D6VpILYmwZKeCk89rGzMqY,14507
156
- pymobiledevice3/services/web_protocol/cdp_screencast.py,sha256=zCTKYXaly1v4DODooTZHZDp5qyeXiQ0JkYxMrh2SeCs,5908
169
+ pymobiledevice3/services/web_protocol/alert.py,sha256=yN_P-S2XnqIDGRGdpRgdEOBWkqa5P0hcby8W7N7i_I4,878
170
+ pymobiledevice3/services/web_protocol/automation_session.py,sha256=wZkxKM8HdNI-28Zz1i3Lm7n3wWRGmhJEpcUCXVY7pFA,15090
171
+ pymobiledevice3/services/web_protocol/cdp_screencast.py,sha256=3Tj4l85DQauxbHWPctO8mCVpP60uBm-Xi88k2n_kluY,5931
157
172
  pymobiledevice3/services/web_protocol/cdp_server.py,sha256=NwwtrBco9iOynJaoXTNM9lamNYZ-t7pLvU1vswKwKsU,2554
158
173
  pymobiledevice3/services/web_protocol/cdp_target.py,sha256=dtJ5I59Q--yZ9_0dwDm7BMV4_tbTDiZaqLFWxSlYaxM,32393
159
- pymobiledevice3/services/web_protocol/driver.py,sha256=KIkPHszP51wHSi2Gt_u2p9HcpxSpqSa-geLYo1ljETI,7534
160
- pymobiledevice3/services/web_protocol/element.py,sha256=Teqc_ziPbdu-syaZNcQzelyNO9u5wA62vv-dce9gAOQ,8498
174
+ pymobiledevice3/services/web_protocol/driver.py,sha256=opdQwObQkDE5rh0m4pmfSGEKsVmLZCXg3ow5q7NHGcU,7996
175
+ pymobiledevice3/services/web_protocol/element.py,sha256=bJkxqWgouGwtCN_A3DctNO12xBR-BjT7cL2UQdSSfIg,8874
161
176
  pymobiledevice3/services/web_protocol/inspector_session.py,sha256=ep4YWu9Pm9IQfkRZ8AYVUCWDV1-BPRz0DQHKTGwj-JE,10625
162
- pymobiledevice3/services/web_protocol/selenium_api.py,sha256=CscAbTANMnsHwtAtMifU59HvHH9tVr0PlL6hoBE3hrM,2772
163
- pymobiledevice3/services/web_protocol/session_protocol.py,sha256=7ykfQ-Iy2M6GMgzP21Gh02v1YzTBxdTLjrESDulAa_Y,1936
164
- pymobiledevice3/services/web_protocol/switch_to.py,sha256=k2jy9jVIUSlrlXIu3hNNWf8tBtGgvhjbyRETKnHMXTQ,2786
177
+ pymobiledevice3/services/web_protocol/selenium_api.py,sha256=RmiY260usm7Pa45IQLzx2jO0kC8r0VnxKM8SHJ3-Y_s,3079
178
+ pymobiledevice3/services/web_protocol/session_protocol.py,sha256=CMqFeIjsse0qkFqh8va_AJDkybjurtIjALLSUo7BfR4,1981
179
+ pymobiledevice3/services/web_protocol/switch_to.py,sha256=TCdVrMfsvd18o-vZ0owVrEFYeoGbwF3jZ1iDaPslV9U,2944
165
180
  pymobiledevice3/tunneld/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
181
  pymobiledevice3/tunneld/api.py,sha256=Lwl1OdhPTgX6Zqezy8T4dEcXRfaEPwyGNClioTx3fUc,2338
167
182
  pymobiledevice3/tunneld/server.py,sha256=dMEZAv_X-76l0vSalpq4x0IVkbE-MNGR77T-u1TiHuE,25752
168
- pymobiledevice3-5.0.4.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
169
- pymobiledevice3-5.0.4.dist-info/METADATA,sha256=xvKq3GJh8beaZsexHEVY4OzZaNxlenVhcVX8q0DwZqc,17416
170
- pymobiledevice3-5.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
171
- pymobiledevice3-5.0.4.dist-info/entry_points.txt,sha256=jJMlOanHlVwUxcY__JwvKeWPrvBJr_wJyEq4oHIZNKE,66
172
- pymobiledevice3-5.0.4.dist-info/top_level.txt,sha256=MjZoRqcWPOh5banG-BbDOnKEfsS3kCxqV9cv-nzyg2Q,21
173
- pymobiledevice3-5.0.4.dist-info/RECORD,,
183
+ pymobiledevice3-7.0.6.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
184
+ pymobiledevice3-7.0.6.dist-info/METADATA,sha256=KD769dyOg0i1IpCtnT7n6qhAr0m99LxTRk-xmTnM0ok,17500
185
+ pymobiledevice3-7.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
186
+ pymobiledevice3-7.0.6.dist-info/entry_points.txt,sha256=jJMlOanHlVwUxcY__JwvKeWPrvBJr_wJyEq4oHIZNKE,66
187
+ pymobiledevice3-7.0.6.dist-info/top_level.txt,sha256=MjZoRqcWPOh5banG-BbDOnKEfsS3kCxqV9cv-nzyg2Q,21
188
+ pymobiledevice3-7.0.6.dist-info/RECORD,,
@@ -1,50 +0,0 @@
1
- import logging
2
- from collections import namedtuple
3
- from pathlib import Path
4
-
5
- import click
6
- from plumbum import CommandNotFound, local
7
-
8
- logger = logging.getLogger(__name__)
9
-
10
- ShellCompletion = namedtuple("ShellCompletion", ["source", "rc", "path"])
11
-
12
- COMPLETIONS = [
13
- ShellCompletion("zsh_source", Path("~/.zshrc").expanduser(), Path("~/.pymobiledevice3.zsh").expanduser()),
14
- ShellCompletion("bash_source", Path("~/.bashrc").expanduser(), Path("~/.pymobiledevice3.bash").expanduser()),
15
- ShellCompletion("fish_source", None, Path("~/.config/fish/completions/pymobiledevice3.fish").expanduser()),
16
- ]
17
-
18
-
19
- @click.group()
20
- def cli() -> None:
21
- pass
22
-
23
-
24
- @cli.command()
25
- def install_completions() -> None:
26
- """
27
- Install shell completions for the pymobiledevice3 command
28
-
29
- If supplying an explicit shell script to write, install it there, otherwise install globally.
30
- """
31
- try:
32
- pymobiledevice3 = local["pymobiledevice3"]
33
- except CommandNotFound:
34
- logger.error("pymobiledevice3 main binary could not be found in your path.")
35
- return
36
-
37
- for completion in COMPLETIONS:
38
- with local.env(_PYMOBILEDEVICE3_COMPLETE=completion.source):
39
- if not completion.path.parent.exists():
40
- # fish is not installed, skip
41
- continue
42
- logger.info(f"Writing shell completions to: {completion.path}")
43
- completion.path.write_text(pymobiledevice3())
44
- line = f"source {completion.path}"
45
-
46
- if not completion.rc.exists() or line in completion.rc.read_text():
47
- continue
48
-
49
- logger.info(f"Adding source line to {completion.rc}")
50
- completion.rc.write_text(f"{completion.rc.read_text()}\n{line}")