From 6b798cea8deb52dfb699539cd7be1df79f7ba7fe Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 1 Oct 2024 16:23:30 +0200 Subject: [PATCH 1/2] Add indicador_envio_medida to CUPSDAT file --- mesures/cupsdat.py | 15 +++++++++++++-- mesures/headers.py | 4 ++++ spec/generation_files_spec.py | 21 +++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/mesures/cupsdat.py b/mesures/cupsdat.py index 217c93b..472a2df 100644 --- a/mesures/cupsdat.py +++ b/mesures/cupsdat.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from mesures.dates import * -from mesures.headers import CUPSDAT_HEADER as COLUMNS +from mesures.headers import CUPSDAT_HEADER as COLUMNS, CUPSDAT_HEADER_2024 as COLUMNS_2024 from mesures.parsers.dummy_data import DummyKeys from mesures.utils import check_line_terminator_param import os @@ -8,14 +8,18 @@ class CUPSDAT(object): - def __init__(self, data, distributor=None, compression='bz2', columns=COLUMNS, version=0): + def __init__(self, data, distributor=None, compression='bz2', columns=COLUMNS, include_measure_indicator=False, + version=0): """ :param data: list of dicts or absolute file_path :param distributor: str distributor REE code :param compression: 'bz2', 'gz'... OR False otherwise + :param include_measure_indicator: boolean (indicates if new columns is included) """ data = DummyKeys(data).data self.columns = columns + if include_measure_indicator: + self.columns = COLUMNS_2024 self.file = self.reader(data) self.generation_date = datetime.now() self.prefix = 'CUPSDAT' @@ -70,6 +74,13 @@ def reader(self, file_path): if row['fecha_hora_final_vigencia'] == '' else datetime.strptime(row['fecha_hora_final_vigencia'], '%Y-%m-%d %H').strftime(DATE_MASK), axis=1) + # Patch indicador_tipo_medida if needed + if 'indicador_envio_medida' in self.columns: + df['indicador_envio_medida'] = df.apply( + lambda row: 'Q' + if row['tipo'] in ('1', '2') or not row.get('indicador_envio_medida', False) + else row['indicador_envio_medida'], axis=1) + return df[self.columns] def writer(self): diff --git a/mesures/headers.py b/mesures/headers.py index b18d524..d3db03b 100644 --- a/mesures/headers.py +++ b/mesures/headers.py @@ -192,6 +192,10 @@ 'tension' # str(2) ] +CUPSDAT_HEADER_2024 = CUPSDAT_HEADER + [ + 'indicador_envio_medida' # str(1) in ('Q', 'H') +] + CUPSELECTRO_HEADER = [ 'cups', # str(22) 'cif_empresa', # str(9) diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index 02994c2..7bb336a 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -644,6 +644,12 @@ def get_sample_cupsdat_data(): 'tension': '27' }] + @staticmethod + def get_sample_cupsdat_data_isp_2024(): + res = SampleData().get_sample_cupsdat_data() + res[0].update({'indicador_envio_medida': 'Q'}) + return res + @staticmethod def get_sample_cups45_data(): return [{ @@ -1294,6 +1300,21 @@ def get_sample_reobjecil_data(): 'E2;6A;G0;A;GI;400;400;400;400;400;500;1091;2022/10/17 01;3000/01/01 00;17005;S;27\n' assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected + with it('has new field indicador_envio_medida if it is specified in function call'): + data = SampleData().get_sample_cupsdat_data_isp_2024() + f = CUPSDAT(data, include_measure_indicator=True) + assert 'indicador_envio_medida' in f.columns + + with it('has its expected content when indicador_envio_medida is included'): + data = SampleData().get_sample_cupsdat_data_isp_2024() + f = CUPSDAT(data, include_measure_indicator=True) + res = f.writer() + expected = 'ES0291000000004444QR1F;CUPS de Demo 01;X0004444;4444;5555;2;' \ + 'E2;6A;G0;A;GI;400;400;400;400;400;500;1091;2022/10/01 01;2022/10/17 00;17005;S;27;Q\n' \ + 'ES0291000000005555QR1F;CUPS de Demo 02;X0005555;4444;5555;2;' \ + 'E2;6A;G0;A;GI;400;400;400;400;400;500;1091;2022/10/17 01;3000/01/01 00;17005;S;27;Q\n' + assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected + with description('A CUPS45'): with it('is instance of CUPS45 Class'): data = SampleData().get_sample_cups45_data() From 12d53215aa679905786ed26c6604384c5f96ff29 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 1 Oct 2024 16:43:00 +0200 Subject: [PATCH 2/2] Renaming indicator in class param --- mesures/cupsdat.py | 6 +++--- spec/generation_files_spec.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mesures/cupsdat.py b/mesures/cupsdat.py index 472a2df..b2a5ebb 100644 --- a/mesures/cupsdat.py +++ b/mesures/cupsdat.py @@ -8,17 +8,17 @@ class CUPSDAT(object): - def __init__(self, data, distributor=None, compression='bz2', columns=COLUMNS, include_measure_indicator=False, + def __init__(self, data, distributor=None, compression='bz2', columns=COLUMNS, include_measure_type_indicator=False, version=0): """ :param data: list of dicts or absolute file_path :param distributor: str distributor REE code :param compression: 'bz2', 'gz'... OR False otherwise - :param include_measure_indicator: boolean (indicates if new columns is included) + :param include_measure_type_indicator: boolean (indicates if new columns is included) """ data = DummyKeys(data).data self.columns = columns - if include_measure_indicator: + if include_measure_type_indicator: self.columns = COLUMNS_2024 self.file = self.reader(data) self.generation_date = datetime.now() diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index 7bb336a..ae2a779 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -1302,12 +1302,12 @@ def get_sample_reobjecil_data(): with it('has new field indicador_envio_medida if it is specified in function call'): data = SampleData().get_sample_cupsdat_data_isp_2024() - f = CUPSDAT(data, include_measure_indicator=True) + f = CUPSDAT(data, include_measure_type_indicator=True) assert 'indicador_envio_medida' in f.columns with it('has its expected content when indicador_envio_medida is included'): data = SampleData().get_sample_cupsdat_data_isp_2024() - f = CUPSDAT(data, include_measure_indicator=True) + f = CUPSDAT(data, include_measure_type_indicator=True) res = f.writer() expected = 'ES0291000000004444QR1F;CUPS de Demo 01;X0004444;4444;5555;2;' \ 'E2;6A;G0;A;GI;400;400;400;400;400;500;1091;2022/10/01 01;2022/10/17 00;17005;S;27;Q\n' \