def setUp(self): Base.metadata.create_all() instrument = Instrument() instrument.ticker = 'MyTicker' instrument.asset_class = 'MyAssetClass' instrument.name = 'MyName' instrument.currency = 'USD' instrument.type = 'MyType' instrument.transactions_fees = 0. instrument.point_value = 1 instrument.exchange = 'MyExchange' instrument.rolling_month = 'H' market_data = MarketData() market_data.instrument = instrument market_data.type = DataType.CLOSE market_data.date = datetime(2000,1,3) market_data.value = 100. session = Session() instrument_dao = InstrumentDAO() instrument_dao.save(session, instrument) market_data_dao = MarketDataDAO() market_data_dao.save(session, market_data) self.instrument_service = InstrumentService()
from zipfile import ZipFile from model.instrument_type import InstrumentType from model.market_data import MarketData from model.data_type import DataType from model.meta import Session from dao.instrument_dao import InstrumentDAO from dao.market_data_dao import MarketDataDAO logging.basicConfig(level=logging.INFO) logger = logging.getLogger('InstrumentFiller') data_repository = '/home/julien/Data/' session = Session() instrument_dao = InstrumentDAO() market_data_dao = MarketDataDAO() def _get_remote_response(url): try: response = urllib2.urlopen(url) except urllib2.URLError, e: logger.error(e) return response def _download_file(url, file_name): response = _get_remote_response(url) data_file = file(file_name,'w')
def __init__(self): self.__instrument_dao = InstrumentDAO() self.__market_data_dao = MarketDataDAO()
class InstrumentService(object): logger = logging.getLogger('InstrumentService') def __init__(self): self.__instrument_dao = InstrumentDAO() self.__market_data_dao = MarketDataDAO() def market_data_model_to_serialized(self, market_data_model): market_data_serialized = {} market_data_serialized['id'] = market_data_model.id market_data_serialized['value'] = market_data_model.value market_data_serialized['data_type'] = market_data_model.type data_date = market_data_model.date market_data_serialized['date'] = datetime(data_date.year, data_date.month, data_date.day) return market_data_serialized def instrument_model_to_serialized(self, instrument_model): # build the serialized object instrument_serialized = {} instrument_serialized['id'] = instrument_model.id instrument_serialized['ticker'] = instrument_model.ticker instrument_serialized['name'] = instrument_model.name instrument_serialized['exchange'] = instrument_model.exchange instrument_serialized['rolling_month'] = instrument_model.rolling_month instrument_serialized['currency'] = instrument_model.currency instrument_serialized['point_value'] = instrument_model.point_value instrument_serialized['transactions_fees'] = instrument_model.transactions_fees instrument_serialized['asset_class'] = instrument_model.asset_class instrument_serialized['instrument_type'] = instrument_model.type instrument_serialized['datas'] = [] return instrument_serialized def get_date(self, a_date): # return a date from a datetime if a_date is instance of datetime if isinstance(a_date, datetime): return a_date.date() elif isinstance(a_date, date): return a_date # return a date from a XML RPC DateTime else else: return datetime.strptime(a_date.value, '%Y%m%dT%H:%M:%S').date() def get_by_ticker(self, ticker, first_date, last_date): ''' return an instrument serialized for a given ticker @param ticker: the ticker @param first_date: the first time series date @param last_date: the last time series date @return: the instrument serialized ''' try: self.logger.info('Asking data for %s between %s and %s'%(ticker, first_date, last_date)) # get the model session = Session() model = self.__instrument_dao.get_by_ticker(session, ticker) # convert into serialized object if model: instrument = self.instrument_model_to_serialized(model) # fill data first_date_converted = self.get_date(first_date) last_date_converted = self.get_date(last_date) datas = self.__market_data_dao.get_data_range(session, model, first_date_converted, last_date_converted) for market_data in datas: self.logger.debug('Appending data %s at %s for %s'%(market_data.type,market_data.date,ticker)) serialized = self.market_data_model_to_serialized(market_data) instrument['datas'].append(serialized) except DataError, e: self.logger.error(e.message) raise ServerError(e.message) finally:
from dao.instrument_dao import InstrumentDAO from data_error import DataError logging.basicConfig(level=logging.INFO) logger = logging.getLogger('InstrumentCreatorScript') if __name__ == "__main__": logger.info('Starting instrument creation ...') session = Session() Base.metadata.create_all() instrument_dao = InstrumentDAO() try: ad = instrument_dao.get_by_ticker(session, 'AD') if not ad: ad = Instrument() ad.ticker = 'AD' ad.name = 'Australian Dollar' ad.asset_class = 'Currencies' ad.transactions_fees = .00005 instrument_dao.save(session, ad) bo = instrument_dao.get_by_ticker(session, 'BO') if not bo: bo = Instrument()
def setUp(self): Base.metadata.create_all() instrument_dao = InstrumentDAO() instrument_dao.save(self.session, self.instrument)