From 412baa3c3f756a385c993afdcf1ba4a7525bf5ce Mon Sep 17 00:00:00 2001 From: fawce Date: Thu, 5 Feb 2015 13:47:39 -0500 Subject: [PATCH] fixed catastrophic bug in load_from_directory and added a new test case was not iterating over lookup date directory names, and therefore mising all by one list of stocks. discovered because of differing sort orders between my local machine, other devs, and travis ci. --- tests/test_security_list.py | 21 +++++++++++++++++++++ zipline/utils/security_list.py | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/test_security_list.py b/tests/test_security_list.py index 2b65fc9e..bb54868f 100644 --- a/tests/test_security_list.py +++ b/tests/test_security_list.py @@ -94,6 +94,7 @@ class SecurityListTestCase(TestCase): self.assertIn("BZQ", rl.leveraged_etf_list) self.assertIn("URTY", rl.leveraged_etf_list) + self.assertIn("JFT", rl.leveraged_etf_list) # assert that a sample of allowed stocks are not in restricted # AAPL @@ -178,6 +179,26 @@ class SecurityListTestCase(TestCase): self.check_algo_exception(algo, ctx, 0) + # repeat with a symbol from a different lookup date + + trade_history = factory.create_trade_history( + 'JFT', + [10.0, 10.0, 11.0, 11.0], + [100, 100, 100, 300], + timedelta(days=1), + sim_params + ) + self.source = SpecificEquityTrades(event_list=trade_history) + + self.df_source, self.df = \ + factory.create_test_df_source(sim_params) + + algo = RestrictedAlgoWithoutCheck(sid='JFT', sim_params=sim_params) + with self.assertRaises(TradingControlViolation) as ctx: + algo.run(self.source) + + self.check_algo_exception(algo, ctx, 0) + def test_algo_with_rl_violation_on_knowledge_date(self): sim_params = factory.create_simulation_parameters( diff --git a/zipline/utils/security_list.py b/zipline/utils/security_list.py index 6fb046e7..4de9dbaf 100644 --- a/zipline/utils/security_list.py +++ b/zipline/utils/security_list.py @@ -127,8 +127,8 @@ def load_from_directory(list_name): tzinfo=pytz.utc) data[kd] = {} kd_path = os.path.join(dir_path, kd_name) - for ld_name in listdir(os.path.join(dir_path, kd_name)): - ld = datetime.strptime(kd_name, DATE_FORMAT).replace( + for ld_name in listdir(kd_path): + ld = datetime.strptime(ld_name, DATE_FORMAT).replace( tzinfo=pytz.utc) data[kd][ld] = {} ld_path = os.path.join(kd_path, ld_name)