gault-millau/apps/location/transfer_data.py
2019-10-27 21:43:34 +03:00

94 lines
4.8 KiB
Python

from django.db.models import Q, QuerySet
from transfer.serializers.location import CountrySerializer, RegionSerializer, CitySerializer
from transfer.models import Cities
from pprint import pprint
def transfer_countries():
# queryset = Cities.objects.exclude(Q(country_code_2__isnull=True) | Q(country_code_2="")) \
# .only("id", "country_code_2").annotate(Count("country_code_2")).order_by("country_code_2")
queryset = Cities.objects.raw("""SELECT cities.id, cities.country_code_2
FROM cities
WHERE NOT ((cities.country_code_2 IS NULL
OR (cities.country_code_2 = ''
AND cities.country_code_2 IS NOT NULL)))
GROUP BY cities.country_code_2""")
queryset = [vars(query) for query in queryset]
serialized_data = CountrySerializer(data=queryset, many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"Country serializer errors: {serialized_data.errors}")
def transfer_regions():
regions_without_subregion_queryset = Cities.objects.raw("""SELECT cities.id, cities.region_code,
cities.country_code_2, cities.subregion_code
FROM cities
WHERE NOT ((cities.subregion_code IS NOT NULL
OR cities.region_code IS NULL
OR cities.country_code_2 IS NULL
OR (cities.region_code = ''
AND cities.region_code IS NOT NULL)
OR (cities.country_code_2 = ''
AND cities.country_code_2 IS NOT NULL)))
GROUP BY region_code""")
regions_without_subregion_queryset = [vars(query) for query in regions_without_subregion_queryset]
serialized_without_subregion = RegionSerializer(data=regions_without_subregion_queryset, many=True)
if serialized_without_subregion.is_valid():
serialized_without_subregion.save()
else:
pprint(f"Parent regions serializer errors: {serialized_without_subregion.errors}")
regions_with_subregion_queryset = Cities.objects.raw("""SELECT cities.id, cities.region_code,
cities.country_code_2, cities.subregion_code
FROM cities
WHERE NOT ((cities.subregion_code IS NULL
OR (cities.subregion_code = ''
OR cities.region_code IS NULL
OR cities.country_code_2 IS NULL
OR (cities.region_code = ''
AND cities.region_code IS NOT NULL)
OR (cities.country_code_2 = ''
AND cities.country_code_2 IS NOT NULL))))
AND cities.subregion_code in (SELECT region_code FROM cities)
GROUP BY region_code""")
regions_with_subregion_queryset = [vars(query) for query in regions_with_subregion_queryset]
serialized_with_subregion = RegionSerializer(data=regions_with_subregion_queryset, many=True)
if serialized_with_subregion.is_valid():
serialized_with_subregion.save()
else:
pprint(f"Child regions serializer errors: {serialized_with_subregion.errors}")
def transfer_cities():
queryset = Cities.objects.exclude(Q(region_code__isnull=True) |
Q(country_code_2__isnull=True) |
Q(region_code="") |
Q(country_code_2="")).only("id", "name", "latitude", "longitude", "subregion_code",
"country_code_2", "zip_code", "is_island")
serialized_data = CitySerializer(data=list(queryset.values()), many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
pprint(f"City serializer errors: {serialized_data.errors}")
data_types = {
"dictionaries": [
transfer_countries,
],
"tmp": [
transfer_regions,
# transfer_cities
]
}