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
@@ -0,0 +1,57 @@
1
+ import inspect
2
+ import functools
3
+ from osn_selenium.exceptions.base import ExceptionThrown
4
+ from osn_selenium._exception_helpers import log_exception
5
+ from typing import (
6
+ Any,
7
+ Callable,
8
+ ParamSpec,
9
+ TypeVar
10
+ )
11
+ from osn_selenium.exceptions.instance import NotExpectedTypeError
12
+
13
+
14
+ __all__ = ["log_on_error"]
15
+
16
+ _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
17
+ _METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
18
+ _METHOD = TypeVar("_METHOD", bound=Callable[..., Any])
19
+
20
+
21
+ def log_on_error(func: _METHOD) -> _METHOD:
22
+ """
23
+ Decorator that logs any `BaseException` raised by the decorated async function.
24
+
25
+ If an exception occurs, it is logged using `log_exception`, and an `ExceptionThrown`
26
+ object wrapping the exception is returned instead of re-raising it.
27
+
28
+ Args:
29
+ func (_METHOD): The asynchronous function to be wrapped.
30
+
31
+ Returns:
32
+ _METHOD: The wrapped asynchronous function.
33
+ """
34
+
35
+ @functools.wraps(func)
36
+ def sync_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
37
+ try:
38
+ return func(*args, **kwargs)
39
+ except BaseException as exception:
40
+ log_exception(exception)
41
+ return ExceptionThrown(exception)
42
+
43
+ @functools.wraps(func)
44
+ async def async_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
45
+ try:
46
+ return await func(*args, **kwargs)
47
+ except BaseException as exception:
48
+ log_exception(exception)
49
+ return ExceptionThrown(exception)
50
+
51
+ if inspect.iscoroutinefunction(func):
52
+ return async_wrapper
53
+
54
+ if inspect.isfunction(func):
55
+ return sync_wrapper
56
+
57
+ raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
@@ -0,0 +1,157 @@
1
+ import sys
2
+ import trio
3
+ import contextvars
4
+ from contextlib import asynccontextmanager
5
+ from typing import (
6
+ Any,
7
+ AsyncContextManager,
8
+ AsyncIterator,
9
+ Callable,
10
+ ContextManager,
11
+ Coroutine,
12
+ ParamSpec,
13
+ Tuple,
14
+ TypeVar
15
+ )
16
+
17
+
18
+ __all__ = ["sync_to_trio", "sync_to_trio_context"]
19
+
20
+ _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
21
+ _METHOD_OUTPUT = TypeVar("_METHOD_OUTPUT")
22
+
23
+
24
+ def sync_to_trio_context(
25
+ context_manager_factory: Callable[_METHOD_INPUT, ContextManager[_METHOD_OUTPUT]],
26
+ lock_object: trio.Lock,
27
+ capacity_limiter_object: trio.CapacityLimiter,
28
+ lock: bool,
29
+ exchange_context: bool,
30
+ ) -> Callable[_METHOD_INPUT, AsyncContextManager[_METHOD_OUTPUT]]:
31
+ """
32
+ Converts a synchronous context manager factory to an asynchronous Trio-compatible context manager.
33
+
34
+ Args:
35
+ context_manager_factory (Callable[_METHOD_INPUT, ContextManager[_METHOD_OUTPUT]]): Factory function returning a context manager.
36
+ lock_object (trio.Lock): Trio lock for synchronization.
37
+ capacity_limiter_object (trio.CapacityLimiter): Trio capacity limiter.
38
+ lock (bool): Whether to use the internal lock for synchronization.
39
+ exchange_context (bool): Whether to synchronize context variables between threads.
40
+
41
+ Returns:
42
+ Callable[_METHOD_INPUT, AsyncContextManager[_METHOD_OUTPUT]]: An async function returning an async context manager.
43
+ """
44
+
45
+ @asynccontextmanager
46
+ async def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> AsyncIterator[_METHOD_OUTPUT]:
47
+ """
48
+ Internal async context manager wrapper.
49
+
50
+ Args:
51
+ *args (_METHOD_INPUT.args): Positional arguments for the factory.
52
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the factory.
53
+
54
+ Returns:
55
+ AsyncIterator[_METHOD_OUTPUT]: An async iterator yielding the context resource.
56
+ """
57
+
58
+ sync_context_manager = await sync_to_trio(
59
+ sync_function=context_manager_factory,
60
+ lock_object=lock_object,
61
+ capacity_limiter_object=capacity_limiter_object,
62
+ lock=lock,
63
+ exchange_context=exchange_context,
64
+ )(*args, **kwargs)
65
+
66
+ enter_ = sync_to_trio(
67
+ sync_function=sync_context_manager.__enter__,
68
+ lock_object=lock_object,
69
+ capacity_limiter_object=capacity_limiter_object,
70
+ lock=lock,
71
+ exchange_context=exchange_context,
72
+ )
73
+ exit_ = sync_to_trio(
74
+ sync_function=sync_context_manager.__exit__,
75
+ lock_object=lock_object,
76
+ capacity_limiter_object=capacity_limiter_object,
77
+ lock=lock,
78
+ exchange_context=exchange_context,
79
+ )
80
+
81
+ try:
82
+ result = await enter_()
83
+
84
+ yield result
85
+ except Exception as e:
86
+ exc_type, exc_val, exc_tb = sys.exc_info()
87
+
88
+ if not await exit_(exc_type, exc_val, exc_tb):
89
+ raise e
90
+ else:
91
+ await exit_(None, None, None)
92
+
93
+ return wrapper
94
+
95
+
96
+ def sync_to_trio(
97
+ sync_function: Callable[_METHOD_INPUT, _METHOD_OUTPUT],
98
+ lock_object: trio.Lock,
99
+ capacity_limiter_object: trio.CapacityLimiter,
100
+ lock: bool,
101
+ exchange_context: bool,
102
+ ) -> Callable[_METHOD_INPUT, Coroutine[Any, Any, _METHOD_OUTPUT]]:
103
+ """
104
+ Wraps a synchronous function to run within a Trio thread pool using a lock and limiter.
105
+
106
+ Args:
107
+ sync_function (Callable[_METHOD_INPUT, _METHOD_OUTPUT]): The synchronous function to wrap.
108
+ lock_object (trio.Lock): Trio lock for synchronization.
109
+ capacity_limiter_object (trio.CapacityLimiter): Trio capacity limiter.
110
+ lock (bool): Whether to use the provided lock.
111
+ exchange_context (bool): Whether to synchronize context variables between threads.
112
+
113
+ Returns:
114
+ Callable[_METHOD_INPUT, Coroutine[Any, Any, _METHOD_OUTPUT]]: An async wrapper for the sync function.
115
+ """
116
+
117
+ async def wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
118
+ """
119
+ Internal async wrapper for the synchronous function.
120
+
121
+ Args:
122
+ *args (_METHOD_INPUT.args): Positional arguments for the sync function.
123
+ **kwargs (_METHOD_INPUT.kwargs): Keyword arguments for the sync function.
124
+
125
+ Returns:
126
+ _METHOD_OUTPUT: The result of the synchronous function execution.
127
+ """
128
+
129
+ def function_with_kwargs(*args_) -> Tuple[_METHOD_OUTPUT, contextvars.Context]:
130
+ """
131
+ Helper to pass keyword arguments to trio.to_thread.run_sync.
132
+
133
+ Args:
134
+ *args_: Positional arguments passed from the outer scope.
135
+
136
+ Returns:
137
+ Tuple[_METHOD_OUTPUT, contextvars.Context]: Result of original sync function and the thread context.
138
+ """
139
+
140
+ sync_result = sync_function(*args_, **kwargs)
141
+ context_vars = contextvars.copy_context()
142
+
143
+ return sync_result, context_vars
144
+
145
+ if lock:
146
+ async with lock_object:
147
+ result, child_context_vars = await trio.to_thread.run_sync(function_with_kwargs, *args, limiter=capacity_limiter_object)
148
+ else:
149
+ result, child_context_vars = await trio.to_thread.run_sync(function_with_kwargs, *args, limiter=capacity_limiter_object)
150
+
151
+ if exchange_context:
152
+ for var, value in child_context_vars.items():
153
+ var.set(value)
154
+
155
+ return result
156
+
157
+ return wrapper
@@ -14,6 +14,6 @@ __all__ = [
14
14
  ]
15
15
 
16
16
  DEVICES_TYPEHINT = Union[PointerInput, KeyInput, WheelInput]
17
- ARCHITECTURES_TYPEHINT = Literal["sync", "trio_threads"]
17
+ ARCHITECTURES_TYPEHINT = Literal["sync", "trio_threads", "trio_bidi"]
18
18
  PATH_TYPEHINT = Union[str, bytes, pathlib.Path, os.PathLike]
19
19
  TYPES_FOR_FLATTENING_TYPEHINT = Union[str, Type]
@@ -2,6 +2,7 @@ from abc import abstractmethod
2
2
  from selenium import webdriver
3
3
  from typing import Optional, Union
4
4
  from osn_selenium._typehints import PATH_TYPEHINT
5
+ from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
5
6
  from osn_selenium.abstract.webdriver.core.base import (
6
7
  AbstractCoreBaseMixin
7
8
  )
@@ -31,6 +32,19 @@ class AbstractBlinkBaseMixin(AbstractCoreBaseMixin):
31
32
 
32
33
  ...
33
34
 
35
+ @property
36
+ @abstractmethod
37
+ def cdp(self) -> AbstractCDPExecutor:
38
+ """
39
+ Returns the CDP (Chrome DevTools Protocol) executor.
40
+
41
+ Returns:
42
+ AbstractCDPExecutor: The CDP executor instance used for sending
43
+ commands directly to the browser via the DevTools protocol.
44
+ """
45
+
46
+ ...
47
+
34
48
  @property
35
49
  @abstractmethod
36
50
  def debugging_ip(self) -> Optional[str]:
@@ -19,14 +19,6 @@ class AbstractBlinkLifecycleMixin(AbstractCoreLifecycleMixin):
19
19
  and the associated browser process.
20
20
  """
21
21
 
22
- @abstractmethod
23
- async def close_webdriver(self) -> None:
24
- """
25
- Closes the WebDriver connection and terminates the browser process.
26
- """
27
-
28
- ...
29
-
30
22
  @abstractmethod
31
23
  async def restart_webdriver(
32
24
  self,
@@ -74,3 +66,11 @@ class AbstractBlinkLifecycleMixin(AbstractCoreLifecycleMixin):
74
66
  """
75
67
 
76
68
  ...
69
+
70
+ @abstractmethod
71
+ async def stop_webdriver(self) -> None:
72
+ """
73
+ Stops the WebDriver connection and terminates the browser process.
74
+ """
75
+
76
+ ...
@@ -11,7 +11,6 @@ from osn_selenium._typehints import (
11
11
  ARCHITECTURES_TYPEHINT
12
12
  )
13
13
  from selenium.webdriver.remote.errorhandler import ErrorHandler
14
- from osn_selenium.abstract.executors.cdp import AbstractCDPExecutor
15
14
  from selenium.webdriver.remote.locator_converter import LocatorConverter
16
15
  from selenium.webdriver.remote.remote_connection import RemoteConnection
17
16
  from osn_selenium.abstract.executors.javascript import AbstractJSExecutor
@@ -90,19 +89,6 @@ class AbstractCoreBaseMixin(ABC):
90
89
 
91
90
  ...
92
91
 
93
- @property
94
- @abstractmethod
95
- def cdp(self) -> AbstractCDPExecutor:
96
- """
97
- Returns the CDP (Chrome DevTools Protocol) executor.
98
-
99
- Returns:
100
- AbstractCDPExecutor: The CDP executor instance used for sending
101
- commands directly to the browser via the DevTools protocol.
102
- """
103
-
104
- ...
105
-
106
92
  @property
107
93
  @abstractmethod
108
94
  def command_executor(self) -> RemoteConnection:
@@ -1,5 +1,6 @@
1
- from typing import Any, Optional
1
+ from typing import Optional
2
2
  from abc import ABC, abstractmethod
3
+ from selenium.webdriver.common.print_page_options import PrintOptions
3
4
 
4
5
 
5
6
  __all__ = ["AbstractCoreCaptureMixin"]
@@ -56,12 +57,12 @@ class AbstractCoreCaptureMixin(ABC):
56
57
  ...
57
58
 
58
59
  @abstractmethod
