osn-selenium 0.0.0__py3-none-any.whl → 1.1.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 (635) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_functions.py +84 -0
  4. osn_selenium/_typehints.py +19 -0
  5. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  6. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  7. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  8. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  9. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  10. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  11. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  12. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  13. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  14. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  15. osn_selenium/abstract/executors/cdp/console.py +18 -0
  16. osn_selenium/abstract/executors/cdp/css.py +197 -0
  17. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  18. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  19. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  20. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  21. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  22. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  23. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  24. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  25. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  26. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  27. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  28. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  29. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  30. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  31. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  32. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  33. osn_selenium/abstract/executors/cdp/input.py +158 -0
  34. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  35. osn_selenium/abstract/executors/cdp/io.py +24 -0
  36. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  37. osn_selenium/abstract/executors/cdp/log.py +27 -0
  38. osn_selenium/abstract/executors/cdp/media.py +14 -0
  39. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  40. osn_selenium/abstract/executors/cdp/network.py +252 -0
  41. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  42. osn_selenium/abstract/executors/cdp/page.py +347 -0
  43. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  44. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  45. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  46. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  47. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  48. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  49. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  50. osn_selenium/abstract/executors/cdp/security.py +26 -0
  51. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  52. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  53. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  54. osn_selenium/abstract/executors/cdp/target.py +125 -0
  55. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  56. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  57. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  58. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  59. osn_selenium/abstract/executors/cdp.py +63 -0
  60. osn_selenium/abstract/executors/javascript.py +203 -0
  61. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  62. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  63. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  64. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  65. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  66. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  67. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  68. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  69. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  70. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  71. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  72. osn_selenium/abstract/instances/alert.py +67 -0
  73. osn_selenium/abstract/instances/browser.py +76 -0
  74. osn_selenium/abstract/instances/browsing_context.py +310 -0
  75. osn_selenium/abstract/instances/dialog.py +107 -0
  76. osn_selenium/abstract/instances/fedcm.py +133 -0
  77. osn_selenium/abstract/instances/mobile.py +79 -0
  78. osn_selenium/abstract/instances/network.py +100 -0
  79. osn_selenium/abstract/instances/permissions.py +52 -0
  80. osn_selenium/abstract/instances/script.py +109 -0
  81. osn_selenium/abstract/instances/shadow_root.py +81 -0
  82. osn_selenium/abstract/instances/storage.py +98 -0
  83. osn_selenium/abstract/instances/switch_to.py +104 -0
  84. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  85. osn_selenium/abstract/instances/web_element.py +395 -0
  86. osn_selenium/abstract/instances/web_extension.py +70 -0
  87. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  88. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  89. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  90. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  91. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  92. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  93. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  94. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  95. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  96. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  97. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  98. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  99. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  100. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  101. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  102. osn_selenium/abstract/webdriver/core/base.py +298 -0
  103. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  104. osn_selenium/abstract/webdriver/core/components.py +82 -0
  105. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  106. osn_selenium/abstract/webdriver/core/element.py +55 -0
  107. osn_selenium/abstract/webdriver/core/file.py +82 -0
  108. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  109. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  110. osn_selenium/abstract/webdriver/core/script.py +88 -0
  111. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  112. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  113. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  114. osn_selenium/abstract/webdriver/core/window.py +237 -0
  115. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  116. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  117. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  118. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  119. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  120. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  121. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  122. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  123. osn_selenium/base_mixin.py +122 -0
  124. osn_selenium/browsers_handler/__init__.py +47 -17
  125. osn_selenium/browsers_handler/_linux.py +226 -0
  126. osn_selenium/browsers_handler/_windows.py +21 -14
  127. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  128. osn_selenium/dev_tools/_decorators.py +149 -0
  129. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  130. osn_selenium/dev_tools/_functions.py +174 -0
  131. osn_selenium/dev_tools/_system_utils.py +35 -0
  132. osn_selenium/dev_tools/_typehints.py +35 -0
  133. osn_selenium/dev_tools/_validators.py +227 -0
  134. osn_selenium/dev_tools/_wrappers.py +92 -0
  135. osn_selenium/dev_tools/domains/__init__.py +7 -40
  136. osn_selenium/dev_tools/domains/abstract.py +98 -254
  137. osn_selenium/dev_tools/domains/fetch.py +229 -906
  138. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  139. osn_selenium/dev_tools/filters.py +40 -0
  140. osn_selenium/dev_tools/logger/main.py +214 -0
  141. osn_selenium/dev_tools/logger/models.py +232 -0
  142. osn_selenium/dev_tools/logger/target.py +278 -0
  143. osn_selenium/dev_tools/manager/__init__.py +16 -0
  144. osn_selenium/dev_tools/manager/base.py +124 -0
  145. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  146. osn_selenium/dev_tools/manager/logging.py +153 -0
  147. osn_selenium/dev_tools/manager/settings.py +89 -0
  148. osn_selenium/dev_tools/manager/targets.py +175 -0
  149. osn_selenium/dev_tools/models.py +49 -0
  150. osn_selenium/dev_tools/settings.py +139 -0
  151. osn_selenium/dev_tools/target/__init__.py +16 -0
  152. osn_selenium/dev_tools/target/base.py +427 -0
  153. osn_selenium/dev_tools/target/detach.py +54 -0
  154. osn_selenium/dev_tools/target/discovery.py +112 -0
  155. osn_selenium/dev_tools/target/events.py +120 -0
  156. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  157. osn_selenium/dev_tools/target/lifecycle.py +184 -0
  158. osn_selenium/dev_tools/target/logging.py +163 -0
  159. osn_selenium/exceptions/__init__.py +1 -0
  160. osn_selenium/exceptions/base.py +9 -0
  161. osn_selenium/exceptions/configuration.py +84 -0
  162. osn_selenium/exceptions/dependencies.py +60 -0
  163. osn_selenium/exceptions/devtools.py +114 -0
  164. osn_selenium/exceptions/flags.py +45 -0
  165. osn_selenium/exceptions/instance.py +92 -0
  166. osn_selenium/exceptions/javascript.py +31 -0
  167. osn_selenium/exceptions/logic.py +31 -0
  168. osn_selenium/exceptions/path.py +77 -0
  169. osn_selenium/exceptions/platform.py +33 -0
  170. osn_selenium/exceptions/protocol.py +86 -0
  171. osn_selenium/exceptions/webdriver.py +44 -0
  172. osn_selenium/exceptions/window.py +63 -0
  173. osn_selenium/executors/__init__.py +1 -0
  174. osn_selenium/executors/sync/__init__.py +1 -0
  175. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  176. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  177. osn_selenium/executors/sync/cdp/animation.py +50 -0
  178. osn_selenium/executors/sync/cdp/audits.py +48 -0
  179. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  180. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  181. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  182. osn_selenium/executors/sync/cdp/browser.py +131 -0
  183. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  184. osn_selenium/executors/sync/cdp/cast.py +38 -0
  185. osn_selenium/executors/sync/cdp/console.py +24 -0
  186. osn_selenium/executors/sync/cdp/css.py +187 -0
  187. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  188. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  189. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  190. osn_selenium/executors/sync/cdp/dom.py +310 -0
  191. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  192. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  193. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  194. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  195. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  196. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  197. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  198. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  199. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  200. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  201. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  202. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  203. osn_selenium/executors/sync/cdp/input.py +233 -0
  204. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  205. osn_selenium/executors/sync/cdp/io.py +33 -0
  206. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  207. osn_selenium/executors/sync/cdp/log.py +35 -0
  208. osn_selenium/executors/sync/cdp/media.py +21 -0
  209. osn_selenium/executors/sync/cdp/memory.py +62 -0
  210. osn_selenium/executors/sync/cdp/network.py +287 -0
  211. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  212. osn_selenium/executors/sync/cdp/page.py +365 -0
  213. osn_selenium/executors/sync/cdp/performance.py +33 -0
  214. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  215. osn_selenium/executors/sync/cdp/preload.py +21 -0
  216. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  217. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  218. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  219. osn_selenium/executors/sync/cdp/schema.py +23 -0
  220. osn_selenium/executors/sync/cdp/security.py +30 -0
  221. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  222. osn_selenium/executors/sync/cdp/storage.py +151 -0
  223. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  224. osn_selenium/executors/sync/cdp/target.py +147 -0
  225. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  226. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  227. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  228. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  229. osn_selenium/executors/sync/cdp.py +100 -0
  230. osn_selenium/executors/sync/javascript.py +79 -0
  231. osn_selenium/executors/trio_threads/__init__.py +1 -0
  232. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  233. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  234. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  235. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  236. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  237. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  238. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  239. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  240. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  241. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  242. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  243. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  244. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  245. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  246. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  247. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  248. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  249. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  250. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  251. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  252. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  253. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  254. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  255. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  256. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  257. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  258. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  259. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  260. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  261. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  262. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  263. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  264. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  265. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  266. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  267. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  268. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  269. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  270. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  271. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  272. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  273. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  274. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  275. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  276. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  277. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  278. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  279. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  280. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  281. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  282. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  283. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  284. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  285. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  286. osn_selenium/executors/trio_threads/cdp.py +104 -0
  287. osn_selenium/executors/trio_threads/javascript.py +90 -0
  288. osn_selenium/executors/unified/__init__.py +1 -0
  289. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  290. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  291. osn_selenium/executors/unified/cdp/animation.py +50 -0
  292. osn_selenium/executors/unified/cdp/audits.py +45 -0
  293. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  294. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  295. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  296. osn_selenium/executors/unified/cdp/browser.py +143 -0
  297. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  298. osn_selenium/executors/unified/cdp/cast.py +32 -0
  299. osn_selenium/executors/unified/cdp/console.py +18 -0
  300. osn_selenium/executors/unified/cdp/css.py +237 -0
  301. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  302. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  303. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  304. osn_selenium/executors/unified/cdp/dom.py +380 -0
  305. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  306. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  307. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  308. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  309. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  310. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  311. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  312. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  313. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  314. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  315. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  316. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  317. osn_selenium/executors/unified/cdp/input.py +254 -0
  318. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  319. osn_selenium/executors/unified/cdp/io.py +29 -0
  320. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  321. osn_selenium/executors/unified/cdp/log.py +29 -0
  322. osn_selenium/executors/unified/cdp/media.py +15 -0
  323. osn_selenium/executors/unified/cdp/memory.py +59 -0
  324. osn_selenium/executors/unified/cdp/network.py +323 -0
  325. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  326. osn_selenium/executors/unified/cdp/page.py +410 -0
  327. osn_selenium/executors/unified/cdp/performance.py +27 -0
  328. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  329. osn_selenium/executors/unified/cdp/preload.py +15 -0
  330. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  331. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  332. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  333. osn_selenium/executors/unified/cdp/schema.py +17 -0
  334. osn_selenium/executors/unified/cdp/security.py +27 -0
  335. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  336. osn_selenium/executors/unified/cdp/storage.py +178 -0
  337. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  338. osn_selenium/executors/unified/cdp/target.py +165 -0
  339. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  340. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  341. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  342. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  343. osn_selenium/executors/unified/javascript.py +104 -0
  344. osn_selenium/flags/__init__.py +1 -0
  345. osn_selenium/flags/_functions.py +45 -0
  346. osn_selenium/flags/_typehints.py +34 -0
  347. osn_selenium/flags/_validators.py +101 -0
  348. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
  349. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
  350. osn_selenium/flags/chrome.py +259 -0
  351. osn_selenium/flags/edge.py +259 -0
  352. osn_selenium/flags/models/__init__.py +1 -0
  353. osn_selenium/flags/models/base.py +130 -0
  354. osn_selenium/flags/models/blink.py +263 -0
  355. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  356. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  357. osn_selenium/flags/models/values.py +44 -0
  358. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  359. osn_selenium/flags/yandex.py +259 -0
  360. osn_selenium/instances/__init__.py +1 -0
  361. osn_selenium/instances/_functions.py +242 -0
  362. osn_selenium/instances/_typehints.py +148 -0
  363. osn_selenium/instances/_utils.py +143 -0
  364. osn_selenium/instances/convert.py +287 -0
  365. osn_selenium/instances/protocols.py +105 -0
  366. osn_selenium/instances/sync/__init__.py +1 -0
  367. osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  368. osn_selenium/instances/sync/action_chains/base.py +74 -0
  369. osn_selenium/instances/sync/action_chains/click.py +61 -0
  370. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  371. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  372. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  373. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  374. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  375. osn_selenium/instances/sync/action_chains/move.py +46 -0
  376. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  377. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  378. osn_selenium/instances/sync/alert.py +69 -0
  379. osn_selenium/instances/sync/browser.py +72 -0
  380. osn_selenium/instances/sync/browsing_context.py +193 -0
  381. osn_selenium/instances/sync/dialog.py +81 -0
  382. osn_selenium/instances/sync/fedcm.py +92 -0
  383. osn_selenium/instances/sync/mobile.py +75 -0
  384. osn_selenium/instances/sync/network.py +90 -0
  385. osn_selenium/instances/sync/permissions.py +80 -0
  386. osn_selenium/instances/sync/script.py +77 -0
  387. osn_selenium/instances/sync/shadow_root.py +113 -0
  388. osn_selenium/instances/sync/storage.py +91 -0
  389. osn_selenium/instances/sync/switch_to.py +92 -0
  390. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  391. osn_selenium/instances/sync/web_element.py +179 -0
  392. osn_selenium/instances/sync/web_extension.py +77 -0
  393. osn_selenium/instances/trio_threads/__init__.py +1 -0
  394. osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  395. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  396. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  397. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  399. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  400. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  401. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  402. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  403. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  404. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  405. osn_selenium/instances/trio_threads/alert.py +87 -0
  406. osn_selenium/instances/trio_threads/browser.py +90 -0
  407. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  408. osn_selenium/instances/trio_threads/dialog.py +99 -0
  409. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  410. osn_selenium/instances/trio_threads/mobile.py +93 -0
  411. osn_selenium/instances/trio_threads/network.py +108 -0
  412. osn_selenium/instances/trio_threads/permissions.py +102 -0
  413. osn_selenium/instances/trio_threads/script.py +95 -0
  414. osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  415. osn_selenium/instances/trio_threads/storage.py +109 -0
  416. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  417. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  418. osn_selenium/instances/trio_threads/web_element.py +217 -0
  419. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  420. osn_selenium/instances/unified/__init__.py +1 -0
  421. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  422. osn_selenium/instances/unified/action_chains/base.py +31 -0
  423. osn_selenium/instances/unified/action_chains/click.py +27 -0
  424. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  425. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  426. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  427. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  428. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  429. osn_selenium/instances/unified/action_chains/move.py +24 -0
  430. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  431. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  432. osn_selenium/instances/unified/alert.py +29 -0
  433. osn_selenium/instances/unified/browser.py +33 -0
  434. osn_selenium/instances/unified/browsing_context.py +151 -0
  435. osn_selenium/instances/unified/dialog.py +42 -0
  436. osn_selenium/instances/unified/fedcm.py +48 -0
  437. osn_selenium/instances/unified/mobile.py +36 -0
  438. osn_selenium/instances/unified/network.py +50 -0
  439. osn_selenium/instances/unified/permissions.py +43 -0
  440. osn_selenium/instances/unified/script.py +38 -0
  441. osn_selenium/instances/unified/shadow_root.py +46 -0
  442. osn_selenium/instances/unified/storage.py +48 -0
  443. osn_selenium/instances/unified/switch_to.py +49 -0
  444. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  445. osn_selenium/instances/unified/web_element.py +145 -0
  446. osn_selenium/instances/unified/web_extension.py +38 -0
  447. osn_selenium/javascript/__init__.py +1 -0
  448. osn_selenium/javascript/_functions.py +63 -0
  449. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  450. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  451. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  452. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  453. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  454. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  455. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  456. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  457. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  458. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  459. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  460. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  461. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  462. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  463. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  464. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  465. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  466. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  467. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  468. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  469. osn_selenium/javascript/functions.py +44 -0
  470. osn_selenium/javascript/models.py +35 -0
  471. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  472. osn_selenium/models.py +94 -0
  473. osn_selenium/trio_threads_mixin.py +159 -0
  474. osn_selenium/webdrivers/_args_helpers.py +181 -0
  475. osn_selenium/webdrivers/_bridges.py +57 -0
  476. osn_selenium/webdrivers/_decorators.py +83 -0
  477. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  478. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  479. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  480. osn_selenium/webdrivers/_typehints.py +10 -0
  481. osn_selenium/webdrivers/protocols.py +50 -0
  482. osn_selenium/webdrivers/sync/__init__.py +1 -0
  483. osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  484. osn_selenium/webdrivers/sync/blink/base.py +140 -0
  485. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  486. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  487. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  488. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  489. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  490. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  491. osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  492. osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  493. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  494. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  495. osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  496. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  497. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  498. osn_selenium/webdrivers/sync/core/base.py +175 -0
  499. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  500. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  501. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  502. osn_selenium/webdrivers/sync/core/element.py +42 -0
  503. osn_selenium/webdrivers/sync/core/file.py +40 -0
  504. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  505. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  506. osn_selenium/webdrivers/sync/core/script.py +53 -0
  507. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  508. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  509. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  510. osn_selenium/webdrivers/sync/core/window.py +99 -0
  511. osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  512. osn_selenium/webdrivers/sync/edge/base.py +114 -0
  513. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  514. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  515. osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  516. osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  517. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  518. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  519. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  520. osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  521. osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  522. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  523. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  524. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  525. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  526. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  527. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  528. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  529. osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  530. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  531. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  532. osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  533. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  534. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  535. osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  536. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  537. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  538. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  539. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  540. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  541. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  542. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  543. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  544. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  545. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  546. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  547. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  548. osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  549. osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  550. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  551. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  552. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  553. osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  554. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  555. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  556. osn_selenium/webdrivers/unified/__init__.py +1 -0
  557. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  558. osn_selenium/webdrivers/unified/blink/base.py +135 -0
  559. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  560. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  561. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  562. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  563. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  564. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  565. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  566. osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  567. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  568. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  569. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  570. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  571. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  572. osn_selenium/webdrivers/unified/core/base.py +139 -0
  573. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  574. osn_selenium/webdrivers/unified/core/components.py +32 -0
  575. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  576. osn_selenium/webdrivers/unified/core/element.py +24 -0
  577. osn_selenium/webdrivers/unified/core/file.py +35 -0
  578. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  579. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  580. osn_selenium/webdrivers/unified/core/script.py +32 -0
  581. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  582. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  583. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  584. osn_selenium/webdrivers/unified/core/window.py +135 -0
  585. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  586. osn_selenium/webdrivers/unified/edge/base.py +56 -0
  587. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  588. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  589. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  590. osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  591. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  592. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  593. osn_selenium-1.1.0.dist-info/METADATA +252 -0
  594. osn_selenium-1.1.0.dist-info/RECORD +615 -0
  595. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
  596. osn_selenium/captcha_workers/__init__.py +0 -26
  597. osn_selenium/dev_tools/_types.py +0 -22
  598. osn_selenium/dev_tools/errors.py +0 -89
  599. osn_selenium/dev_tools/logger.py +0 -558
  600. osn_selenium/dev_tools/manager.py +0 -1551
  601. osn_selenium/dev_tools/utils.py +0 -509
  602. osn_selenium/errors.py +0 -16
  603. osn_selenium/types.py +0 -118
  604. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  605. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  606. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  607. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  608. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  609. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  610. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  611. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  612. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  613. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  614. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  615. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  616. osn_selenium/webdrivers/_functions.py +0 -504
  617. osn_selenium/webdrivers/types.py +0 -390
  618. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  619. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  620. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  621. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  622. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  623. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  624. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  628. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  629. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  630. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  631. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  632. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  633. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  634. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  635. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,24 +1,31 @@
1
1
  import trio
2
- from osn_selenium.dev_tools.utils import (
3
- TargetData,
4
- log_exception
5
- )
2
+ from datetime import datetime
3
+ from osn_selenium._base_models import DictModel
4
+ from osn_selenium.dev_tools._exception_helpers import log_exception
6
5
  from typing import (
7
6
  Any,
7
+ Dict,
8
+ List,
8
9
  Literal,
9
- Sequence,
10
10
  TYPE_CHECKING,
11
- TypedDict,
12
11
  Union
13
12
  )
14
13
 
15
14
 
15
+ __all__ = [
16
+ "HeaderInstance",
17
+ "auth_required_choose_func",
18
+ "headers_handler",
19
+ "on_error_func",
20
+ "request_paused_choose_func"
21
+ ]
22
+
16
23
  if TYPE_CHECKING:
17
- from osn_selenium.dev_tools.manager import DevToolsTarget
24
+ from osn_selenium.dev_tools.target import DevToolsTarget
18
25
  from osn_selenium.dev_tools.domains.fetch import request_paused_actions_literal, auth_required_actions_literal
19
26
 
20
27
 
21
- def request_paused_choose_func(self: "DevToolsTarget", event: Any) -> Sequence["request_paused_actions_literal"]:
28
+ def request_paused_choose_func(self: "DevToolsTarget", event: Any) -> List["request_paused_actions_literal"]:
22
29
  """
23
30
  Default function to choose actions for a 'fetch.RequestPaused' event.
24
31
 
@@ -27,11 +34,11 @@ def request_paused_choose_func(self: "DevToolsTarget", event: Any) -> Sequence["
27
34
  deciding which actions to take based on the event details.
28
35
 
29
36
  Args:
30
- self (DevToolsTarget): The DevToolsTarget instance.
37
+ self ("DevToolsTarget"): The DevToolsTarget instance.
31
38
  event (Any): The 'RequestPaused' event object.
32
39
 
33
40
  Returns:
34
- Sequence[request_paused_actions_literal]: A sequence of action names to be executed.
41
+ List[request_paused_actions_literal]: A list of action names to be executed.
35
42
  """
36
43
 
37
44
  return ["continue_request"]
@@ -45,15 +52,22 @@ def on_error_func(self: "DevToolsTarget", event: Any, error: BaseException):
45
52
  Users can provide their own function to implement custom error handling logic.
46
53
 
47
54
  Args:
48
- self (DevToolsTarget): The DevToolsTarget instance.
55
+ self ("DevToolsTarget"): The DevToolsTarget instance.
49
56
  event (Any): The event object that was being processed when the error occurred.
50
57
  error (BaseException): The exception that was raised.
51
58
  """
52
59
 
53
- log_exception(error)
60
+ log_exception(
61
+ exception=error,
62
+ extra_data={
63
+ "datetime": datetime.now(),
64
+ "target object data": self.target_data.model_dump(),
65
+ "event": event
66
+ }
67
+ )
54
68
 
55
69
 
56
- class HeaderInstance(TypedDict):
70
+ class HeaderInstance(DictModel):
57
71
  """
58
72
  Type definition for header modification instructions used by the `headers_handler`.
59
73
 
@@ -76,9 +90,9 @@ class HeaderInstance(TypedDict):
76
90
  async def headers_handler(
77
91
  self: "DevToolsTarget",
78
92
  ready_event: trio.Event,
79
- headers_instances: dict[str, HeaderInstance],
93
+ headers_instances: Dict[str, HeaderInstance],
80
94
  event: Any,
81
- kwargs: dict[str, Any]
95
+ kwargs: Dict[str, Any]
82
96
  ):
83
97
  """
84
98
  A parameter handler function to modify request headers.
@@ -89,24 +103,24 @@ async def headers_handler(
89
103
  like `fetch.continueRequest`.
90
104
 
91
105
  Args:
92
- self (DevToolsTarget): The DevToolsTarget instance.
106
+ self ("DevToolsTarget"): The DevToolsTarget instance.
93
107
  ready_event (trio.Event): A Trio event to signal when the handler has completed its work.
94
- headers_instances (dict[str, HeaderInstance]): A dictionary where keys are header names
108
+ headers_instances (Dict[str, HeaderInstance]): A dictionary where keys are header names
95
109
  and values are `HeaderInstance` objects defining the modification.
96
110
  event (Any): The CDP event object (e.g., `RequestPaused`) containing the original request headers.
97
- kwargs (dict[str, Any]): The dictionary of keyword arguments to which the modified headers will be added.
111
+ kwargs (Dict[str, Any]): The dictionary of keyword arguments to which the modified headers will be added.
98
112
 
99
113
  Raises:
100
114
  Exception: If an error occurs during header modification.
101
115
  """
102
116
 
103
117
  try:
104
- header_entry_class = await self.get_devtools_object("fetch.HeaderEntry")
118
+ header_entry_class = self.devtools_package.get("fetch.HeaderEntry")
105
119
  headers = {name: value for name, value in event.request.headers.items()}
106
120
 
107
121
  for name, instance in headers_instances.items():
108
- value = instance["value"]
109
- instruction = instance["instruction"]
122
+ value = instance.value
123
+ instruction = instance.instruction
110
124
 
111
125
  if instruction == "set":
112
126
  headers[name] = value
@@ -119,8 +133,7 @@ async def headers_handler(
119
133
  continue
120
134
 
121
135
  if instruction == "remove":
122
- if name in headers:
123
- headers.pop(name)
136
+ headers.pop(name, None)
124
137
 
125
138
  continue
126
139
 
@@ -131,11 +144,11 @@ async def headers_handler(
131
144
 
132
145
  ready_event.set()
133
146
  except BaseException as error:
134
- await self.log_error(error=error)
147
+ await self.log_cdp_error(error=error)
135
148
  raise error
136
149
 
137
150
 
138
- def auth_required_choose_func(self: "DevToolsTarget", target_data: TargetData, event: Any) -> Sequence["auth_required_actions_literal"]:
151
+ def auth_required_choose_func(self: "DevToolsTarget", event: Any) -> List["auth_required_actions_literal"]:
139
152
  """
140
153
  Default function to choose actions for a 'fetch.AuthRequired' event.
141
154
 
@@ -144,12 +157,11 @@ def auth_required_choose_func(self: "DevToolsTarget", target_data: TargetData, e
144
157
  deciding which actions to take based on the event details.
145
158
 
146
159
  Args:
147
- self (DevToolsTarget): The DevToolsTarget instance.
148
- target_data (TargetData): Data about the current browser target.
160
+ self ("DevToolsTarget"): The DevToolsTarget instance.
149
161
  event (Any): The 'AuthRequired' event object.
150
162
 
151
163
  Returns:
152
- Sequence[auth_required_actions_literal]: A sequence of action names to be executed.
164
+ List[auth_required_actions_literal]: A list of action names to be executed.
153
165
  """
154
166
 
155
167
  return ["continue_with_auth"]
@@ -0,0 +1,40 @@
1
+ from pydantic import Field
2
+ from typing import List, Optional
3
+ from osn_selenium._base_models import DictModel
4
+
5
+
6
+ __all__ = ["TargetFilter", "TargetsFilters"]
7
+
8
+
9
+ class TargetsFilters(DictModel):
10
+ """
11
+ Configuration model for filtering target types (inclusion/exclusion).
12
+
13
+ Attributes:
14
+ excluded (List[str]): List of target types to exclude.
15
+ included (List[str]): List of target types to include.
16
+ entire (bool): Default behavior if a type is not explicitly listed.
17
+ """
18
+
19
+ excluded: List[str] = Field(default_factory=list)
20
+ included: List[str] = Field(default_factory=list)
21
+
22
+ entire: bool = False
23
+
24
+
25
+ class TargetFilter(DictModel):
26
+ """
27
+ Dataclass to define a filter for discovering new browser targets.
28
+
29
+ Used in `DevToolsSettings` to specify which types of targets (e.g., "page", "iframe")
30
+ should be automatically attached to or excluded.
31
+
32
+ Attributes:
33
+ type_ (Optional[str]): The type of target to filter by (e.g., "page", "iframe").
34
+ If None, this filter applies regardless of type. Aliased as 'type'.
35
+ exclude (Optional[bool]): If True, targets matching `type_` will be excluded.
36
+ If False or None, targets matching `type_` will be included.
37
+ """
38
+
39
+ type_: Optional[str] = Field(default=None, alias="type")
40
+ exclude: Optional[bool] = None
@@ -0,0 +1,214 @@
1
+ import trio
2
+ from typing import (
3
+ Optional,
4
+ TYPE_CHECKING,
5
+ Tuple
6
+ )
7
+ from osn_selenium.exceptions.devtools import TrioEndExceptions
8
+ from osn_selenium.dev_tools._exception_helpers import log_exception
9
+ from osn_selenium.exceptions.configuration import ConfigurationError
10
+ from osn_selenium.dev_tools.logger.models import (
11
+ CDPMainLogEntry,
12
+ FingerprintMainLogEntry
13
+ )
14
+
15
+
16
+ __all__ = ["MainLogger", "build_main_logger"]
17
+
18
+ if TYPE_CHECKING:
19
+ from osn_selenium.dev_tools.settings import LoggerSettings
20
+
21
+
22
+ class MainLogger:
23
+ """
24
+ Manages the main log file, summarizing overall logging activity.
25
+
26
+ This logger is responsible for writing aggregated statistics about all active
27
+ logging channels and target types to a designated file.
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ logger_settings: "LoggerSettings",
33
+ nursery_object: trio.Nursery,
34
+ cdp_receive_channel: Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]],
35
+ fingerprint_receive_channel: Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]
36
+ ):
37
+ """
38
+ Initializes the MainLogger.
39
+
40
+ Args:
41
+ logger_settings ("LoggerSettings"): The settings for logging, including log directory.
42
+ nursery_object (trio.Nursery): The Trio nursery to spawn background tasks.
43
+ cdp_receive_channel (Optional[trio.MemoryReceiveChannel[CDPMainLogEntry]]):
44
+ The channel from which CDP main log entries are received.
45
+ fingerprint_receive_channel (Optional[trio.MemoryReceiveChannel[FingerprintMainLogEntry]]):
46
+ The channel from which fingerprint main log entries are received.
47
+
48
+ Raises:
49
+ ValueError: If settings require logging but `dir_path` is not set.
50
+ """
51
+
52
+ self._nursery_object = nursery_object
53
+ self._cdp_receive_channel = cdp_receive_channel
54
+ self._fingerprint_receive_channel = fingerprint_receive_channel
55
+ self._cdp_file_path = None
56
+ self._cdp_log_level_filter = None
57
+ self._cdp_target_type_filter = None
58
+ self._fingerprint_file_path = None
59
+ self._fingerprint_log_level_filter = None
60
+ self._fingerprint_target_type_filter = None
61
+
62
+ if logger_settings.dir_path is None:
63
+ if logger_settings.cdp_settings:
64
+ raise ConfigurationError("Can't log CDP without LoggerSettings.dir_path!")
65
+
66
+ if logger_settings.fingerprint_settings:
67
+ raise ConfigurationError("Can't log Fingerprint without LoggerSettings.dir_path!")
68
+ else:
69
+ logdir_path = logger_settings.dir_path.joinpath("__MAIN__")
70
+ logdir_path.mkdir(exist_ok=True)
71
+
72
+ if logger_settings.cdp_settings:
73
+ self._cdp_file_path = logdir_path.joinpath(f"cdp_log.txt")
74
+
75
+ if logger_settings.fingerprint_settings:
76
+ self._fingerprint_file_path = logdir_path.joinpath(f"fingerprint_log.txt")
77
+
78
+ self._cdp_file_writing_stopped: Optional[trio.Event] = None
79
+ self._fingerprint_file_writing_stopped: Optional[trio.Event] = None
80
+ self._is_active = False
81
+
82
+ async def close(self):
83
+ """
84
+ Closes the main logger, including its receive channels and stops writing tasks.
85
+ """
86
+
87
+ if self._cdp_receive_channel is not None:
88
+ await self._cdp_receive_channel.aclose()
89
+ self._cdp_receive_channel = None
90
+
91
+ if self._cdp_file_writing_stopped is not None:
92
+ await self._cdp_file_writing_stopped.wait()
93
+ self._cdp_file_writing_stopped = None
94
+
95
+ if self._fingerprint_receive_channel is not None:
96
+ await self._fingerprint_receive_channel.aclose()
97
+ self._fingerprint_receive_channel = None
98
+
99
+ if self._fingerprint_file_writing_stopped is not None:
100
+ await self._fingerprint_file_writing_stopped.wait()
101
+ self._fingerprint_file_writing_stopped = None
102
+
103
+ self._is_active = False
104
+
105
+ async def _write_fingerprint_file(self):
106
+ """
107
+ Asynchronously writes fingerprint main log entries to the file.
108
+
109
+ This method continuously receives `FingerprintMainLogEntry` objects and
110
+ updates the log file.
111
+ """
112
+
113
+ try:
114
+ async with await trio.open_file(self._fingerprint_file_path, "w+", encoding="utf-8") as file:
115
+ async for log_entry in self._fingerprint_receive_channel:
116
+ await file.seek(0)
117
+ await file.write(log_entry.model_dump_json(indent=4))
118
+ await file.truncate()
119
+ await file.flush()
120
+ except* TrioEndExceptions:
121
+ pass
122
+ except* BaseException as error:
123
+ log_exception(error)
124
+ finally:
125
+ if self._fingerprint_file_writing_stopped is not None:
126
+ self._fingerprint_file_writing_stopped.set()
127
+
128
+ async def _write_cdp_file(self):
129
+ """
130
+ Asynchronously writes CDP main log entries to the file.
131
+
132
+ This method continuously receives `CDPMainLogEntry` objects from its channel
133
+ and overwrites the configured file with their string representation.
134
+ It runs as a background task.
135
+ """
136
+
137
+ try:
138
+ async with await trio.open_file(self._cdp_file_path, "w+", encoding="utf-8") as file:
139
+ async for log_entry in self._cdp_receive_channel:
140
+ await file.seek(0)
141
+ await file.write(log_entry.model_dump_json(indent=4))
142
+ await file.truncate()
143
+ await file.flush()
144
+ except* TrioEndExceptions:
145
+ pass
146
+ except* BaseException as error:
147
+ log_exception(error)
148
+ finally:
149
+ if self._cdp_file_writing_stopped is not None:
150
+ self._cdp_file_writing_stopped.set()
151
+
152
+ async def run(self):
153
+ """
154
+ Starts the main logger, setting up its receive channel and file writing task.
155
+
156
+ Raises:
157
+ BaseException: If an error occurs during setup or if the logger fails to activate.
158
+ """
159
+
160
+ try:
161
+ if not self._is_active:
162
+ self._cdp_file_writing_stopped = trio.Event()
163
+
164
+ if self._cdp_file_path is not None:
165
+ self._nursery_object.start_soon(self._write_cdp_file)
166
+
167
+ self._fingerprint_file_writing_stopped = trio.Event()
168
+
169
+ if self._fingerprint_file_path is not None:
170
+ self._nursery_object.start_soon(self._write_fingerprint_file)
171
+
172
+ self._is_active = True
173
+ except* TrioEndExceptions:
174
+ await self.close()
175
+ except* BaseException as error:
176
+ log_exception(error)
177
+ await self.close()
178
+
179
+
180
+ def build_main_logger(nursery_object: trio.Nursery, logger_settings: "LoggerSettings") -> Tuple[
181
+ Optional[trio.MemorySendChannel[CDPMainLogEntry]],
182
+ Optional[trio.MemorySendChannel[FingerprintMainLogEntry]],
183
+ MainLogger
184
+ ]:
185
+ """
186
+ Builds and initializes a `MainLogger` instance along with its send channels.
187
+
188
+ Args:
189
+ nursery_object (trio.Nursery): The Trio nursery to associate with the logger for background tasks.
190
+ logger_settings ("LoggerSettings"): The logger configuration settings.
191
+
192
+ Returns:
193
+ Tuple[Optional[trio.MemorySendChannel[CDPMainLogEntry]], Optional[trio.MemorySendChannel[FingerprintMainLogEntry]], MainLogger]:
194
+ A tuple containing the send channels for logs and the initialized `MainLogger` instance.
195
+ """
196
+
197
+ if logger_settings.cdp_settings is not None:
198
+ cdp_send, cdp_recv = trio.open_memory_channel(logger_settings.cdp_settings.buffer_size)
199
+ else:
200
+ cdp_send, cdp_recv = None, None
201
+
202
+ if logger_settings.fingerprint_settings is not None:
203
+ fp_send, fp_recv = trio.open_memory_channel(logger_settings.fingerprint_settings.buffer_size)
204
+ else:
205
+ fp_send, fp_recv = None, None
206
+
207
+ target_logger = MainLogger(
208
+ logger_settings=logger_settings,
209
+ nursery_object=nursery_object,
210
+ cdp_receive_channel=cdp_recv,
211
+ fingerprint_receive_channel=fp_recv,
212
+ )
213
+
214
+ return cdp_send, fp_send, target_logger
@@ -0,0 +1,232 @@
1
+ from pydantic import Field
2
+ from datetime import datetime
3
+ from osn_selenium._base_models import DictModel
4
+ from osn_selenium.dev_tools.models import TargetData
5
+ from typing import (
6
+ Any,
7
+ Dict,
8
+ Optional,
9
+ Sequence
10
+ )
11
+ from osn_selenium.dev_tools._typehints import (
12
+ CDP_LOG_LEVELS_TYPEHINT,
13
+ FINGERPRINT_LOG_LEVELS_TYPEHINT
14
+ )
15
+
16
+
17
+ __all__ = [
18
+ "CDPLogLevelStats",
19
+ "CDPLoggerChannelStats",
20
+ "CDPMainLogEntry",
21
+ "CDPTargetLogEntry",
22
+ "CDPTargetTypeStats",
23
+ "FingerprintAPIStats",
24
+ "FingerprintLogLevelStats",
25
+ "FingerprintLoggerChannelStats",
26
+ "FingerprintMainLogEntry",
27
+ "FingerprintTargetLogEntry"
28
+ ]
29
+
30
+
31
+ class FingerprintLogLevelStats(DictModel):
32
+ """
33
+ Statistics for a specific fingerprint log level.
34
+
35
+ Attributes:
36
+ num_logs (int): Number of logs recorded.
37
+ last_log_time (datetime): Timestamp of the last log.
38
+ """
39
+
40
+ num_logs: int
41
+ last_log_time: datetime
42
+
43
+
44
+ class FingerprintTargetLogEntry(DictModel):
45
+ """
46
+ A single log entry for fingerprint detection events.
47
+
48
+ Attributes:
49
+ target_data (TargetData): Information about the target.
50
+ level (FingerprintLogLevelsType): The log level (e.g., "Detect").
51
+ api (str): The API involved in the fingerprinting.
52
+ used_method (str): The method called.
53
+ datetime (datetime): When the event occurred.
54
+ stacktrace (Optional[str]): Stack trace of the event.
55
+ """
56
+
57
+ target_data: TargetData
58
+ level: FINGERPRINT_LOG_LEVELS_TYPEHINT
59
+ api: str
60
+ used_method: str
61
+ datetime: datetime
62
+ stacktrace: Optional[str]
63
+
64
+
65
+ class FingerprintLoggerChannelStats(DictModel):
66
+ """
67
+ Statistics for a fingerprint logging channel.
68
+
69
+ Attributes:
70
+ target_id (str): ID of the target.
71
+ title (str): Title of the target.
72
+ url (str): URL of the target.
73
+ num_logs (int): Total logs for this channel.
74
+ last_log_time (datetime): Time of the last log.
75
+ log_level_stats (Dict[str, FingerprintLogLevelStats]): Stats per log level.
76
+ """
77
+
78
+ target_id: str
79
+ title: str
80
+ url: str
81
+ num_logs: int = 0
82
+ last_log_time: datetime = Field(default_factory=datetime.now)
83
+ log_level_stats: Dict[str, FingerprintLogLevelStats] = Field(default_factory=dict)
84
+
85
+ async def add_log(self, log_entry: FingerprintTargetLogEntry):
86
+ """
87
+ Updates the channel statistics based on a new log entry.
88
+
89
+ Args:
90
+ log_entry (FingerprintTargetLogEntry): The new log entry to incorporate into the statistics.
91
+ """
92
+
93
+ self.num_logs += 1
94
+ self.last_log_time = log_entry.datetime
95
+
96
+ if log_entry.level not in self.log_level_stats:
97
+ self.log_level_stats[log_entry.level] = FingerprintLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
98
+ else:
99
+ self.log_level_stats[log_entry.level].num_logs += 1
100
+ self.log_level_stats[log_entry.level].last_log_time = log_entry.datetime
101
+
102
+
103
+ class FingerprintAPIStats(DictModel):
104
+ """
105
+ Statistics for a specific Fingerprint API.
106
+
107
+ Attributes:
108
+ num_logs (int): Number of targets accessing this API.
109
+ methods_stats (Dict[str, int]): Count of calls per method.
110
+ """
111
+
112
+ num_logs: int
113
+ methods_stats: Dict[str, int]
114
+
115
+
116
+ class FingerprintMainLogEntry(DictModel):
117
+ """
118
+ Summary log entry for all fingerprinting activity.
119
+
120
+ Attributes:
121
+ num_channels (int): Total active channels.
122
+ apis_stats (Dict[str, FingerprintAPIStats]): Stats per API.
123
+ num_logs (int): Total logs recorded.
124
+ log_level_stats (Dict[str, FingerprintLogLevelStats]): Stats per log level.
125
+ channels_stats (Sequence[FingerprintLoggerChannelStats]): Stats for each channel.
126
+ """
127
+
128
+ num_channels: int
129
+ apis_stats: Dict[str, FingerprintAPIStats]
130
+ num_logs: int
131
+ log_level_stats: Dict[str, FingerprintLogLevelStats]
132
+ channels_stats: Sequence[FingerprintLoggerChannelStats]
133
+
134
+
135
+ class CDPLogLevelStats(DictModel):
136
+ """
137
+ Dataclass to store statistics for a specific log level.
138
+
139
+ Attributes:
140
+ num_logs (int): The total number of logs recorded for this level.
141
+ last_log_time (datetime): The timestamp of the most recent log entry for this level.
142
+ """
143
+
144
+ num_logs: int
145
+ last_log_time: datetime
146
+
147
+
148
+ class CDPTargetLogEntry(DictModel):
149
+ """
150
+ Represents a single log entry with detailed information.
151
+
152
+ Attributes:
153
+ target_data (TargetData): Data about the target (browser tab/session) from which the log originated.
154
+ message (str): The main log message.
155
+ level (CDPLogLevelsType): The severity level of the log (e.g., "INFO", "ERROR").
156
+ datetime (datetime): The exact time when the log entry was created.
157
+ extra_data (Optional[Dict[str, Any]]): Optional additional data associated with the log.
158
+ """
159
+
160
+ target_data: TargetData
161
+ message: str
162
+ level: CDP_LOG_LEVELS_TYPEHINT
163
+ datetime: datetime
164
+ extra_data: Optional[Dict[str, Any]] = None
165
+
166
+
167
+ class CDPLoggerChannelStats(DictModel):
168
+ """
169
+ Dataclass to store statistics for a specific logging channel (per target).
170
+
171
+ Attributes:
172
+ target_id (str): The unique ID of the target associated with this channel.
173
+ title (str): The title of the target (e.g., page title).
174
+ url (str): The URL of the target.
175
+ num_logs (int): The total number of log entries for this channel.
176
+ last_log_time (datetime): The timestamp of the most recent log entry for this channel.
177
+ log_level_stats (Dict[str, CDPLogLevelStats]): A dictionary mapping log levels to their specific statistics.
178
+ """
179
+
180
+ target_id: str
181
+ title: str
182
+ url: str
183
+ num_logs: int = 0
184
+ last_log_time: datetime = Field(default_factory=datetime.now)
185
+ log_level_stats: Dict[str, CDPLogLevelStats] = Field(default_factory=dict)
186
+
187
+ async def add_log(self, log_entry: CDPTargetLogEntry):
188
+ """
189
+ Updates the channel statistics based on a new log entry.
190
+
191
+ Args:
192
+ log_entry (CDPTargetLogEntry): The new log entry to incorporate into the statistics.
193
+ """
194
+
195
+ self.num_logs += 1
196
+ self.last_log_time = log_entry.datetime
197
+
198
+ if log_entry.level not in self.log_level_stats:
199
+ self.log_level_stats[log_entry.level] = CDPLogLevelStats(num_logs=1, last_log_time=log_entry.datetime)
200
+ else:
201
+ self.log_level_stats[log_entry.level].num_logs += 1
202
+ self.log_level_stats[log_entry.level].last_log_time = log_entry.datetime
203
+
204
+
205
+ class CDPTargetTypeStats(DictModel):
206
+ """
207
+ Dataclass to store statistics for a specific target type.
208
+
209
+ Attributes:
210
+ num_targets (int): The count of targets of this type.
211
+ """
212
+
213
+ num_targets: int
214
+
215
+
216
+ class CDPMainLogEntry(DictModel):
217
+ """
218
+ Represents a summary log entry for the entire logging system.
219
+
220
+ Attributes:
221
+ num_channels (int): The total number of active logging channels (targets).
222
+ targets_types_stats (Dict[str, CDPTargetTypeStats]): Statistics grouped by target type.
223
+ num_logs (int): The total number of log entries across all channels.
224
+ log_level_stats (Dict[str, CDPLogLevelStats]): Overall statistics for each log level.
225
+ channels_stats (Sequence[CDPLoggerChannelStats]): A List of statistics for each active logging channel.
226
+ """
227
+
228
+ num_channels: int
229
+ targets_types_stats: Dict[str, CDPTargetTypeStats]
230
+ num_logs: int
231
+ log_level_stats: Dict[str, CDPLogLevelStats]
232
+ channels_stats: Sequence[CDPLoggerChannelStats]