Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 61 additions & 12 deletions anonyfiles_core/anonymizer/csv_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
from .base_processor import BaseProcessor
import aiofiles
import io
import logging

logger = logging.getLogger(__name__)
# apply_positional_replacements n'est plus nécessaire ici car le traitement se fait dans anonyfiles_core

class CsvProcessor(BaseProcessor):
Expand Down Expand Up @@ -35,7 +38,11 @@ def extract_blocks(self, input_path: Path, **kwargs) -> List[str]:
except FileNotFoundError:
raise
except Exception as e:
print(f"Erreur lors de l'extraction des blocs du CSV {input_path}: {e}")
logger.error(
"Erreur lors de l'extraction des blocs du CSV %s: %s",
input_path,
e,
)
return []
return cell_texts

Expand All @@ -53,7 +60,11 @@ async def extract_blocks_async(self, input_path: Path, **kwargs) -> List[str]:
except FileNotFoundError:
raise
except Exception as e:
print(f"Erreur lors de l'extraction des blocs du CSV {input_path}: {e}")
logger.error(
"Erreur lors de l'extraction des blocs du CSV %s: %s",
input_path,
e,
)
return []
return cell_texts

Expand Down Expand Up @@ -86,13 +97,20 @@ def reconstruct_and_write_anonymized_file(
for row_orig in reader_orig:
original_row_structures.append(len(row_orig))
except FileNotFoundError:
print(f"Erreur critique : Fichier original {original_input_path} non trouvé lors de la reconstruction.")
logger.error(
"Erreur critique : Fichier original %s non trouvé lors de la reconstruction.",
original_input_path,
)
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, mode='w', encoding='utf-8', newline='') as fout:
pass
return
except Exception as e:
print(f"Erreur lors de la lecture du fichier CSV original {original_input_path} pour reconstruction : {e}")
logger.error(
"Erreur lors de la lecture du fichier CSV original %s pour reconstruction : %s",
original_input_path,
e,
)
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, mode='w', encoding='utf-8', newline='') as fout:
if header_row:
Expand All @@ -103,7 +121,12 @@ def reconstruct_and_write_anonymized_file(
current_block_index = 0
for num_cols_in_original_row in original_row_structures:
if current_block_index + num_cols_in_original_row > len(final_processed_blocks):
print(f"Avertissement : Pas assez de blocs traités pour reconstruire la ligne avec {num_cols_in_original_row} colonnes. Index actuel: {current_block_index}, Blocs restants: {len(final_processed_blocks) - current_block_index}")
logger.warning(
"Pas assez de blocs traités pour reconstruire la ligne avec %s colonnes. Index actuel: %s, Blocs restants: %s",
num_cols_in_original_row,
current_block_index,
len(final_processed_blocks) - current_block_index,
)
actual_cols_to_take = min(num_cols_in_original_row, len(final_processed_blocks) - current_block_index)
new_row = final_processed_blocks[current_block_index : current_block_index + actual_cols_to_take]
new_row.extend([""] * (num_cols_in_original_row - actual_cols_to_take))
Expand All @@ -114,15 +137,22 @@ def reconstruct_and_write_anonymized_file(
current_block_index += num_cols_in_original_row

if current_block_index < len(final_processed_blocks):
print(f"Avertissement : {len(final_processed_blocks) - current_block_index} blocs traités n'ont pas été utilisés dans la reconstruction du CSV.")
logger.warning(
"%s blocs traités n'ont pas été utilisés dans la reconstruction du CSV.",
len(final_processed_blocks) - current_block_index,
)

output_path.parent.mkdir(parents=True, exist_ok=True)
try:
with open(output_path, mode='w', encoding='utf-8', newline='') as fout:
writer = csv.writer(fout)
writer.writerows(anonymized_rows)
except Exception as e:
print(f"Erreur lors de l'écriture du fichier CSV anonymisé {output_path}: {e}")
logger.error(
"Erreur lors de l'écriture du fichier CSV anonymisé %s: %s",
output_path,
e,
)

async def reconstruct_and_write_anonymized_file_async(
self,
Expand Down Expand Up @@ -150,13 +180,20 @@ async def reconstruct_and_write_anonymized_file_async(
for row_orig in reader_orig:
original_row_structures.append(len(row_orig))
except FileNotFoundError:
print(f"Erreur critique : Fichier original {original_input_path} non trouvé lors de la reconstruction.")
logger.error(
"Erreur critique : Fichier original %s non trouvé lors de la reconstruction.",
original_input_path,
)
output_path.parent.mkdir(parents=True, exist_ok=True)
async with aiofiles.open(output_path, mode='w', encoding='utf-8', newline='') as fout:
pass
return
except Exception as e:
print(f"Erreur lors de la lecture du fichier CSV original {original_input_path} pour reconstruction : {e}")
logger.error(
"Erreur lors de la lecture du fichier CSV original %s pour reconstruction : %s",
original_input_path,
e,
)
output_path.parent.mkdir(parents=True, exist_ok=True)
async with aiofiles.open(output_path, mode='w', encoding='utf-8', newline='') as fout:
if header_row:
Expand All @@ -169,7 +206,12 @@ async def reconstruct_and_write_anonymized_file_async(
current_block_index = 0
for num_cols_in_original_row in original_row_structures:
if current_block_index + num_cols_in_original_row > len(final_processed_blocks):
print(f"Avertissement : Pas assez de blocs traités pour reconstruire la ligne avec {num_cols_in_original_row} colonnes. Index actuel: {current_block_index}, Blocs restants: {len(final_processed_blocks) - current_block_index}")
logger.warning(
"Pas assez de blocs traités pour reconstruire la ligne avec %s colonnes. Index actuel: %s, Blocs restants: %s",
num_cols_in_original_row,
current_block_index,
len(final_processed_blocks) - current_block_index,
)
actual_cols_to_take = min(num_cols_in_original_row, len(final_processed_blocks) - current_block_index)
new_row = final_processed_blocks[current_block_index : current_block_index + actual_cols_to_take]
new_row.extend([""] * (num_cols_in_original_row - actual_cols_to_take))
Expand All @@ -180,7 +222,10 @@ async def reconstruct_and_write_anonymized_file_async(
current_block_index += num_cols_in_original_row

if current_block_index < len(final_processed_blocks):
print(f"Avertissement : {len(final_processed_blocks) - current_block_index} blocs traités n'ont pas été utilisés dans la reconstruction du CSV.")
logger.warning(
"%s blocs traités n'ont pas été utilisés dans la reconstruction du CSV.",
len(final_processed_blocks) - current_block_index,
)

output_path.parent.mkdir(parents=True, exist_ok=True)
try:
Expand All @@ -190,4 +235,8 @@ async def reconstruct_and_write_anonymized_file_async(
async with aiofiles.open(output_path, mode='w', encoding='utf-8', newline='') as fout:
await fout.write(csv_buffer.getvalue())
except Exception as e:
print(f"Erreur lors de l'écriture du fichier CSV anonymisé {output_path}: {e}")
logger.error(
"Erreur lors de l'écriture du fichier CSV anonymisé %s: %s",
output_path,
e,
)
Loading