59
- def print_page(self, print_options: Optional[Any] = None) -> str:
60
+ def print_page(self, print_options: Optional[PrintOptions] = None) -> str:
60
61
  """
61
62
  Prints the current page to a PDF.
62
63
 
63
64
  Args:
64
- print_options (Optional[Any]): Options for printing the page.
65
+ print_options (Optional[PrintOptions]): Options for printing the page.
65
66
 
66
67
  Returns:
67
68
  str: A base64-encoded string of the PDF.
@@ -16,14 +16,6 @@ __all__ = ["AbstractCoreLifecycleMixin"]
16
16
  class AbstractCoreLifecycleMixin(ABC):
17
17
  """Mixin responsible for driver lifecycle, creation, session, and connection management."""
18
18
 
19
- @abstractmethod
20
- def close_webdriver(self) -> None:
21
- """
22
- Closes the WebDriver instance and all associated windows.
23
- """
24
-
25
- ...
26
-
27
19
  @abstractmethod
28
20
  def quit(self) -> None:
29
21
  """
@@ -101,3 +93,11 @@ class AbstractCoreLifecycleMixin(ABC):
101
93
  """
102
94
 
103
95
  ...
96
+
97
+ @abstractmethod
98
+ def stop_webdriver(self) -> None:
99
+ """
100
+ Stops the WebDriver instance and all associated windows.
101
+ """
102
+
103
+ ...
@@ -1,5 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from typing import Any, List, Optional
3
+ from selenium.webdriver.remote.script_key import ScriptKey
3
4
  from osn_selenium.abstract.instances.script import AbstractScript
4
5
 
5
6
 
@@ -51,7 +52,7 @@ class AbstractCoreScriptMixin(ABC):
51
52
  ...
52
53
 
53
54
  @abstractmethod
54
- def pin_script(self, script: str, script_key: Optional[Any] = None) -> Any:
55
+ def pin_script(self, script: str, script_key: Optional[Any] = None) -> ScriptKey:
55
56
  """
56
57
  Pins a script to the browser for faster execution.
57
58
 
@@ -60,7 +61,7 @@ class AbstractCoreScriptMixin(ABC):
60
61
  script_key (Optional[Any]): An optional key to identify the script.
61
62
 
62
63
  Returns:
63
- Any: The key associated with the pinned script.
64
+ ScriptKey: The key associated with the pinned script.
64
65
  """
65
66
 
66
67
  ...
@@ -77,12 +78,12 @@ class AbstractCoreScriptMixin(ABC):
77
78
  ...
78
79
 
79
80
  @abstractmethod
80
- def unpin(self, script_key: Any) -> None:
81
+ def unpin(self, script_key: ScriptKey) -> None:
81
82
  """
82
83
  Unpins a previously pinned script.
83
84
 
84
85
  Args:
85
- script_key (Any): The key of the script to unpin.
86
+ script_key (ScriptKey): The key of the script to unpin.
86
87
  """
87
88
 
88
89
  ...
@@ -66,6 +66,17 @@ class AbstractCoreWindowMixin(ABC):
66
66
 
67
67
  ...
68
68
 
69
+ @abstractmethod
70
+ def get_orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
71
+ """
72
+ Gets the current orientation of the browser.
73
+
74
+ Returns:
75
+ Literal["LANDSCAPE", "PORTRAIT"]: The current orientation.
76
+ """
77
+
78
+ ...
79
+
69
80
  @abstractmethod
70
81
  def get_window_handle(self, window: Optional[Union[str, int]] = None) -> str:
71
82
  """
@@ -140,17 +151,6 @@ class AbstractCoreWindowMixin(ABC):
140
151
 
141
152
  ...
142
153
 
143
- @abstractmethod
144
- def orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
145
- """
146
- Gets the current orientation of the browser.
147
-
148
- Returns:
149
- Literal["LANDSCAPE", "PORTRAIT"]: The current orientation.
150
- """
151
-
152
- ...
153
-
154
154
  @abstractmethod
155
155
  def set_orientation(self, value: Literal["LANDSCAPE", "PORTRAIT"]) -> None:
