from typing import List, Optional
from .base import Security, SecurityIdentifier, SecurityReference
from .enums import GSID, SecurityIdentifierType, SecuritySubtype, SecurityType, Ticker
from .exceptions import MissingGSID
from .exchanges import Exchange
[docs]def Stock(
ticker: Ticker,
gsid: GSID = None,
description: Optional[str] = None,
website: Optional[str] = None,
primary_exc: Optional[Exchange] = None,
identifiers: Optional[List[SecurityIdentifier]] = None,
) -> Security:
if identifiers is None:
identifiers = []
return Security(
ticker=ticker,
gsid=gsid,
security_type=SecurityType.EQUITY,
security_subtype=SecuritySubtype.COMMON_STOCK,
primary_exchange=primary_exc,
description=description,
website=website,
identifiers=identifiers,
issuer=None,
denominated_ccy=None,
)
[docs]def ETP(
ticker: Ticker,
gsid: GSID = None,
issuer: Optional[str] = None,
description: Optional[str] = None,
website: Optional[str] = None,
primary_exc: Optional[Exchange] = None,
identifiers: Optional[List[SecurityIdentifier]] = None,
) -> Security:
if identifiers is None:
identifiers = []
return Security(
ticker=ticker,
gsid=gsid,
security_type=SecurityType.EQUITY,
security_subtype=SecuritySubtype.ETP,
primary_exchange=primary_exc,
description=description,
website=website,
identifiers=identifiers,
issuer=(issuer if issuer is None else issuer.strip()),
denominated_ccy=None,
)
[docs]def FiatCurrency(
ticker: Ticker,
gsid: GSID = None,
nation: str = None,
description: Optional[str] = None,
identifiers: Optional[List[SecurityIdentifier]] = None,
) -> Security:
if identifiers is None:
identifiers = []
return Security(
ticker=ticker,
issuer=nation,
gsid=gsid,
security_type=SecurityType.CURRENCY,
security_subtype=SecuritySubtype.NATIONAL_FIAT,
identifiers=identifiers,
primary_exchange=None,
website=None,
description=description,
denominated_ccy=None,
)
[docs]def CryptoCurrency(
ticker: Ticker,
gsid: GSID = None,
description: Optional[str] = None,
identifiers: Optional[List[SecurityIdentifier]] = None,
) -> Security:
if identifiers is None:
identifiers = []
return Security(
ticker=ticker,
issuer=None,
gsid=gsid,
security_type=SecurityType.CURRENCY,
security_subtype=SecuritySubtype.CRYPTOCURRENCY,
identifiers=identifiers,
primary_exchange=None,
website=None,
description=description,
denominated_ccy=None,
)
[docs]def DerivedIndex(
ticker: Ticker,
gsid: GSID = None,
website: Optional[str] = None,
issuer: Optional[str] = None,
description: Optional[str] = None,
currency: Optional[Security] = None,
identifiers: Optional[List[SecurityIdentifier]] = None,
) -> Security:
if identifiers is None:
identifiers = []
if currency is not None:
currency_ref = create_reference_from_security(currency)
else:
currency_ref = None
return Security(
ticker=ticker,
gsid=gsid,
security_type=SecurityType.INDEX,
security_subtype=SecuritySubtype.DERIVED_INDEX,
issuer=issuer,
website=website,
identifiers=identifiers,
primary_exchange=None,
description=description,
denominated_ccy=currency_ref,
)
[docs]def FIGI(value: str) -> SecurityIdentifier:
return SecurityIdentifier(id_type=SecurityIdentifierType.FIGI, value=value)
[docs]def ISIN(value: str) -> SecurityIdentifier:
return SecurityIdentifier(id_type=SecurityIdentifierType.ISIN, value=value)
[docs]def CUSIP(value: str) -> SecurityIdentifier:
return SecurityIdentifier(id_type=SecurityIdentifierType.CUSIP, value=value)
[docs]def create_reference_from_security(security: Security) -> SecurityReference:
if security.gsid is None:
raise MissingGSID("security gsid not provided")
return SecurityReference(
gsid=security.gsid,
ticker=security.ticker,
security_type=security.security_type,
security_subtype=security.security_subtype,
)