Source code for cadrumo.adapters.outbound.aeat.browser.connectivity
"""Synchronous AEAT browser-connectivity probe owned by the outbound adapter.The probe opens the production browser session, navigates to the configuredAEAT Sede target, and returns the concrete:class:`adapters.outbound.aeat.browser.site_health_records.SiteHealthStatus` recordproduced by the browser navigation boundary. Browser session creation,navigation, status construction, and teardown stay together here so theapplication layer does not become a transport or site-health owner."""from__future__importannotationsimportasynciofromtypingimportTYPE_CHECKINGfrom.....core.async_cleanupimportclose_async_resourcesfrom.....core.errors.hierarchyimportSiteHealthError,SiteHealthStatefrom.....core.time.clockimportnowfrom.....core.url_validationimportANY_HTTP_URL_ADAPTERfrom.errorsimportBrowserValidationErrorfrom.factoryimportdefault_browser_session_factoryfrom.site_health_recordsimportSiteHealthEvidence,SiteHealthStatusifTYPE_CHECKING:from.....core.configimportSettings
[docs]defprobe_browser_connectivity(settings:Settings|None=None)->SiteHealthStatus:"""Probe the configured AEAT browser target through the browser adapter. ``load_settings()`` is resolved only when a caller does not provide an explicit settings object, preserving the active settings override context. """ifsettingsisNone:from.....core.configimportload_settingssettings=load_settings()returnasyncio.run(_probe_browser_connectivity(settings))
asyncdef_probe_browser_connectivity(settings:Settings)->SiteHealthStatus:"""Run one browser session and return its site-health classification."""url=settings.site_health_probe_urlsession=awaitdefault_browser_session_factory(settings)context=Nonetry:context=awaitsession.create_context()page=awaitcontext.new_page()try:awaitsession.navigate(page,url)exceptSiteHealthErrorasexc:status=exc.statusifnotisinstance(status,SiteHealthStatus):raiseBrowserValidationError("SiteHealthError carried a non-SiteHealthStatus payload")fromexcreturnstatusreturn_ok_site_health_status(url)finally:awaitclose_async_resources(context,session,task_name="cadrumo-browser-connectivity-close",)def_ok_site_health_status(url:str)->SiteHealthStatus:"""Build the canonical healthy status after successful navigation."""returnSiteHealthStatus(state=SiteHealthState.OK,evidence=SiteHealthEvidence(url=ANY_HTTP_URL_ADAPTER.validate_python(url),http_status=200,html_fragment="",detected_markers=("healthy",),),observed_at=now(),)__all__=["probe_browser_connectivity"]