coding utf-8 import common excel from place models import Place PlaceT

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# -*- coding: utf-8 -*-
import common.excel
from place.models import Place, PlaceType
from supplier.models import Supplier
class LogEntry(object):
"""
Common log entry for models import. # REVIEW: после первой строки docsting должна быть пустая строка
unstable - can be splitted to several classes.
"""
CREATED = 'created'
UPDATE = 'updated'
ERROR = 'error'
WARNING = 'warning' # REVIEW: не надо выравнивать по одной колонке знаки равенства, вокруг равенства должен быть только *один* пробел
def __init__(self, type, msg = ''):
self.type = type
self.msg = msg # REVIEW: между методами должно быть две строки, также см. про один пробел выше
def add_related_model(self, model_cls, model_instance):
# REVIEW: зачем ты передаёшь model_cls, его можно узнать из model_instance, хотя я сейчас не совсем понимаю, вообще, что этот класс делает.
attr_name = type(model_cls) == str and model_cls or model_cls.__name__ # REVIEW: нужно использовать isinstance(model_cls, str), а не type() ==
if hasattr(self, attr_name):
raise Exception("Multiple models for logs not supported.")
setattr(self,attr_name, model_instance) # REVIEW: одна пустая строка - мало. Пробел после запятой забыл.
def process_sites_file(file_path, task_id = None):
# REVIEW: в именованных аргументов пробелы вокруг знака равенства не нужны
"""
Загрузка мест.
Если task_id is not None также происходит добавление мест в
задание
"""# REVIEW: после докстринга должна быть пустая строка
log = []
spec = { 'code' : 0,
'type' : 1,
'supplier' : 2,
'latitude' : 3,
'longitude' : 4,
'address' : 5,
'description' : 6
} # REVIEW: жесть, читай выше про выравнивания
try:
for row_num, row_data in excel.iterate(file_path, spec):
row_data['type'] = PlaceType.objects.get(name=row_data['type'])
row_data['supplier'] = Supplier.objects.get(name=row_data['supplier'])
# REVIEW: ислючения DoesNotExists надо прямо здесь обрабатывать, а то у тебя, получается, что любая ошибка весь процесс парсинга убивает
# добавляем/обновляем места
try:
place = Place.objects.get(code=row_data['code'])
#todo check and update if changed
logEntry = LogEntry(LogEntry.UPDATED); # REVIEW: нафиг тут точка с запятой? Имя неправлиьно, для переменных не нужен camel case
except Place.DoesNotExist:
place = Place(**row_data)
place.save()
logEntry = LogEntry(LogEntry.CREATED);
logEntry.add_related_model(Place, place)
# добавляем/обновляем места в задании
if task_id is not None:
pass #todo
log.append(logEntry)
pass # REVIEW: pass лишний
except: # REVIEW: голый except - зло.
# todo: log exception message
log.append(LogEntry(LogEntry.ERROR), 'ошибка при обработке.') # REVIEW, а чего строка не юникодная?
return log