diff --git a/mesures/f1.py b/mesures/f1.py index a36d9ef..071ab3e 100644 --- a/mesures/f1.py +++ b/mesures/f1.py @@ -57,9 +57,9 @@ def filename(self): @property def zip_filename(self): - return "{prefix}_{distributor}_{measures_date}_{timestamp}.zip".format( + return "{prefix}_{distributor}_{measures_date}_{timestamp}.{version}.zip".format( prefix=self.prefix, distributor=self.distributor, measures_date=self.measures_date[:10].replace('/', ''), - timestamp=self.generation_date.strftime('%Y%m%d') + timestamp=self.generation_date.strftime('%Y%m%d'), version=self.version ) @property @@ -146,25 +146,33 @@ 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: + 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 + zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin df = (datetime.strptime(daymin, DATETIME_MASK) + timedelta(days=1)).strftime(DATETIME_MASK) self.measures_date = di dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] - # dataf['timestamp'] = dataf['timestamp'].apply(lambda x: x.strftime('%Y/%m/%d %H:%M')) - file_path = os.path.join('/tmp', self.filename) - kwargs = {'sep': ';', - 'header': False, - 'columns': self.columns, - 'index': False, - check_line_terminator_param(): ';\n' - } - if self.default_compression: - kwargs.update({'compression': self.default_compression}) - - dataf.to_csv(file_path, **kwargs) + # Avoid to generate file if dataframe is empty + if len(dataf): + file_path = os.path.join('/tmp', self.filename) + kwargs = {'sep': ';', + 'header': False, + 'columns': self.columns, + 'index': False, + check_line_terminator_param(): ';\n' + } + if self.default_compression: + kwargs.update({'compression': self.default_compression}) + dataf.to_csv(file_path, **kwargs) + zipped_file.write(file_path, arcname=os.path.basename(file_path)) + daymin = df - zipped_file.write(file_path, arcname=os.path.basename(file_path)) zipped_file.close() return zipped_file.filename diff --git a/mesures/f1qh.py b/mesures/f1qh.py index 02391c6..d05f03e 100644 --- a/mesures/f1qh.py +++ b/mesures/f1qh.py @@ -66,25 +66,33 @@ 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: + 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 + zipped_file = ZipFile(os.path.join('/tmp', self.zip_filename), 'w') while daymin <= daymax: di = daymin df = (datetime.strptime(daymin, DATETIME_HOUR_MASK) + timedelta(days=1)).strftime(DATETIME_HOUR_MASK) self.measures_date = di dataf = self.file[(self.file['timestamp'] >= di) & (self.file['timestamp'] < df)] - # dataf['timestamp'] = dataf['timestamp'].apply(lambda x: x.strftime('%Y/%m/%d %H:%M')) - file_path = os.path.join('/tmp', self.filename) - kwargs = {'sep': ';', - 'header': False, - 'columns': self.columns, - 'index': False, - check_line_terminator_param(): ';\n' - } - if self.default_compression: - kwargs.update({'compression': self.default_compression}) + # Avoid to generate file if dataframe is empty + if len(dataf): + file_path = os.path.join('/tmp', self.filename) + kwargs = {'sep': ';', + 'header': False, + 'columns': self.columns, + 'index': False, + check_line_terminator_param(): ';\n' + } + if self.default_compression: + kwargs.update({'compression': self.default_compression}) + dataf.to_csv(file_path, **kwargs) + zipped_file.write(file_path, arcname=os.path.basename(file_path)) - dataf.to_csv(file_path, **kwargs) daymin = df - zipped_file.write(file_path, arcname=os.path.basename(file_path)) zipped_file.close() return zipped_file.filename diff --git a/spec/generation_files_spec.py b/spec/generation_files_spec.py index eadcc8c..3871fc5 100644 --- a/spec/generation_files_spec.py +++ b/spec/generation_files_spec.py @@ -980,7 +980,7 @@ def get_sample_obcups_data(): f = F1(data) assert isinstance(f, F1) - with it('a zip of raw Files'): + with it('is a zip of raw files'): data = SampleData().get_sample_data() f = F1(data) res = f.writer() @@ -1009,7 +1009,7 @@ def get_sample_obcups_data(): expected = 'ES0012345678912345670F;11;2022/01/01 01:00:00;0;10.1;10.2;10.3;10.4;10.5;10.6;0;0;1;1' assert f.file[f.columns].to_csv(sep=';', header=None, index=False).split('\n')[0] == expected - with it('truncate decimals if not allow_decimals parameter is specified'): + with it('truncates decimals if not allow_decimals parameter is specified'): data = SampleData().get_sample_data_with_decimals() f = F1(data) res = f.writer() @@ -1022,7 +1022,7 @@ def get_sample_obcups_data(): f = F1QH(data) assert isinstance(f, F1QH) - with it('a zip of raw Files'): + with it('is a zip of raw files'): data = SampleData().get_sample_f1qh_data() f = F1QH(data) res = f.writer()