summaryrefslogtreecommitdiff
path: root/ishtar_common/tasks.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/tasks.py')
-rw-r--r--ishtar_common/tasks.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/ishtar_common/tasks.py b/ishtar_common/tasks.py
index a8db97bb1..a68a30b86 100644
--- a/ishtar_common/tasks.py
+++ b/ishtar_common/tasks.py
@@ -17,14 +17,87 @@
# See the file COPYING for details.
+import datetime
+
+import os
import sys
from django.conf import settings
+from django.core.files import File
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 archaeological_operations.models import Operation, ArchaeologicalSite
+from archaeological_context_records.models import ContextRecord
+from archaeological_finds.models import Find
+from archaeological_warehouse.models import Warehouse
+
+from archaeological_operations.views import get_operation, get_site
+from archaeological_context_records.views import get_contextrecord
+from archaeological_finds.views import get_find
+from archaeological_warehouse.views import get_warehouse
+
+
+@task()
+def launch_export(export_task):
+ if export_task.state != 'S':
+ return
+ export_task.launch_date = datetime.datetime.now()
+ export_task.state = 'P'
+ export_task.save()
+
+ kwargs = {}
+ 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}}
+ 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)
+ 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)
+ 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)
+ 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)
+ 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 export_task.geo:
+ kwargs["no_geo"] = True
+ archive_name = full_serialization(**kwargs)
+ result = open(archive_name, "rb")
+ export_task.result.save(archive_name.split(os.sep)[-1], File(result))
+ os.remove(archive_name)
+ export_task.finished_date = datetime.datetime.now()
+ export_task.state = 'F'
+ export_task.save()
+
def load_towns():
+ # TODO: remove?
from geodjangofla.models import Commune
q = None
for dpt_number in settings.ISHTAR_DPTS:
@@ -55,6 +128,7 @@ def load_towns():
return nb, updated
def update_towns():
+ # TODO: remove?
nb, updated = 0, 0
dpts = dict([(dpt.number, dpt) for dpt in Department.objects.all()])
q = Town.objects.filter(numero_insee__isnull=False)