diff --git a/zipline/pipeline/pipeline.py b/zipline/pipeline/pipeline.py index ab40c886..1967f727 100644 --- a/zipline/pipeline/pipeline.py +++ b/zipline/pipeline/pipeline.py @@ -1,6 +1,6 @@ from zipline.utils.input_validation import expect_types, optional -from .term import AssetExists, ComputableTerm +from .term import AssetExists, ComputableTerm, Term from .filters import Filter from .graph import TermGraph @@ -37,11 +37,13 @@ class Pipeline(object): if columns is None: columns = {} - for term in columns.values(): + for column_name, term in columns.items(): if not isinstance(term, ComputableTerm): raise TypeError( - '"{term}" is not a valid pipeline column. Did you mean ' - 'to add ".latest"?'.format(term=term) + "Column {column_name!r} contains an invalid pipeline term " + "({term}). Did you mean to append '.latest'?".format( + column_name=column_name, term=term, + ) ) self._columns = columns self._screen = screen @@ -60,7 +62,7 @@ class Pipeline(object): """ return self._screen - @expect_types(term=ComputableTerm, name=str) + @expect_types(term=Term, name=str) def add(self, term, name, overwrite=False): """ Add a column. @@ -85,6 +87,12 @@ class Pipeline(object): else: raise KeyError("Column '{}' already exists.".format(name)) + if not isinstance(term, ComputableTerm): + raise TypeError( + "{term} is not a valid pipeline column. Did you mean to " + "append '.latest'?".format(term=term) + ) + self._columns[name] = term @expect_types(name=str)