diff options
Diffstat (limited to 'ishtar_common/tasks.py')
| -rw-r--r-- | ishtar_common/tasks.py | 74 | 
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) | 
