From 819e4366f7f35b1f32052b45762c5d80ba6748c1 Mon Sep 17 00:00:00 2001 From: littlewolf Date: Fri, 20 Dec 2019 11:52:40 +0300 Subject: [PATCH] Fix locatioin Add decorator to log --- apps/location/transfer_data.py | 4 +-- apps/transfer/serializers/location.py | 42 +++++++++++++++------------ apps/transfer/utils.py | 21 +++++++++++++- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/apps/location/transfer_data.py b/apps/location/transfer_data.py index 02ba0be7..08509a2f 100644 --- a/apps/location/transfer_data.py +++ b/apps/location/transfer_data.py @@ -130,8 +130,6 @@ def transfer_addresses(): queryset = transfer_models.Locations.objects.raw("""SELECT locations.id, locations.zip_code, locations.longitude, locations.latitude, locations.address, locations.city_id FROM locations WHERE - locations.address != "" AND - locations.address IS NOT NULL AND locations.city_id IS NOT NULL""") queryset = [vars(query) for query in queryset] @@ -734,7 +732,7 @@ data_types = { # transfer_countries, # transfer_regions, # transfer_cities, - # transfer_addresses, + transfer_addresses, transfer_wine_region, transfer_wine_sub_region, transfer_wine_village, diff --git a/apps/transfer/serializers/location.py b/apps/transfer/serializers/location.py index 7303fb61..184a0bf5 100644 --- a/apps/transfer/serializers/location.py +++ b/apps/transfer/serializers/location.py @@ -189,7 +189,7 @@ class AddressSerializer(serializers.ModelSerializer): zip_code = serializers.CharField(allow_null=True, allow_blank=True) latitude = serializers.DecimalField(max_digits=10, decimal_places=6, allow_null=True) longitude = serializers.DecimalField(max_digits=10, decimal_places=6, allow_null=True) - address = serializers.CharField() + address = serializers.CharField(allow_null=True, allow_blank=True) class Meta: model = models.Address @@ -234,25 +234,29 @@ class AddressSerializer(serializers.ModelSerializer): return data def set_address(self, data): - address_list = data.pop('address').split(' ') - is_first_street = False - data['street_name_1'] = [] - data['street_name_2'] = [] - while len(address_list) > 0: - address_part = address_list.pop() - try: - address_part = int(address_part) - data['number'] = address_part - is_first_street = True - except: - if is_first_street: - data['street_name_1'].append(address_part) - else: - data['street_name_2'].append(address_part) + if "address" in data and data['address'] is not None and data['address'] != "": + address_list = data.pop('address').split(' ') + is_first_street = False + data['street_name_1'] = [] + data['street_name_2'] = [] + while len(address_list) > 0: + address_part = address_list.pop() + try: + address_part = int(address_part) + data['number'] = address_part + is_first_street = True + except: + if is_first_street: + data['street_name_1'].append(address_part) + else: + data['street_name_2'].append(address_part) - data['street_name_1'] = " ".join(data['street_name_1']) - data['street_name_2'] = " ".join(data['street_name_2']) - if "number" not in data: + data['street_name_1'] = " ".join(data['street_name_1']) + data['street_name_2'] = " ".join(data['street_name_2']) + if "number" not in data: + data['number'] = 0 + else: + del(data['address']) data['number'] = 0 return data diff --git a/apps/transfer/utils.py b/apps/transfer/utils.py index 20e61f18..77e952bb 100644 --- a/apps/transfer/utils.py +++ b/apps/transfer/utils.py @@ -1,13 +1,17 @@ from os.path import exists +from os import makedirs from importlib.machinery import SourceFileLoader from django.apps import apps from django.conf import settings from django.db.models import Count, Q from tqdm import tqdm +import sys + +import timeit def transfer_objects(data_type): - + start_t = timeit.default_timer() for app in apps.get_app_configs(): if exists(f"{app.path}/transfer_data.py"): card_module = SourceFileLoader("transfer", f"{app.path}/transfer_data.py").load_module() @@ -20,7 +24,10 @@ def transfer_objects(data_type): if data_type == module_data_type: for transfer_func in transfer_funcs: print(f"========================== FUNCTION {transfer_func.__name__} ================================") + transfer_func = file_log(transfer_func) transfer_func() + end_t = timeit.default_timer() + print(f"Transfer time: {end_t - start_t}") def clean_old_records(model, conditions): @@ -166,3 +173,15 @@ def clean_old_region_records(model, conditions): counter = len(to_delete) old_records.filter(id__in=to_delete).delete() print(f'Deleted {counter} objects.') + + +def file_log(f): + directory = f"{settings.PROJECT_ROOT}/apps/transfer/log" + if not exists(directory): + makedirs(directory) + sys.stdout = open(f"{directory}/{f.__name__}.log","w+") + + def res_func(*args, **kwargs): + return f(*args, **kwargs) + + return res_func