def _load_cell(self, entry, line, dimension, description): dimension = str(dimension) dimension_type = description.get('type', 'value') dimension_value = None if dimension_type == 'value': value = self._convert_type(line, description) entry[dimension] = value return dimension_value = {} for field in description['fields']: fieldname = str(field['name']) dimension_value[fieldname] = self._convert_type(line, field) if 'name' in dimension_value: name = dimension_value.pop('name') else: name = dimension_value['label'] name = util.slugify(name) if dimension_type == 'entity': match_keys = description.get('match_keys', ('name',)) entity = self.loader.create_entity(name, match_keys=match_keys, **dimension_value) self.loader.entitify_entry(entry, entity, dimension) elif dimension_type == 'classifier': taxonomy = util.slugify(description.get('taxonomy')) classifier = self.loader.create_classifier(name, taxonomy, **dimension_value) self.loader.classify_entry(entry, classifier, dimension)
def _convert_type(self, line, description): type_string = description.get('datatype', 'value') value = line.get(description.get('column')) if not value: if description.get('default_value', '').strip(): value = description.get('default_value').strip() if type_string == "constant": return description.get('constant') if value is None: return if type_string == "date": default = description.get('default_value') if not value or value == PLACEHOLDER: if not default: return EMPTY_DATE else: value = default end_value = line.get(description.get('end_column')) return for_datestrings(value, end_value) if type_string == "string": return value elif type_string == "float": return float(unicode(value).replace(",", "")) elif type_string == "id": return util.slugify(value) return value
def cast(self, row, meta): value = self._column_or_default(row, meta) if not len(value): if meta.get('constant'): return meta.get('constant') raise ValueError("Value for identifier attribute is empty: %r" % meta) return slugify(value)