osn-selenium 1.1.0__py3-none-any.whl → 1.2.0__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 (418) hide show
  1. osn_selenium/_decorators.py +57 -0
  2. osn_selenium/_trio_threads_helpers.py +157 -0
  3. osn_selenium/_typehints.py +1 -1
  4. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  5. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  6. osn_selenium/abstract/webdriver/core/base.py +0 -14
  7. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  8. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/script.py +5 -4
  10. osn_selenium/abstract/webdriver/core/window.py +11 -11
  11. osn_selenium/dev_tools/_decorators.py +1 -42
  12. osn_selenium/dev_tools/_functions.py +2 -4
  13. osn_selenium/dev_tools/domains/__init__.py +1 -1
  14. osn_selenium/dev_tools/domains/fetch.py +5 -7
  15. osn_selenium/dev_tools/domains_default/fetch.py +1 -1
  16. osn_selenium/dev_tools/logger/main.py +9 -9
  17. osn_selenium/dev_tools/logger/target.py +7 -7
  18. osn_selenium/dev_tools/manager/base.py +10 -19
  19. osn_selenium/dev_tools/manager/lifecycle.py +83 -74
  20. osn_selenium/dev_tools/manager/logging.py +1 -1
  21. osn_selenium/dev_tools/manager/targets.py +13 -5
  22. osn_selenium/dev_tools/settings.py +4 -4
  23. osn_selenium/dev_tools/target/base.py +18 -11
  24. osn_selenium/dev_tools/target/discovery.py +1 -1
  25. osn_selenium/dev_tools/target/events.py +2 -2
  26. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  27. osn_selenium/dev_tools/target/lifecycle.py +103 -43
  28. osn_selenium/dev_tools/target/logging.py +1 -1
  29. osn_selenium/exceptions/__init__.py +0 -1
  30. osn_selenium/exceptions/base.py +28 -1
  31. osn_selenium/exceptions/bidi_bridge.py +59 -0
  32. osn_selenium/exceptions/configuration.py +1 -8
  33. osn_selenium/exceptions/dependencies.py +2 -2
  34. osn_selenium/exceptions/devtools.py +9 -39
  35. osn_selenium/exceptions/experimental.py +26 -0
  36. osn_selenium/exceptions/flags.py +0 -2
  37. osn_selenium/exceptions/instance.py +1 -9
  38. osn_selenium/exceptions/javascript.py +0 -2
  39. osn_selenium/exceptions/logic.py +0 -2
  40. osn_selenium/exceptions/path.py +1 -9
  41. osn_selenium/exceptions/platform.py +0 -2
  42. osn_selenium/exceptions/protocol.py +0 -3
  43. osn_selenium/exceptions/webdriver.py +1 -7
  44. osn_selenium/exceptions/window.py +1 -8
  45. osn_selenium/executors/sync/cdp.py +0 -5
  46. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  47. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  48. osn_selenium/executors/trio_threads/cdp.py +0 -5
  49. osn_selenium/flags/base.py +6 -4
  50. osn_selenium/flags/blink.py +2 -2
  51. osn_selenium/flags/chrome.py +6 -6
  52. osn_selenium/flags/edge.py +6 -6
  53. osn_selenium/instances/convert.py +44 -3
  54. osn_selenium/instances/protocols.py +47 -1
  55. osn_selenium/instances/sync/browsing_context.py +2 -2
  56. osn_selenium/instances/sync/script.py +7 -2
  57. osn_selenium/instances/sync/web_element.py +1 -1
  58. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  59. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  60. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  61. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  62. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  63. osn_selenium/instances/trio_threads/browsing_context.py +2 -2
  64. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  65. osn_selenium/instances/trio_threads/network.py +1 -1
  66. osn_selenium/instances/trio_threads/script.py +7 -2
  67. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  68. osn_selenium/instances/unified/browsing_context.py +2 -2
  69. osn_selenium/instances/unified/script.py +2 -2
  70. osn_selenium/instances/unified/web_element.py +3 -5
  71. osn_selenium/javascript/fingerprint/__init__.py +2 -1
  72. osn_selenium/trio_bidi/__init__.py +1 -0
  73. osn_selenium/trio_bidi/_context_vars.py +12 -0
  74. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  75. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  76. osn_selenium/trio_bidi/_file_functions.py +28 -0
  77. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  78. osn_selenium/trio_bidi/_models.py +199 -0
  79. osn_selenium/trio_bidi/_typehints.py +20 -0
  80. osn_selenium/trio_bidi/connection_pool.py +587 -0
  81. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  82. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  83. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  84. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  85. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  86. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  87. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  88. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  89. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  90. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  91. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  92. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  93. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  94. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  95. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  96. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  97. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  98. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  99. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  100. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  101. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  102. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  103. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  104. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  105. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  106. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  107. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  108. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  109. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  110. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  111. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  112. osn_selenium/trio_bidi/mixin.py +186 -0
  113. osn_selenium/trio_bidi/remote_connection.py +164 -0
  114. osn_selenium/trio_threads_mixin.py +22 -68
  115. osn_selenium/webdrivers/_args_helpers.py +118 -5
  116. osn_selenium/webdrivers/_typehints.py +9 -3
  117. osn_selenium/webdrivers/protocols.py +81 -1
  118. osn_selenium/webdrivers/sync/blink/base.py +10 -0
  119. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  120. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  121. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  122. osn_selenium/webdrivers/sync/core/base.py +3 -11
  123. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  124. osn_selenium/webdrivers/sync/core/file.py +3 -2
  125. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  126. osn_selenium/webdrivers/sync/core/script.py +3 -2
  127. osn_selenium/webdrivers/sync/core/window.py +3 -3
  128. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  129. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  130. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  131. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  132. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  133. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  134. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  135. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  136. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  137. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  138. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  139. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  140. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  141. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  142. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  143. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  144. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  145. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  146. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  147. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  148. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  149. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  150. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  151. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  152. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  153. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  154. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  155. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  156. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  157. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  158. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  159. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  160. osn_selenium/webdrivers/trio_threads/blink/__init__.py +7 -1
  161. osn_selenium/webdrivers/trio_threads/blink/base.py +14 -0
  162. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  163. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  164. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  165. osn_selenium/webdrivers/trio_threads/core/__init__.py +0 -10
  166. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  167. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  168. osn_selenium/webdrivers/trio_threads/core/base.py +4 -16
  169. osn_selenium/webdrivers/trio_threads/core/capture.py +3 -2
  170. osn_selenium/webdrivers/trio_threads/core/file.py +3 -2
  171. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +44 -10
  172. osn_selenium/webdrivers/trio_threads/core/script.py +3 -2
  173. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  174. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  175. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  176. osn_selenium/webdrivers/trio_threads/core/window.py +4 -4
  177. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  178. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  179. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  180. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  181. osn_selenium/webdrivers/unified/blink/base.py +5 -1
  182. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  183. osn_selenium/webdrivers/unified/chrome/base.py +5 -1
  184. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  185. osn_selenium/webdrivers/unified/core/base.py +16 -10
  186. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  187. osn_selenium/webdrivers/unified/core/components.py +12 -7
  188. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  189. osn_selenium/webdrivers/unified/core/file.py +3 -2
  190. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  191. osn_selenium/webdrivers/unified/core/script.py +5 -3
  192. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  193. osn_selenium/webdrivers/unified/core/window.py +9 -8
  194. osn_selenium/webdrivers/unified/edge/base.py +5 -1
  195. osn_selenium/webdrivers/unified/yandex/base.py +5 -1
  196. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +3 -2
  197. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  198. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  199. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  200. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  201. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  202. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  203. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  204. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  205. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  206. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  207. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  208. osn_selenium/abstract/executors/cdp/console.py +0 -18
  209. osn_selenium/abstract/executors/cdp/css.py +0 -197
  210. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  211. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  212. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  213. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  214. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  215. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  216. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  217. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  218. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  219. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  220. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  221. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  222. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  223. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  224. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  225. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  226. osn_selenium/abstract/executors/cdp/input.py +0 -158
  227. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  228. osn_selenium/abstract/executors/cdp/io.py +0 -24
  229. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  230. osn_selenium/abstract/executors/cdp/log.py +0 -27
  231. osn_selenium/abstract/executors/cdp/media.py +0 -14
  232. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  233. osn_selenium/abstract/executors/cdp/network.py +0 -252
  234. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  235. osn_selenium/abstract/executors/cdp/page.py +0 -347
  236. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  237. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  238. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  239. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  240. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  241. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  242. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  243. osn_selenium/abstract/executors/cdp/security.py +0 -26
  244. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  245. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  246. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  247. osn_selenium/abstract/executors/cdp/target.py +0 -125
  248. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  249. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  250. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  251. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  252. osn_selenium/base_mixin.py +0 -122
  253. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  254. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  255. osn_selenium/executors/sync/cdp/animation.py +0 -50
  256. osn_selenium/executors/sync/cdp/audits.py +0 -48
  257. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  258. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  259. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  260. osn_selenium/executors/sync/cdp/browser.py +0 -131
  261. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  262. osn_selenium/executors/sync/cdp/cast.py +0 -38
  263. osn_selenium/executors/sync/cdp/console.py +0 -24
  264. osn_selenium/executors/sync/cdp/css.py +0 -187
  265. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  266. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  267. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  268. osn_selenium/executors/sync/cdp/dom.py +0 -310
  269. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  270. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  271. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  272. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  273. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  274. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  275. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  276. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  277. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  278. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  279. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  280. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  281. osn_selenium/executors/sync/cdp/input.py +0 -233
  282. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  283. osn_selenium/executors/sync/cdp/io.py +0 -33
  284. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  285. osn_selenium/executors/sync/cdp/log.py +0 -35
  286. osn_selenium/executors/sync/cdp/media.py +0 -21
  287. osn_selenium/executors/sync/cdp/memory.py +0 -62
  288. osn_selenium/executors/sync/cdp/network.py +0 -287
  289. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  290. osn_selenium/executors/sync/cdp/page.py +0 -365
  291. osn_selenium/executors/sync/cdp/performance.py +0 -33
  292. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  293. osn_selenium/executors/sync/cdp/preload.py +0 -21
  294. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  295. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  296. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  297. osn_selenium/executors/sync/cdp/schema.py +0 -23
  298. osn_selenium/executors/sync/cdp/security.py +0 -30
  299. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  300. osn_selenium/executors/sync/cdp/storage.py +0 -151
  301. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  302. osn_selenium/executors/sync/cdp/target.py +0 -147
  303. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  304. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  305. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  306. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  307. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  308. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  309. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  310. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  311. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  312. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  313. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  314. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  315. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  316. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  317. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  318. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  319. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  320. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  321. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  322. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  323. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  324. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  325. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  326. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  327. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  328. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  329. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  330. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  331. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  332. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  333. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  334. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  335. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  336. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  337. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  338. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  339. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  340. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  341. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  342. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  343. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  344. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  345. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  346. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  347. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  348. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  349. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  350. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  351. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  352. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  353. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  354. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  355. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  356. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  357. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  358. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  359. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  360. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  361. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  362. osn_selenium/executors/unified/cdp/animation.py +0 -50
  363. osn_selenium/executors/unified/cdp/audits.py +0 -45
  364. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  365. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  366. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  367. osn_selenium/executors/unified/cdp/browser.py +0 -143
  368. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  369. osn_selenium/executors/unified/cdp/cast.py +0 -32
  370. osn_selenium/executors/unified/cdp/console.py +0 -18
  371. osn_selenium/executors/unified/cdp/css.py +0 -237
  372. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  373. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  374. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  375. osn_selenium/executors/unified/cdp/dom.py +0 -380
  376. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  377. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  378. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  379. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  380. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  381. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  382. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  383. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  384. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  385. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  386. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  387. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  388. osn_selenium/executors/unified/cdp/input.py +0 -254
  389. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  390. osn_selenium/executors/unified/cdp/io.py +0 -29
  391. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  392. osn_selenium/executors/unified/cdp/log.py +0 -29
  393. osn_selenium/executors/unified/cdp/media.py +0 -15
  394. osn_selenium/executors/unified/cdp/memory.py +0 -59
  395. osn_selenium/executors/unified/cdp/network.py +0 -323
  396. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  397. osn_selenium/executors/unified/cdp/page.py +0 -410
  398. osn_selenium/executors/unified/cdp/performance.py +0 -27
  399. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  400. osn_selenium/executors/unified/cdp/preload.py +0 -15
  401. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  402. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  403. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  404. osn_selenium/executors/unified/cdp/schema.py +0 -17
  405. osn_selenium/executors/unified/cdp/security.py +0 -27
  406. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  407. osn_selenium/executors/unified/cdp/storage.py +0 -178
  408. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  409. osn_selenium/executors/unified/cdp/target.py +0 -165
  410. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  411. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  412. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  413. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  414. osn_selenium-1.1.0.dist-info/RECORD +0 -615
  415. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  416. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  417. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +0 -0
  418. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -6,10 +6,10 @@ from typing import (
6
6
  Tuple
7
7
  )
