Source code for alchemist_lib.database.exchange

from sqlalchemy import Table, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship

from . import Base



exchange_broker_association = Table(
    "exchange_broker", Base.metadata,
    Column("exchange_name", String(150), ForeignKey("exchange.exchange_name"), primary_key = True),
    Column("broker_name", String(150), ForeignKey("broker.broker_name"), primary_key = True)
)


[docs]class Exchange(Base): """ Map class for table exchange. - **exchange_name**: String(150), primary_key. - **website**: String(500), null. - **timetable_id**: Integer, null, foreign_key(timetable.timetable_id). - **price_data_source_name**: String(150), null, foreign_key(price_data_source.price_data_source_name). Relationships: - **price_data_source**: PriceDataSource instance. (One-to-Many) - **timetable**: Timetable instance. (One-to-Many) - **brokers**: List of Broker instances. (Many-to-Many) """ __tablename__ = "exchange" exchange_name = Column(String(150), primary_key = True) website = Column(String(500), nullable = True) timetable_id = Column(Integer, ForeignKey("timetable.timetable_id"), nullable = True) price_data_source_name = Column(String(150), ForeignKey("price_data_source.price_data_source_name"), nullable = True) price_data_source = relationship("PriceDataSource") timetable = relationship("Timetable") brokers = relationship("Broker", secondary = exchange_broker_association) def __init__(self, exchange_name, website = None, timetable_id = None, price_data_source_name = None): """ Costructor method. Args: exchange_name (str): Name (or acronym) of the exchange. website (str, optional): Site of the exchange. timetable_id (int, optional): Timetable identification of trading hours. None if the market never ends. price_data_source_name (int, optional): Name that identify the data source for OHLCV and last_price data. """ self.exchange_name = exchange_name self.website = website self.timetable_id = timetable_id self.price_data_source_name = price_data_source_name def __repr__(self): return "<Exchange(exchange_name={}, website={}, timetable_id={}, price_data_source_name={})>".format(self.exchange_name, self.website, self.timetable_id, self.price_data_source_name)