"""
nse-xbrl
Async Python 3.14 library for parsing XBRL Filing Information of NSE & BSE across all taxonomies.
"""
from __future__ import annotations
from pathlib import Path
from typing import List, Union
from .client.nse_client import AsyncNSEClient
from .core.context import ExplicitMember, PeriodType, XBRLContext
from .core.models import XBRLFact, XBRLInstance
from .core.parser import AsyncXBRLParser
from .core.unit import XBRLUnit
from .taxonomy.downloader import AsyncTaxonomyDownloader
from .taxonomy.linkbase import ConceptLabel, TaxonomyLinkbase
from .taxonomy.registry import TaxonomyInfo, TaxonomyRegistry
from .taxonomy.schema import SchemaElement, TaxonomySchema
from .facade import FilingFormat, ParsedFiling, XBRL, detect_filing_format
from .typed.corporate_governance import CorporateGovernanceModel
from .typed.financial_results import FinancialResultsModel
from .typed.investor_complaints import InvestorComplaintsModel
from .typed.shareholding import ShareholdingPatternModel
__version__ = "0.2.0"
_parser = AsyncXBRLParser()
[docs]
async def parse(
source: Union[str, bytes, Path],
source_name: str | None = None,
) -> ParsedFiling:
"""Super-simple facade function: auto-detects filing type and parses any XML asynchronously.
Args:
source: File path, XML string, or raw XML bytes.
source_name: Optional file or tracking name.
Returns:
ParsedFiling: Unified result with .format, .data, and direct field access.
"""
return await XBRL.parse(source, source_name=source_name)
[docs]
def parse_sync(
source: Union[str, bytes, Path],
source_name: str | None = None,
) -> ParsedFiling:
"""Synchronous facade function: auto-detects filing type and parses any XML."""
return XBRL.parse_sync(source, source_name=source_name)
[docs]
async def parse_xbrl(
content: Union[str, bytes],
source_name: str | None = None,
) -> XBRLInstance:
"""Parse an XBRL XML instance document asynchronously into a universal XBRLInstance."""
return await _parser.parse(content, source_name=source_name)
[docs]
async def parse_file(file_path: Union[str, Path]) -> XBRLInstance:
"""Parse a local XBRL file asynchronously into a universal XBRLInstance."""
return await _parser.parse_file(file_path)
[docs]
async def parse_archive(zip_bytes: bytes) -> List[XBRLInstance]:
"""Parse all XBRL filings within a zip archive asynchronously."""
return await _parser.parse_zip(zip_bytes)
[docs]
def parse_xbrl_sync(
content: Union[str, bytes],
source_name: str | None = None,
) -> XBRLInstance:
"""Synchronous universal parsing convenience function."""
return _parser.parse_sync(content, source_name=source_name)
__all__ = [
"parse",
"parse_sync",
"XBRL",
"ParsedFiling",
"FilingFormat",
"detect_filing_format",
"parse_xbrl",
"parse_file",
"parse_archive",
"parse_xbrl_sync",
"AsyncXBRLParser",
"XBRLInstance",
"XBRLFact",
"XBRLContext",
"XBRLUnit",
"PeriodType",
"ExplicitMember",
"TaxonomyRegistry",
"TaxonomyInfo",
"TaxonomySchema",
"SchemaElement",
"TaxonomyLinkbase",
"ConceptLabel",
"AsyncTaxonomyDownloader",
"FinancialResultsModel",
"ShareholdingPatternModel",
"CorporateGovernanceModel",
"InvestorComplaintsModel",
"AsyncNSEClient",
]