decentralized and customizable links page on top of atproto

log failed put_record

Changed files
+10 -7
src
atproto
+4 -5
src/atproto/oauth.py
··· 236 236 user: OAuthSession, 237 237 update_dpop_pds_nonce: Callable[[str], None], 238 238 body: dict[str, Any] | None = None, 239 - ) -> ClientResponse | None: 239 + ) -> ClientResponse: 240 240 dpop_private_jwk = JsonWebKey.import_key(json.loads(user.dpop_private_jwk)) 241 241 dpop_pds_nonce = user.dpop_pds_nonce 242 242 access_token = user.access_token 243 - 244 - response: ClientResponse | None = None 243 + response: ClientResponse 245 244 246 245 # Might need to retry request with a new nonce. 247 - for i in range(2): 246 + for _ in range(2): 248 247 dpop_jwt = _pds_dpop_jwt( 249 248 "POST", 250 249 url, ··· 272 271 continue 273 272 break 274 273 275 - return response 274 + return response # pyright: ignore[reportPossiblyUnboundVariable] response is assigned inside the loop 276 275 277 276 278 277 def _client_assertion_jwt(
+6 -2
src/main.py
··· 1 1 import asyncio 2 2 import json 3 3 4 - from aiohttp.client import ClientSession 4 + from aiohttp.client import ClientResponse, ClientSession 5 5 from flask import Flask, g, session, redirect, render_template, request, url_for 6 6 from flask_htmx import HTMX, make_response as htmx_reponse 7 7 from typing import Any ··· 310 310 update_dpop_pds_nonce=update_dpop_pds_nonce, 311 311 ) 312 312 313 - return response is not None and response.ok 313 + if not response.ok: 314 + app.logger.warning(f"put_record failed with status {response.status}") 315 + app.logger.warning(await response.text()) 316 + 317 + return response.ok 314 318 315 319 316 320 def _is_did_blocked(did: str) -> bool: