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
@@ -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
  """
@@ -1,5 +1,5 @@
1
1
  import pathlib
2
- from osn_selenium.models import DictModel
2
+ from osn_selenium._base_models import DictModel
3
3
 
4
4
 
5
5
  __all__ = ["Browser"]
@@ -2,23 +2,23 @@ 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,
11
9
  ParamSpec,
12
10
  TYPE_CHECKING,
13
- TypeVar
11
+ TypeVar,
12
+ Union
14
13
  )
15
14
 
16
15
 
17
- __all__ = ["background_task_decorator", "log_on_error", "warn_if_active"]
16
+ __all__ = ["background_task_decorator", "warn_if_active"]
18
17
 
19
18
  if TYPE_CHECKING:
20
19
  from osn_selenium.dev_tools.manager import DevTools
21
20
  from osn_selenium.dev_tools.target.base import BaseMixin
21
+ from osn_selenium.dev_tools.target import DevToolsTarget
22
22
  from osn_selenium.dev_tools._typehints import DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT
23
23
 
24
24
  _METHOD_INPUT = ParamSpec("_METHOD_INPUT")
@@ -74,67 +74,35 @@ def warn_if_active(func: _METHOD) -> _METHOD:
74
74
  raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
75
75
 
76
76
 
77
- def log_on_error(func: Callable[_METHOD_INPUT, _METHOD_OUTPUT]) -> Callable[_METHOD_INPUT, _METHOD_OUTPUT]:
78
- """
79
- Decorator that logs any `BaseException` raised by the decorated async function.
80
-
81
- If an exception occurs, it is logged using `log_exception`, and an `ExceptionThrown`
82
- object wrapping the exception is returned instead of re-raising it.
83
-
84
- Args:
85
- func (_METHOD): The asynchronous function to be wrapped.
86
-
87
- Returns:
88
- _METHOD: The wrapped asynchronous function.
89
- """
90
-
91
- @functools.wraps(func)
92
- def sync_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
93
- try:
94
- return func(*args, **kwargs)
95
- except BaseException as exception:
96
- log_exception(exception)
97
- return ExceptionThrown(exception)
98
-
99
- @functools.wraps(func)
100
- async def async_wrapper(*args: _METHOD_INPUT.args, **kwargs: _METHOD_INPUT.kwargs) -> _METHOD_OUTPUT:
101
- try:
102
- return await func(*args, **kwargs)
103
- except BaseException as exception:
104
- log_exception(exception)
105
- return ExceptionThrown(exception)
106
-
107
- if inspect.iscoroutinefunction(func):
108
- return async_wrapper
109
-
110
- if inspect.isfunction(func):
111
- return sync_wrapper
112
-
113
- raise NotExpectedTypeError(expected_type=["coroutine function", "function"], received_instance=func)
114
-
115
-
116
77
  def background_task_decorator(func: "DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT") -> "DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT":
117
78
  """
118
- Decorator for BaseTargetMixin background tasks to manage their lifecycle.
79
+ Decorator for target background tasks to manage their lifecycle.
119
80
 
120
81
  This decorator wraps a target's background task function. It ensures that
121
82
  `target.background_task_ended` event is set when the function completes,
122
83
  allowing the `BaseTargetMixin` to track the task's termination.
123
84
 
124
85
  Args:
125
- func ("devtools_background_func_type"): The asynchronous background task function
126
- to be wrapped. It should accept a `BaseTargetMixin` instance.
86
+ func ("DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT"): The asynchronous background task function
87
+ to be wrapped. It should accept a target instance.
127
88
 
128
89
  Returns:
129
- "devtools_background_func_type": The wrapped function.
90
+ "DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT": The wrapped function.
130
91
  """
131
92
 
132
93
  @functools.wraps(func)
133
- async def wrapper(target: "BaseMixin") -> Any:
134
- target.background_task_ended = trio.Event()
94
+ async def wrapper(target: Union["BaseMixin", "DevToolsTarget"]) -> Any:
95
+ if not target.about_to_stop_event.is_set():
96
+ with trio.CancelScope() as cancel_scope:
97
+ target.cancel_scopes["background_task"] = cancel_scope
98
+
99
+ try:
100
+ target.background_task_ended = trio.Event()
135
101
 
136
- await func(target)
102
+ await func(target)
137
103
 
138
- target.background_task_ended.set()
104
+ target.background_task_ended.set()
105
+ finally:
106
+ target.cancel_scopes.pop("background_task")
139
107
 
140
108
  return wrapper
@@ -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"]
@@ -3,7 +3,8 @@ from typing import (
3
3
  Callable,
4
4
  Coroutine,
5
5
  Literal,
6
- TYPE_CHECKING
6
+ TYPE_CHECKING,
7
+ Union
7
8
  )
8
9
 
9
10
 
@@ -15,10 +16,12 @@ __all__ = [
15
16
 
16
17
  if TYPE_CHECKING:
17
18
  from osn_selenium.dev_tools.target.base import BaseMixin as BaseTargetMixin
19
+ from osn_selenium.dev_tools.target import DevToolsTarget
18
20
  else:
19
21
  BaseTargetMixin = Any
22
+ DevToolsTarget = Any
20
23
 
21
- DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT = Callable[[BaseTargetMixin], Coroutine[Any, Any, None]]
24
+ DEVTOOLS_BACKGROUND_FUNCTION_TYPEHINT = Callable[[Union[BaseTargetMixin, DevToolsTarget]], Coroutine[Any, Any, None]]
22
25
 
23
26
  CDP_LOG_LEVELS_TYPEHINT = Literal[
24
27
  "INFO",
@@ -46,9 +46,6 @@ def _yield_package_item_way(name: Union[str, Iterable[str]]) -> Generator[str, A
46
46
  class DevToolsPackage:
47
47
  """
48
48
  Wrapper around the DevTools module to safely retrieve nested attributes/classes.
49
-
50
- Attributes:
51
- _package (ModuleType): The root DevTools module package.
52
49
  """
53
50
 
54
51
  def __init__(self, package: ModuleType):
@@ -1,16 +1,16 @@
1
- from osn_selenium.models import DictModel
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
 
10
10
  __all__ = ["DomainsSettings", "domains_classes_type", "domains_type"]
11
11
 
12
12
 
13
- class DomainsSettings(DictModel):
13
+ class DomainsSettings(ExtraDictModel):
14
14
  """
15
15
  A dataclass container for configuration settings across different DevTools domains.
16
16
 
@@ -1,5 +1,5 @@
1
1
  import trio
2
- from osn_selenium.models import DictModel
2
+ from osn_selenium._base_models import DictModel
3
3
  from typing import (
4
4
  Any,
5
5
  Callable,
@@ -1,11 +1,9 @@
1
1
  import trio
2
2
  from pydantic import Field
3
- from osn_selenium.models import DictModel
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
- from osn_selenium.models import DictModel
4
- from osn_selenium.dev_tools._exception_helpers import log_exception
3
+ from osn_selenium._base_models import DictModel
4
+ from osn_selenium._exception_helpers import log_exception
5
5
  from typing import (
6
6
  Any,
7
7
  Dict,
@@ -1,6 +1,6 @@
1
1
  from pydantic import Field
2
2
  from typing import List, Optional
3
- from osn_selenium.models import DictModel
3
+ from osn_selenium._base_models import DictModel
4
4
 
5
5
 
6
6
  __all__ = ["TargetFilter", "TargetsFilters"]
@@ -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,
@@ -25,24 +25,12 @@ class MainLogger:
25
25
 
26
26
  This logger is responsible for writing aggregated statistics about all active
27
27
  logging channels and target types to a designated file.
28
-
29
- Attributes:
30
- _nursery_object (trio.Nursery): The Trio nursery for managing concurrent tasks.
31
- _cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]]):
32
- The receive channel for CDP main log entries.
33
- _fingerprint_receive_channel (Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]):
34
- The receive channel for fingerprint main log entries.
35
- _cdp_file_writing_stopped (Optional[trio.Event]): An event set when the CDP file writing task stops.
36
- _fingerprint_file_writing_stopped (Optional[trio.Event]): An event set when the fingerprint file writing task stops.
37
- _is_active (bool): Flag indicating if the main logger is active.
38
- _cdp_file_path (Optional[Path]): The path to the CDP main log file.
39
- _fingerprint_file_path (Optional[Path]): The path to the fingerprint main log file.
40
28
  """
41
29
 
42
30
  def __init__(
43
31
  self,
44
32
  logger_settings: "LoggerSettings",
45
- nursery_object: trio.Nursery,
33
+ nursery: trio.Nursery,
46
34
  cdp_receive_channel: Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]],
47
35
  fingerprint_receive_channel: Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]
48
36
  ):
@@ -51,7 +39,7 @@ class MainLogger:
51
39
 
52
40
  Args:
53
41
  logger_settings ("LoggerSettings"): The settings for logging, including log directory.
54
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
42
+ nursery (trio.Nursery): The Trio nursery to spawn background tasks.
55
43
  cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]]):
56
44
  The channel from which CDP main log entries are received.
57
45
  fingerprint_receive_channel (Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]):
@@ -61,7 +49,7 @@ class MainLogger:
61
49
  ValueError: If settings require logging but `dir_path` is not set.
62
50
  """
63
51
 
64
- self._nursery_object = nursery_object
52
+ self._nursery = nursery
65
53
  self._cdp_receive_channel = cdp_receive_channel
66
54
  self._fingerprint_receive_channel = fingerprint_receive_channel
67
55
  self._cdp_file_path = None
@@ -174,12 +162,12 @@ class MainLogger:
174
162
  self._cdp_file_writing_stopped = trio.Event()
175
163
 
176
164
  if self._cdp_file_path is not None:
177
- self._nursery_object.start_soon(self._write_cdp_file)
165
+ self._nursery.start_soon(self._write_cdp_file)
178
166
 
179
167
  self._fingerprint_file_writing_stopped = trio.Event()
180
168
 
181
169
  if self._fingerprint_file_path is not None:
182
- self._nursery_object.start_soon(self._write_fingerprint_file)
170
+ self._nursery.start_soon(self._write_fingerprint_file)
183
171
 
184
172
  self._is_active = True
185
173
  except* TrioEndExceptions:
@@ -189,7 +177,7 @@ class MainLogger:
189
177
  await self.close()
190
178
 
191
179
 
192
- def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSettings") -> Tuple[
180
+ def build_main_logger(nursery: trio.Nursery, logger_settings: "LoggerSettings") -> Tuple[
193
181
  Optional[trio.MemorySendChannel[CDPMainLogEntry]],
194
182
  Optional[trio.MemorySendChannel[FingerprintMainLogEntry]],
195
183
  MainLogger
@@ -198,7 +186,7 @@ def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSett
198
186
  Builds and initializes a `MainLogger` instance along with its send channels.
199
187
 
200
188
  Args:
201
- 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.
202
190
  logger_settings ("LoggerSettings"): The logger configuration settings.
203
191
 
204
192
  Returns:
@@ -218,7 +206,7 @@ def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSett
218
206
 
219
207
  target_logger = MainLogger(
220
208
  logger_settings=logger_settings,
221
- nursery_object=nursery_object,
209
+ nursery=nursery,
222
210
  cdp_receive_channel=cdp_recv,
223
211
  fingerprint_receive_channel=fp_recv,
224
212
  )
@@ -1,6 +1,6 @@
1
1
  from pydantic import Field
2
2
  from datetime import datetime
3
- from osn_selenium.models import DictModel
3
+ from osn_selenium._base_models import DictModel
4
4
  from osn_selenium.dev_tools.models import TargetData
5
5
  from typing import (
6
6
  Any,
@@ -1,10 +1,15 @@
1
1
  import trio
2
- from typing import Optional, Tuple
2
+ import pathlib
3
+ from typing import (
4
+ Callable,
5
+ Optional,
6
+ Tuple
7
+ )
3
8
  from osn_selenium.dev_tools.models import TargetData
9
+ from osn_selenium._exception_helpers import log_exception
4
10
  from osn_selenium.dev_tools.settings import LoggerSettings
5
11
  from osn_selenium.exceptions.devtools import TrioEndExceptions
6
12
  from osn_selenium.dev_tools._validators import validate_log_filter
7
- from osn_selenium.dev_tools._exception_helpers import log_exception
8
13
  from osn_selenium.dev_tools.logger.models import (
9
14
  CDPTargetLogEntry,
10
15
  FingerprintTargetLogEntry
@@ -20,21 +25,12 @@ class TargetLogger:
20
25
 
21
26
  Each `TargetLogger` instance is responsible for writing log entries
22
27
  related to its associated `TargetData` to a dedicated file.
23
-
24
- Attributes:
25
- _target_data (TargetData): The data of the browser target this logger is associated with.
26
- _nursery_object (trio.Nursery): The Trio nursery for managing concurrent tasks.
27
- _cdp_log_level_filter (Optional[Callable[[Any], bool]]): Filter function for CDP log levels.
28
- _cdp_target_type_filter (Optional[Callable[[Any], bool]]): Filter function for CDP target types.
29
- _cdp_file_writing_stopped (Optional[trio.Event]): An event set when CDP file writing task stops.
30
- _cdp_file_path (Optional[Path]): The path to the target-specific CDP log file.
31
- _is_active (bool): Flag indicating if the target logger is active.
32
28
  """
33
29
 
34
30
  def __init__(
35
31
  self,
36
32
  logger_settings: LoggerSettings,
37
- nursery_object: trio.Nursery,
33
+ nursery: trio.Nursery,
38
34
  target_data: TargetData,
39
35
  cdp_receive_channel: Optional[trio.MemoryReceiveChannel[CDPTargetLogEntry]],
40
36
  fingerprint_receive_channel: Optional[trio.MemoryReceiveChannel[FingerprintTargetLogEntry]],
@@ -44,7 +40,7 @@ class TargetLogger:
44
40
 
45
41
  Args:
46
42
  logger_settings (LoggerSettings): Configuration for logging.
47
- nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
43
+ nursery (trio.Nursery): The Trio nursery to spawn background tasks.
48
44
  target_data (TargetData): The data of the browser target this logger will log for.
49
45
  cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPTargetLogEntry]]):
50
46
  Channel to receive CDP logs.
@@ -56,15 +52,15 @@ class TargetLogger:
56
52
  """
57
53
 
58
54
  self._target_data = target_data
59
- self._nursery_object = nursery_object
55
+ self._nursery = nursery
60
56
  self._cdp_receive_channel = cdp_receive_channel
61
57
  self._fingerprint_receive_channel = fingerprint_receive_channel
62
- self._cdp_file_path = None
63
- self._cdp_log_level_filter = None
64
- self._cdp_target_type_filter = None
65
- self._fingerprint_file_path = None
66
- self._fingerprint_log_level_filter = None
67
- self._fingerprint_target_type_filter = None
58
+ self._cdp_file_path: Optional[pathlib.Path] = None
59
+ self._cdp_log_level_filter: Optional[Callable[[str], bool]] = None
60
+ self._cdp_target_type_filter: Optional[Callable[[str], bool]] = None
61
+ self._fingerprint_file_path: Optional[pathlib.Path] = None
62
+ self._fingerprint_log_level_filter: Optional[Callable[[str], bool]] = None
63
+ self._fingerprint_target_type_filter: Optional[Callable[[str], bool]] = None
68
64
 
69
65
  if logger_settings.dir_path is None:
70
66
  if logger_settings.cdp_settings:
@@ -106,6 +102,32 @@ class TargetLogger:
106
102
  self._fingerprint_file_writing_stopped: Optional[trio.Event] = None
107
103
  self._is_active = False
108
104
 
105
+ def filter_cdp_log(self, log_entry: CDPTargetLogEntry) -> bool:
106
+ """
107
+ Applies configured filters to a CDP log entry.
108
+
109
+ Args:
110
+ log_entry (CDPTargetLogEntry): The log entry to check.
111
+
112
+ Returns:
113
+ bool: True if the log entry passes filters, False otherwise.
114
+ """
115
+
116
+ return self._cdp_log_level_filter(log_entry.level) and self._cdp_target_type_filter(log_entry.target_data.type_)
117
+
118
+ def filter_fingerprint_log(self, log_entry: FingerprintTargetLogEntry) -> bool:
119
+ """
120
+ Applies configured filters to a fingerprint log entry.
121
+
122
+ Args:
123
+ log_entry (FingerprintTargetLogEntry): The log entry to check.
124
+
125
+ Returns:
126
+ bool: True if the log entry passes filters, False otherwise.
127
+ """
128
+
129
+ return self._fingerprint_log_level_filter(log_entry.level) and self._fingerprint_category_filter(log_entry.api)
130
+
109
131
  @property
110
132
  def is_active(self) -> bool:
111
133
  """
@@ -153,9 +175,8 @@ class TargetLogger:
153
175
 
154
176
  async with await trio.open_file(self._fingerprint_file_path, "a+", encoding="utf-8") as file:
155
177
  async for log_entry in self._fingerprint_receive_channel:
156
- if self._fingerprint_log_level_filter(log_entry.level) and self._fingerprint_category_filter(log_entry.api):
157
- await file.write(log_entry.model_dump_json(indent=4) + end_of_entry)
158
- await file.flush()
178
+ await file.write(log_entry.model_dump_json(indent=4) + end_of_entry)
179
+ await file.flush()
159
180
  except* TrioEndExceptions:
160
181
  pass
161
182
  except* BaseException as error:
@@ -179,9 +200,8 @@ class TargetLogger:
179
200
 
180
201
  async with await trio.open_file(self._cdp_file_path, "a+", encoding="utf-8") as file:
181
202
  async for log_entry in self._cdp_receive_channel:
182
- if self._cdp_log_level_filter(log_entry.level) and self._cdp_target_type_filter(log_entry.target_data.type_):
183
- await file.write(log_entry.model_dump_json(indent=4) + end_of_entry)
184
- await file.flush()
203
+ await file.write(log_entry.model_dump_json(indent=4) + end_of_entry)
204
+ await file.flush()
185
205
  except* TrioEndExceptions:
186
206
  pass
187
207
  except* BaseException as error:
@@ -200,12 +220,12 @@ class TargetLogger:
200
220
  self._cdp_file_writing_stopped = trio.Event()
201
221
 
202
222
  if self._cdp_file_path is not None:
203
- self._nursery_object.start_soon(self._write_cdp_file)
223
+ self._nursery.start_soon(self._write_cdp_file)
204
224
 
205
225
  self._fingerprint_file_writing_stopped = trio.Event()
206
226
 
207
227
  if self._fingerprint_file_path is not None:
208
- self._nursery_object.start_soon(self._write_fingerprint_file)
228
+ self._nursery.start_soon(self._write_fingerprint_file)
209
229
 
210
230
  self._is_active = True
211
231
  except* TrioEndExceptions:
@@ -249,7 +269,7 @@ def build_target_logger(
249
269
 
250
270
  target_logger = TargetLogger(
251
271
  logger_settings=logger_settings,
252
- nursery_object=nursery_object,
272
+ nursery=nursery_object,
253
273
  target_data=target_data,
254
274
  cdp_receive_channel=cdp_recv,
255
275
  fingerprint_receive_channel=fp_recv,