class Endesa(Parser): pattern = '(SEVILLANA|FECSA|ERZ|UNELCO|GESA).INF.SEG0[1-5].(zip|ZIP)$' encoding = "iso-8859-15" delimiter = ';' def __init__(self, strict=False): self.adapter = EndesaSipsAdapter(strict=strict) self.schema = EndesaSipsSchema(strict=strict) self.fields_ps = [] self.headers_ps = [] for f in sorted(self.schema.fields, key=lambda f: self.schema.fields[f].metadata['position']): field = self.schema.fields[f] self.fields_ps.append((f, field.metadata)) self.headers_ps.append(f) self.fields = self.fields_ps def parse_line(self, line): slinia = tuple(unicode(line.decode(self.encoding)).split(self.delimiter)) slinia = map(lambda s: s.strip(), slinia) parsed = {'ps': {}, 'measures': {}, 'orig': line} data = build_dict(self.headers_ps, slinia) result, errors = self.adapter.load(data) if errors: logger.error(errors) parsed['ps'] = result return parsed, errors