8
8
  from osn_selenium.dev_tools.models import TargetData
9
+ from osn_selenium._exception_helpers import log_exception
9
10
  from osn_selenium.dev_tools.settings import LoggerSettings
10
11
  from osn_selenium.exceptions.devtools import TrioEndExceptions
11
12
  from osn_selenium.dev_tools._validators import validate_log_filter
12
- from osn_selenium.dev_tools._exception_helpers import log_exception
13
13
  from osn_selenium.dev_tools.logger.models import (
14
14
  CDPTargetLogEntry,
15
15
  FingerprintTargetLogEntry
@@ -30,7 +30,7 @@ class TargetLogger:
30
30
  def __init__(
31
31
  self,
32
32
  logger_settings: LoggerSettings,
33
- nursery_object: trio.Nursery,
33
+ nursery: trio.Nursery,
34
34
  target_data: TargetData,
35
35
  cdp_receive_channel: Optional[trio.MemoryReceiveChannel[CDPTargetLogEntry]],
36
36
  fingerprint_receive_channel: Optional[trio.MemoryReceiveChannel[FingerprintTargetLogEntry]],
@@ -40,7 +40,7 @@ class TargetLogger:
40
40
 
41
41
  Args:
42
42
  logger_settings (LoggerSettings): Configuration for logging.
43
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
43
+ nursery (trio.Nursery): The Trio nursery to spawn background tasks.
44
44
  target_data (TargetData): The data of the browser target this logger will log for.
45
45
  cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPTargetLogEntry]]):
