| 5 | |
| 6 | |
| 7 | class ChromeOptions(ChromiumOptions): |
| 8 | _session = None |
| 9 | _user_data_dir = None |
| 10 | |
| 11 | @property |
| 12 | def user_data_dir(self): |
| 13 | return self._user_data_dir |
| 14 | |
| 15 | @user_data_dir.setter |
| 16 | def user_data_dir(self, path): |
| 17 | """Sets the browser profile folder to use. Creates one if missing.""" |
| 18 | abs_path = os.path.abspath(path) |
| 19 | self._user_data_dir = os.path.normpath(abs_path) |
| 20 | |
| 21 | @staticmethod |
| 22 | def _undot_key(key, value): |
| 23 | """Turn a (dotted key, value) into a proper nested dict.""" |
| 24 | if "." in key: |
| 25 | key, rest = key.split(".", 1) |
| 26 | value = ChromeOptions._undot_key(rest, value) |
| 27 | return {key: value} |
| 28 | |
| 29 | @staticmethod |
| 30 | def _merge_nested(a, b): |
| 31 | """Merges b into a, overwriting duplicate leaf values using b.""" |
| 32 | for key in b: |
| 33 | if key in a: |
| 34 | if isinstance(a[key], dict) and isinstance(b[key], dict): |
| 35 | ChromeOptions._merge_nested(a[key], b[key]) |
| 36 | continue |
| 37 | a[key] = b[key] |
| 38 | return a |
| 39 | |
| 40 | def handle_prefs(self, user_data_dir): |
| 41 | prefs = self.experimental_options.get("prefs") |
| 42 | if prefs: |
| 43 | user_data_dir = user_data_dir or self._user_data_dir |
| 44 | default_path = os.path.join(user_data_dir, "Default") |
| 45 | os.makedirs(default_path, exist_ok=True) |
| 46 | undot_prefs = {} |
| 47 | for key, value in prefs.items(): |
| 48 | undot_prefs = self._merge_nested( |
| 49 | undot_prefs, self._undot_key(key, value) |
| 50 | ) |
| 51 | prefs_file = os.path.join(default_path, "Preferences") |
| 52 | with suppress(Exception): |
| 53 | if os.path.exists(prefs_file): |
| 54 | with open( |
| 55 | prefs_file, encoding="utf-8", mode="r", errors="ignore" |
| 56 | ) as f: |
| 57 | undot_prefs = self._merge_nested( |
| 58 | json.load(f), undot_prefs |
| 59 | ) |
| 60 | with suppress(Exception): |
| 61 | with open( |
| 62 | prefs_file, encoding="utf-8", mode="w", errors="ignore" |
| 63 | ) as f: |
| 64 | json.dump(undot_prefs, f) |
no outgoing calls
no test coverage detected
searching dependent graphs…