diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-09 14:12:36 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-09 14:12:36 +0200 |
commit | ad9727f91af7d1fdde26bb29118d99623d6c65cb (patch) | |
tree | 894769f3c546130512a1b09247c36414c1709f3e /ishtar_common/tasks.py | |
parent | 8a17c17d45a2c9b63c5a70c4a6e3e56cc3c942d4 (diff) | |
download | Ishtar-ad9727f91af7d1fdde26bb29118d99623d6c65cb.tar.bz2 Ishtar-ad9727f91af7d1fdde26bb29118d99623d6c65cb.zip |
Serializers: import action - manage partial export by type of data
Diffstat (limited to 'ishtar_common/tasks.py')
-rw-r--r-- | ishtar_common/tasks.py | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/ishtar_common/tasks.py b/ishtar_common/tasks.py index 631996684..2a968eb0a 100644 --- a/ishtar_common/tasks.py +++ b/ishtar_common/tasks.py @@ -28,7 +28,7 @@ from django.db.models import Q from ishtar_common.models import Town, Department from ishtar_common.utils import task -from ishtar_common.serializers import full_serialization +from ishtar_common.serializers import full_serialization, restore_serialized from archaeological_operations.models import Operation, ArchaeologicalSite from archaeological_context_records.models import ContextRecord @@ -42,6 +42,21 @@ from archaeological_warehouse.views import get_warehouse @task() +def launch_import(import_task): + if import_task.state != 'S': + return + import_task.launch_date = datetime.datetime.now() + import_task.state = 'P' + import_task.save() + + restore_serialized(import_task.source.path, + delete_existing=import_task.delete_before) + import_task.finished_date = datetime.datetime.now() + import_task.state = 'F' + import_task.save() + + +@task() def launch_export(export_task): if export_task.state != 'S': return @@ -49,42 +64,68 @@ def launch_export(export_task): export_task.state = 'P' export_task.save() - kwargs = {} + kwargs = {"info": {}} + + for fltr_key in ("export_types", "export_conf", "export_importers", + "export_geo", "export_dir", "export_docs", "export_items"): + kwargs["info"][fltr_key] = getattr(export_task, fltr_key) + kwargs[fltr_key] = getattr(export_task, fltr_key) + if export_task.filter_type and export_task.filter_text: query = {"search_vector": export_task.filter_text} - kwargs["info"] = {"query": {"filter": export_task.filter_text}} + kwargs["info"]["query"] = {"filter": export_task.filter_text} if export_task.filter_type == "O": kwargs["info"]["query"]["model"] = "Operation" ids = list( get_operation( None, query=query, return_query=True).values_list( "id", flat=True)) - kwargs["operation_queryset"] = Operation.objects.filter(pk__in=ids) + if not ids: + kwargs["operation_queryset"] = Operation.objects.filter( + pk=-1) + else: + kwargs["operation_queryset"] = Operation.objects.filter( + pk__in=ids) elif export_task.filter_type == "S": kwargs["info"]["query"]["model"] = "ArchaeologicalSite" ids = list(get_site( None, query=query, return_query=True).values_list( "id", flat=True)) - kwargs["site_queryset"] = ArchaeologicalSite.objects.filter( - pk__in=ids) + if not ids: + kwargs["site_queryset"] = ArchaeologicalSite.objects.filter( + pk=-1) + else: + kwargs["site_queryset"] = ArchaeologicalSite.objects.filter( + pk__in=ids) elif export_task.filter_type == "CR": kwargs["info"]["query"]["model"] = "ArchaeologicalSite" ids = list(get_contextrecord( None, query=query, return_query=True).values_list( "id", flat=True)) - kwargs["cr_queryset"] = ContextRecord.objects.filter(pk__in=ids) + if not ids: + kwargs["cr_queryset"] = ContextRecord.objects.filter(pk=-1) + else: + kwargs["cr_queryset"] = ContextRecord.objects.filter(pk__in=ids) elif export_task.filter_type == "F": kwargs["info"]["query"]["model"] = "Find" ids = list(get_find( None, query=query, return_query=True ).values_list("id", flat=True)) - kwargs["find_queryset"] = Find.objects.filter(pk__in=ids) + if not ids: + kwargs["find_queryset"] = Find.objects.filter(pk=-1) + else: + kwargs["find_queryset"] = Find.objects.filter(pk__in=ids) elif export_task.filter_type == "W": kwargs["info"]["query"]["model"] = "Warehouse" ids = list(get_warehouse( None, query=query, return_query=True ).values_list("id", flat=True)) - kwargs["warehouse_queryset"] = Warehouse.objects.filter(pk__in=ids) + if not ids: + kwargs["warehouse_queryset"] = Warehouse.objects.filter(pk=-1) + else: + kwargs["warehouse_queryset"] = Warehouse.objects.filter( + pk__in=ids) + kwargs["info"]["geo"] = export_task.geo if not export_task.geo: kwargs["no_geo"] = True archive_name = full_serialization(**kwargs) |