46
46
  Channel to receive CDP logs.
@@ -52,7 +52,7 @@ class TargetLogger:
52
52
  """
53
53
 
54
54
  self._target_data = target_data
55
- self._nursery_object = nursery_object
55
+ self._nursery = nursery
56
56
  self._cdp_receive_channel = cdp_receive_channel
57
57
  self._fingerprint_receive_channel = fingerprint_receive_channel
58
58
  self._cdp_file_path: Optional[pathlib.Path] = None
@@ -220,12 +220,12 @@ class TargetLogger:
220
220
  self._cdp_file_writing_stopped = trio.Event()
221
221
 
222
222
  if self._cdp_file_path is not None:
223
- self._nursery_object.start_soon(self._write_cdp_file)
223
+ self._nursery.start_soon(self._write_cdp_file)
224
224
 
225
225
  self._fingerprint_file_writing_stopped = trio.Event()
226
226
 
227
227
  if self._fingerprint_file_path is not None:
228
- self._nursery_object.start_soon(self._write_fingerprint_file)
228
+ self._nursery.start_soon(self._write_fingerprint_file)
229
229
 
230
230
  self._is_active = True
231
231
  except* TrioEndExceptions:
@@ -269,7 +269,7 @@ def build_target_logger(
269
269
 
270
270
  target_logger = TargetLogger(
271
271
  logger_settings=logger_settings,
272
- nursery_object=nursery_object,
272
+ nursery=nursery_object,
273
273
  target_data=target_data,
274
274
  cdp_receive_channel=cdp_recv,
275
275
  fingerprint_receive_channel=fp_recv,
@@ -1,20 +1,15 @@
1
1
  import trio
2
- from contextlib import (
3
- AbstractAsyncContextManager
4
- )
2
+ from typing import Dict, Optional
3
+ from contextlib import AsyncExitStack
5
4
  from osn_selenium.dev_tools.target import DevToolsTarget
6
5
  from osn_selenium.dev_tools.logger.main import MainLogger
7
- from osn_selenium.dev_tools.domains import DomainsSettings
8
6
  from osn_selenium.dev_tools._wrappers import DevToolsPackage
9
7
  from osn_selenium.dev_tools.settings import DevToolsSettings
10
- from typing import (
11
- Any,
12
- Dict,
13
- Optional,
14
- TYPE_CHECKING
15
- )
16
8
  from osn_selenium.dev_tools._system_utils import prepare_log_dir
17
9
  from selenium.webdriver.remote.bidi_connection import BidiConnection
10
+ from osn_selenium.webdrivers._typehints import (
11
+ ANY_TRIO_WEBDRIVER_TYPEHINT
12
+ )
18
13
  from osn_selenium.dev_tools.logger.models import (
19
14
  CDPLogLevelStats,
20
15
  CDPMainLogEntry,
@@ -27,9 +22,6 @@ from osn_selenium.dev_tools.logger.models import (
27
22
 
28
23
  __all__ = ["BaseMixin"]
29
24
 
30
- if TYPE_CHECKING:
31
- from osn_selenium.webdrivers.trio_threads.core import CoreWebDriver
32
-
33
25
 
34
26
  class BaseMixin:
35
27
  """
