Return the pointer for ``working_dir`` if one exists and is valid for the current host, else ``None``. Returns ``None`` for any of: file missing, JSON malformed, ``schema_version`` mismatch, ``machine_name`` mismatch, ``dir`` mismatch (the file was written by another working tree us
(
working_dir: str, *, machine_name: str,
)
| 107 | |
| 108 | |
| 109 | def read_pointer( |
| 110 | working_dir: str, *, machine_name: str, |
| 111 | ) -> BridgePointer | None: |
| 112 | """Return the pointer for ``working_dir`` if one exists and is |
| 113 | valid for the current host, else ``None``. |
| 114 | |
| 115 | Returns ``None`` for any of: file missing, JSON malformed, |
| 116 | ``schema_version`` mismatch, ``machine_name`` mismatch, ``dir`` |
| 117 | mismatch (the file was written by another working tree using a |
| 118 | shared HOME), or any required field missing/wrong type. |
| 119 | """ |
| 120 | path = _pointer_path(working_dir) |
| 121 | try: |
| 122 | with open(path, 'r', encoding='utf-8') as fh: |
| 123 | raw = fh.read() |
| 124 | except FileNotFoundError: |
| 125 | return None |
| 126 | except OSError as err: |
| 127 | logger.warning( |
| 128 | '[bridge:pointer] read %s failed: %s — treating as absent', |
| 129 | path, err, |
| 130 | ) |
| 131 | return None |
| 132 | try: |
| 133 | data = json.loads(raw) |
| 134 | except json.JSONDecodeError as err: |
| 135 | logger.warning( |
| 136 | '[bridge:pointer] %s is not valid JSON (%s) — treating as absent', |
| 137 | path, err, |
| 138 | ) |
| 139 | return None |
| 140 | if not isinstance(data, dict): |
| 141 | return None |
| 142 | if data.get('schema_version') != _SCHEMA_VERSION: |
| 143 | logger.info( |
| 144 | '[bridge:pointer] schema_version mismatch in %s ' |
| 145 | '(file=%r, expected=%r) — treating as absent', |
| 146 | path, data.get('schema_version'), _SCHEMA_VERSION, |
| 147 | ) |
| 148 | return None |
| 149 | # Required string fields. |
| 150 | try: |
| 151 | bridge_id = str(data['bridge_id']) |
| 152 | environment_id = str(data['environment_id']) |
| 153 | file_machine = str(data['machine_name']) |
| 154 | file_dir = str(data['dir']) |
| 155 | created_at_ms = int(data['created_at_ms']) |
| 156 | updated_at_ms = int(data['updated_at_ms']) |
| 157 | except (KeyError, TypeError, ValueError) as err: |
| 158 | logger.info( |
| 159 | '[bridge:pointer] %s missing or malformed required fields ' |
| 160 | '(%s) — treating as absent', path, err, |
| 161 | ) |
| 162 | return None |
| 163 | session_id_raw = data.get('session_id') |
| 164 | session_id = ( |
| 165 | str(session_id_raw) if isinstance(session_id_raw, str) else None |
| 166 | ) |