|
|
@ -7,28 +7,43 @@ from django.shortcuts import get_object_or_404 |
|
|
|
from django_drf_filepond.api import store_upload |
|
|
|
from django_drf_filepond.models import TemporaryUpload |
|
|
|
|
|
|
|
from .pipeline.exceptions import MaximumFileSizeException |
|
|
|
from .pipeline.factories import create_builder, create_cleaner, create_parser |
|
|
|
from .pipeline.readers import Reader |
|
|
|
from .pipeline.writers import BulkWriter |
|
|
|
from projects.models import Project |
|
|
|
|
|
|
|
|
|
|
|
def check_uploaded_files(upload_ids: List[str]): |
|
|
|
errors = [] |
|
|
|
cleaned_ids = [] |
|
|
|
temporary_uploads = TemporaryUpload.objects.filter(upload_id__in=upload_ids) |
|
|
|
for tu in temporary_uploads: |
|
|
|
if tu.file.size > settings.MAX_UPLOAD_SIZE: |
|
|
|
errors.append(MaximumFileSizeException(tu.upload_name, settings.MAX_UPLOAD_SIZE).dict()) |
|
|
|
tu.delete() |
|
|
|
continue |
|
|
|
cleaned_ids.append(tu.upload_id) |
|
|
|
return cleaned_ids, errors |
|
|
|
|
|
|
|
|
|
|
|
@shared_task |
|
|
|
def import_dataset(user_id, project_id, file_format: str, upload_ids: List[str], **kwargs): |
|
|
|
project = get_object_or_404(Project, pk=project_id) |
|
|
|
user = get_object_or_404(get_user_model(), pk=user_id) |
|
|
|
|
|
|
|
upload_ids, errors = check_uploaded_files(upload_ids) |
|
|
|
temporary_uploads = TemporaryUpload.objects.filter(upload_id__in=upload_ids) |
|
|
|
file_names = [tu.get_file_path() for tu in temporary_uploads] |
|
|
|
save_names = {tu.get_file_path(): tu.file.name for tu in temporary_uploads} |
|
|
|
|
|
|
|
project = get_object_or_404(Project, pk=project_id) |
|
|
|
user = get_object_or_404(get_user_model(), pk=user_id) |
|
|
|
|
|
|
|
parser = create_parser(file_format, **kwargs) |
|
|
|
builder = create_builder(project, **kwargs) |
|
|
|
reader = Reader(filenames=file_names, parser=parser, builder=builder) |
|
|
|
cleaner = create_cleaner(project) |
|
|
|
writer = BulkWriter(batch_size=settings.IMPORT_BATCH_SIZE, save_names=save_names) |
|
|
|
writer.save(reader, project, user, cleaner) |
|
|
|
return {"error": writer.errors} |
|
|
|
return {"error": writer.errors + errors} |
|
|
|
|
|
|
|
|
|
|
|
@shared_task |
|
|
|