@@ -47,14 +39,14 @@ class BaseMixin:
47
39
 
48
40
  def __init__(
49
41
  self,
50
- parent_webdriver: "CoreWebDriver",
42
+ parent_webdriver: ANY_TRIO_WEBDRIVER_TYPEHINT,
51
43
  devtools_settings: Optional[DevToolsSettings] = None
52
44
  ):
53
45
  """
54
46
  Initializes the DevTools manager.
55
47
 
56
48
  Args:
57
- parent_webdriver (CoreWebDriver): The WebDriver instance to which this DevTools manager is attached.
49
+ parent_webdriver (ANY_TRIO_WEBDRIVER_TYPEHINT): The WebDriver instance to which this DevTools manager is attached.
58
50
  devtools_settings (Optional[DevToolsSettings]): Configuration settings for DevTools.
59
51
  If None, default settings will be used.
60
52
  """
@@ -74,12 +66,11 @@ class BaseMixin:
74
66
  for filter_ in devtools_settings.new_targets_filter
75
67
  ] if devtools_settings.new_targets_filter is not None else None
76
68
 
77
- self._bidi_connection: Optional[AbstractAsyncContextManager[BidiConnection, Any]] = None
78
- self._bidi_connection_object: Optional[BidiConnection] = None
69
+ self._bidi_connection: Optional[BidiConnection] = None
70
+ self._nursery: Optional[trio.Nursery] = None
71
+ self._exit_stack = AsyncExitStack()
79
72
  self._devtools_package: Optional[DevToolsPackage] = None
80
73
  self._websocket_url: Optional[str] = None
81
- self._nursery: Optional[AbstractAsyncContextManager[trio.Nursery, Optional[bool]]] = None
82
- self._nursery_object: Optional[trio.Nursery] = None
83
74
  self._handling_targets: Dict[str, DevToolsTarget] = {}
84
75
  self.targets_lock = trio.Lock()
85
76
  self.exit_event: Optional[trio.Event] = None
@@ -1,15 +1,16 @@
1
1
  import trio
2
2
  from types import TracebackType
3
3
  from typing import Optional, Type
