osn-selenium 1.0.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 (475) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_decorators.py +57 -0
  4. osn_selenium/_trio_threads_helpers.py +157 -0
  5. osn_selenium/_typehints.py +1 -1
  6. osn_selenium/abstract/executors/cdp.py +63 -0
  7. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  8. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/base.py +0 -14
  10. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  11. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  12. osn_selenium/abstract/webdriver/core/script.py +5 -4
  13. osn_selenium/abstract/webdriver/core/window.py +11 -11
  14. osn_selenium/browsers_handler/models.py +1 -1
  15. osn_selenium/dev_tools/_decorators.py +19 -51
  16. osn_selenium/dev_tools/_functions.py +2 -4
  17. osn_selenium/dev_tools/_typehints.py +5 -2
  18. osn_selenium/dev_tools/_wrappers.py +0 -3
  19. osn_selenium/dev_tools/domains/__init__.py +2 -2
  20. osn_selenium/dev_tools/domains/abstract.py +1 -1
  21. osn_selenium/dev_tools/domains/fetch.py +6 -8
  22. osn_selenium/dev_tools/domains_default/fetch.py +2 -2
  23. osn_selenium/dev_tools/filters.py +1 -1
  24. osn_selenium/dev_tools/logger/main.py +9 -21
  25. osn_selenium/dev_tools/logger/models.py +1 -1
  26. osn_selenium/dev_tools/logger/target.py +49 -29
  27. osn_selenium/dev_tools/manager/base.py +10 -42
  28. osn_selenium/dev_tools/manager/lifecycle.py +84 -75
  29. osn_selenium/dev_tools/manager/logging.py +1 -1
  30. osn_selenium/dev_tools/manager/targets.py +13 -5
  31. osn_selenium/dev_tools/models.py +1 -1
  32. osn_selenium/dev_tools/settings.py +9 -5
  33. osn_selenium/dev_tools/target/base.py +30 -34
  34. osn_selenium/dev_tools/target/discovery.py +1 -1
  35. osn_selenium/dev_tools/target/events.py +2 -2
  36. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  37. osn_selenium/dev_tools/target/lifecycle.py +103 -38
  38. osn_selenium/dev_tools/target/logging.py +11 -3
  39. osn_selenium/exceptions/__init__.py +0 -1
  40. osn_selenium/exceptions/base.py +28 -1
  41. osn_selenium/exceptions/bidi_bridge.py +59 -0
  42. osn_selenium/exceptions/configuration.py +1 -8
  43. osn_selenium/exceptions/dependencies.py +60 -0
  44. osn_selenium/exceptions/devtools.py +9 -39
  45. osn_selenium/exceptions/experimental.py +26 -0
  46. osn_selenium/exceptions/flags.py +0 -2
  47. osn_selenium/exceptions/instance.py +1 -9
  48. osn_selenium/exceptions/javascript.py +0 -2
  49. osn_selenium/exceptions/logic.py +0 -2
  50. osn_selenium/exceptions/path.py +1 -9
  51. osn_selenium/exceptions/platform.py +0 -2
  52. osn_selenium/exceptions/protocol.py +0 -3
  53. osn_selenium/exceptions/webdriver.py +1 -7
  54. osn_selenium/exceptions/window.py +1 -8
  55. osn_selenium/executors/sync/cdp.py +95 -0
  56. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  57. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  58. osn_selenium/executors/trio_threads/cdp.py +99 -0
  59. osn_selenium/executors/trio_threads/javascript.py +1 -1
  60. osn_selenium/executors/unified/javascript.py +0 -4
  61. osn_selenium/flags/base.py +7 -13
  62. osn_selenium/flags/blink.py +2 -8
  63. osn_selenium/flags/chrome.py +6 -6
  64. osn_selenium/flags/edge.py +6 -6
  65. osn_selenium/flags/models/base.py +4 -4
  66. osn_selenium/flags/models/blink.py +1 -1
  67. osn_selenium/flags/models/values.py +1 -1
  68. osn_selenium/instances/convert.py +44 -3
  69. osn_selenium/instances/protocols.py +47 -1
  70. osn_selenium/instances/sync/action_chains/__init__.py +6 -0
  71. osn_selenium/instances/sync/browsing_context.py +2 -2
  72. osn_selenium/instances/sync/script.py +7 -2
  73. osn_selenium/instances/sync/shadow_root.py +30 -8
  74. osn_selenium/instances/sync/web_element.py +1 -1
  75. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  76. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  77. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  78. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  79. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  80. osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
  81. osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
  82. osn_selenium/instances/trio_threads/alert.py +1 -1
  83. osn_selenium/instances/trio_threads/browser.py +1 -1
  84. osn_selenium/instances/trio_threads/browsing_context.py +3 -3
  85. osn_selenium/instances/trio_threads/dialog.py +1 -1
  86. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  87. osn_selenium/instances/trio_threads/mobile.py +1 -1
  88. osn_selenium/instances/trio_threads/network.py +1 -1
  89. osn_selenium/instances/trio_threads/permissions.py +1 -1
  90. osn_selenium/instances/trio_threads/script.py +8 -3
  91. osn_selenium/instances/trio_threads/shadow_root.py +46 -15
  92. osn_selenium/instances/trio_threads/storage.py +1 -1
  93. osn_selenium/instances/trio_threads/switch_to.py +1 -1
  94. osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
  95. osn_selenium/instances/trio_threads/web_element.py +1 -1
  96. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  97. osn_selenium/instances/unified/browsing_context.py +2 -2
  98. osn_selenium/instances/unified/script.py +2 -2
  99. osn_selenium/instances/unified/web_element.py +3 -5
  100. osn_selenium/javascript/fingerprint/__init__.py +3 -2
  101. osn_selenium/javascript/fingerprint/registry/models.py +1 -1
  102. osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
  103. osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
  104. osn_selenium/javascript/models.py +1 -1
  105. osn_selenium/models.py +2 -47
  106. osn_selenium/trio_bidi/__init__.py +1 -0
  107. osn_selenium/trio_bidi/_context_vars.py +12 -0
  108. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  109. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  110. osn_selenium/trio_bidi/_file_functions.py +28 -0
  111. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  112. osn_selenium/trio_bidi/_models.py +199 -0
  113. osn_selenium/trio_bidi/_typehints.py +20 -0
  114. osn_selenium/trio_bidi/connection_pool.py +587 -0
  115. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  116. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  117. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  118. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  119. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  120. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  121. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  122. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  123. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  124. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  125. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  126. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  127. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  128. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  129. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  130. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  131. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  132. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  133. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  134. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  135. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  136. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  137. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  138. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  139. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  140. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  141. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  142. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  143. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  144. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  145. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  146. osn_selenium/trio_bidi/mixin.py +186 -0
  147. osn_selenium/trio_bidi/remote_connection.py +164 -0
  148. osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
  149. osn_selenium/webdrivers/_args_helpers.py +120 -7
  150. osn_selenium/webdrivers/_bridges.py +2 -2
  151. osn_selenium/webdrivers/_executable_tables/models.py +1 -1
  152. osn_selenium/webdrivers/_typehints.py +9 -3
  153. osn_selenium/webdrivers/protocols.py +81 -1
  154. osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
  155. osn_selenium/webdrivers/sync/blink/base.py +23 -1
  156. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  157. osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
  158. osn_selenium/webdrivers/sync/chrome/base.py +13 -1
  159. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  160. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  161. osn_selenium/webdrivers/sync/core/__init__.py +10 -1
  162. osn_selenium/webdrivers/sync/core/base.py +18 -18
  163. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  164. osn_selenium/webdrivers/sync/core/file.py +3 -2
  165. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  166. osn_selenium/webdrivers/sync/core/script.py +3 -2
  167. osn_selenium/webdrivers/sync/core/window.py +3 -3
  168. osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
  169. osn_selenium/webdrivers/sync/edge/base.py +13 -1
  170. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  171. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  172. osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
  173. osn_selenium/webdrivers/sync/yandex/base.py +13 -1
  174. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  175. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  176. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  177. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  178. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  179. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  180. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  181. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  182. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  183. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  184. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  185. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  186. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  187. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  188. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  189. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  190. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  191. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  192. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  193. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  194. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  195. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  196. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  197. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  198. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  199. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  200. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  201. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  202. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  203. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  204. osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
  205. osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
  206. osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
  207. osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
  208. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  209. osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
  210. osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
  211. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
  212. osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
  213. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  214. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  215. osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
  216. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  217. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  218. osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
  219. osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
  220. osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
  221. osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
  222. osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
  223. osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
  224. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
  225. osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
  226. osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
  227. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  228. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  229. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  230. osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
  231. osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
  232. osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
  233. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  234. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  235. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
  236. osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
  237. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  238. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  239. osn_selenium/webdrivers/unified/blink/base.py +9 -1
  240. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  241. osn_selenium/webdrivers/unified/chrome/base.py +9 -1
  242. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  243. osn_selenium/webdrivers/unified/core/base.py +19 -6
  244. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  245. osn_selenium/webdrivers/unified/core/components.py +12 -7
  246. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  247. osn_selenium/webdrivers/unified/core/file.py +3 -2
  248. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  249. osn_selenium/webdrivers/unified/core/script.py +5 -3
  250. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  251. osn_selenium/webdrivers/unified/core/window.py +9 -8
  252. osn_selenium/webdrivers/unified/edge/base.py +9 -1
  253. osn_selenium/webdrivers/unified/yandex/base.py +9 -1
  254. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
  255. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  256. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
  257. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  258. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  259. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  260. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  261. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  262. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  263. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  264. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  265. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  266. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  267. osn_selenium/abstract/executors/cdp/console.py +0 -18
  268. osn_selenium/abstract/executors/cdp/css.py +0 -197
  269. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  270. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  271. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  272. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  273. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  274. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  275. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  276. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  277. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  278. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  279. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  280. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  281. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  282. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  283. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  284. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  285. osn_selenium/abstract/executors/cdp/input.py +0 -158
  286. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  287. osn_selenium/abstract/executors/cdp/io.py +0 -24
  288. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  289. osn_selenium/abstract/executors/cdp/log.py +0 -27
  290. osn_selenium/abstract/executors/cdp/media.py +0 -14
  291. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  292. osn_selenium/abstract/executors/cdp/network.py +0 -252
  293. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  294. osn_selenium/abstract/executors/cdp/page.py +0 -347
  295. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  296. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  297. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  298. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  299. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  300. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  301. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  302. osn_selenium/abstract/executors/cdp/security.py +0 -26
  303. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  304. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  305. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  306. osn_selenium/abstract/executors/cdp/target.py +0 -125
  307. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  308. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  309. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  310. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  311. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  312. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  313. osn_selenium/executors/sync/cdp/animation.py +0 -50
  314. osn_selenium/executors/sync/cdp/audits.py +0 -48
  315. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  316. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  317. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  318. osn_selenium/executors/sync/cdp/browser.py +0 -131
  319. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  320. osn_selenium/executors/sync/cdp/cast.py +0 -38
  321. osn_selenium/executors/sync/cdp/console.py +0 -24
  322. osn_selenium/executors/sync/cdp/css.py +0 -187
  323. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  324. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  325. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  326. osn_selenium/executors/sync/cdp/dom.py +0 -310
  327. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  328. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  329. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  330. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  331. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  332. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  333. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  334. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  335. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  336. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  337. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  338. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  339. osn_selenium/executors/sync/cdp/input.py +0 -233
  340. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  341. osn_selenium/executors/sync/cdp/io.py +0 -33
  342. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  343. osn_selenium/executors/sync/cdp/log.py +0 -35
  344. osn_selenium/executors/sync/cdp/media.py +0 -21
  345. osn_selenium/executors/sync/cdp/memory.py +0 -62
  346. osn_selenium/executors/sync/cdp/network.py +0 -287
  347. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  348. osn_selenium/executors/sync/cdp/page.py +0 -365
  349. osn_selenium/executors/sync/cdp/performance.py +0 -33
  350. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  351. osn_selenium/executors/sync/cdp/preload.py +0 -21
  352. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  353. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  354. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  355. osn_selenium/executors/sync/cdp/schema.py +0 -23
  356. osn_selenium/executors/sync/cdp/security.py +0 -30
  357. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  358. osn_selenium/executors/sync/cdp/storage.py +0 -151
  359. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  360. osn_selenium/executors/sync/cdp/target.py +0 -147
  361. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  362. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  363. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  364. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  365. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  366. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  367. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  368. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  369. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  370. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  371. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  372. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  373. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  374. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  375. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  376. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  377. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  378. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  379. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  380. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  381. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  382. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  383. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  384. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  385. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  386. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  387. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  388. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  389. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  390. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  391. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  392. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  393. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  394. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  395. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  396. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  397. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  398. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  399. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  400. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  401. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  402. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  403. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  404. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  405. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  406. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  407. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  408. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  409. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  410. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  411. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  412. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  413. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  414. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  415. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  416. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  417. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  418. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  419. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  420. osn_selenium/executors/unified/cdp/animation.py +0 -50
  421. osn_selenium/executors/unified/cdp/audits.py +0 -45
  422. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  423. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  424. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  425. osn_selenium/executors/unified/cdp/browser.py +0 -143
  426. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  427. osn_selenium/executors/unified/cdp/cast.py +0 -32
  428. osn_selenium/executors/unified/cdp/console.py +0 -18
  429. osn_selenium/executors/unified/cdp/css.py +0 -237
  430. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  431. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  432. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  433. osn_selenium/executors/unified/cdp/dom.py +0 -380
  434. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  435. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  436. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  437. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  438. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  439. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  440. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  441. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  442. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  443. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  444. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  445. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  446. osn_selenium/executors/unified/cdp/input.py +0 -254
  447. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  448. osn_selenium/executors/unified/cdp/io.py +0 -29
  449. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  450. osn_selenium/executors/unified/cdp/log.py +0 -29
  451. osn_selenium/executors/unified/cdp/media.py +0 -15
  452. osn_selenium/executors/unified/cdp/memory.py +0 -59
  453. osn_selenium/executors/unified/cdp/network.py +0 -323
  454. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  455. osn_selenium/executors/unified/cdp/page.py +0 -410
  456. osn_selenium/executors/unified/cdp/performance.py +0 -27
  457. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  458. osn_selenium/executors/unified/cdp/preload.py +0 -15
  459. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  460. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  461. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  462. osn_selenium/executors/unified/cdp/schema.py +0 -17
  463. osn_selenium/executors/unified/cdp/security.py +0 -27
  464. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  465. osn_selenium/executors/unified/cdp/storage.py +0 -178
  466. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  467. osn_selenium/executors/unified/cdp/target.py +0 -165
  468. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  469. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  470. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  471. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  472. osn_selenium-1.0.0.dist-info/RECORD +0 -608
  473. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  474. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  475. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  import trio
