diff --git a/zipline/assets/asset_writer.py b/zipline/assets/asset_writer.py index dbbc1be2..63092539 100644 --- a/zipline/assets/asset_writer.py +++ b/zipline/assets/asset_writer.py @@ -25,13 +25,14 @@ ASSET_TABLE_FIELDS = frozenset({ 'exchange', }) -# Expected fields for an Asset's metadata +# Expected fields for a Future's metadata FUTURE_TABLE_FIELDS = ASSET_TABLE_FIELDS | { 'notice_date', 'expiration_date', 'contract_multiplier', } +# Expected fields for an Equity's metadata EQUITY_TABLE_FIELDS = ASSET_TABLE_FIELDS EXCHANGE_TABLE_FIELDS = frozenset({ @@ -355,6 +356,11 @@ class AssetDBWriter(with_metaclass(ABCMeta)): # Generate equities DataFrame # ############################### + # HACK: If company_name is provided, map it to asset_name + if ('company_name' in data.equities.columns) \ + and ('asset_name' not in data.equities.columns): + data.equities['asset_name'] = data.equities['company_name'] + equities_output = _generate_output_dataframe( data_subset=data.equities, defaults=_equities_defaults, diff --git a/zipline/assets/assets.py b/zipline/assets/assets.py index 93dedd96..d9a25390 100644 --- a/zipline/assets/assets.py +++ b/zipline/assets/assets.py @@ -43,6 +43,24 @@ from zipline.assets.asset_writer import ( log = Logger('assets.py') +# A set of fields that need to be converted to strings before building an +# Asset to avoid unicode fields +_asset_str_fields = frozenset({ + 'symbol', + 'asset_name', + 'exchange', +}) + + +def _convert_asset_str_fields(dict): + """ + Takes in a dict of Asset init args and converts from unicode to string + where applicable + """ + for key, value in dict.items(): + if key in _asset_str_fields: + dict[key] = str(value) + class AssetFinder(object): @@ -201,6 +219,8 @@ class AssetFinder(object): data['first_traded'] = pd.Timestamp( data['first_traded'], tz='UTC') + _convert_asset_str_fields(data) + equity = Equity(**data) else: equity = None @@ -239,6 +259,8 @@ class AssetFinder(object): data['expiration_date'] = pd.Timestamp( data['expiration_date'], tz='UTC') + _convert_asset_str_fields(data) + future = Future(**data) else: future = None