Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
 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)