From 1c2560a1fa2ee5a755d4fef820383f3eafca1564 Mon Sep 17 00:00:00 2001 From: fawce Date: Mon, 9 Feb 2015 12:23:46 -0500 Subject: [PATCH] added cutpoint for overriding SecurityList implementation. --- zipline/utils/security_list.py | 45 ++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/zipline/utils/security_list.py b/zipline/utils/security_list.py index 4de9dbaf..417cef43 100644 --- a/zipline/utils/security_list.py +++ b/zipline/utils/security_list.py @@ -14,27 +14,6 @@ def loopback(symbol, *args, **kwargs): return symbol -class SecurityListSet(object): - - def __init__(self, current_date_func, lookup_func=None): - if lookup_func is None: - self.lookup_func = loopback - else: - self.lookup_func = lookup_func - self.current_date_func = current_date_func - self._leveraged_etf = None - - @property - def leveraged_etf_list(self): - if self._leveraged_etf is None: - self._leveraged_etf = SecurityList( - self.lookup_func, - load_from_directory('leveraged_etf_list'), - self.current_date_func - ) - return self._leveraged_etf - - class SecurityList(object): def __init__(self, lookup_func, data, current_date_func): @@ -102,6 +81,30 @@ class SecurityList(object): change_func(sid) +class SecurityListSet(object): + + def __init__(self, current_date_func, lookup_func=None): + # provide a cut point to substitute other security + # list implementations. + self.sl_constructor = SecurityList + if lookup_func is None: + self.lookup_func = loopback + else: + self.lookup_func = lookup_func + self.current_date_func = current_date_func + self._leveraged_etf = None + + @property + def leveraged_etf_list(self): + if self._leveraged_etf is None: + self._leveraged_etf = self.sl_constructor( + self.lookup_func, + load_from_directory('leveraged_etf_list'), + self.current_date_func + ) + return self._leveraged_etf + + def load_from_directory(list_name): """ To resolve the symbol in the LEVERAGED_ETF list,