97 lines
4.8 KiB
Python
97 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.raw("""SELECT cities.id, cities.country_code_2
|
|
FROM cities WHERE
|
|
country_code_2 IS NOT NULL AND
|
|
country_code_2 != ""
|
|
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
|
|
(subregion_code IS NULL OR
|
|
subregion_code = "") AND
|
|
region_code IS NOT NULL AND
|
|
region_code != "" AND
|
|
country_code_2 IS NOT NULL AND
|
|
country_code_2 != ""
|
|
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
|
|
subregion_code IS NOT NULL AND
|
|
subregion_code != "" AND
|
|
region_code IS NOT NULL AND
|
|
region_code != "" AND
|
|
country_code_2 IS NOT NULL AND
|
|
country_code_2 != ""
|
|
AND cities.subregion_code in (
|
|
SELECT region_code FROM cities WHERE
|
|
(subregion_code IS NULL OR
|
|
subregion_code = "") AND
|
|
region_code IS NOT NULL AND
|
|
region_code != "" AND
|
|
country_code_2 IS NOT NULL AND
|
|
country_code_2 != ""
|
|
)
|
|
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", "region_code",
|
|
"country_code_2", "zip_code", "is_island").distinct()
|
|
|
|
serialized_data = CitySerializer(data=list(queryset.values()), many=True)
|
|
if serialized_data.is_valid():
|
|
# serialized_data.save()
|
|
print(serialized_data.validated_data)
|
|
else:
|
|
pprint(f"City serializer errors: {serialized_data.errors}")
|
|
|
|
|
|
data_types = {
|
|
"dictionaries": [
|
|
transfer_countries,
|
|
],
|
|
"tmp": [
|
|
transfer_regions,
|
|
# transfer_cities
|
|
]
|
|
}
|