Skip to content

Commit

Permalink
begun to change how data links work
Browse files Browse the repository at this point in the history
  • Loading branch information
robcarver17 committed Oct 27, 2020
1 parent 6fa5d29 commit cb4ea30
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 16 deletions.
5 changes: 5 additions & 0 deletions sysproduction/data/broker.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import numpy as np

from collections import namedtuple

from sysbrokers.IB.ibSpotFXData import ibFxPricesData

from syscore.objects import missing_data, arg_not_supplied, missing_order, missing_contract

from sysdata.production.current_positions import contractPosition
Expand All @@ -28,6 +31,8 @@ def __init__(self, data=arg_not_supplied):
if data is arg_not_supplied:
data = dataBlob()

data.add_ib_class("ibFxPricesData", ibFxPricesData)

data.add_class_list(
"ibFxPricesData ibFuturesContractPriceData ibFuturesContractData\
ibContractPositionData ibOrdersData ibMiscData"
Expand Down
105 changes: 89 additions & 16 deletions sysproduction/data/get_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,12 +186,6 @@ def log(self):
def log_name(self):
return self.log.attributes["type"]

def setup_clone(self, **kwargs):
new_data = self._original_data
new_data._log = new_data.log.setup(**kwargs)
new_data._original_data = self._original_data

return new_data

@property
def csv_data_paths(self):
Expand All @@ -200,13 +194,100 @@ def csv_data_paths(self):
raise Exception("No defaults for csv data paths")
return csv_data_paths

## NEW STYLE CLASS STUFF
def add_ib_class(self, class_name: str, class_object):
try:
resolved_instance = class_object(self.ib_conn, log = self.log.setup(component = class_name))
except Exception as e:
msg = (
"Couldn't evaluate %s(self.ib_conn, log = self.log.setup(component = %s)) This might be because (a) IB gateway not running, or (b) import is missing\
or (c) arguments don't follow pattern" % (class_name, class_name))
self.log.critical(msg)
raise Exception(msg)

self.resolve_names_and_add(resolved_instance, class_name)

def add_mongo_class(self, class_name: str, class_object):
try:
resolved_instance = class_object(mongo_db=self.mongo_db, log = self.log.setup(component = class_name))
except Exception as e:
msg = (
"Couldn't evaluate %s(mongo_db=self.mongo_db, log = self.log.setup(component = %s)) \
This might be because import is missing\
or arguments don't follow pattern" % (class_name, class_name))
self.log.critical(msg)
raise Exception(msg)

self.resolve_names_and_add(resolved_instance, class_name)

def add_arctic_class(self, class_name: str, class_object):
try:
resolved_instance = class_object(mongo_db=self.mongo_db, log = self.log.setup(component = class_name))
except Exception as e:
msg = (
"Couldn't evaluate %s(mongo_db=self.mongo_db, log = self.log.setup(component = %s)) \
This might be because import is missing\
or arguments don't follow pattern" % (class_name, class_name))
self.log.critical(msg)
raise Exception(msg)

self.resolve_names_and_add(resolved_instance, class_name)

def add_csv_class(self, class_name: str, class_object):
datapath = self.get_csv_paths_for_class(class_name)
try:
resolved_instance = class_object(datapath = datapath, log = self.log.setup(component = class_name))
except Exception as e:
msg = (
"Couldn't evaluate %s(datapath = datapath, log = self.log.setup(component = %s)) \
This might be because import is missing\
or arguments don't follow pattern" % (class_name, class_name))
self.log.critical(msg)
raise Exception(msg)

self.resolve_names_and_add(resolved_instance, class_name)


def resolve_names_and_add(self, resolved_instance, class_name: str):
attr_name = self.get_new_name(class_name)
self.add_new_class_ids(resolved_instance, attr_name, class_name)

def get_new_name(self, class_name: str):
split_up_name = camel_case_split(class_name)
attr_name = identifying_name(
split_up_name, keep_original_prefix=self.keep_original_prefix
)

return attr_name

def add_new_class_ids(self, resolved_instance, attr_name:str, class_name: str):
setattr(self, attr_name, resolved_instance)
self.attr_list.append(attr_name)
self.class_list.append(class_name)

def get_csv_paths_for_class(self, class_name):
csv_data_paths = self.csv_data_paths
if csv_data_paths is arg_not_supplied:
raise Exception(
"Need csv_data_paths dict for class name %s" % class_name
)
datapath = csv_data_paths.get(class_name, "")
if datapath == "":
raise Exception(
"Need to have key %s in csv_data_paths" %
class_name)

return datapath

## OLD STYLE CLASS NAMES DEPRECATED
def add_class_list(self, arg_string):
list_of_classes = arg_string.split(" ")

for class_name in list_of_classes:
self._add_class_element(class_name)
return success

## OLD STYLE CLASS NAMES DEPRECATED
def _add_class_element(self, class_name):
if class_name in self.class_list:
# Already present
Expand All @@ -223,6 +304,7 @@ def _add_class_element(self, class_name):

return success

## OLD STYLE CLASS NAMES DEPRECATED
def process_class_id(self, class_name):
"""
Expand All @@ -237,16 +319,7 @@ def process_class_id(self, class_name):
# NEED TO DYNAMICALLY SWITCH DB SOURCE AND ADD DEFAULT CSV PATH NAME
# REMOVE SOURCE_ PREFIX, REPLACE WITH db_ or broker_
if prefix == "csv":
csv_data_paths = self.csv_data_paths
if csv_data_paths is arg_not_supplied:
raise Exception(
"Need csv_data_paths dict for class name %s" % class_name
)
datapath = csv_data_paths.get(class_name, "")
if datapath == "":
raise Exception(
"Need to have key %s in csv_data_paths" %
class_name)
datapath = self.get_csv_paths_for_class(class_name)

eval_dict = dict(
ib="%s(self.ib_conn, log=self.log.setup(component='%s'))",
Expand Down

0 comments on commit cb4ea30

Please sign in to comment.