You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
8.5 KiB
218 lines
8.5 KiB
# -*- coding: utf-8 -*-
|
|
import os
|
|
import MySQLdb
|
|
from MySQLdb.cursors import DictCursor
|
|
from django.core.management.base import BaseCommand
|
|
from django.conf import settings
|
|
from conference.models import Conference
|
|
from django.core.files import File
|
|
from functions.translate import fill_with_signal
|
|
from country.models import Country
|
|
from city.models import City
|
|
|
|
class Command(BaseCommand):
|
|
def handle(self, *args, **options):
|
|
db = MySQLdb.connect(host="localhost",
|
|
user="expomap",
|
|
passwd="7FbLtAGjse",
|
|
db="old_db",
|
|
charset='utf8',
|
|
cursorclass=DictCursor)
|
|
cursor = db.cursor()
|
|
sql = """
|
|
SELECT products.products_id as id, products_date_added as created, products_last_modified as modified,
|
|
discount, expohit, ufi, products_name as name, products_description as description,
|
|
products_short_description as main_title, products_viewed as viewed, products_period as period,
|
|
products_org as organiser,products_products as products, products_official as web_page,
|
|
products_img1 as logo, products_startdate as data_begin, products_enddate as data_end,
|
|
url as old_url, places_id
|
|
FROM `products`
|
|
LEFT JOIN `products_description` ON products.products_id=products_description.products_id
|
|
WHERE `products_status` =1
|
|
AND `conference` =1 AND places_id >0
|
|
"""
|
|
cursor.execute(sql)
|
|
result = cursor.fetchall()
|
|
|
|
names = [item['name'] for item in result]
|
|
media = settings.MEDIA_ROOT.replace('media/', '')
|
|
for i, item in enumerate(result):
|
|
name = item['name']
|
|
print('number: %d, name: %s'%(i, name.encode('utf8')))
|
|
if Conference.objects.filter(translations__name=name).exists():
|
|
continue
|
|
|
|
data_begin = item['data_begin']
|
|
data_end= item['data_end']
|
|
|
|
|
|
place_id = item['places_id'] # convert to country and city
|
|
country, city = get_places(place_id)
|
|
#if isinstance(city, unicode):
|
|
#print(city.encode('utf8'))
|
|
# value = bad_cities.get(city)
|
|
# if value:
|
|
# bad_cities[city] = value + 1
|
|
# else:
|
|
# bad_cities[city] = 1
|
|
|
|
# counter += 1
|
|
# continue
|
|
|
|
if not country or not city:
|
|
continue
|
|
|
|
old_url = item['old_url']
|
|
periodic = item['period']
|
|
periodic = get_periodic(periodic)
|
|
web_page = item['web_page']
|
|
currency = 'USD'
|
|
expohit = item['expohit']
|
|
ufi = item['ufi']
|
|
if ufi:
|
|
ufi = 1
|
|
else:
|
|
ufi = 0
|
|
|
|
created = item['created']
|
|
modified = item['modified']
|
|
|
|
|
|
|
|
data = {'name_ru': name, 'main_title_ru': item['main_title'], 'description_ru': item['description'],
|
|
'main_themes_ru': item['products'], 'time_ru': '', 'discount_description_ru': '', 'title_ru': '',
|
|
'descriptions_ru': '', 'keywords_ru': ''}
|
|
|
|
conference = Conference(data_begin=data_begin, data_end=data_end, city=city, country=country,
|
|
web_page=web_page, old_url=old_url, periodic=periodic, currency=currency,
|
|
expohit=expohit, created=created, modified=modified)
|
|
try:
|
|
fill_with_signal(Conference, conference, data)
|
|
except:
|
|
continue
|
|
print('conference: %s'%str(conference))
|
|
|
|
|
|
|
|
#print(len(bad_cities.keys()))
|
|
#print(len(result))
|
|
#print(Conference.objects.filter().count())
|
|
#print(Conference.objects.exclude(translations__name__in=names).count())
|
|
|
|
|
|
def get_periodic(value):
|
|
PERIODIC = {u'Ежегодно': 1.0, u'Раз в 2 года': 0.5, u'2 раза в год': 2.0, u'4 раза в год': 4.0,
|
|
u'3 раза в год': 3.0, u'Раз в 3 года': 0.33, u'Раз в 4 года': 0.25, u'5 раз в год': 5.0,
|
|
u'Раз в два года': 0.5, u'Три раза в год': 3.0}
|
|
return PERIODIC.get(value, 0)
|
|
|
|
def get_logo(value):
|
|
if not value:
|
|
return None
|
|
if value.startswith('..'):
|
|
value = value.replace('..', 'media')
|
|
elif value.startswith('/'):
|
|
value = 'media'+value
|
|
|
|
return value
|
|
|
|
def get_places(place_id):
|
|
db = MySQLdb.connect(host="localhost",
|
|
user="expomap",
|
|
passwd="7FbLtAGjse",
|
|
db="old_db",
|
|
charset='utf8',
|
|
cursorclass=DictCursor)
|
|
cursor = db.cursor()
|
|
sql_city = """
|
|
SELECT title as city_name, url as city_old_url, inflect as city_inflect, parent_id as country_id
|
|
FROM `products_places`
|
|
WHERE `places_id` =%s
|
|
"""%place_id
|
|
|
|
cursor.execute(sql_city)
|
|
result = cursor.fetchone()
|
|
city_name, city_old_url, city_inflect = result['city_name'], result['city_old_url'], result['city_inflect']
|
|
country_id = result['country_id']
|
|
if city_name:
|
|
city_name = city_name.strip()
|
|
if city_name==u'Гонконг':
|
|
country = Country.objects.get(id=76)
|
|
city = City.objects.get(url='hong-kong')
|
|
return (country, city)
|
|
|
|
sql_country = """
|
|
SELECT title as country_name, url as country_old_url, inflect as country_inflect
|
|
FROM `products_places`
|
|
WHERE `places_id` =%s
|
|
"""%country_id
|
|
|
|
cursor.execute(sql_country)
|
|
result = cursor.fetchone()
|
|
country_name, country_old_url, country_inflect = result['country_name'], result['country_old_url'], result['country_inflect']
|
|
country_name = filter_country(country_name)
|
|
try:
|
|
country = Country.objects.get(translations__name=country_name)
|
|
except Country.DoesNotExist:
|
|
country = None
|
|
except Country.MultipleObjectsReturned:
|
|
country = Country.objects.filter(translations__name=country_name)[0]
|
|
|
|
city_name = filter_city(city_name)
|
|
try:
|
|
city = City.objects.get(translations__name=city_name, country=country)
|
|
except City.DoesNotExist:
|
|
#city = city_name
|
|
city = None
|
|
#print(city_name.encode('utf8'))
|
|
except City.MultipleObjectsReturned:
|
|
city = City.objects.filter(translations__name=city_name, country=country)[0]
|
|
#print('----------------')
|
|
#print(city_name.encode('utf8'))
|
|
#print('----------------')
|
|
|
|
|
|
|
|
return (country, city)
|
|
|
|
def filter_country(name):
|
|
if name == u'ЮАР':
|
|
name = u'Южно-Африканская Республика'
|
|
elif name == u'Танзания':
|
|
name = u'Объединенная Республика Танзания'
|
|
elif name == u'Гавайи':
|
|
name = u'США'
|
|
elif name == u'Бирма':
|
|
name = u'Мьянма'
|
|
elif name == u'Босния и Герцоговина':
|
|
name = u'Босния и Герцеговина'
|
|
|
|
return name
|
|
|
|
def filter_city(name):
|
|
cities = {u'Дели': u'Нью-Дели', u'Дэли': u'Нью-Дели', u'Пуна': u'Пуне', u'Лонг-Бич': u'Лонг Бич',
|
|
u'Калифорния': u'Лос-Анджелес', u'Санта-Клара': u'Санта Клара', u'Скотсдейл': u'Скоттсдейл',
|
|
u'Пенанг': u'Пинанг', u'Лейк Буэна Виста': u'Лейк-Буэна-Виста', u'Лиллестрём': u'Лиллештром',
|
|
u'Хертогенбош': u'Ден Бош', u'Марбелла': u'Марбелья', u'Лилль': u'Лилль', u'Ла Рош-сюр-Форон': u'Ла-Рош-сюр-Форон',
|
|
u'Эль-Кувейт': u'Кувейт', u'Харрогит': u'Харрогейт', u'Иокогама': u'Йокогама', u'Палм Бич': u'Палм-Бич',
|
|
u'Фрайбург': u'Фрейбург в Брейсгау', u'Колмар': u'Кольмар', u'Мускат': u'Маскат', u'Бад Зальцуфлен': u'Бад-Зальцуфлен'}
|
|
new_name = cities.get(name)
|
|
if new_name:
|
|
return new_name
|
|
else:
|
|
return name
|
|
|
|
|
|
|
|
|
|
"""
|
|
# convert logo
|
|
logo = item['logo']
|
|
logo = get_logo(logo)
|
|
if logo and logo.startswith('media/images'):
|
|
file = media + logo
|
|
if os.path.isfile(file):
|
|
f = open('mytest.pdf')
|
|
else:
|
|
logo = None
|
|
""" |