4
- from osn_selenium.dev_tools._decorators import log_on_error
4
+ from osn_selenium._decorators import log_on_error
5
+ from osn_selenium._exception_helpers import log_exception
5
6
  from osn_selenium.dev_tools._wrappers import DevToolsPackage
6
7
  from osn_selenium.dev_tools.manager.targets import TargetsMixin
7
8
  from osn_selenium.dev_tools.logger.main import build_main_logger
8
- from osn_selenium.dev_tools._exception_helpers import log_exception
9
9
  from osn_selenium.exceptions.devtools import (
10
10
  BidiConnectionNotEstablishedError,
11
11
  CDPEndExceptions,
12
- CantEnterDevToolsContextError
12
+ CantEnterDevToolsContextError,
13
+ TrioEndExceptions
13
14
  )
14
15
 
15
16
 
@@ -41,9 +42,11 @@ class LifecycleMixin(TargetsMixin):
41
42
 
42
43
  if driver is None:
43
44
  self._websocket_url = None
45
+ return
44
46
 
45
47
  if driver.caps.get("se:cdp"):
46
48
  self._websocket_url = driver.caps.get("se:cdp")
49
+ return
47
50
 
48
51
  self._websocket_url = driver._get_cdp_details()[1]
49
52
  except CDPEndExceptions as error:
@@ -64,8 +67,8 @@ class LifecycleMixin(TargetsMixin):
64
67
  """
65
68
 
66
69
  try:
67
- if self._bidi_connection_object is not None:
68
- self._devtools_package = DevToolsPackage(package=self._bidi_connection_object.devtools)
70
+ if self._bidi_connection is not None:
71
+ self._devtools_package = DevToolsPackage(package=self._bidi_connection.devtools)
69
72
  else:
70
73
  raise BidiConnectionNotEstablishedError()
71
74
  except CDPEndExceptions as error:
@@ -74,9 +77,9 @@ class LifecycleMixin(TargetsMixin):
74
77
  log_exception(error)
75
78
  raise error
76
79
 
77
- async def run(self) -> None:
80
+ async def start(self) -> None:
78
81
  """
79
- Initializes and runs the DevTools manager.
82
+ Initializes and starts the DevTools manager.
80
83
 
81
84
  This method sets up the BiDi connection, starts the Trio nursery, retrieves
82
85
  necessary CDP packages and URLs, initializes the main logger, and adds the
@@ -89,21 +92,18 @@ class LifecycleMixin(TargetsMixin):
89
92
  if self._webdriver.driver is None:
90
93
  raise CantEnterDevToolsContextError(reason="Driver is not initialized")
91
94
 
92
- self._bidi_connection = self._webdriver.bidi_connection()
93
- self._bidi_connection_object = await self._bidi_connection.__aenter__()
94
-
95
- self._nursery = trio.open_nursery()
96
- self._nursery_object = await self._nursery.__aenter__()
95
+ self._nursery = await self._exit_stack.enter_async_context(trio.open_nursery())
96
+ self._bidi_connection = await self._exit_stack.enter_async_context(self._webdriver.bidi_connection())
97
97
 
98
98
  self._get_devtools_package()
99
99
  self._get_websocket_url()
100
100
 
101
- self._main_logger_cdp_send_channel, self._main_logger_fingerprint_send_channel, self._main_logger = build_main_logger(self._nursery_object, self._logger_settings)
101
+ self._main_logger_cdp_send_channel, self._main_logger_fingerprint_send_channel, self._main_logger = build_main_logger(nursery=self._nursery, logger_settings=self._logger_settings)
102
102
  await self._main_logger.run()
103
103
 
104
104
  self.exit_event = trio.Event()
105
105
 
106
- self._fingerprint_injection_script = await self._webdriver.sync_to_trio(sync_function=self._fingerprint_settings.generate_js)()
106
+ self._fingerprint_injection_script = await self._webdriver.sync_to_trio(sync_function=self._fingerprint_settings.generate_js)() if self._fingerprint_settings is not None else None
107
107
  main_target = (await self._get_all_targets())[0]
108
108
 
109
109
  await self._add_target(target_event=main_target, is_main_target=True)
@@ -122,44 +122,46 @@ class LifecycleMixin(TargetsMixin):
122
122
  BaseException: If any other unexpected error occurs during context entry.
123
123
  """
124
124
 
125
- await self.run()
125
+ await self.start()
126
126
 
127
- async def stop(
128
- self,
129
- exc_type: Optional[Type[BaseException]],
130
- exc_val: Optional[BaseException],
131
- exc_tb: Optional[TracebackType],
132
- ) -> None:
127
+ async def stop(self) -> None:
133
128
  """
134
129
  Stops the DevTools manager and cleans up resources.
135
130
 
136
131
  This method signals all targets to stop, closes the main logger, cancels the nursery,
137
132
  and closes the BiDi connection.