156
156
  """
@@ -2,9 +2,7 @@ import trio
2
2
  import inspect
3
3
  import warnings
4
4
  import functools
5
- from osn_selenium.exceptions.devtools import ExceptionThrown
6
5
  from osn_selenium.exceptions.instance import NotExpectedTypeError
7
- from osn_selenium.dev_tools._exception_helpers import log_exception
8
6
  from typing import (
9
7
  Any,
10
8
  Callable,
@@ -15,7 +13,7 @@ from typing import (
15
13
  )
16
14
 
17
15
 
18
- __all__ = ["background_task_decorator", "log_on_error", "warn_if_active"]
16
+ __all__ = ["background_task_decorator", "warn_if_active"]
19
17
 
20
18
  if TYPE_CHECKING:
21
19
  from osn_selenium.dev_tools.manager import DevTools
@@ -76,45 +74,6 @@ def warn_if_active(func: _METHOD) -> _METHOD:
76
74
  raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
77
75
 
78
76
 
79
- def log_on_error(func: _METHOD) -> _METHOD:
80
- """
81
- Decorator that logs any `BaseException` raised by the decorated async function.
82
-
83
- If an exception occurs, it is logged using `log_exception`, and an `ExceptionThrown`
84
- object wrapping the exception is returned instead of re-raising it.
85
-
86
- Args:
87
- func (_METHOD): The asynchronous function to be wrapped.
88
-
89
- Returns:
90
- _METHOD: The wrapped asynchronous function.
91
- """
92
-
93
- @functools.wraps(func)
94
- def sync_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
95
- try:
96
- return func(*args, **kwargs)
97
- except BaseException as exception:
98
- log_exception(exception)
99
- return ExceptionThrown(exception)
100
-
101
- @functools.wraps(func)
102
- async def async_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
103
- try:
104
- return await func(*args, **kwargs)
105
- except BaseException as exception:
106
- log_exception(exception)
107
- return ExceptionThrown(exception)
108
-
109
- if inspect.iscoroutinefunction(func):
110
- return async_wrapper
111
-
112
- if inspect.isfunction(func):
113
- return sync_wrapper
114
-
115
- raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
116
-
117
-
118
77
  def background_task_decorator(func: "DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT") -> "DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT":
119
78
  """
120
79
  Decorator for target background tasks to manage their lifecycle.
@@ -1,5 +1,7 @@
1
1
  import trio
2
2
  import random
3
+ from osn_selenium.exceptions.base import ExceptionThrown
4
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
3
5
  from typing import (
4
6
  Any,
5
7
  Callable,
@@ -10,10 +12,6 @@ from typing import (
10
12
  from osn_selenium.exceptions.configuration import (
11
13
  NotExpectedValueError
12
14
  )
13
- from osn_selenium.exceptions.devtools import (
14
- CDPEndExceptions,
15
- ExceptionThrown
16
- )
17
15
 
18
16
 
19
17
  __all__ = ["cdp_command_error", "execute_cdp_command", "wait_one"]
@@ -1,9 +1,9 @@
1
- from osn_selenium._base_models import ExtraDictModel
2
1
  from typing import (
3
2
  Literal,
4
3
  Optional,
5
4
  Union
6
5
  )
6
+ from osn_selenium._base_models import ExtraDictModel
7
7
  from osn_selenium.dev_tools.domains.fetch import FetchSettings
8
8
 
9
9
 
@@ -1,11 +1,9 @@
1
1
  import trio
2
2
  from pydantic import Field
3
3
  from osn_selenium._base_models import DictModel
4
+ from osn_selenium.exceptions.base import ExceptionThrown
5
+ from osn_selenium.exceptions.devtools import CDPEndExceptions
4
6
  from osn_selenium.dev_tools._functions import execute_cdp_command
5
- from osn_selenium.exceptions.devtools import (
6
- CDPEndExceptions,
7
- ExceptionThrown
8
- )
9
7
  from typing import (
10
8
  Any,
11
9
  Callable,
@@ -134,7 +132,7 @@ async def _build_kwargs_from_handlers_func(self: DevToolsTarget, handlers: DictM
134
132
  kwargs_ready_event = trio.Event()
135
133
  kwargs_ready_events.append(kwargs_ready_event)
136
134
 
137
- self._nursery_object.start_soon(
135
+ self._nursery.start_soon(
138
136
  handler_settings.func,
139
137
  self,
140
138
  kwargs_ready_event,
@@ -243,7 +241,7 @@ async def _handle_auth_required(
243
241
  )
244
242
 
245
243
  if response_handle_func is not None:
246
- self._nursery_object.start_soon(response_handle_func, self, response)
244
+ self._nursery.start_soon(response_handle_func, self, response)
247
245
  except* CDPEndExceptions:
248
246
  pass
249
247
  except* BaseException as error:
@@ -505,7 +503,7 @@ async def _handle_request_paused(
505
503
  )
506
504
 
507
505
  if response_handle_func is not None:
508
- self._nursery_object.start_soon(response_handle_func, self, response)
506
+ self._nursery.start_soon(response_handle_func, self, response)
509
507
  except* CDPEndExceptions:
510
508
  pass
511
509
  except* BaseException as error:
@@ -1,7 +1,7 @@
1
1
  import trio
2
2
  from datetime import datetime
3
3
  from osn_selenium._base_models import DictModel
4
- from osn_selenium.dev_tools._exception_helpers import log_exception
4
+ from osn_selenium._exception_helpers import log_exception
5
5
  from typing import (
6
6
  Any,
7
7
  Dict,
@@ -4,8 +4,8 @@ from typing import (
4
4
  TYPE_CHECKING,
5
5
  Tuple
6
6
  )
7
+ from osn_selenium._exception_helpers import log_exception
7
8
  from osn_selenium.exceptions.devtools import TrioEndExceptions
8
- from osn_selenium.dev_tools._exception_helpers import log_exception
9
9
  from osn_selenium.exceptions.configuration import ConfigurationError
10
10
  from osn_selenium.dev_tools.logger.models import (
11
11
  CDPMainLogEntry,
@@ -30,7 +30,7 @@ class MainLogger:
30
30
  def __init__(
31
31
  self,
32
32
  logger_settings: "LoggerSettings",
33
- nursery_object: trio.Nursery,
33
+ nursery: trio.Nursery,
34
34
  cdp_receive_channel: Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]],
35
35
  fingerprint_receive_channel: Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]
36
36
  ):
@@ -39,7 +39,7 @@ class MainLogger:
39
39
 
40
40
  Args:
41
41
  logger_settings ("LoggerSettings"): The settings for logging, including log directory.
42
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
42
+ nursery (trio.Nursery): The Trio nursery to spawn background tasks.
43
43
  cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]]):
44
44
  The channel from which CDP main log entries are received.
45
45
  fingerprint_receive_channel (Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]):
@@ -49,7 +49,7 @@ class MainLogger:
49
49
  ValueError: If settings require logging but `dir_path` is not set.
50
50
  """
51
51
 
52
- self._nursery_object = nursery_object
52
+ self._nursery = nursery
53
53
  self._cdp_receive_channel = cdp_receive_channel
54
54
  self._fingerprint_receive_channel = fingerprint_receive_channel
55
55
  self._cdp_file_path = None
@@ -162,12 +162,12 @@ class MainLogger:
162
162
  self._cdp_file_writing_stopped = trio.Event()
163
163
 
164
164
  if self._cdp_file_path is not None:
165
- self._nursery_object.start_soon(self._write_cdp_file)
165
+ self._nursery.start_soon(self._write_cdp_file)
166
166
 
167
167
  self._fingerprint_file_writing_stopped = trio.Event()
168
168
 
169
169
  if self._fingerprint_file_path is not None:
170
- self._nursery_object.start_soon(self._write_fingerprint_file)
170
+ self._nursery.start_soon(self._write_fingerprint_file)
171
171
 
172
172
  self._is_active = True
173
173
  except* TrioEndExceptions:
@@ -177,7 +177,7 @@ class MainLogger:
177
177
  await self.close()
178
178
 
179
179
 
180
- def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSettings") -> Tuple[
180
+ def build_main_logger(nursery: trio.Nursery, logger_settings: "LoggerSettings") -> Tuple[
181
181
  Optional[trio.MemorySendChannel[CDPMainLogEntry]],
182
182
  Optional[trio.MemorySendChannel[FingerprintMainLogEntry]],
183
183
  MainLogger
@@ -186,7 +186,7 @@ def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSett
186
186
  Builds and initializes a `MainLogger` instance along with its send channels.
187
187
 
188
188
  Args:
189
- nursery_object (trio.Nursery): The Trio nursery to associate with the logger for background tasks.
189
+ nursery (trio.Nursery): The Trio nursery to associate with the logger for background tasks.
190
190
  logger_settings ("LoggerSettings"): The logger configuration settings.
191
191
 
192
192
  Returns:
@@ -206,7 +206,7 @@ def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSett
206
206
 
207
207
  target_logger = MainLogger(
208
208
  logger_settings=logger_settings,
209
- nursery_object=nursery_object,
209
+ nursery=nursery,
210
210
  cdp_receive_channel=cdp_recv,
211
211
  fingerprint_receive_channel=fp_recv,
212
212
  )