From 2f9f9ec1092e9a3c8e2acf23be6ad80581d561dd Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 13:07:49 +0200 Subject: [PATCH 01/10] Improve version control to avoid collisions --- mesures/f1.py | 10 +++++++--- mesures/f1qh.py | 10 +++++++--- mesures/mcil345.py | 8 ++++++-- mesures/mcil345qh.py | 8 ++++++-- mesures/p1.py | 8 ++++++-- mesures/p1d.py | 2 +- mesures/p2.py | 2 +- mesures/p2d.py | 2 +- mesures/p5d.py | 2 +- 9 files changed, 36 insertions(+), 16 deletions(-) diff --git a/mesures/f1.py b/mesures/f1.py index 071ab3e..4892d1b 100644 --- a/mesures/f1.py +++ b/mesures/f1.py @@ -149,9 +149,9 @@ def writer(self): existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] - if versions: - self.version = max(versions) + 1 + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: @@ -161,6 +161,10 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + if existing_files: + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] + if versions: + self.version = max(versions) + 1 file_path = os.path.join('/tmp', self.filename) kwargs = {'sep': ';', 'header': False, diff --git a/mesures/f1qh.py b/mesures/f1qh.py index d05f03e..b7ca118 100644 --- a/mesures/f1qh.py +++ b/mesures/f1qh.py @@ -69,9 +69,9 @@ def writer(self): existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] - if versions: - self.version = max(versions) + 1 + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: @@ -81,6 +81,10 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + if existing_files: + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] + if versions: + self.version = max(versions) + 1 file_path = os.path.join('/tmp', self.filename) kwargs = {'sep': ';', 'header': False, diff --git a/mesures/mcil345.py b/mesures/mcil345.py index c74fe43..f05e85b 100644 --- a/mesures/mcil345.py +++ b/mesures/mcil345.py @@ -150,6 +150,11 @@ def writer(self): daymin = self.file['timestamp'].min() daymax = self.file['timestamp'].max() self.measures_date = daymin + existing_files = os.listdir('/tmp') + if existing_files: + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -158,9 +163,8 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): - existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 diff --git a/mesures/mcil345qh.py b/mesures/mcil345qh.py index d188b5d..39f19ae 100644 --- a/mesures/mcil345qh.py +++ b/mesures/mcil345qh.py @@ -70,6 +70,11 @@ def writer(self): daymin = self.file['timestamp'].min() daymax = self.file['timestamp'].max() self.measures_date = daymin + existing_files = os.listdir('/tmp') + if existing_files: + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -78,9 +83,8 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): - existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 diff --git a/mesures/p1.py b/mesures/p1.py index 0cdc28d..a5fdcc4 100644 --- a/mesures/p1.py +++ b/mesures/p1.py @@ -141,6 +141,11 @@ def writer(self): daymin = self.file['timestamp'].min() daymax = self.file['timestamp'].max() self.measures_date = daymin + existing_files = os.listdir('/tmp') + if existing_files: + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -148,9 +153,8 @@ def writer(self): self.measures_date = di dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] if len(dataf): - existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 # dataf['timestamp'] = dataf['timestamp'].apply(lambda x: x.strftime(DATETIME_HOUR_MASK)) diff --git a/mesures/p1d.py b/mesures/p1d.py index 5acfc7d..813b952 100644 --- a/mesures/p1d.py +++ b/mesures/p1d.py @@ -44,7 +44,7 @@ def writer(self): """ existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 diff --git a/mesures/p2.py b/mesures/p2.py index 5e0e65b..dd1312e 100644 --- a/mesures/p2.py +++ b/mesures/p2.py @@ -76,7 +76,7 @@ def writer(self): if len(dataf): existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] if versions: self.version = max(versions) + 1 diff --git a/mesures/p2d.py b/mesures/p2d.py index 0ae1f80..611ee25 100644 --- a/mesures/p2d.py +++ b/mesures/p2d.py @@ -46,7 +46,7 @@ def writer(self): """ existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 diff --git a/mesures/p5d.py b/mesures/p5d.py index 79b24ab..f97ae9e 100644 --- a/mesures/p5d.py +++ b/mesures/p5d.py @@ -106,7 +106,7 @@ def writer(self): """ existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 From 03e972499531b9204cab4401e5ea8abf8cb82f2c Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 13:16:35 +0200 Subject: [PATCH 02/10] Update GH template --- .github/pull_request_template.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a6443dc..676fbf6 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,7 +12,8 @@ ## Relacionado -*Puedes ver todas las [posibles palabras para accionesa automáticas con el mensaje](https://help.github.com/articles/closing-issues-using-keywords/)* +- Puedes ver todas las [posibles palabras para accionesa automáticas con el mensaje](https://help.github.com/articles/closing-issues-using-keywords/)* +- Origen de la tarea: TASK- ## Checklist From b9aceb369eb20e5e3ac47ebcfc4718adc24b5564 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 13:20:36 +0200 Subject: [PATCH 03/10] Improve version control to avoid collisions #2 --- mesures/f5d.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mesures/f5d.py b/mesures/f5d.py index 42f9360..c26fdaf 100644 --- a/mesures/f5d.py +++ b/mesures/f5d.py @@ -113,11 +113,13 @@ def writer(self): :return: file path of generated F5D File """ existing_files = os.listdir('/tmp') - if self.default_compression != 'zip': - if existing_files: + if existing_files: + if self.default_compression != 'zip': versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] - if versions: - self.version = max(versions) + 1 + else: + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' in f] + if versions: + self.version = max(versions) + 1 file_path = os.path.join('/tmp', self.filename) kwargs = {'sep': ';', From 5f78c565a203694cf53493c19127e6f0dca3057a Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 15:06:46 +0200 Subject: [PATCH 04/10] New tests for F1, F1QH, F5D and P5D --- mesures/f1.py | 5 +++++ mesures/f1qh.py | 5 +++++ mesures/f5d.py | 7 ++----- spec/generation_files_spec.py | 36 +++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/mesures/f1.py b/mesures/f1.py index 4892d1b..03e4e6b 100644 --- a/mesures/f1.py +++ b/mesures/f1.py @@ -153,6 +153,8 @@ def writer(self): if zip_versions: self.version = max(zip_versions) + 1 + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -161,6 +163,7 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + existing_files = os.listdir('/tmp') if existing_files: versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: @@ -179,4 +182,6 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version return zipped_file.filename diff --git a/mesures/f1qh.py b/mesures/f1qh.py index b7ca118..0130536 100644 --- a/mesures/f1qh.py +++ b/mesures/f1qh.py @@ -73,6 +73,8 @@ def writer(self): if zip_versions: self.version = max(zip_versions) + 1 + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -81,6 +83,7 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + existing_files = os.listdir('/tmp') if existing_files: versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: @@ -99,4 +102,6 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version return zipped_file.filename diff --git a/mesures/f5d.py b/mesures/f5d.py index c26fdaf..477d0de 100644 --- a/mesures/f5d.py +++ b/mesures/f5d.py @@ -113,11 +113,8 @@ def writer(self): :return: file path of generated F5D File """ existing_files = os.listdir('/tmp') - if existing_files: - if self.default_compression != 'zip': - versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] - else: - versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' in f] + if existing_files and self.default_compression != 'zip': + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index 9560cd9..da05229 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -979,6 +979,15 @@ def get_sample_obcups_data(): expected = 'ES0012345678912345670F;2020/01/01 01:00;0;0;0' assert f.file[f.columns].to_csv(sep=';', header=None, index=False).split('\n')[0] == expected + with it('uses version control for ZIP'): + data = SampleData().get_sample_p5d_data() + f = P5D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 2 # 3th P5D file generated in tests + f = P5D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 3 # 4th P5D file generated in tests + with description('An F5D'): with it('is instance of F5D Class'): data = SampleData().get_sample_f5d_data() @@ -1024,6 +1033,15 @@ def get_sample_obcups_data(): expected = 'ES0012345678912345670F;2020/01/01 01:00;0;0;0;0;0;0;0;1;0;FE20214444;1000;1000' assert f.file[f.columns].to_csv(sep=';', header=None, index=False).split('\n')[0] == expected + with it('uses version control for ZIP'): + data = SampleData().get_sample_f5d_data() + f = F5D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 4 # 5th F5D file generated in tests + f = F5D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 5 # 6th F5D file generated in tests + with description('An F1'): with it('is instance of F1 Class'): data = SampleData().get_sample_data() @@ -1066,6 +1084,15 @@ def get_sample_obcups_data(): expected = 'ES0012345678912345670F;11;2022/01/01 01:00:00;0;10;10;10;10;10;10;0;0;1;1' assert f.file[f.columns].to_csv(sep=';', header=None, index=False).split('\n')[0] == expected + with it('uses version control for ZIP'): + data = SampleData().get_sample_data() + f = F1(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 5 # 6th F1 file generated in tests + f = F1(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 6 # 7th F1 file generated in tests + with description('An F1QH'): with it('is instance of F1QH Class'): data = SampleData().get_sample_f1qh_data() @@ -1094,6 +1121,15 @@ def get_sample_obcups_data(): expected = 'ES0012345678912345670F;11;2022/01/01 00:15;0;10;10;10;10;10;10;0;0;1;1' assert f.file[f.columns].to_csv(sep=';', header=None, index=False).split('\n')[0] == expected + with it('Uses version control for ZIP'): + data = SampleData().get_sample_f1qh_data() + f = F1QH(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 3 # 4th F1QH file generated in tests + f = F1QH(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 4 # 5th F1QH file generated in tests + with description('An AGRECL'): with it('with compression=False must be a raw file'): From 408da92b9aa551785cf98c2633d4479a3d3f3881 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 15:08:48 +0200 Subject: [PATCH 05/10] New tests for MCIL345 and MCIL345QH --- mesures/mcil345.py | 6 ++++++ mesures/mcil345qh.py | 6 ++++++ spec/generation_files_spec.py | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/mesures/mcil345.py b/mesures/mcil345.py index f05e85b..ea59f3a 100644 --- a/mesures/mcil345.py +++ b/mesures/mcil345.py @@ -155,6 +155,9 @@ def writer(self): zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] if zip_versions: self.version = max(zip_versions) + 1 + + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -163,6 +166,7 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + existing_files = os.listdir('/tmp') if existing_files: versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: @@ -182,4 +186,6 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version return zipped_file.filename diff --git a/mesures/mcil345qh.py b/mesures/mcil345qh.py index 39f19ae..8c89506 100644 --- a/mesures/mcil345qh.py +++ b/mesures/mcil345qh.py @@ -75,6 +75,9 @@ def writer(self): zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] if zip_versions: self.version = max(zip_versions) + 1 + + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -83,6 +86,7 @@ def writer(self): dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] # Avoid to generate file if dataframe is empty if len(dataf): + existing_files = os.listdir('/tmp') if existing_files: versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: @@ -102,4 +106,6 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version return zipped_file.filename \ No newline at end of file diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index da05229..c335c85 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -1553,6 +1553,15 @@ def get_sample_obcups_data(): 'ES0291000000005555QR1F001;2022/09/01 01;1;180;0;11;22;33;44;R\n' assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected + with it('Uses version control for ZIP'): + data = SampleData().get_sample_mcil345_data() + f = MCIL345(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 2 # 3rd MCIL345 file generated in tests + f = MCIL345(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 3 # 4th MCIL345 file generated in tests + with description('A MCIL345QH'): with it('is instance of MCIL345QH Class'): data = SampleData().get_sample_mcil345qh_data() @@ -1582,6 +1591,15 @@ def get_sample_obcups_data(): 'ES0291000000005555QR1F001;2022/09/01 00:30;1;180;0;11;22;33;44;R\n' assert f.file[f.columns].to_csv(sep=';', header=None, index=False) == expected + with it('Uses version control for ZIP'): + data = SampleData().get_sample_mcil345qh_data() + f = MCIL345QH(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 2 # 3rd MCIL345QH file generated in tests + f = MCIL345QH(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 3 # 4th MCIL345QH file generated in tests + with description('A CILDAT'): with it('is instance of CILDAT Class'): data = SampleData().get_sample_cildat_data() From 39663d6c7906cb58ab32b1594b949646d5b7f271 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 15:11:57 +0200 Subject: [PATCH 06/10] New tests for P1D --- spec/generation_files_spec.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index c335c85..4c8bee3 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -1238,6 +1238,15 @@ def get_sample_obcups_data(): f1 = f.writer() assert isinstance(f1, str) + with it('Uses version control for ZIP'): + data = SampleData().get_sample_data() + f = P1D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 1 # 2nd P1D file generated in tests + f = P1D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 2 # 3rd P1D file generated in tests + with description('A P2D'): with it('is instance of P2D Class'): data = SampleData().get_sample_p2d_data() From ab94b763019725438f12d6af1a88eb8740c3ae61 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Tue, 2 Sep 2025 15:27:50 +0200 Subject: [PATCH 07/10] New tests for P1 and P2 --- mesures/p1.py | 7 +++++++ mesures/p2.py | 12 +++++++++++- spec/generation_files_spec.py | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/mesures/p1.py b/mesures/p1.py index a5fdcc4..9899f7c 100644 --- a/mesures/p1.py +++ b/mesures/p1.py @@ -24,6 +24,7 @@ def __init__(self, data, distributor=None, compression='bz2', columns=COLUMNS, v self.version = version self.distributor = distributor self.default_compression = compression + self.measures_date = None def __repr__(self): return "{}: {} kWh".format(self.filename, self.total) @@ -146,6 +147,9 @@ def writer(self): zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] if zip_versions: self.version = max(zip_versions) + 1 + + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -153,6 +157,7 @@ def writer(self): self.measures_date = di dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] if len(dataf): + existing_files = os.listdir('/tmp') if existing_files: versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: @@ -173,6 +178,8 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version new_zip_filename = os.path.join('/tmp', self.zip_filename) os.rename(zipped_file.filename, new_zip_filename) zipped_file.filename = new_zip_filename diff --git a/mesures/p2.py b/mesures/p2.py index dd1312e..02b0cb0 100644 --- a/mesures/p2.py +++ b/mesures/p2.py @@ -65,6 +65,14 @@ def writer(self): daymin = self.file['timestamp'].min() daymax = self.file['timestamp'].max() self.measures_date = daymin + existing_files = os.listdir('/tmp') + if existing_files: + zip_versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + if zip_versions: + self.version = max(zip_versions) + 1 + + zip_measures_date = self.measures_date + zip_version = self.version zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin @@ -76,7 +84,7 @@ def writer(self): if len(dataf): existing_files = os.listdir('/tmp') if existing_files: - versions = [int(f.split('.')[1]) for f in existing_files if self.zip_filename.split('.')[0] in f and '.zip' in f] + versions = [int(f.split('.')[1]) for f in existing_files if self.filename.split('.')[0] in f and '.zip' not in f] if versions: self.version = max(versions) + 1 @@ -94,4 +102,6 @@ def writer(self): daymin = df zipped_file.close() + self.measures_date = zip_measures_date + self.version = zip_version return zipped_file.filename \ No newline at end of file diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index 4c8bee3..fd57735 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -1223,6 +1223,15 @@ def get_sample_obcups_data(): assert name.endswith('.bz2') file_bz2 = bz2.decompress(zip_file.read(name)) + with it('Uses version control for ZIP'): + data = SampleData().get_sample_data() + f = P1(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 1 # 2nd P1 file generated in tests with None partner + f = P1(data) + res = f.writer() + assert int(f.zip_filename.split('.')[1]) == 2 # 3rd P1 file generated in tests with None partner + with description('A P1D'): with it('is instance of P1D Class'): data = SampleData().get_sample_data() @@ -1263,6 +1272,15 @@ def get_sample_obcups_data(): f1 = f.writer() assert isinstance(f1, str) + with it('Uses version control for ZIP'): + data = SampleData().get_sample_p2d_data() + f = P2D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 2 # 3rd P2D file generated in tests + f = P2D(data) + res = f.writer() + assert int(f.filename.split('.')[1]) == 3 # 4th P2D file generated in tests + with description('An A5D'): with it('bz2 as a default compression'): f = A5D([{'cups': 'XDS', 'timestamp': datetime.now(), 'season': 1, 'ai': 0, 'factura': 123}], compression='bz2') From 43c5062648c61682aa903a53c28b9a60665986bc Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 4 Sep 2025 17:21:51 +0200 Subject: [PATCH 08/10] Fix P2D naming --- mesures/p2d.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mesures/p2d.py b/mesures/p2d.py index 611ee25..49cc2e5 100644 --- a/mesures/p2d.py +++ b/mesures/p2d.py @@ -21,7 +21,7 @@ def __init__(self, data, distributor=None, comer=None, compression='bz2', column @property def filename(self): - filename = "{prefix}_{distributor}_{comer}_{measures_date}_{timestamp}.{version}".format( + filename = "{prefix}_{distributor}_{comer}_{timestamp}.{version}".format( prefix=self.prefix, distributor=self.distributor, comer=self.comer, measures_date=self.measures_date[:10].replace('/', ''), timestamp=self.generation_date.strftime('%Y%m%d'), version=self.version @@ -33,7 +33,7 @@ def filename(self): @property def zip_filename(self): - return "{prefix}_{distributor}_{comer}_{measures_date}_{timestamp}.{version}.zip".format( + return "{prefix}_{distributor}_{comer}_{timestamp}.{version}.zip".format( prefix=self.prefix, distributor=self.distributor, comer=self.comer, measures_date=self.measures_date[:10].replace('/', ''), timestamp=self.generation_date.strftime(SIMPLE_DATE_MASK), From 1fc1da316224e3302f127e7351eccb1218260fa9 Mon Sep 17 00:00:00 2001 From: davidmunoznovoa Date: Thu, 4 Sep 2025 17:40:52 +0200 Subject: [PATCH 09/10] Remove unnecessary parameter for file name building --- mesures/p2d.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mesures/p2d.py b/mesures/p2d.py index 49cc2e5..c01d20c 100644 --- a/mesures/p2d.py +++ b/mesures/p2d.py @@ -23,7 +23,6 @@ def __init__(self, data, distributor=None, comer=None, compression='bz2', column def filename(self): filename = "{prefix}_{distributor}_{comer}_{timestamp}.{version}".format( prefix=self.prefix, distributor=self.distributor, comer=self.comer, - measures_date=self.measures_date[:10].replace('/', ''), timestamp=self.generation_date.strftime('%Y%m%d'), version=self.version ) if self.default_compression: @@ -35,7 +34,6 @@ def filename(self): def zip_filename(self): return "{prefix}_{distributor}_{comer}_{timestamp}.{version}.zip".format( prefix=self.prefix, distributor=self.distributor, comer=self.comer, - measures_date=self.measures_date[:10].replace('/', ''), timestamp=self.generation_date.strftime(SIMPLE_DATE_MASK), version=self.version ) From 5aba91aef5cda8ffffab448879f48d964f95d9c2 Mon Sep 17 00:00:00 2001 From: giscegit Date: Mon, 8 Sep 2025 08:31:40 +0000 Subject: [PATCH 10/10] Bump to v3.3.0 --- .bumpversion.cfg | 2 +- mesures/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 3cb5b5d..5075a3e 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,2 +1,2 @@ [bumpversion] -current_version = 3.2.0 +current_version = 3.3.0 diff --git a/mesures/__init__.py b/mesures/__init__.py index 0e9e5f2..f1a383b 100644 --- a/mesures/__init__.py +++ b/mesures/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -__version__ = '3.2.0' +__version__ = '3.3.0' __author__ = 'GISCE-TI S.L.'