138
-
139
- Args:
140
- exc_type (Optional[Type[BaseException]]): The exception type if stopping due to an error.
141
- exc_val (Optional[BaseException]): The exception value if stopping due to an error.
142
- exc_tb (Optional[TracebackType]): The traceback if stopping due to an error.
143
133
  """
144
134
 
145
135
  @log_on_error
146
- async def _stop_main_logger():
136
+ async def _stop_main_logger() -> None:
147
137
  """Stops the main logger and closes its channels."""
148
138
 
149
139
  if self._main_logger_cdp_send_channel is not None:
150
- await self._main_logger_cdp_send_channel.aclose()
140
+ try:
141
+ await self._main_logger_cdp_send_channel.aclose()
142
+ except TrioEndExceptions:
143
+ pass
144
+
151
145
  self._main_logger_cdp_send_channel = None
152
146
 
153
147
  if self._main_logger_fingerprint_send_channel is not None:
154
- await self._main_logger_fingerprint_send_channel.aclose()
148
+ try:
149
+ await self._main_logger_fingerprint_send_channel.aclose()
150
+ except TrioEndExceptions:
151
+ pass
152
+
155
153
  self._main_logger_fingerprint_send_channel = None
156
154
 
157
155
  if self._main_logger is not None:
158
- await self._main_logger.close()
156
+ try:
157
+ await self._main_logger.close()
158
+ except TrioEndExceptions:
159
+ pass
160
+
159
161
  self._main_logger = None
160
162
 
161
163
  @log_on_error
162
- async def _stop_all_targets():
164
+ async def _stop_all_targets() -> None:
163
165
  """Signals all active targets to stop and waits for their completion."""
164
166
 
165
167
  for target in self._handling_targets.copy().values():
@@ -169,68 +171,75 @@ class LifecycleMixin(TargetsMixin):
169
171
  except (BaseException,):
170
172
  pass
171
173
 
172
- self._handling_targets = {}
174
+ self._handling_targets.clear()
173
175
 
174
176
  @log_on_error
175
- async def _close_nursery():
176
- """Asynchronously exits the Trio nursery context manager."""
177
-
178
- if self._nursery_object is not None:
179
- self._nursery_object.cancel_scope.cancel()
180
- self._nursery_object = None
177
+ async def _close_async_stack() -> None:
178
+ """
179
+ Closes the asynchronous resource stack.
180
+ """
181
181
 
182
182
  if self._nursery is not None:
183
- await self._nursery.__aexit__(exc_type, exc_val, exc_tb)
183
+ try:
184
+ self._nursery.cancel_scope.cancel()
185
+ except TrioEndExceptions:
186
+ pass
187
+
184
188
  self._nursery = None
185
-
186
- @log_on_error
187
- async def _close_bidi_connection():
188
- """Asynchronously exits the BiDi connection context manager."""
189
189
 
190
190
  if self._bidi_connection is not None:
191
- await self._bidi_connection.__aexit__(exc_type, exc_val, exc_tb)
192
191
  self._bidi_connection = None
193
- self._bidi_connection_object = None
194
-
195
- if self._is_active:
196
- self._is_closing = True
197
- self.exit_event.set()
198
-
199
- await _stop_all_targets()
200
- await _stop_main_logger()
201
- await _close_nursery()
202
- await _close_bidi_connection()
203
-
204
- self.exit_event = None
205
- self._devtools_package = None
206
- self._websocket_url = None
207
- self._num_cdp_logs = 0
208
- self._num_fingerprint_logs = 0
209
- self._cdp_targets_types_stats = {}
210
- self._cdp_log_level_stats = {}
211
- self._fingerprint_categories_stats = {}
212
- self._fingerprint_log_level_stats = {}
213
- self._is_active = False
214
- self._is_closing = False
192
+
193
+ try:
194
+ await self._exit_stack.aclose()
195
+ except TrioEndExceptions:
196
+ pass
197
+ except AssertionError:
198
+ pass # TODO solve exit issue
199
+
200
+ if not self._is_active:
201
+ return
202
+
203
+ self._is_closing = True
204
+ self.exit_event.set()
205
+
206
+ await _stop_all_targets()
207
+ await _stop_main_logger()
208
+ await _close_async_stack()
209
+
210
+ self.exit_event = None
211
+ self._devtools_package = None
212
+ self._websocket_url = None
213
+ self._num_cdp_logs = 0
214
+ self._num_fingerprint_logs = 0
215
+ self._cdp_targets_types_stats.clear()
216
+ self._cdp_log_level_stats.clear()
217
+ self._fingerprint_categories_stats.clear()
218
+ self._fingerprint_log_level_stats.clear()
219
+ self._is_active = False
220
+ self._is_closing = False
215
221
 
216
222
  async def __aexit__(
217
223
  self,
218
224
  exc_type: Optional[Type[BaseException]],
219
225
  exc_val: Optional[BaseException],
220
226
  exc_tb: Optional[TracebackType],
221
- ):
227
+ ) -> bool:
222
228
  """
223
229
  Asynchronously exits the DevTools event handling context.
224
230
 
