Add clean db setup

This commit is contained in:
littlewolf 2019-12-13 12:16:02 +03:00
parent 6ef0e7adfe
commit eb514c0ce2
3 changed files with 68 additions and 15 deletions

View File

@ -193,18 +193,23 @@ def update_flags():
query.save()
def migrate_city_map_situation():
queryset = transfer_models.Cities.objects.raw("""SELECT cities.id, cities.map1, cities.map2, cities.map_ref, cities.situation
FROM cities WHERE
region_code IS NOT NULL AND
region_code != "" AND
country_code_2 IS NOT NULL AND
country_code_2 != ""
""")
def migrate_city_map_situation(get_exists_cities=False):
if get_exists_cities:
ids = City.objects.values_list('mysql_id', flat=True)
queryset = transfer_models.Cities.objects.filter(id__in=list(ids))
queryset = list(queryset.values())
else:
queryset = transfer_models.Cities.objects.raw("""SELECT cities.id, cities.map1, cities.map2, cities.map_ref, cities.situation
FROM cities WHERE
region_code IS NOT NULL AND
region_code != "" AND
country_code_2 IS NOT NULL AND
country_code_2 != ""
""")
queryset = [vars(query) for query in queryset]
queryset = [vars(query) for query in queryset]
serialized_data = location_serializers.CityMapSerializer(data=queryset, many=True)
serialized_data = location_serializers.CityMapCorrectSerializer(data=queryset, many=True)
if serialized_data.is_valid():
serialized_data.save()
else:
@ -699,12 +704,36 @@ def add_fake_country():
region.save()
@atomic
def setup_clean_db():
try:
ruby_data_file = open(f"{settings.PROJECT_ROOT}/apps/location/ruby_data.py", "r")
ruby_data = json.loads(ruby_data_file.read())
except FileNotFoundError:
ruby_data = get_ruby_data()
print('add_correct_location_models')
add_correct_location_models(ruby_data)
print('add_fake_country')
add_fake_country()
print('migrate_city_map_situation')
migrate_city_map_situation(True)
print('update_flags')
update_flags()
print('transfer_city_gallery')
transfer_city_gallery()
data_types = {
"dictionaries": [
transfer_countries,
transfer_regions,
transfer_cities,
transfer_addresses,
# transfer_countries,
# transfer_regions,
# transfer_cities,
# transfer_addresses,
transfer_wine_region,
transfer_wine_sub_region,
transfer_wine_village,
@ -730,4 +759,6 @@ data_types = {
"add_fake_country": [
add_fake_country
],
"setup_clean_db": [setup_clean_db],
}

View File

@ -53,7 +53,8 @@ class Command(BaseCommand):
'migrate_city_gallery',
'fix_location',
'remove_old_locations',
'add_fake_country'
'add_fake_country',
'setup_clean_db'
]
def handle(self, *args, **options):

View File

@ -405,6 +405,27 @@ class CityMapSerializer(serializers.ModelSerializer):
return data
class CityMapCorrectSerializer(CityMapSerializer):
def set_city(self, data):
try:
city = models.City.objects.get(mysql_id=data['old_id'])
except models.City.DoesNotExist as e:
raise ValueError(f"Cannot find city with id = {data['old_id']}: {e}")
except MultipleObjectsReturned as e:
raise ValueError(f"Find multiple cities with id = {data['old_id']}: {e}")
data['city'] = city
return data
def create(self, validated_data):
city = validated_data.pop('city')
city.map1=validated_data['map1'],
city.map2=validated_data['map2'],
city.map_ref=validated_data['map_ref'],
city.situation=validated_data['situation']
city.save()
class CityGallerySerializer(serializers.ModelSerializer):
id = serializers.IntegerField()
city_id = serializers.IntegerField()