Skip to content

Commit a75eb73

Browse files
[py] Use generated Bidi files instead of hand curated ones (#17266)
--------- Co-authored-by: Corey Goldberg <1113081+cgoldberg@users.noreply.github.com>
1 parent 51b503d commit a75eb73

24 files changed

Lines changed: 118 additions & 6107 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ __pycache__
6767
.tox
6868
*.pyc
6969
dist/
70+
py/selenium/webdriver/common/bidi/
7071
py/selenium/webdriver/common/devtools/**/*
7172
!py/selenium/webdriver/common/devtools/util.py
7273
py/selenium/webdriver/common/linux/

py/BUILD.bazel

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,10 @@ py_library(
262262
# BiDi protocol support
263263
py_library(
264264
name = "bidi",
265-
srcs = glob(["selenium/webdriver/common/bidi/**/*.py"]),
266-
data = [":mutation-listener"],
265+
srcs = [":create-bidi-src"],
266+
data = [
267+
":mutation-listener",
268+
],
267269
imports = ["."],
268270
visibility = ["//visibility:public"],
269271
deps = [
@@ -617,7 +619,7 @@ generate_devtools_latest(
617619
browser_versions = BROWSER_VERSIONS,
618620
)
619621

620-
# Pilot BiDi code generation from CDDL specification
622+
# Generate BiDi source files from CDDL specification
621623
generate_bidi(
622624
name = "create-bidi-src",
623625
cddl_file = "//common/bidi/spec:all.cddl",

py/generate_bidi.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,9 +1699,12 @@ def main(
16991699

17001700
logger.info(f"Parsed {len(modules)} modules")
17011701

1702-
# Clean up existing generated files
1702+
# Clean up existing generated files.
1703+
# Keep static helper modules that are staged by Bazel (for example cdp.py)
1704+
# as part of create-bidi-src.extra_srcs.
1705+
preserved_python_files = {"py.typed", "cdp.py"}
17031706
for file_path in output_path.glob("*.py"):
1704-
if file_path.name != "py.typed" and not file_path.name.startswith("_"):
1707+
if file_path.name not in preserved_python_files and not file_path.name.startswith("_"):
17051708
file_path.unlink()
17061709
logger.debug(f"Removed: {file_path}")
17071710

py/private/bidi_enhancements_manifest.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,24 +1087,37 @@ def continue_request(self, **kwargs):
10871087
self._conn.execute(_cb("network.removeIntercept", {"intercept": intercept_id}))
10881088
if intercept_id in self.intercepts:
10891089
self.intercepts.remove(intercept_id)''',
1090+
''' def _canonical_request_handler_event(self, event):
1091+
"""Map public request-handler aliases to supported event keys."""
1092+
event_aliases = {
1093+
"auth_required": "auth_required",
1094+
"before_request": "before_request",
1095+
"before_request_sent": "before_request",
1096+
}
1097+
canonical_event = event_aliases.get(event)
1098+
if canonical_event is None:
1099+
available_events = ", ".join(sorted(event_aliases))
1100+
raise ValueError(
1101+
f"Unsupported request handler event '{event}'. Available events: {available_events}"
1102+
)
1103+
return canonical_event''',
10901104
''' def add_request_handler(self, event, callback, url_patterns=None):
10911105
"""Add a handler for network requests at the specified phase.
10921106
10931107
Args:
1094-
event: Event name, e.g. ``"before_request"``.
1108+
event: Event name, e.g. ``"before_request"`` or ``"before_request_sent"``.
10951109
callback: Callable receiving a :class:`Request` instance.
10961110
url_patterns: optional list of URL pattern dicts to filter.
10971111
10981112
Returns:
10991113
callback_id int for later removal via remove_request_handler.
11001114
"""
1115+
canonical_event = self._canonical_request_handler_event(event)
11011116
phase_map = {
11021117
"before_request": "beforeRequestSent",
1103-
"before_request_sent": "beforeRequestSent",
1104-
"response_started": "responseStarted",
11051118
"auth_required": "authRequired",
11061119
}
1107-
phase = phase_map.get(event, "beforeRequestSent")
1120+
phase = phase_map[canonical_event]
11081121
intercept_result = self._add_intercept(phases=[phase], url_patterns=url_patterns)
11091122
intercept_id = intercept_result.get("intercept") if intercept_result else None
11101123
@@ -1117,7 +1130,7 @@ def _request_callback(params):
11171130
request = Request(self._conn, raw)
11181131
callback(request)
11191132
1120-
callback_id = self.add_event_handler(event, _request_callback)
1133+
callback_id = self.add_event_handler(canonical_event, _request_callback)
11211134
if intercept_id:
11221135
self._handler_intercepts[callback_id] = intercept_id
11231136
return callback_id''',
@@ -1128,7 +1141,8 @@ def _request_callback(params):
11281141
event: The event name used when adding the handler.
11291142
callback_id: The int returned by add_request_handler.
11301143
"""
1131-
self.remove_event_handler(event, callback_id)
1144+
canonical_event = self._canonical_request_handler_event(event)
1145+
self.remove_event_handler(canonical_event, callback_id)
11321146
intercept_id = self._handler_intercepts.pop(callback_id, None)
11331147
if intercept_id:
11341148
self._remove_intercept(intercept_id)''',

py/private/cdp.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,13 @@ async def _reader_task(self):
451451
try:
452452
data = json.loads(message)
453453
except json.JSONDecodeError:
454-
raise BrowserError({"code": -32700, "message": "Client received invalid JSON", "data": message})
454+
raise BrowserError(
455+
{
456+
"code": -32700,
457+
"message": "Client received invalid JSON",
458+
"data": message,
459+
}
460+
)
455461
logger.debug("Received message %r", data)
456462
if "sessionId" in data:
457463
session_id = devtools.target.SessionID(data["sessionId"])

py/selenium/webdriver/common/bidi/__init__.py

Lines changed: 0 additions & 43 deletions
This file was deleted.

py/selenium/webdriver/common/bidi/_event_manager.py

Lines changed: 0 additions & 180 deletions
This file was deleted.

0 commit comments

Comments
 (0)