225
- This method is called when exiting an `async with` block with a DevTools instance.
226
- It ensures that all event listeners are cancelled, the Trio nursery is closed,
227
- and the BiDi connection is properly shut down. Cleanup attempts are made even if
228
- an exception occurred within the `async with` block.
229
-
230
231
  Args:
231
- exc_type (Optional[Type[BaseException]]): The exception type, if any, that caused the context to be exited.
232
+ exc_type (Optional[Type[BaseException]]): The exception type, if any.
232
233
  exc_val (Optional[BaseException]): The exception value, if any.
233
234
  exc_tb (Optional[TracebackType]): The exception traceback, if any.
235
+
236
+ Returns:
237
+ bool: True if an exception was suppressed, False otherwise.
234
238
  """
235
239
 
236
- await self.stop(exc_type=exc_type, exc_val=exc_val, exc_tb=exc_tb)
240
+ await self.stop()
241
+
242
+ if exc_type is not None and exc_val is not None and exc_tb is not None:
243
+ return True
244
+
245
+ return False
@@ -1,7 +1,7 @@
1
1
  import trio
2
2
  from osn_selenium.dev_tools.manager.base import BaseMixin
3
+ from osn_selenium._exception_helpers import log_exception
3
4
  from osn_selenium.exceptions.devtools import CDPEndExceptions
4
- from osn_selenium.dev_tools._exception_helpers import log_exception
5
5
  from osn_selenium.dev_tools.logger.models import (
6
6
  CDPLogLevelStats,
7
7
  CDPMainLogEntry,
@@ -1,8 +1,11 @@
1
1
  from typing import Any, List, Optional
2
+
3
+ import trio
4
+
2
5
  from osn_selenium.dev_tools.models import TargetData
3
6
  from osn_selenium.dev_tools.target import DevToolsTarget
7
+ from osn_selenium._exception_helpers import log_exception
4
8
  from osn_selenium.dev_tools.manager.logging import LoggingMixin
5
- from osn_selenium.dev_tools._exception_helpers import log_exception
6
9
  from osn_selenium.dev_tools.logger.models import CDPTargetTypeStats
7
10
  from osn_selenium.exceptions.devtools import (
8
11
  BidiConnectionNotEstablishedError,
@@ -106,7 +109,7 @@ class TargetsMixin(LoggingMixin):
106
109
  websocket_url=self._websocket_url,
107
110
  new_targets_filter_list=self._new_targets_filter,
108
111
  new_targets_buffer_size=self._new_targets_buffer_size,
109
- nursery=self._nursery_object,
112
+ nursery=self._nursery,
110
113
  exit_event=self.exit_event,
111
114
  fingerprint_injection_script=self._fingerprint_injection_script,
112
115
  target_background_task=self._target_background_task,
@@ -123,7 +126,12 @@ class TargetsMixin(LoggingMixin):
123
126
 
124
127
  await self._add_main_cdp_log()
125
128
 
126
- self._nursery_object.start_soon(self._handling_targets[target_id].run)
129
+ if is_main_target:
130
+ self._nursery.start_soon(self._handling_targets[target_id].run)
131
+ await self._handling_targets[target_id].started_event.wait()
132
+ await trio.sleep(1.0)
133
+ else:
134
+ self._nursery.start_soon(self._handling_targets[target_id].run)
127
135
 
128
136
  return True
129
137
  else:
@@ -156,7 +164,7 @@ class TargetsMixin(LoggingMixin):
156
164
  """
157
165
 
158
166
  try:
159
- if self._bidi_connection_object is not None:
167
+ if self._bidi_connection is not None:
160
168
  targets_filter = self._devtools_package.get("target.TargetFilter")(
161
169
  [
162
170
  {"exclude": False, "type": "page"},
@@ -165,7 +173,7 @@ class TargetsMixin(LoggingMixin):
165
173
  ]
166
174
  )
167
175
 
168
- return await self._bidi_connection_object.session.execute(self._devtools_package.get("target.get_targets")(targets_filter))
176
+ return await self._bidi_connection.session.execute(self._devtools_package.get("target.get_targets")(targets_filter))
169
177
 
170
178
  raise BidiConnectionNotEstablishedError()
171
179
  except CDPEndExceptions as error:
@@ -64,14 +64,14 @@ class CDPLoggerSettings(DictModel):
64
64
  log_level_filter_mode (Literal["exclude", "include"]): The mode for filtering log levels.
65
65
  "exclude" means log levels in `log_level_filter` will be excluded.
66
66
  "include" means only log levels in `log_level_filter` will be included.
67
- Defaults to "exclude".
67
+ Defaults to "include".
68
68
  log_level_filter (Optional[Union[CDPLogLevelsType, Sequence[CDPLogLevelsType]]]):
69
69
  A single log level or a sequence of log levels to filter by.
70
70
  Used in conjunction with `log_level_filter_mode`. Defaults to None.
71
71
  target_type_filter_mode (Literal["exclude", "include"]): The mode for filtering target types.
72
72
  "exclude" means target types in `target_type_filter` will be excluded.
73
73
  "include" means only target types in `target_type_filter` will be included.
74
- Defaults to "exclude".
74
+ Defaults to "include".
75
75
  target_type_filter (Optional[Union[str, Sequence[str]]]):
76
76
  A single target type string or a sequence of target type strings to filter by.
77
77
  Used in conjunction with `target_type_filter_mode`. Defaults to None.
@@ -79,9 +79,9 @@ class CDPLoggerSettings(DictModel):
79
79
  """
80
80
 
81
81
  buffer_size: int = 100
82
- log_level_filter_mode: Literal["exclude", "include"] = "exclude"
82
+ log_level_filter_mode: Literal["exclude", "include"] = "include"
83
83
  log_level_filter: Optional[Union[CDP_LOG_LEVELS_TYPEHINT, Sequence[CDP_LOG_LEVELS_TYPEHINT]]] = None
84
- target_type_filter_mode: Literal["exclude", "include"] = "exclude"
84
+ target_type_filter_mode: Literal["exclude", "include"] = "include"
85
85
  target_type_filter: Optional[Union[str, Sequence[str]]] = None
86
86
  send_wait: bool = False
87
87
 
@@ -101,7 +101,7 @@ class BaseMixin:
101
101
  self.websocket_url = websocket_url
102
102
  self._new_targets_filter_list = new_targets_filter_list
103
103
  self._new_targets_buffer_size = new_targets_buffer_size
104
- self._nursery_object = nursery
104
+ self._nursery = nursery
105
105
  self.exit_event = exit_event
106
106
  self._target_background_task = target_background_task
107
107
  self._add_target_func = add_target_func
@@ -112,11 +112,14 @@ class BaseMixin:
112
112
 
113
113
  self._new_targets_events_filters = validate_target_event_filter(filter_=new_targets_filter_list)
114
114
 
115
- self._cdp_target_type_log_accepted = validate_type_filter(
116
- type_=self.type_,
117
- filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
118
- filter_instances=self._logger_settings.cdp_settings.target_type_filter
119
- )
115
+ if self._logger_settings.cdp_settings is not None:
116
+ self._cdp_target_type_log_accepted = validate_type_filter(
117
+ type_=self.type_,
118
+ filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
119
+ filter_instances=self._logger_settings.cdp_settings.target_type_filter
120
+ )
121
+ else:
122
+ self._cdp_target_type_log_accepted = False
120
123
 
121
124
  self._cdp_log_stats = CDPLoggerChannelStats(
122
125
  target_id=target_data.target_id,
@@ -163,11 +166,15 @@ class BaseMixin:
163
166
  value (Optional[str]): The new target type.
164
167
  """
165
168
 
166
- self._cdp_target_type_log_accepted = validate_type_filter(
167
- type_=value,
168
- filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
169
- filter_instances=self._logger_settings.cdp_settings.target_type_filter
170
- )
169
+ if self._logger_settings.cdp_settings is not None:
170
+ self._cdp_target_type_log_accepted = validate_type_filter(
171
+ type_=value,
172
+ filter_mode=self._logger_settings.cdp_settings.target_type_filter_mode,
173
+ filter_instances=self._logger_settings.cdp_settings.target_type_filter
174
+ )
175
+ else:
176
+ self._cdp_target_type_log_accepted = False
177
+
171
178
  self.target_data.type_ = value
172
179
 
173
180
  @property
@@ -65,7 +65,7 @@ class DiscoveryMixin(LoggingMixin):
65
65
  flatten=True
66
66
  )
67
67
 
68
- self._nursery_object.start_soon(self._add_target_func, event)
68
+ self._nursery.start_soon(self._add_target_func, event)
69
69
  except* CDPEndExceptions:
70
70
  keep_alive = False
71
71
  except* BaseException as error:
@@ -59,7 +59,7 @@ class EventHandlersMixin(LoggingMixin):
59
59
  while keep_alive:
60
60
  try:
61
61
  event = await receiver_channel.receive()
62
- self._nursery_object.start_soon(handler, self, event_config, event)
62
+ self._nursery.start_soon(handler, self, event_config, event)
63
63
  except* CDPEndExceptions:
64
64
  keep_alive = False
65
65
  except* BaseException as error:
@@ -99,7 +99,7 @@ class EventHandlersMixin(LoggingMixin):
99
99
  event_handler_ready_event = trio.Event()
100
100
  events_handlers_ready_events.append(event_handler_ready_event)
101
101
 
102
- self._nursery_object.start_soon(
102
+ self._nursery.start_soon(
103
103
  self._run_event_handler,
104
104
  event_handler_ready_event,
105
105
  getattr(domain_config.handlers, event_name)
@@ -118,7 +118,7 @@ class FingerprintMixin(LoggingMixin):
118
118
  run_immediately=True,
119
119
  )
120
120
 
121
- self._nursery_object.start_soon(self._run_fingerprint_detect_listener, ready_event)
121
+ self._nursery.start_soon(self._run_fingerprint_detect_listener, ready_event)
122
122
  except* CDPEndExceptions as error:
123
123
  raise error
124
124
  except* BaseException as error: