mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-24 09:38:35 +02:00
feat(import): disable cache when running
This commit is contained in:
@@ -7,8 +7,9 @@ from datetime import datetime
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from typing import Dict, Any, Literal, Union
|
from typing import Dict, Any, Literal, Union
|
||||||
|
|
||||||
|
import cachalot.api
|
||||||
import yaml
|
import yaml
|
||||||
from django.db import transaction
|
from cachalot.api import cachalot_disabled
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from apps.accounts.models import Account, AccountGroup
|
from apps.accounts.models import Account, AccountGroup
|
||||||
@@ -277,7 +278,7 @@ class ImportService:
|
|||||||
def _check_duplicate_transaction(self, transaction_data: Dict[str, Any]) -> bool:
|
def _check_duplicate_transaction(self, transaction_data: Dict[str, Any]) -> bool:
|
||||||
for rule in self.deduplication:
|
for rule in self.deduplication:
|
||||||
if rule.type == "compare":
|
if rule.type == "compare":
|
||||||
query = Transaction.objects.all().values("id")
|
query = Transaction.all_objects.all().values("id")
|
||||||
|
|
||||||
# Build query conditions for each field in the rule
|
# Build query conditions for each field in the rule
|
||||||
for field, header in rule.fields.items():
|
for field, header in rule.fields.items():
|
||||||
@@ -484,10 +485,9 @@ class ImportService:
|
|||||||
|
|
||||||
self._log("info", f"Starting import with {self.import_run.total_rows} rows")
|
self._log("info", f"Starting import with {self.import_run.total_rows} rows")
|
||||||
|
|
||||||
with transaction.atomic():
|
for row_number, row in enumerate(reader, start=1):
|
||||||
for row_number, row in enumerate(reader, start=1):
|
self._process_row(row, row_number)
|
||||||
self._process_row(row, row_number)
|
self._increment_totals("processed", value=1)
|
||||||
self._increment_totals("processed", value=1)
|
|
||||||
|
|
||||||
def _validate_file_path(self, file_path: str) -> str:
|
def _validate_file_path(self, file_path: str) -> str:
|
||||||
"""
|
"""
|
||||||
@@ -500,42 +500,46 @@ class ImportService:
|
|||||||
return abs_path
|
return abs_path
|
||||||
|
|
||||||
def process_file(self, file_path: str):
|
def process_file(self, file_path: str):
|
||||||
# Validate and get absolute path
|
with cachalot_disabled():
|
||||||
file_path = self._validate_file_path(file_path)
|
# Validate and get absolute path
|
||||||
|
file_path = self._validate_file_path(file_path)
|
||||||
|
|
||||||
self._update_status("PROCESSING")
|
self._update_status("PROCESSING")
|
||||||
self.import_run.started_at = timezone.now()
|
self.import_run.started_at = timezone.now()
|
||||||
self.import_run.save(update_fields=["started_at"])
|
self.import_run.save(update_fields=["started_at"])
|
||||||
|
|
||||||
self._log("info", "Starting import process")
|
self._log("info", "Starting import process")
|
||||||
|
|
||||||
try:
|
|
||||||
if self.settings.file_type == "csv":
|
|
||||||
self._process_csv(file_path)
|
|
||||||
|
|
||||||
if self.import_run.processed_rows == self.import_run.total_rows:
|
|
||||||
self._update_status("FINISHED")
|
|
||||||
self._log(
|
|
||||||
"info",
|
|
||||||
f"Import completed successfully. "
|
|
||||||
f"Successful: {self.import_run.successful_rows}, "
|
|
||||||
f"Failed: {self.import_run.failed_rows}, "
|
|
||||||
f"Skipped: {self.import_run.skipped_rows}",
|
|
||||||
)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
self._update_status("FAILED")
|
|
||||||
self._log("error", f"Import failed: {str(e)}")
|
|
||||||
raise Exception("Import failed")
|
|
||||||
|
|
||||||
finally:
|
|
||||||
self._log("info", "Cleaning up temporary files")
|
|
||||||
try:
|
try:
|
||||||
if os.path.exists(file_path):
|
if self.settings.file_type == "csv":
|
||||||
os.remove(file_path)
|
self._process_csv(file_path)
|
||||||
self._log("info", f"Deleted temporary file: {file_path}")
|
|
||||||
except OSError as e:
|
|
||||||
self._log("warning", f"Failed to delete temporary file: {str(e)}")
|
|
||||||
|
|
||||||
self.import_run.finished_at = timezone.now()
|
if self.import_run.processed_rows == self.import_run.total_rows:
|
||||||
self.import_run.save(update_fields=["finished_at"])
|
self._update_status("FINISHED")
|
||||||
|
self._log(
|
||||||
|
"info",
|
||||||
|
f"Import completed successfully. "
|
||||||
|
f"Successful: {self.import_run.successful_rows}, "
|
||||||
|
f"Failed: {self.import_run.failed_rows}, "
|
||||||
|
f"Skipped: {self.import_run.skipped_rows}",
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self._update_status("FAILED")
|
||||||
|
self._log("error", f"Import failed: {str(e)}")
|
||||||
|
raise Exception("Import failed")
|
||||||
|
|
||||||
|
finally:
|
||||||
|
self._log("info", "Cleaning up temporary files")
|
||||||
|
try:
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
|
self._log("info", f"Deleted temporary file: {file_path}")
|
||||||
|
except OSError as e:
|
||||||
|
self._log("warning", f"Failed to delete temporary file: {str(e)}")
|
||||||
|
|
||||||
|
self.import_run.finished_at = timezone.now()
|
||||||
|
self.import_run.save(update_fields=["finished_at"])
|
||||||
|
|
||||||
|
if self.import_run.successful_rows >= 1:
|
||||||
|
cachalot.api.invalidate()
|
||||||
|
|||||||
Reference in New Issue
Block a user