# -*- coding: utf-8 -*- import xlrd import urllib2 from django.core.management.base import BaseCommand from django.conf import settings from functions.form_check import translit_with_separator from functions.files import get_alternative_filename from exposition.models import Exposition from organiser.models import Organiser CHINA_FILE = settings.MEDIA_ROOT+'/import/expo_china_ru.xlsx' GERMANY_FILE = settings.MEDIA_ROOT+'/import/expo_germany_ru.xlsx' # 391 row not imported(same url) ITALY_FILE = settings.MEDIA_ROOT+'/import/expo_italy_ru.xlsx' # moscow 3 exps F = settings.MEDIA_ROOT+'/import/exp.xlsx' LA_FILE = settings.MEDIA_ROOT+'/import/expo_la.xlsx' NA_EU_ASIA_FILE = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa.xls' NA_EU_ASIA_FILE2 = settings.MEDIA_ROOT+'/import/expo_na_eu_ sa_part2.xls' class Command(BaseCommand): def handle(self, *args, **options): f = open(CHINA_FILE, 'r') book = xlrd.open_workbook(file_contents=f.read()) sheet = book.sheet_by_index(0) row_list = [sheet.row_values(row_number) for row_number in range(sheet.nrows)] labels = [label for label in row_list[0]] for row_number, row in enumerate(row_list[1:]): exp_url = translit_with_separator(row[2]) try: exp = Exposition.objects.get(url=exp_url) except Exposition.DoesNotExist: continue if exp.logo or row[19] == '':# or row[16].startswith('http') or row[16].startswith('https') or not row[16].startswith('/') or row[16].startswith('../'): continue path = row[19] file_name = path.split('/')[-1] logo_path = exp.logo.field.upload_to full_path = settings.MEDIA_ROOT + logo_path try: alt_name = get_alternative_filename(full_path, file_name) except UnicodeEncodeError: continue download_to = full_path+alt_name if path.startswith('http') or path.startswith('https'): url = path elif path.startswith('/'): url = 'http://expomap.ru' + path elif path.startswith('images'): url = 'http://expomap.ru/' + path else: continue #print('------------------------------------') #print(path) #print(url) #print('------------------------------------') try: response = urllib2.urlopen(url, timeout=15) except: continue if response.code != 200: continue with open(download_to,'wb') as f: try: f.write(response.read()) f.close() except: # can be timeout continue exp.logo = logo_path + alt_name try: exp.save() print(exp) except: print('logo exception. logo: %s'%exp.logo) continue