Б-же, что за говнок*д.
Почитай уже
pep8, не плоди этот ужас форматирования дальше. Вдруг кому-то придётся поддерживать твоё творение?
1) Лучше 4 символа, не 8.
2) Ладно, имена функций можно в camelCase, но только если это нужно для совместимости. Ну допустим, что нужно. Но имена переменных? В первой функции - camelCase, в других случаях с_подчёркиванием. За что?
3) Имена глобальных переменных лучше ПИСАТЬ_ЗАГЛАВНЫМИ. А ещё лучше вообще не использовать глобальные переменные, так как в локальной области они перекроются. Используй функции, люк. Или хотя бы классы с полями.
4) Вместо
def getTableName(type, realty_type):
if (type == "Rent" and realty_type == "Apartment"):
tableName = "maklers_rent_apartment"
if (type == "Rent" and realty_type == "House"):
tableName = "maklers_rent_house"
return tableName
Надо
def getTableName(type, realty_type):
if (type == "Rent" and realty_type == "Apartment"):
rerurn "maklers_rent_apartment"
if (type == "Rent" and realty_type == "House"):
return = "maklers_rent_house"
return None
В моём варианте функция вернёт значение сразу, без создания доп. переменной и без выполнения заведомо ненужных веток (когда вариант найден). Мало того, что ты не используешь
elif, что при определённых обстоятельствах принесёт тебе массу проблем, которые ты не ожидаешь, так ещё если в твоём варианте не выполнится ни одно условие, то будет ждать ещё один забавный сюрприз.
UPD. И ещё, не рекомендуется использовать названия
built-in функций и
пакетов для имён переменных, методов и т.д. Например, в этой функции ты не сможешь использовать встроенную type, так как внутри функции она заменяется на локальную переменную. И прочитай про области видимости, на всякий случай.
5) Вот эта строчка очень радует:
soid = object.getAttribute("oid")
myid = soid
Зачем тут вторая переменная?
Да и сама функция вызывается в цикле(!), при этом, в ней ты каждый раз теребишь парсер
objects = doc.getElementsByTagName("object")
Хотя этот код никак не меняется, и получить объекты надо строго 1 раз, а не дофига.
UPD 2. Эта функция вообще очень странная. Ты сперва отдельно получаешь список объектов и отдельно их свойства. А потом ты ищешь эти id заново (да ещё и в цикле, ещё и каждый раз заново парсишь xml). Это полнейший идиотизм. Я не видел xml, но по логике, свойства объектов должны быть внутри объекта или как-то связаны с ним через id. Возьми нормальный
парсер (а ещё лучше
этот) и разбирай деревом. Ну и не стоит разделять объекты от свойств, а потом заново искать id.
6) Зачем создавать переменную,
sid = getId(i)
если результат ты используешь только в одном месте?
print ("ID: " + sid.encode('utf-8'))
7) Забудь ты эти плюсы в строках
print ("Деталі: " + sobject_details.encode('utf-8') + " " + sinfo.encode('utf-8'))
Есть же удобное форматирование (когда надо что-то сложное):
print("Детали: {0} {1}".format(sobject_details.encode('utf-8'), sinfo.encode('utf-8'))
# или
print("Детали: {details} {info}".format(details=sobject_details.encode('utf-8'), info=sinfo.encode('utf-8'))
И быстрый join, когда простое форматирование:
print(" ".join(("Детали:", sobject_details.encode('utf-8'), sinfo.encode('utf-8')))
В общем, не пиши так больше, пожалуйста.
8)
propertys
propert
IEs же!
Ну а по теме всё правильно сказали, ftp надо выкинуть и обрабатывать HTTP-запросы. Но, так как это невозможно, то:
1) Просто запусти какой-нибудь крон и отслеживай изменения в файлах. При изменении запускай скрипт.
2) Есть программы, которые запускаются как серверы, следят за изменением файлов в папке в реалтайме и могут отправлять всякие уведомления (в том числе и по TCP/HTTP). Можно настроить всё это на отправку HTTP-запроса на джангу. Но это создаст небольшой оверхед. Если всё на одном серваке (и фтп, и джанга), то первый вариант лучше.