2
2
  from typing import List
3
+ from osn_selenium._decorators import log_on_error
3
4
  from osn_selenium.dev_tools.target.detach import DetachMixin
4
- from osn_selenium.exceptions.devtools import CDPEndExceptions
5
5
  from osn_selenium.dev_tools.target.discovery import DiscoveryMixin
6
6
  from osn_selenium.dev_tools.target.events import EventHandlersMixin
7
7
  from osn_selenium.dev_tools.logger.target import build_target_logger
@@ -17,6 +17,10 @@ from osn_selenium.dev_tools._functions import (
17
17
  execute_cdp_command,
18
18
  wait_one
19
19
  )
20
+ from osn_selenium.exceptions.devtools import (
21
+ CDPEndExceptions,
22
+ TrioEndExceptions
23
+ )
20
24
 
21
25
 
22
26
  __all__ = ["LifecycleMixin"]
@@ -32,36 +36,96 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
32
36
  Closes all active resources, channels, and loggers associated with the target.
33
37
  """
34
38
 
35
- if self._new_target_receive_channel is not None:
36
- await self._new_target_receive_channel[0].aclose()
37
- await self._new_target_receive_channel[1].wait()
38
- self._new_target_receive_channel = None
39
-
40
- if self._detached_receive_channel is not None:
41
- await self._detached_receive_channel.aclose()
42
- self._detached_receive_channel = None
43
-
44
- if self._logger_cdp_send_channel is not None:
45
- await self._logger_cdp_send_channel.aclose()
46
- self._logger_cdp_send_channel = None
47
-
48
- if self._logger_fingerprint_send_channel is not None:
49
- await self._logger_fingerprint_send_channel.aclose()
50
- self._logger_fingerprint_send_channel = None
51
-
52
- if self._logger is not None:
53
- await self._logger.close()
54
- self._logger = None
55
-
56
- for channel in self._events_receive_channels.values():
57
- await channel[0].aclose()
58
- await channel[1].wait()
59
-
60
- self._events_receive_channels = {}
61
-
62
- if self.background_task_ended is not None:
63
- await self.background_task_ended.wait()
64
- self.background_task_ended = None
39
+ @log_on_error
40
+ async def _close_new_target_receive_channel() -> None:
41
+ if self._new_target_receive_channel is not None:
42
+ try:
43
+ await self._new_target_receive_channel[0].aclose()
44
+ await self._new_target_receive_channel[1].wait()
45
+ except TrioEndExceptions:
46
+ pass
47
+
48
+ self._new_target_receive_channel = None
49
+
50
+ @log_on_error
51
+ async def _close_logger_fingerprint_send_channel() -> None:
52
+ if self._logger_fingerprint_send_channel is not None:
53
+ try:
54
+ await self._logger_fingerprint_send_channel.aclose()
55
+ except TrioEndExceptions:
56
+ pass
57
+
58
+ self._logger_fingerprint_send_channel = None
59
+
60
+ @log_on_error
61
+ async def _close_logger_cdp_send_channel() -> None:
62
+ if self._logger_cdp_send_channel is not None:
63
+ try:
64
+ await self._logger_cdp_send_channel.aclose()
65
+ except TrioEndExceptions:
66
+ pass
67
+
68
+ self._logger_cdp_send_channel = None
69
+
70
+ @log_on_error
71
+ async def _close_logger() -> None:
72
+ if self._logger is not None:
73
+ try:
74
+ await self._logger.close()
75
+ except TrioEndExceptions:
76
+ pass
77
+
78
+ self._logger = None
79
+
80
+ @log_on_error
81
+ async def _close_events_receive_channels() -> None:
82
+ for event_name, channel in self._events_receive_channels.items():
83
+ try:
84
+ await channel[0].aclose()
85
+ await channel[1].wait()
86
+ except TrioEndExceptions:
87
+ pass
88
+
89
+ self._events_receive_channels.clear()
90
+
91
+ @log_on_error
92
+ async def _close_detached_receive_channel() -> None:
93
+ if self._detached_receive_channel is not None:
94
+ try:
95
+ await self._detached_receive_channel.aclose()
96
+ except TrioEndExceptions:
97
+ pass
98
+
99
+ self._detached_receive_channel = None
100
+
101
+ @log_on_error
102
+ def _close_cancel_scopes() -> None:
103
+ for scope_name, scope in self._cancel_scopes.items():
104
+ try:
105
+ scope.cancel()
106
+ except TrioEndExceptions:
107
+ pass
108
+
109
+ self._cancel_scopes.clear()
110
+
111
+ @log_on_error
112
+ async def _close_background_task() -> None:
113
+ if self.background_task_ended is not None:
114
+ try:
115
+ await self.background_task_ended.wait()
116
+ except TrioEndExceptions:
117
+ pass
118
+
119
+ self.background_task_ended = None
120
+
121
+ await _close_new_target_receive_channel()
122
+ await _close_detached_receive_channel()
123
+ await _close_logger_cdp_send_channel()
124
+ await _close_logger_fingerprint_send_channel()
125
+ await _close_logger()
126
+ await _close_events_receive_channels()
127
+ _close_cancel_scopes()
128
+ await _close_background_task()
65
129
 
66
130
  async def _setup_target(self):
67
131
  """
