def __init__(self, strict=False): # l'ordre dels camps segons format cnmc self.headers_ps = [ 'cod_distri', 'name', 'codi_postal', 'direccio', 'poblacio', 'data_alta', 'tarifa', 'tensio', 'pot_max_bie', 'pot_max_puesta', 'tipo_pm', 'indicatiu_icp', 'perfil_consum', 'der_extensio', 'der_acces_llano', # la dada no sabem si es llano, valle o punta 'propietat_equip_mesura', 'propietat_icp', 'potencies_contractades', # n periodes seguits separats per ';' 'data_ulti_mov', 'data_ult_canv', 'data_lim_exten', 'data_ult_lect', 'impago', 'fianza', 'tipo_id_titular', 'id_titular', 'nom_complet', 'direccio_titular', 'primera_vivenda' ] self.adapter = CnmcSipsAdapter(strict=strict)
class Cnmc(Parser): # En aquest cas els llegim amb el csv.DictReader en comptes de fer-ho amb # un Schema de marshmallow, ja que el csv pot contenir comes dins d'un # camp si van wrapped entre cometes i el marshmallow aixo no ho contempla. # amb csv.DictReader obtindrem un diccionari amb els headers_ps # que li indiquem aqui, en comptes d'anar-los a buscar a l'Schema. # El diccionari el podem utilitzar per passar-li al # self.adapter.load igual que el resultat de l'esquema pattern = '[0-9]{4}-[0-9]{2}-[0-9]{2}_electricidad_sips.csv' encoding = "UTF-8" def __init__(self, strict=False): # l'ordre dels camps segons format cnmc self.headers_ps = [ 'cod_distri', 'name', 'codi_postal', 'direccio', 'poblacio', 'data_alta', 'tarifa', 'tensio', 'pot_max_bie', 'pot_max_puesta', 'tipo_pm', 'indicatiu_icp', 'perfil_consum', 'der_extensio', 'der_acces_llano', # la dada no sabem si es llano, valle o punta 'propietat_equip_mesura', 'propietat_icp', 'potencies_contractades', # n periodes seguits separats per ';' 'data_ulti_mov', 'data_ult_canv', 'data_lim_exten', 'data_ult_lect', 'impago', 'fianza', 'tipo_id_titular', 'id_titular', 'nom_complet', 'direccio_titular', 'primera_vivenda' ] self.adapter = CnmcSipsAdapter(strict=strict) def parse_line(self, line): # passar previament la linia pel csv reader # per que agafi be els camps tot i les comes dins del camp direccio # per fer-ho cal passar-la a StringIO l = StringIO.StringIO(line) reader = csv.DictReader(l, fieldnames=self.headers_ps, delimiter=',') linia = reader.next() # nomes n'hi ha una parsed = {'ps': {}, 'orig': line} result, errors = self.adapter.load(linia) if errors: logger.error(errors) parsed['ps'] = result return parsed, errors