"""Filing-related Oracle service methods.""" from __future__ import annotations from libs.oracle_client.client import OracleClient from libs.oracle_client.models import ( ExhibitDocument, ExhibitResponse, FilingDocumentsResponse, FilingEntry, FilingSearchResponse, ) class FilingsService: def __init__(self, client: OracleClient) -> None: self._client = client async def search_filings( self, ticker: str, form_type: str | None = None, start_date: str | None = None, end_date: str | None = None, ) -> FilingSearchResponse: params: dict[str, str] = {} if form_type: params["form_type"] = form_type if start_date: params["start_date"] = start_date if end_date: params["end_date"] = end_date data = await self._client.get(f"/api/v1/filings/search/{ticker}", params=params) # Real Oracle: {"ticker": ..., "filings": [{accession_number, form_type, ...}], "total_count": ...} filings = [ FilingEntry( accession_no=f["accession_number"], form_type=f["form_type"], filing_date=f["filing_date"], primary_document=f.get("primary_document"), description=f.get("filing_description"), ) for f in data.get("filings", []) ] return FilingSearchResponse( ticker=data.get("ticker", ticker), filings=filings, total=data.get("total_count", len(filings)), ) async def get_documents(self, accession_no: str) -> FilingDocumentsResponse: data = await self._client.get(f"/api/v1/filings/documents/{accession_no}") exhibits = [ExhibitDocument.model_validate(e) for e in data.get("exhibits", [])] return FilingDocumentsResponse( accession_no=data.get("accession_number", accession_no), exhibits=exhibits, ) async def get_exhibit( self, accession_no: str, exhibit_type: str = "EX-99.1" ) -> ExhibitResponse: params = {"exhibit_type": exhibit_type} data = await self._client.get(f"/api/v1/filings/exhibit/{accession_no}", params=params) # Real Oracle: {"accession_number": ..., "exhibit_type": ..., "content": ...} return ExhibitResponse( accession_no=data.get("accession_number", accession_no), exhibit_type=data.get("exhibit_type", exhibit_type), content=data.get("content", ""), )