@@ -88,9 +152,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
88
152
  fingerprint_detecting_ready_event = trio.Event()
89
153
  target_ready_events.append(fingerprint_detecting_ready_event)
90
154
 
91
- self._nursery_object.start_soon(self._run_new_targets_listener, new_targets_listener_ready_event)
92
- self._nursery_object.start_soon(self._setup_fingerprint_injection, fingerprint_detecting_ready_event)
93
- self._nursery_object.start_soon(self._run_detach_checking)
155
+ self._nursery.start_soon(self._run_new_targets_listener, new_targets_listener_ready_event)
156
+ self._nursery.start_soon(self._setup_fingerprint_injection, fingerprint_detecting_ready_event)
157
+ self._nursery.start_soon(self._run_detach_checking)
94
158
 
95
159
  if self._domains_settings:
96
160
  for domain_name, domain_config in self._domains_settings.model_dump(exclude_none=True).items():
@@ -112,7 +176,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
112
176
 
113
177
  domain_handlers_ready_event = trio.Event()
114
178
  target_ready_events.append(domain_handlers_ready_event)
115
- self._nursery_object.start_soon(
179
+ self._nursery.start_soon(
116
180
  self._run_events_handlers,
117
181
  domain_handlers_ready_event,
118
182
  getattr(self._domains_settings, domain_name)
@@ -146,7 +210,7 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
146
210
  """
147
211
 
148
212
  try:
149
- self._logger_cdp_send_channel, self._logger_fingerprint_send_channel, self._logger = build_target_logger(self.target_data, self._nursery_object, self._logger_settings)
213
+ self._logger_cdp_send_channel, self._logger_fingerprint_send_channel, self._logger = build_target_logger(self.target_data, self._nursery, self._logger_settings)
150
214
 
151
215
  if self._cdp_target_type_log_accepted:
152
216
  await self._logger.run()
@@ -162,8 +226,9 @@ class LifecycleMixin(DiscoveryMixin, EventHandlersMixin, DetachMixin, Fingerprin
162
226
  await self._setup_target()
163
227
 
164
228
  if self._target_background_task is not None:
165
- self._nursery_object.start_soon(background_task_decorator(self._target_background_task), self)
166
-
229
+ self._nursery.start_soon(background_task_decorator(self._target_background_task), self)
230
+
231
+ self.started_event.set()
167
232
  await wait_one(self.exit_event, self.about_to_stop_event)
168
233
  except* (BrowserError, RuntimeError):
169
234
  self.about_to_stop_event.set()
@@ -10,7 +10,7 @@ from typing import (
10
10
  Optional,
11
11
  TYPE_CHECKING
12
12
  )
13
- from osn_selenium.dev_tools._exception_helpers import (
13
+ from osn_selenium._exception_helpers import (
14
14
  extract_exception_trace,
15
15
  log_exception
16
16
  )
@@ -64,7 +64,11 @@ class LoggingMixin(BaseMixin):
64
64
  await self._logger.run()
65
65
 
66
66
  try:
67
- self._logger_cdp_send_channel.send_nowait(log_entry)
67
+ if self._logger.filter_cdp_log(log_entry=log_entry):
68
+ if self._logger_settings.cdp_settings.send_wait:
69
+ await self._logger_cdp_send_channel.send(log_entry)
70
+ else:
71
+ self._logger_cdp_send_channel.send_nowait(log_entry)
68
72
  except trio.WouldBlock:
69
73
  warnings.warn(
70
74
  f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
@@ -144,7 +148,11 @@ class LoggingMixin(BaseMixin):
144
148
  await self._logger.run()
145
149
 
146
150
  try:
147
- self._logger_fingerprint_send_channel.send_nowait(log_entry)
151
+ if self._logger.filter_fingerprint_log(log_entry=log_entry):
152
+ if self._logger_settings.fingerprint_settings.send_wait:
153
+ await self._logger_fingerprint_send_channel.send(log_entry)
154
+ else:
155
+ self._logger_fingerprint_send_channel.send_nowait(log_entry)
148
156
  except trio.WouldBlock:
149
157
  warnings.warn(
150
158
  f"WARNING: Log channel for session {self.target_id} is full. Log dropped:\n{log_entry.model_dump_json(indent=4)}"
@@ -1 +0,0 @@
1
-
@@ -1,5 +1,8 @@
1
- __all__ = ["OSNSeleniumError"]
1
+ from osn_selenium._exception_helpers import (
2
+ extract_exception_trace
3
+ )
2
4
 
5
+ __all__ = ["ExceptionThrown", "OSNSeleniumError"]
3
6
 
4
7
  class OSNSeleniumError(Exception):
5
8
  """
@@ -7,3 +10,27 @@ class OSNSeleniumError(Exception):
7
10
  """
8
11
 
9
12
  pass
13
+
14
+
15
+ class ExceptionThrown:
16
+ """
17
+ A wrapper class to indicate that an exception was thrown during an operation.
18
+
19
+ This is used in `execute_cdp_command` when `error_mode` is "log" or "pass"
20
+ to return an object indicating an error occurred without re-raising it immediately.
21
+
22
+ Attributes:
23
+ exception (BaseException): The exception that was caught.
24
+ traceback (str): The formatted traceback string of the exception.
25
+ """
26
+
27
+ def __init__(self, exception: BaseException) -> None:
28
+ """
29
+ Initializes the ExceptionThrown wrapper.
30
+
31
+ Args:
32
+ exception (BaseException): The exception to wrap.
33
+ """
34
+
35
+ self.exception = exception
36
+ self.traceback = extract_exception_trace(exception)
@@ -0,0 +1,59 @@
1
+ from osn_selenium.exceptions.base import OSNSeleniumError
2
+
3
+ __all__ = ["BiDiBridgeError", "BiDiBridgeStoppedError", "BiDiExecutionError", "CommandNotMappedToBiDiError"]
4
+
5
+ class BiDiBridgeError(OSNSeleniumError):
6
+ """
7
+ Base class for exceptions related to the BiDi Bridge.
8
+ """
9
+
10
+ pass
11
+
12
+
13
+ class CommandNotMappedToBiDiError(BiDiBridgeError):
14
+ """
15
+ Exception raised when a requested W3C command has no corresponding BiDi mapping.
16
+ """
17
+
18
+ def __init__(self, command: str) -> None:
19
+ """
20
+ Initialize the exception.
21
+
22
+ Args:
23
+ command (str): The name of the unmapped command.
24
+ """
25
+
26
+ super().__init__(f"{command} is not mapped to BiDi.")
27
+
28
+
29
+ class BiDiExecutionError(OSNSeleniumError):
30
+ """
31
+ Exception raised when a BiDi command execution fails on the browser side.
32
+ """
33
+
34
+ def __init__(self, error: str, message: str) -> None:
35
+ """
36
+ Initialize the exception with the error type and message.
37
+
38
+ Args:
39
+ error (str): The error category or code returned by the BiDi protocol.
40
+ message (str): The detailed error message provided by the browser.
41
+ """
42
+
43
+ super().__init__(f"BiDi: {error} - {message}")
44
+
45
+
46
+ class BiDiBridgeStoppedError(BiDiBridgeError):
47
+ """
48
+ Raised when the BiDi bridge has been stopped while tasks were still pending.
49
+ """
50
+
51
+ def __init__(self, reason: str) -> None:
52
+ """
53
+ Initializes the error with the stop reason.
54
+
55
+ Args:
56
+ reason (str): The reason why the bridge stopped.
57
+ """
58
+
59
+ super().__init__(f"BiDi bridge was stopped. Reason: {reason}")
@@ -5,14 +5,7 @@ from osn_selenium._typehints import (
5
5
  TYPES_FOR_FLATTENING_TYPEHINT
6
6
  )
7
7
 
8
-
9
- __all__ = [
10
- "ConfigurationError",
11
- "DuplicationError",
12
- "NotExpectedTypeError",
13
- "NotExpectedValueError"
14
- ]
15
-
8
+ __all__ = ["ConfigurationError", "DuplicationError", "NotExpectedTypeError", "NotExpectedValueError"]
16
9
 
17
10
  class ConfigurationError(OSNSeleniumError):
18
11
  """
@@ -0,0 +1,60 @@
1
+ from typing import Union
2
+ from osn_selenium.exceptions.base import OSNSeleniumError
3
+ from osn_selenium._cdp_import import (
4
+ check_cdp_version_exists_on_github
5
+ )
6
+
7
+ __all__ = ["CDPPackageError", "DependencyError"]
8
+
9
+ _CDP_PACKAGE_EXISTS = """
10
+ CDP package for {version} is not installed.
11
+ Fix: Run the following command:
12
+ \t`pip install git+https://github.com/oddshellnick/osn-selenium-cdp.git@{version}`
13
+ """.strip("\n")
14
+
15
+ _CDP_PACKAGE_NOT_EXISTS = """
16
+ CDP package for version {version} was not found on GitHub or locally.
17
+ Please check available versions at: https://github.com/oddshellnick/osn-selenium-cdp
18
+ If you need this specific version, you can generate it using the https://github.com/oddshellnick/selenium-package-parser tool.
19
+ """.strip("\n")
20
+
21
+
22
+ class DependencyError(OSNSeleniumError):
23
+ """
24
+ Base exception for dependency-related issues.
25
+ """
26
+
27
+ pass
28
+
29
+
30
+ class CDPPackageError(DependencyError):
31
+ """
32
+ Exception raised when a required CDP package is missing.
33
+ """
34
+
35
+ def __init__(self, version: Union[int, str]):
36
+ """
37
+ Initializes the error with version details.
38
+
39
+ Args:
40
+ version (Union[int, str]): The missing CDP version.
41
+ """
42
+
43
+ self.version = version if isinstance(version, str) else f"v{version}"
44
+
45
+ super().__init__(self._generate_report())
46
+
47
+ def _generate_report(self) -> str:
48
+ """
49
+ Generates a detailed error message checking remote availability.
50
+
51
+ Returns:
52
+ str: Formatted error message with instructions.
53
+ """
54
+
55
+ version_exists_on_github = check_cdp_version_exists_on_github(version=self.version)
56
+
57
+ if version_exists_on_github:
58
+ return _CDP_PACKAGE_EXISTS.format(version=self.version)
59
+
60
+ return _CDP_PACKAGE_NOT_EXISTS.format(version=self.version)
@@ -1,48 +1,12 @@
1
1
  import trio
2
+ import trio_websocket
2
3
  from osn_selenium.exceptions.base import OSNSeleniumError
3
- from osn_selenium.dev_tools._exception_helpers import (
4
- extract_exception_trace
5
- )
6
4
  from selenium.webdriver.common.bidi.cdp import (
7
5
  BrowserError,
8
6
  CdpConnectionClosed
9
7
  )
10
8
 
11
-
12
- __all__ = [
13
- "BidiConnectionNotEstablishedError",
14
- "CDPCommandNotFoundError",
15
- "CDPEndExceptions",
16
- "CantEnterDevToolsContextError",
17
- "DevToolsError",
18
- "ExceptionThrown",
19
- "TrioEndExceptions"
20
- ]
21
-
22
-
23
- class ExceptionThrown:
24
- """
25
- A wrapper class to indicate that an exception was thrown during an operation.
26
-
27
- This is used in `execute_cdp_command` when `error_mode` is "log" or "pass"
28
- to return an object indicating an error occurred without re-raising it immediately.
29
-
30
- Attributes:
31
- exception (BaseException): The exception that was caught.
32
- traceback (str): The formatted traceback string of the exception.
33
- """
34
-
35
- def __init__(self, exception: BaseException) -> None:
36
- """
37
- Initializes the ExceptionThrown wrapper.
38
-
39
- Args:
40
- exception (BaseException): The exception to wrap.
41
- """
42
-
43
- self.exception = exception
44
- self.traceback = extract_exception_trace(exception)
45
-
9
+ __all__ = ["BidiConnectionNotEstablishedError", "CDPCommandNotFoundError", "CDPEndExceptions", "CantEnterDevToolsContextError", "DevToolsError", "TrioEndExceptions", "WebSocketEndExceptions"]
46
10
 
47
11
  class DevToolsError(OSNSeleniumError):
48
12
  """
@@ -76,7 +40,7 @@ class CDPCommandNotFoundError(DevToolsError):
76
40
  Error raised when a requested CDP command attribute is not found in the specified module.
77
41
  """
78
42
 
79
- def __init__(self, object_: str, module_: str):
43
+ def __init__(self, object_: str, module_: str) -> None:
80
44
  """
81
45
  Initializes CDPCommandNotFoundError.
82
46
 
@@ -105,6 +69,12 @@ class BidiConnectionNotEstablishedError(DevToolsError):
105
69
 
106
70
 
107
71
  TrioEndExceptions = (trio.Cancelled, trio.EndOfChannel, trio.ClosedResourceError)
72
+ WebSocketEndExceptions = (
73
+ trio.Cancelled,
74
+ trio.EndOfChannel,
75
+ trio.ClosedResourceError,
76
+ trio_websocket.ConnectionClosed
77
+ )
108
78
  CDPEndExceptions = (
109
79
  trio.Cancelled,
110
80
  trio.EndOfChannel,
@@ -0,0 +1,26 @@
1
+ from osn_selenium.exceptions.base import OSNSeleniumError
2
+
3
+ __all__ = ["ExperimentalFeatureError", "NotImplementedExperimentalFeatureError"]
4
+
5
+ class ExperimentalFeatureError(OSNSeleniumError):
6
+ """
7
+ Base exception for experimental feature errors.
8
+ """
9
+
10
+ pass
11
+
12
+
13
+ class NotImplementedExperimentalFeatureError(ExperimentalFeatureError):
14
+ """
15
+ Raised when an experimental feature is not yet implemented.
16
+ """
17
+
18
+ def __init__(self, name: str):
19
+ """
20
+ Initializes the error with the name of the missing feature.
21
+
22
+ Args:
23
+ name (str): The name of the feature.
24
+ """
25
+
26
+ super().__init__(f"{name} is not implemented in current version.")
@@ -1,9 +1,7 @@
1
1
  from osn_selenium.exceptions.base import OSNSeleniumError
2
2
 
3
-
4
3
  __all__ = ["FlagError", "FlagNotDefinedError", "FlagTypeNotDefinedError"]
5
4
 
6
-
7
5
  class FlagError(OSNSeleniumError):
8
6
  """
9
7
  Base class for errors related to management flags.
@@ -10,15 +10,7 @@ from osn_selenium._typehints import (
10
10
  TYPES_FOR_FLATTENING_TYPEHINT
11
11
  )
12
12
 
13
-
14
- __all__ = [
15
- "CannotConvertTypeError",
16
- "ElementInteractionError",
17
- "ElementNotVisibleError",
18
- "InstanceError",
19
- "NotExpectedTypeError"
20
- ]
21
-
13
+ __all__ = ["CannotConvertTypeError", "ElementInteractionError", "ElementNotVisibleError", "InstanceError", "NotExpectedTypeError"]
22
14
 
23
15
  class InstanceError(OSNSeleniumError):
24
16
  """
@@ -1,10 +1,8 @@
1
1
  from typing import Iterable, Union
2
2
  from osn_selenium.exceptions.base import OSNSeleniumError
3
3
 
4
-
5
4
  __all__ = ["JavaScriptError", "JavaScriptResourceError"]
6
5
 
7
-
8
6
  class JavaScriptError(OSNSeleniumError):
9
7
  """
10
8
  Base class for JavaScript-related errors.
@@ -1,9 +1,7 @@
1
1
  from osn_selenium.exceptions.base import OSNSeleniumError
2
2
 
3
-
4
3
  __all__ = ["AbstractImplementationError", "LogicError"]
5
4
 
6
-
7
5
  class LogicError(OSNSeleniumError):
8
6
  """
9
7
  Base class for internal logic and implementation errors.
@@ -2,15 +2,7 @@ from typing import Any
2
2
  from osn_selenium._typehints import PATH_TYPEHINT
3
3
  from osn_selenium.exceptions.base import OSNSeleniumError
4
4
 
5
-
6
- __all__ = [
7
- "BrowserExecutableNotFoundError",
8
- "ExecutableError",
9
- "PathError",
10
- "PathValidationError",
11
- "WebDriverExecutableNotFoundError"
12
- ]
13
-
5
+ __all__ = ["BrowserExecutableNotFoundError", "ExecutableError", "PathError", "PathValidationError", "WebDriverExecutableNotFoundError"]
14
6
 
15
7
  class PathError(OSNSeleniumError):
16
8
  """
@@ -1,9 +1,7 @@
1
1
  from osn_selenium.exceptions.base import OSNSeleniumError
2
2
 
3
-
4
3
  __all__ = ["PlatformError", "PlatformNotSupportedError"]
5
4
 
6
-
7
5
  class PlatformError(OSNSeleniumError):
8
6
  """
9
7
  Base class for environment and platform-specific errors.
@@ -2,16 +2,13 @@ from osn_selenium.exceptions.base import OSNSeleniumError
2
2
  from typing import (
3
3
  Any,
4
4
  Iterable,
5
- Protocol,
6
5
  Type,
7
6
  Union,
8
7
  get_origin
9
8
  )
10
9
 
11
-
12
10
  __all__ = ["ProtocolComplianceError", "ProtocolError"]
13
11
 
14
-
15
12
  class ProtocolError(OSNSeleniumError):
16
13
  """
17
14
  Base class for errors related to Protocol contract violations.
@@ -1,12 +1,6 @@
1
1
  from osn_selenium.exceptions.base import OSNSeleniumError
2
2
 
3
-
4
- __all__ = [
5
- "WebDriverAlreadyRunningError",
6
- "WebDriverError",
7
- "WebDriverNotStartedError"
8
- ]
9
-
3
+ __all__ = ["WebDriverAlreadyRunningError", "WebDriverError", "WebDriverNotStartedError"]
10
4
 
11
5
  class WebDriverError(OSNSeleniumError):
12
6
  """
@@ -1,13 +1,6 @@
1
1
  from osn_selenium.exceptions.base import OSNSeleniumError
2
2
 
3
-
4
- __all__ = [
5
- "InvalidWindowHandleError",
6
- "InvalidWindowIndexError",
7
- "NoWindowHandlesFoundError",
8
- "WindowManagementError"
9
- ]
10
-
3
+ __all__ = ["InvalidWindowHandleError", "InvalidWindowIndexError", "NoWindowHandlesFoundError", "WindowManagementError"]
11
4
 
12
5
  class WindowManagementError(OSNSeleniumError):
13
6
  """