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.
- osn_selenium/_base_models.py +41 -0
- osn_selenium/_cdp_import.py +253 -0
- osn_selenium/_decorators.py +57 -0
- osn_selenium/_trio_threads_helpers.py +157 -0
- osn_selenium/_typehints.py +1 -1
- osn_selenium/abstract/executors/cdp.py +63 -0
- osn_selenium/abstract/webdriver/blink/base.py +14 -0
- osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/base.py +0 -14
- osn_selenium/abstract/webdriver/core/capture.py +4 -3
- osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
- osn_selenium/abstract/webdriver/core/script.py +5 -4
- osn_selenium/abstract/webdriver/core/window.py +11 -11
- osn_selenium/browsers_handler/models.py +1 -1
- osn_selenium/dev_tools/_decorators.py +19 -51
- osn_selenium/dev_tools/_functions.py +2 -4
- osn_selenium/dev_tools/_typehints.py +5 -2
- osn_selenium/dev_tools/_wrappers.py +0 -3
- osn_selenium/dev_tools/domains/__init__.py +2 -2
- osn_selenium/dev_tools/domains/abstract.py +1 -1
- osn_selenium/dev_tools/domains/fetch.py +6 -8
- osn_selenium/dev_tools/domains_default/fetch.py +2 -2
- osn_selenium/dev_tools/filters.py +1 -1
- osn_selenium/dev_tools/logger/main.py +9 -21
- osn_selenium/dev_tools/logger/models.py +1 -1
- osn_selenium/dev_tools/logger/target.py +49 -29
- osn_selenium/dev_tools/manager/base.py +10 -42
- osn_selenium/dev_tools/manager/lifecycle.py +84 -75
- osn_selenium/dev_tools/manager/logging.py +1 -1
- osn_selenium/dev_tools/manager/targets.py +13 -5
- osn_selenium/dev_tools/models.py +1 -1
- osn_selenium/dev_tools/settings.py +9 -5
- osn_selenium/dev_tools/target/base.py +30 -34
- osn_selenium/dev_tools/target/discovery.py +1 -1
- osn_selenium/dev_tools/target/events.py +2 -2
- osn_selenium/dev_tools/target/fingerprint.py +1 -1
- osn_selenium/dev_tools/target/lifecycle.py +103 -38
- osn_selenium/dev_tools/target/logging.py +11 -3
- osn_selenium/exceptions/__init__.py +0 -1
- osn_selenium/exceptions/base.py +28 -1
- osn_selenium/exceptions/bidi_bridge.py +59 -0
- osn_selenium/exceptions/configuration.py +1 -8
- osn_selenium/exceptions/dependencies.py +60 -0
- osn_selenium/exceptions/devtools.py +9 -39
- osn_selenium/exceptions/experimental.py +26 -0
- osn_selenium/exceptions/flags.py +0 -2
- osn_selenium/exceptions/instance.py +1 -9
- osn_selenium/exceptions/javascript.py +0 -2
- osn_selenium/exceptions/logic.py +0 -2
- osn_selenium/exceptions/path.py +1 -9
- osn_selenium/exceptions/platform.py +0 -2
- osn_selenium/exceptions/protocol.py +0 -3
- osn_selenium/exceptions/webdriver.py +1 -7
- osn_selenium/exceptions/window.py +1 -8
- osn_selenium/executors/sync/cdp.py +95 -0
- osn_selenium/executors/trio_bidi/cdp.py +101 -0
- osn_selenium/executors/trio_bidi/javascript.py +101 -0
- osn_selenium/executors/trio_threads/cdp.py +99 -0
- osn_selenium/executors/trio_threads/javascript.py +1 -1
- osn_selenium/executors/unified/javascript.py +0 -4
- osn_selenium/flags/base.py +7 -13
- osn_selenium/flags/blink.py +2 -8
- osn_selenium/flags/chrome.py +6 -6
- osn_selenium/flags/edge.py +6 -6
- osn_selenium/flags/models/base.py +4 -4
- osn_selenium/flags/models/blink.py +1 -1
- osn_selenium/flags/models/values.py +1 -1
- osn_selenium/instances/convert.py +44 -3
- osn_selenium/instances/protocols.py +47 -1
- osn_selenium/instances/sync/action_chains/__init__.py +6 -0
- osn_selenium/instances/sync/browsing_context.py +2 -2
- osn_selenium/instances/sync/script.py +7 -2
- osn_selenium/instances/sync/shadow_root.py +30 -8
- osn_selenium/instances/sync/web_element.py +1 -1
- osn_selenium/instances/trio_bidi/__init__.py +1 -0
- osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
- osn_selenium/instances/trio_bidi/switch_to.py +143 -0
- osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
- osn_selenium/instances/trio_bidi/web_element.py +239 -0
- osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
- osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
- osn_selenium/instances/trio_threads/alert.py +1 -1
- osn_selenium/instances/trio_threads/browser.py +1 -1
- osn_selenium/instances/trio_threads/browsing_context.py +3 -3
- osn_selenium/instances/trio_threads/dialog.py +1 -1
- osn_selenium/instances/trio_threads/fedcm.py +1 -1
- osn_selenium/instances/trio_threads/mobile.py +1 -1
- osn_selenium/instances/trio_threads/network.py +1 -1
- osn_selenium/instances/trio_threads/permissions.py +1 -1
- osn_selenium/instances/trio_threads/script.py +8 -3
- osn_selenium/instances/trio_threads/shadow_root.py +46 -15
- osn_selenium/instances/trio_threads/storage.py +1 -1
- osn_selenium/instances/trio_threads/switch_to.py +1 -1
- osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
- osn_selenium/instances/trio_threads/web_element.py +1 -1
- osn_selenium/instances/trio_threads/web_extension.py +1 -1
- osn_selenium/instances/unified/browsing_context.py +2 -2
- osn_selenium/instances/unified/script.py +2 -2
- osn_selenium/instances/unified/web_element.py +3 -5
- osn_selenium/javascript/fingerprint/__init__.py +3 -2
- osn_selenium/javascript/fingerprint/registry/models.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
- osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
- osn_selenium/javascript/models.py +1 -1
- osn_selenium/models.py +2 -47
- osn_selenium/trio_bidi/__init__.py +1 -0
- osn_selenium/trio_bidi/_context_vars.py +12 -0
- osn_selenium/trio_bidi/_error_mappings.py +123 -0
- osn_selenium/trio_bidi/_error_redirects.py +194 -0
- osn_selenium/trio_bidi/_file_functions.py +28 -0
- osn_selenium/trio_bidi/_internal_mappings.py +10 -0
- osn_selenium/trio_bidi/_models.py +199 -0
- osn_selenium/trio_bidi/_typehints.py +20 -0
- osn_selenium/trio_bidi/connection_pool.py +587 -0
- osn_selenium/trio_bidi/mapping/__init__.py +1 -0
- osn_selenium/trio_bidi/mapping/_constants.py +14 -0
- osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
- osn_selenium/trio_bidi/mapping/_utils.py +4 -0
- osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
- osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
- osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
- osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
- osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
- osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
- osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
- osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
- osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
- osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
- osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
- osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
- osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
- osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
- osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
- osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
- osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
- osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
- osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
- osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
- osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
- osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
- osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
- osn_selenium/trio_bidi/mixin.py +186 -0
- osn_selenium/trio_bidi/remote_connection.py +164 -0
- osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
- osn_selenium/webdrivers/_args_helpers.py +120 -7
- osn_selenium/webdrivers/_bridges.py +2 -2
- osn_selenium/webdrivers/_executable_tables/models.py +1 -1
- osn_selenium/webdrivers/_typehints.py +9 -3
- osn_selenium/webdrivers/protocols.py +81 -1
- osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
- osn_selenium/webdrivers/sync/blink/base.py +23 -1
- osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
- osn_selenium/webdrivers/sync/chrome/base.py +13 -1
- osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
- osn_selenium/webdrivers/sync/core/__init__.py +10 -1
- osn_selenium/webdrivers/sync/core/base.py +18 -18
- osn_selenium/webdrivers/sync/core/capture.py +3 -2
- osn_selenium/webdrivers/sync/core/file.py +3 -2
- osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
- osn_selenium/webdrivers/sync/core/script.py +3 -2
- osn_selenium/webdrivers/sync/core/window.py +3 -3
- osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
- osn_selenium/webdrivers/sync/edge/base.py +13 -1
- osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/edge/settings.py +6 -1
- osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
- osn_selenium/webdrivers/sync/yandex/base.py +13 -1
- osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
- osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
- osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
- osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
- osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
- osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
- osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
- osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
- osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
- osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
- osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
- osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
- osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
- osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
- osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
- osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
- osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
- osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
- osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
- osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
- osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
- osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
- osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
- osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
- osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
- osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
- osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
- osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
- osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
- osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
- osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
- osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
- osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
- osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
- osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
- osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
- osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
- osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
- osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
- osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
- osn_selenium/webdrivers/unified/blink/base.py +9 -1
- osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
- osn_selenium/webdrivers/unified/chrome/base.py +9 -1
- osn_selenium/webdrivers/unified/core/auth.py +4 -2
- osn_selenium/webdrivers/unified/core/base.py +19 -6
- osn_selenium/webdrivers/unified/core/capture.py +3 -2
- osn_selenium/webdrivers/unified/core/components.py +12 -7
- osn_selenium/webdrivers/unified/core/devtools.py +2 -1
- osn_selenium/webdrivers/unified/core/file.py +3 -2
- osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
- osn_selenium/webdrivers/unified/core/script.py +5 -3
- osn_selenium/webdrivers/unified/core/storage.py +2 -1
- osn_selenium/webdrivers/unified/core/window.py +9 -8
- osn_selenium/webdrivers/unified/edge/base.py +9 -1
- osn_selenium/webdrivers/unified/yandex/base.py +9 -1
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
- osn_selenium-1.2.0.dist-info/RECORD +480 -0
- {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
- osn_selenium/abstract/executors/cdp/__init__.py +0 -435
- osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
- osn_selenium/abstract/executors/cdp/animation.py +0 -47
- osn_selenium/abstract/executors/cdp/audits.py +0 -39
- osn_selenium/abstract/executors/cdp/autofill.py +0 -34
- osn_selenium/abstract/executors/cdp/background_service.py +0 -22
- osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
- osn_selenium/abstract/executors/cdp/browser.py +0 -122
- osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
- osn_selenium/abstract/executors/cdp/cast.py +0 -31
- osn_selenium/abstract/executors/cdp/console.py +0 -18
- osn_selenium/abstract/executors/cdp/css.py +0 -197
- osn_selenium/abstract/executors/cdp/debugger.py +0 -198
- osn_selenium/abstract/executors/cdp/device_access.py +0 -22
- osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
- osn_selenium/abstract/executors/cdp/dom.py +0 -305
- osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
- osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
- osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
- osn_selenium/abstract/executors/cdp/emulation.py +0 -259
- osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
- osn_selenium/abstract/executors/cdp/extensions.py +0 -31
- osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
- osn_selenium/abstract/executors/cdp/fetch.py +0 -76
- osn_selenium/abstract/executors/cdp/file_system.py +0 -11
- osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
- osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
- osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
- osn_selenium/abstract/executors/cdp/input.py +0 -158
- osn_selenium/abstract/executors/cdp/inspector.py +0 -14
- osn_selenium/abstract/executors/cdp/io.py +0 -24
- osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
- osn_selenium/abstract/executors/cdp/log.py +0 -27
- osn_selenium/abstract/executors/cdp/media.py +0 -14
- osn_selenium/abstract/executors/cdp/memory.py +0 -61
- osn_selenium/abstract/executors/cdp/network.py +0 -252
- osn_selenium/abstract/executors/cdp/overlay.py +0 -166
- osn_selenium/abstract/executors/cdp/page.py +0 -347
- osn_selenium/abstract/executors/cdp/performance.py +0 -28
- osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
- osn_selenium/abstract/executors/cdp/preload.py +0 -14
- osn_selenium/abstract/executors/cdp/profiler.py +0 -54
- osn_selenium/abstract/executors/cdp/pwa.py +0 -46
- osn_selenium/abstract/executors/cdp/runtime.py +0 -176
- osn_selenium/abstract/executors/cdp/schema.py +0 -11
- osn_selenium/abstract/executors/cdp/security.py +0 -26
- osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
- osn_selenium/abstract/executors/cdp/storage.py +0 -175
- osn_selenium/abstract/executors/cdp/system_info.py +0 -24
- osn_selenium/abstract/executors/cdp/target.py +0 -125
- osn_selenium/abstract/executors/cdp/tethering.py +0 -14
- osn_selenium/abstract/executors/cdp/tracing.py +0 -48
- osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
- osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
- osn_selenium/executors/sync/cdp/__init__.py +0 -550
- osn_selenium/executors/sync/cdp/accessibility.py +0 -74
- osn_selenium/executors/sync/cdp/animation.py +0 -50
- osn_selenium/executors/sync/cdp/audits.py +0 -48
- osn_selenium/executors/sync/cdp/autofill.py +0 -39
- osn_selenium/executors/sync/cdp/background_service.py +0 -30
- osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
- osn_selenium/executors/sync/cdp/browser.py +0 -131
- osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
- osn_selenium/executors/sync/cdp/cast.py +0 -38
- osn_selenium/executors/sync/cdp/console.py +0 -24
- osn_selenium/executors/sync/cdp/css.py +0 -187
- osn_selenium/executors/sync/cdp/debugger.py +0 -206
- osn_selenium/executors/sync/cdp/device_access.py +0 -27
- osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
- osn_selenium/executors/sync/cdp/dom.py +0 -310
- osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
- osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
- osn_selenium/executors/sync/cdp/emulation.py +0 -270
- osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
- osn_selenium/executors/sync/cdp/extensions.py +0 -39
- osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
- osn_selenium/executors/sync/cdp/fetch.py +0 -96
- osn_selenium/executors/sync/cdp/file_system.py +0 -18
- osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
- osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
- osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
- osn_selenium/executors/sync/cdp/input.py +0 -233
- osn_selenium/executors/sync/cdp/inspector.py +0 -21
- osn_selenium/executors/sync/cdp/io.py +0 -33
- osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
- osn_selenium/executors/sync/cdp/log.py +0 -35
- osn_selenium/executors/sync/cdp/media.py +0 -21
- osn_selenium/executors/sync/cdp/memory.py +0 -62
- osn_selenium/executors/sync/cdp/network.py +0 -287
- osn_selenium/executors/sync/cdp/overlay.py +0 -174
- osn_selenium/executors/sync/cdp/page.py +0 -365
- osn_selenium/executors/sync/cdp/performance.py +0 -33
- osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
- osn_selenium/executors/sync/cdp/preload.py +0 -21
- osn_selenium/executors/sync/cdp/profiler.py +0 -58
- osn_selenium/executors/sync/cdp/pwa.py +0 -55
- osn_selenium/executors/sync/cdp/runtime.py +0 -221
- osn_selenium/executors/sync/cdp/schema.py +0 -23
- osn_selenium/executors/sync/cdp/security.py +0 -30
- osn_selenium/executors/sync/cdp/service_worker.py +0 -56
- osn_selenium/executors/sync/cdp/storage.py +0 -151
- osn_selenium/executors/sync/cdp/system_info.py +0 -30
- osn_selenium/executors/sync/cdp/target.py +0 -147
- osn_selenium/executors/sync/cdp/tethering.py +0 -21
- osn_selenium/executors/sync/cdp/tracing.py +0 -62
- osn_selenium/executors/sync/cdp/web_audio.py +0 -24
- osn_selenium/executors/sync/cdp/web_authn.py +0 -82
- osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
- osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
- osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
- osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
- osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
- osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
- osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
- osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
- osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
- osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
- osn_selenium/executors/trio_threads/cdp/console.py +0 -33
- osn_selenium/executors/trio_threads/cdp/css.py +0 -196
- osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
- osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
- osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
- osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
- osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
- osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
- osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
- osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
- osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
- osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
- osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
- osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
- osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
- osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
- osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
- osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
- osn_selenium/executors/trio_threads/cdp/input.py +0 -242
- osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
- osn_selenium/executors/trio_threads/cdp/io.py +0 -42
- osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
- osn_selenium/executors/trio_threads/cdp/log.py +0 -44
- osn_selenium/executors/trio_threads/cdp/media.py +0 -30
- osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
- osn_selenium/executors/trio_threads/cdp/network.py +0 -296
- osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
- osn_selenium/executors/trio_threads/cdp/page.py +0 -374
- osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
- osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
- osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
- osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
- osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
- osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
- osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
- osn_selenium/executors/trio_threads/cdp/security.py +0 -43
- osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
- osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
- osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
- osn_selenium/executors/trio_threads/cdp/target.py +0 -156
- osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
- osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
- osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
- osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
- osn_selenium/executors/unified/cdp/accessibility.py +0 -81
- osn_selenium/executors/unified/cdp/animation.py +0 -50
- osn_selenium/executors/unified/cdp/audits.py +0 -45
- osn_selenium/executors/unified/cdp/autofill.py +0 -41
- osn_selenium/executors/unified/cdp/background_service.py +0 -24
- osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
- osn_selenium/executors/unified/cdp/browser.py +0 -143
- osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
- osn_selenium/executors/unified/cdp/cast.py +0 -32
- osn_selenium/executors/unified/cdp/console.py +0 -18
- osn_selenium/executors/unified/cdp/css.py +0 -237
- osn_selenium/executors/unified/cdp/debugger.py +0 -243
- osn_selenium/executors/unified/cdp/device_access.py +0 -21
- osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
- osn_selenium/executors/unified/cdp/dom.py +0 -380
- osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
- osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
- osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
- osn_selenium/executors/unified/cdp/emulation.py +0 -312
- osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
- osn_selenium/executors/unified/cdp/extensions.py +0 -45
- osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
- osn_selenium/executors/unified/cdp/fetch.py +0 -111
- osn_selenium/executors/unified/cdp/file_system.py +0 -15
- osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
- osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
- osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
- osn_selenium/executors/unified/cdp/input.py +0 -254
- osn_selenium/executors/unified/cdp/inspector.py +0 -15
- osn_selenium/executors/unified/cdp/io.py +0 -29
- osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
- osn_selenium/executors/unified/cdp/log.py +0 -29
- osn_selenium/executors/unified/cdp/media.py +0 -15
- osn_selenium/executors/unified/cdp/memory.py +0 -59
- osn_selenium/executors/unified/cdp/network.py +0 -323
- osn_selenium/executors/unified/cdp/overlay.py +0 -209
- osn_selenium/executors/unified/cdp/page.py +0 -410
- osn_selenium/executors/unified/cdp/performance.py +0 -27
- osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
- osn_selenium/executors/unified/cdp/preload.py +0 -15
- osn_selenium/executors/unified/cdp/profiler.py +0 -55
- osn_selenium/executors/unified/cdp/pwa.py +0 -55
- osn_selenium/executors/unified/cdp/runtime.py +0 -245
- osn_selenium/executors/unified/cdp/schema.py +0 -17
- osn_selenium/executors/unified/cdp/security.py +0 -27
- osn_selenium/executors/unified/cdp/service_worker.py +0 -62
- osn_selenium/executors/unified/cdp/storage.py +0 -178
- osn_selenium/executors/unified/cdp/system_info.py +0 -24
- osn_selenium/executors/unified/cdp/target.py +0 -165
- osn_selenium/executors/unified/cdp/tethering.py +0 -15
- osn_selenium/executors/unified/cdp/tracing.py +0 -62
- osn_selenium/executors/unified/cdp/web_audio.py +0 -18
- osn_selenium/executors/unified/cdp/web_authn.py +0 -103
- osn_selenium-1.0.0.dist-info/RECORD +0 -608
- /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
- /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
- {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) ->
|
|
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
|
-
|
|
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:
|
|
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 (
|
|
86
|
+
script_key (ScriptKey): The key of the script to unpin.
|
|
86
87
|
"""
|
|
87
88
|
|
|
88
89
|
...
|
|
@@ -66,6 +66,17 @@ class AbstractCoreWindowMixin(ABC):
|
|
|
66
66
|
|
|
67
67
|
...
|
|
68
68
|
|
|
69
|
+
@abstractmethod
|
|
70
|
+
def get_orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
|
|
71
|
+
"""
|
|
72
|
+
Gets the current orientation of the browser.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
Literal["LANDSCAPE", "PORTRAIT"]: The current orientation.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
...
|
|
79
|
+
|
|
69
80
|
@abstractmethod
|
|
70
81
|
def get_window_handle(self, window: Optional[Union[str, int]] = None) -> str:
|
|
71
82
|
"""
|
|
@@ -140,17 +151,6 @@ class AbstractCoreWindowMixin(ABC):
|
|
|
140
151
|
|
|
141
152
|
...
|
|
142
153
|
|
|
143
|
-
@abstractmethod
|
|
144
|
-
def orientation(self) -> Literal["LANDSCAPE", "PORTRAIT"]:
|
|
145
|
-
"""
|
|
146
|
-
Gets the current orientation of the browser.
|
|
147
|
-
|
|
148
|
-
Returns:
|
|
149
|
-
Literal["LANDSCAPE", "PORTRAIT"]: The current orientation.
|
|
150
|
-
"""
|
|
151
|
-
|
|
152
|
-
...
|
|
153
|
-
|
|
154
154
|
@abstractmethod
|
|
155
155
|
def set_orientation(self, value: Literal["LANDSCAPE", "PORTRAIT"]) -> None:
|
|
156
156
|
"""
|
|
@@ -2,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", "
|
|
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
|
|
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 ("
|
|
126
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
102
|
+
await func(target)
|
|
137
103
|
|
|
138
|
-
|
|
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(
|
|
13
|
+
class DomainsSettings(ExtraDictModel):
|
|
14
14
|
"""
|
|
15
15
|
A dataclass container for configuration settings across different DevTools domains.
|
|
16
16
|
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import trio
|
|
2
2
|
from pydantic import Field
|
|
3
|
-
from osn_selenium.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
4
|
-
from osn_selenium.
|
|
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,
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
209
|
+
nursery=nursery,
|
|
222
210
|
cdp_receive_channel=cdp_recv,
|
|
223
211
|
fingerprint_receive_channel=fp_recv,
|
|
224
212
|
)
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import trio
|
|
2
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
157
|
-
|
|
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
|
-
|
|
183
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
272
|
+
nursery=nursery_object,
|
|
253
273
|
target_data=target_data,
|
|
254
274
|
cdp_receive_channel=cdp_recv,
|
|
255
275
|
fingerprint_receive_channel=fp_recv,
|