summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py78
1 files changed, 35 insertions, 43 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 3161e0003..08e7a49b4 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -65,6 +65,7 @@ from django.core.files.storage import FileSystemStorage
from django.core.validators import EMPTY_VALUES, MaxValueValidator
from django.db import models
from django.db.models import Q
+from django.db.models.functions import Length
from django.http import HttpResponseRedirect
from django.urls import reverse, NoReverseMatch
from django.utils.crypto import get_random_string
@@ -1496,61 +1497,52 @@ def create_default_areas(models=None, verbose=False):
areas = {}
- idx = 0
- for state in State.objects.all():
- slug = "state-" + slugify(state.label)
- area, created = Area.objects.get_or_create(
+ created = 0
+ q = State.objects
+ total = q.count()
+ for idx, state in enumerate(q.all()):
+ if verbose:
+ sys.stdout.write(f"State \t{idx + 1}/{total}\r")
+ slug = "state-" + state.number
+ area, create = Area.objects.get_or_create(
txt_idx=slug, defaults={"label": state.label}
)
- areas["state-{}".format(state.pk)] = area
- if created:
- idx += 1
+ areas[f"state-{state.pk}"] = area
+ if create:
+ created += 1
if verbose:
- print("\n* {} state areas added".format(idx))
+ sys.stdout.write(f"* {created} state areas added\n")
- idx, idx2 = 0, 0
- for dep in Department.objects.all():
- slug = "dep-" + slugify(dep.label)
- area, created = Area.objects.get_or_create(
+ created, association, association2 = 0, 0, 0
+ q = Department.objects
+ total = q.count()
+ for idx, dep in enumerate(q.all()):
+ if verbose:
+ sys.stdout.write(f"Department \t{idx + 1}/{total}\r")
+ slug = f"dep-{dep.number}"
+ area, create = Area.objects.get_or_create(
txt_idx=slug, defaults={"label": dep.label}
)
areas["dep-" + dep.number] = area
- if created:
- idx += 1
+ if create:
+ created += 1
if not dep.state_id:
continue
state_slug = "state-{}".format(dep.state_id)
- if state_slug not in areas:
- continue
- if area.parent and area.parent.pk == areas[state_slug].pk:
- continue
- idx2 += 1
- area.parent = areas[state_slug]
- area.save()
- if verbose:
- print(
- "* {} department areas added with {} associations to state".format(
- idx, idx2
- )
- )
-
- idx = 0
- for town in Town.objects.all():
- if not town.numero_insee or len(town.numero_insee) != 5:
- continue
- code_dep = "dep-" + town.numero_insee[:2]
- code_dep_dom = "dep-" + town.numero_insee[:3]
- if code_dep in areas:
- if not areas[code_dep].towns.filter(pk=town.pk).count():
- areas[code_dep].towns.add(town)
- idx += 1
- elif code_dep_dom in areas:
- if not areas[code_dep_dom].towns.filter(pk=town.pk).count():
- areas[code_dep_dom].towns.add(town)
- idx += 1
+ if state_slug in areas and (not area.parent or area.parent.pk != areas[state_slug].pk):
+ association += 1
+ area.parent = areas[state_slug]
+ area.save()
+ area.towns.clear()
+ q2 = Town.objects.annotate(insee_len=Length('numero_insee')).filter(
+ numero_insee__startswith=dep.number, insee_len=5)
+ area.towns.add(*list(q2.all()))
if verbose:
- print("* {} town associated to department area".format(idx))
+ sys.stdout.write(
+ f"* {created} department areas added with {association} associations to state\n"
+ )
+ sys.stdout.write(f"* {association} town associated to department area")
def get_relations_for_graph(