yuego / django-fias Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
File "fias/widgets.py", line 10, in
from django_select2.util import convert_to_js_str
ImportError: cannot import name convert_to_js_str
Нужно исправить setup.py:
'django_select2>=4.2.2,<4.3.0',
PyPI says that there's no such package.
$ pip install django-fias
Downloading/unpacking django-fias
Could not find any downloads that satisfy the requirement django-fias
Cleaning up...
No distributions at all found for django-fias
Здравствуйте!
Пробую импортировать из файла с полной базой, но в итоге в таблице с адресами fias_addrobj всего одна запись.
Возможно из-за того, что формат файла поменялся (02 июля 2013 - Внесены изменения в описания форматов выгрузки информации из ФИАС ...из новостей на главной странице)
./manage.py fias --file /xxx/fias_xml.rar
Processing table socrbase
...
Processing table socrbase
is finished
Processing table normdoc
...
Created 10000 objects
Created 20000 objects
Created 30000 objects
Created 40000 objects
Created 50000 objects
Created 60000 objects
Created 70000 objects
Created 80000 objects
Created 90000 objects
Created 100000 objects
Created 110000 objects
Created 120000 objects
Created 130000 objects
Created 140000 objects
Created 150000 objects
Processing table normdoc
is finished
Processing table addrobj
...
Processing table addrobj
is finished
Processing table house
...
pip install django-fias
Ставит версию 0.5.0
При попытке руками прописать 0.6.1 получаем:
Collecting django-fias==0.6.1
1 location(s) to search for versions of django-fias:
* https://pypi.python.org/simple/django-fias/
Getting page https://pypi.python.org/simple/django-fias/
Looking up "https://pypi.python.org/simple/django-fias/" in the cache
Current age based on date: 52
Freshness lifetime from max-age: 600
Freshness lifetime from request max-age: 600
The response is "fresh", returning cached response
600 > 52
Analyzing links from page https://pypi.python.org/simple/django-fias/
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.3.1.tar.gz#md5=6718ee0140da451c62f504a694ac40f4 (from https://pypi.python.org/simple/django-fias/), version: 0.3.1
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.3.2.tar.gz#md5=357d4ae7a8179a98b085cbf3ea2ad8ce (from https://pypi.python.org/simple/django-fias/), version: 0.3.2
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.3.tar.gz#md5=c625ccf2f11352f8e210ef9c929dd915 (from https://pypi.python.org/simple/django-fias/), version: 0.3
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.4.0.tar.gz#md5=ef9f91214e90fb3fccdaad6e207c608e (from https://pypi.python.org/simple/django-fias/), version: 0.4.0
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.5.0.tar.gz#md5=cf1eff9a735829cd42cc001c8a1fbbeb (from https://pypi.python.org/simple/django-fias/), version: 0.5.0
Found link https://pypi.python.org/packages/source/d/django-fias/django-fias-0.5.1.tar.gz#md5=e1282fa15222e4b9631ace919716cdd7 (from https://pypi.python.org/simple/django-fias/), version: 0.5.1
Could not find a version that satisfies the requirement django-fias==0.6.1 (from versions: 0.3, 0.3.1, 0.3.2, 0.4.0, 0.5.0, 0.5.1)
Cleaning up...
No matching distribution found for django-fias==0.6.1
Exception information:
Traceback (most recent call last):
File "/home/its/venv/lib/python3.4/site-packages/pip/basecommand.py", line 209, in main
status = self.run(options, args)
File "/home/its/venv/lib/python3.4/site-packages/pip/commands/install.py", line 299, in run
requirement_set.prepare_files(finder)
File "/home/its/venv/lib/python3.4/site-packages/pip/req/req_set.py", line 359, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/home/its/venv/lib/python3.4/site-packages/pip/req/req_set.py", line 511, in _prepare_file
finder, self.upgrade, require_hashes)
File "/home/its/venv/lib/python3.4/site-packages/pip/req/req_install.py", line 277, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/home/its/venv/lib/python3.4/site-packages/pip/index.py", line 485, in find_requirement
'No matching distribution found for %s' % req
pip.exceptions.DistributionNotFound: No matching distribution found for django-fias==0.6.1
проблема в том что на этой странице https://pypi.python.org/simple/django-fias/ нет версии 0.6.1
пришлось ставить напрямую с гита pip install https://github.com/Yuego/django-fias/archive/0.6.1.tar.gz
Файл с локалью есть, но не работает.
{{LANGUAGE_CODE}} проверяется?
Недавно появилась необходимость выбирать только жилые поселения за исключением улиц, площадей и т.п.
Имеется ли такая возможность?
К сожалению библиотека не работает с Django 1.9
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/fias/models/__init__.py", line 6, in <module>
from .normdoc import NormDoc
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/fias/models/normdoc.py", line 6, in <module>
from fias.fields import UUIDField
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/fias/fields/__init__.py", line 5, in <module>
from .address import AddressField, ChainedAreaField
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/fias/fields/address.py", line 11, in <module>
from fias import forms
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/fias/forms.py", line 6, in <module>
from django_select2.fields import HeavyModelSelect2ChoiceField
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django_select2/fields.py", line 87, in <module>
from .widgets import Select2Widget, Select2MultipleWidget,\
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django_select2/widgets.py", line 13, in <module>
from django.utils.datastructures import MultiValueDict, MergeDict
ImportError: cannot import name 'MergeDict'
MergeDict был удален в 1.9
Версия 0.5.1, т.к. 0.6.1 у вас висит в альфе и pip ее не хочет ставить.
UPD:
Поставил тег 0.6.1 через Git:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/core/management/__init__.py", line 327, in execute
django.setup()
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/home/shaman/Work/envs/smart_house/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1471, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/shaman/Work/envs/smart_house/src/django-fias/fias/models/__init__.py", line 6, in <module>
from .normdoc import NormDoc
File "/home/shaman/Work/envs/smart_house/src/django-fias/fias/models/normdoc.py", line 6, in <module>
from fias.fields import UUIDField
File "/home/shaman/Work/envs/smart_house/src/django-fias/fias/fields/__init__.py", line 5, in <module>
from .address import AddressField, ChainedAreaField
File "/home/shaman/Work/envs/smart_house/src/django-fias/fias/fields/address.py", line 11, in <module>
from fias import forms
File "/home/shaman/Work/envs/smart_house/src/django-fias/fias/forms.py", line 6, in <module>
from django_select2.fields import HeavyModelSelect2ChoiceField
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django_select2/fields.py", line 87, in <module>
from .widgets import Select2Widget, Select2MultipleWidget,\
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django_select2/widgets.py", line 7, in <module>
from . import util
File "/home/shaman/Work/envs/smart_house/lib/python3.4/site-packages/django_select2/util.py", line 195, in <module>
from . import __ENABLE_MULTI_PROCESS_SUPPORT as ENABLE_MULTI_PROCESS_SUPPORT, \
ImportError: cannot import name '__ENABLE_MULTI_PROCESS_SUPPORT'
Приветствую. Интересует чисто теоретический вопрос, может ли встретится случай на практике когда в справочнике ФИАС может отсутствовать улица?
С возможностью отсутствия домов уже столкнулся, по улицам нет уверенности в том что в справочнике есть абсолютно все улицы России.
Работаю над проектом связанным с гос услугами, и в случае отсутствия адреса в справочнике возникнет проблема с регистрацией адресных данных в системе, что весьма критично.
В документации написано, что с пункта 5 рекомендации по установке являются необязательными, т.е. данные не обязательно импортировать в отдельную БД.
При выполнении команды "/manage.py migrate" на тестовом проекте поднимается исключение:
django.core.exceptions.ImproperlyConfigured: FIAS: database alias `fias` was not found in DATABASES
При разворачивании следовал инструкции, что я делаю не так?
(fias)mktums at gamma in ~/Dev/fias
$ python manage.py fias --remote-file
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/fias/management/commands/fias.py", line 52, in handle
fill_database(_file)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/fias/management/utils/database.py", line 395, in fill_database
tables = fias.get_tablelist()
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/fias/management/utils/database.py", line 115, in get_tablelist
for (table, fdate, fver, filename) in self._walk(ver):
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/fias/management/utils/database.py", line 97, in _walk
self._arch = rarfile.RarFile(f)
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/rarfile.py", line 493, in __init__
self._parse()
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/rarfile.py", line 734, in _parse
self._parse_real()
File "/Users/mktums/.virtualenvs/fias/lib/python2.7/site-packages/rarfile.py", line 741, in _parse_real
fd = open(self.rarfile, "rb")
TypeError: coercing to Unicode: need string or buffer, tuple found
Импорт больших таблиц ест память буквально на глазах.
Нужно что-то придумать...
Сохранить адрес возможность есть, а как обстоят дела с фильтрацией и сортировкой по адресному полю? То есть можно ли например найти в тестовой CachedAddress все записи с городом N и тому подобное?
D:\Dev\src\npf>pip install django-fias
Downloading/unpacking django-fias
Running setup.py (path:D:\Temp\pip_build_Andrey\django-fias\setup.py) egg_info for package django-fias
Traceback (most recent call last):
File "", line 17, in
File "D:\Temp\pip_build_Andrey\django-fias\setup.py", line 30, in
long_description=open('README.rst').read(),
File "C:\Python34\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 71: character maps to
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "", line 17, in
File "D:\Temp\pip_build_Andrey\django-fias\setup.py", line 30, in
long_description=open('README.rst').read(),
File "C:\Python34\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 71: character maps to
Cleaning up...
Включать или не включать по-умолчанию, вот в чём вопрос.
В теории удаление индексов должно давать прирост в скорости. А на практике... будем посмотреть.
Считаю что в модели FIASHouse
разумнее использовать текстовые типы данных для полей house
и apartment
, т.к. номера домов совершенно точно могут иметь литеру а, б, в и т.д. когда рядом с существующим пристраивают новый дом и чтобы не менять адресацию добавляют литеру.
И как показало гугление http://realty.dmir.ru/forum/199159/ в России еще и квартиры могут с буквами, цитирую пост человека по ссылке:
К примеру, в моем доме так получилось, что 1-ый подъезд начали строить с опозданием, когда весь дом был постороен и вместо 14 этажей поменяли проект на 16. В итоге после 65-ой квартиры идут еще 10 квартир 65а, 65б...65и.
Плюс еще стоит добавить поле строение
Подскажите пример фильтров, пожалуйста. Не могу никак разобраться.
Я бы хотел отфильтровать импорт по полю regioncode для таблиц fias_addrobj и fias_house.
Сделал такую функцию:
def yaroslavl_addrobj(item):
"""
Всегда разрешает импорт записи
:param item:
:return item or None:
"""
if item.attrib.get('REGIONCODE') == '76':
return item
Подключил фильтр в файле settings.py:
FIAS_TABLE_ROW_FILTERS = [
'fias1.filters.yaroslavl_addrobj',
]
При запуске выдает такую ошибку:
django.core.exceptions.ImproperlyConfigured: Table row filter module
fias1.filters.yaroslavl_addrobjdoes not exists
Ошибка при импорте.
Когда началось, не знаю, но в последних архивах проблема имеет место быть.
Не сильно принципиально, но можно улучшить отображение адреса, показывая "человеческий" адрес с правильным порядком вывода элементов объекта и пунктуацией:
например
Волгоградская область. город Волгоград, улица Мира
или
Волгоградская обл., г. Волгоград, ул. Мира
Здравствуйте.
При полном импорте (с нуля) возникла проблема со столбцом eststatus в таблице fias_house. Он всегда принимает значение 1. А это очень плохо, т. к. получается, что все здания становятся владениями.
К сожалению, я не могу посмотреть, какие данные находятся в полном xml-файле, но в дельте eststatus имеет разные значения.
Версия django-fias 0.6.1
Версия ФИАС от 17.08.2015.
Таблица домов весит неприлично много.
Сделать её импорт в базу в общем-то не проблема. Надо ли?
Сабж
Можно ли ограничить импортируемую базу один городом?
Импорт всей базы занял около 20 часов. Размер базы 6 Гб
Thousands of "Out of date entry. Skipping..." entries in full import log.
There's two possible ways to resolve it:
chr(8)
to minimize output, but leaving it realtime.Skipped 187 outdated items…
I can implement second one tomorrow and make a pull request.
PS: Пишу по-английски ради практики :)
Sphinx 2.2.4-id64-release (r4806)
Copyright (c) 2001-2014, Andrew Aksyonoff
Copyright (c) 2008-2014, Sphinx Technologies Inc (http://sphinxsearch.com)
WARNING: key 'charset_type' was permanently removed from Sphinx configuration. Refer to documentation for details.
WARNING: key 'enable_star' was permanently removed from Sphinx configuration. Refer to documentation for details.
WARNING: key 'max_matches' was permanently removed from Sphinx configuration. Refer to documentation for details.
ERROR: unknown key name 'compat_sphinxql_magics' in /etc/sphinx/sphinx.conf line 130 col 31.
sphinx.service start request repeated too quickly, refusing to start.
В миграции 0005 зашит путь к fias_xml.rar:
load_complete_data(path='/home/ego/Downloads/fias_xml.rar', truncate=True, tables=TABLES_STATS)
Так же программная ошибка:
Applying fias.0005_load_stats_data...Traceback (most recent call last):
....
File ".../fias/migrations/0005_load_stats_data.py", line 16, in load_stats_data
fetch_version_info(update_all=True)
File ".../fias/importer/version.py", line 30, in fetch_version_info
if not ver.pk or update_all:
UnboundLocalError: local variable 'ver' referenced before assignment
Update:
sudsds
> git+https://gitlab.labs.nic.cz/labs/sudsds.git
Add:
django-extensions
,dslib
as git+https://gitlab.labs.nic.cz/labs/dslib.git
unrar
non-PyPI executable (OS X version available from Homebrew project)Добрый день, не обнаружил информации по лицензии на исходный код проекта, можете пролить свет на этот момент?
Посоветуйте, как сделать, чтоб никого не обидеть?
Я ориентируюсь на PostgreSQL, но есть еще куча других БД.
Джанго Full Text поддерживает только для MySQL - и то с костылями.
Сторонние модули и приложения ориентированы на конкретные БД.
Есть еще Sphinx - можно что-нибудь с ним сотворить.
Вот.
В шаблоне (и не только) при использовании addrobj получаем только последний элемент (улицу). Хотелось бы иметь легкий доступ к полному адресу, городу, улице, коду и т.д.
{{item.location.city}}
{{item.location.street}}
{{item.location.full_address}}
Ветка develop.
Не применяются миграции к приложениям django, вследствие чего таблицы отсутствуют в БД.
Проблема проявляется (как минимум), когда FIAS_DATABASE_ALIAS = 'default', т.е. для сайта и для ФИАС используется одна БД.
Как воспроизвести:
Создать бд в postgresql
Склонировать репозиторий
Указать конфигурацию:
16 DATABASES = {
17 'default': {
18 'ENGINE': 'django.db.backends.postgresql_psycopg2',
19 'NAME': 'fias_develop',
20 'USER': 'user',
21 'PASSWORD': 'password'
22 'HOST': '',
23 'PORT': '',
24 },
25 }
134 DATABASE_ROUTERS = ['fias.routers.FIASRouter']
135 FIAS_DATABASE_ALIAS = 'default'
Причём таблица django_migrations создаётся.
Как пофиксить: проблема возникает из-за принудительного использования FIAS_DATABASE_ALIAS = 'fias' в fias/routers.py, поэтому нужно просто использовать правильный импорт)
Важно: проблема не решается, если переменную DATABASE_ROUTERS установить в пустой список, т.е. не использовать роутер, это, пожалуй, основная проблема.
Во views.py у Вас есть хак для исправления бага с сортировкой в Sphinxit. Не так давно этот баг был исправлен. Теперь в этом месте возникает ошибка, по крайней мере у меня.
Решилось избавлением от u'weight() DESC', но потом возникла проблема с индексацией. В результате черной магии все стало хорошо, однако, обратите внимание )
Дело в том, что команда ./manage.py fias --file fias_xml.rar
выполняется довольно продолжительное время. На данный момент прошло уже больше полутора суток, размер базы привысил 8gb. Все это время утилизация диска зашкаливает (у меня обычные hdd).
А на самом деле мне нужны лишь улицы с домами определенного города. Есть ли такая возможность?
Может открыть группу google для вопросов?
Running setup.py egg_info for package django-fias
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "django-fias\setup.py", line 30, in <module>
long_description=open('README.rst').read(),
File "C:\Python34\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 71: character maps to <undefined>
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "django-fias\setup.py", line 30, in <module>
long_description=open('README.rst').read(),
File "C:\Python34\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 71: character maps to <undefined>
Скачал zip отсюда, удалил всё из README.rst, тогда пакет встал.
При импорте данных из таблицы room программа вылетает с ошибкой
django.db.utils.IntegrityError: (1062, "Duplicate entry '47aab24a73084c6c8756787b7172076a' for key 'fias_room_roomguid_f8e479d0_uniq'")
Подскажите, пожалуйста, можно ли как-то пропускать дубли и продолжать импорт данных?
Запускаю полный импорт так:
python manage.py fias --src auto --format xml
Полный лог ошибок:
T: room. L: 68453 | U: 0 | S: 486925[E:472683] | R: 0[0] FN: AS_ROOM_20160922_67c6a747-b702-4759-9542-d78b90c9b4f4.XML
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/fias/management/commands/fias.py", line 117, in handle
limit=limit, tables=tables, keep_indexes=keep_indexes
File "/usr/local/lib/python2.7/dist-packages/fias/importer/commands.py", line 89, in load_complete_data
restore_indexes_for_model(model=first_table.model)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/indexes.py", line 64, in restore_indexes_for_model
change_indexes_for_model(model=model, field_from=simple_field, field_to=field)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/indexes.py", line 54, in change_indexes_for_model
ed.alter_field(model, field_from, field_to)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 482, in alter_field
old_db_params, new_db_params, strict)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 663, in _alter_field
self.execute(self._create_unique_sql(model, [new_field.column]))
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 110, in execute
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 112, in execute
return self.cursor.execute(query, args)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 226, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorvalue
django.db.utils.IntegrityError: (1062, "Duplicate entry '47aab24a73084c6c8756787b7172076a' for key 'fias_room_roomguid_f8e479d0_uniq'")
Не получается убрать атрибут обязательного поля (*). Передача параметров blank=True, null=True никак не влияет на результат.
address = AddressField(blank=True, null=True, default=None, verbose_name = _('Location'))
ФИАС предоставляет дельты и сами базы в формате xml и dbf.
Для python есть утилита dbfread. Она позволяет последовательно, без полной загрузки файла в память считывать данные, автоматически приводить их к нужному типу (даты), работает быстрее и ест меньше памяти.
Работает это всё дело намного быстрее парсинга xml и прочих операций соответственно.
Насколько я понимаю ваш код, переписать его для поддержки dbf вместо xml будет не очень сложно, там действительно очень мало различий - в паре мест убрать валидацию по тегу (row.tag == 'Object', например) и конверсию дат вручную - и вместо dict(row.attrib()) просто возвращать row в bulk index.
У меня есть прототип основанный на частях вашего кода, на моём не очень быстром ПК импорт 1200000 записей из таблицы AddrObj происходит в течение 30-40 минут. Код прототипа пока что выложить не могу к сожалению, т.к. он очень сырой.
Используется 208cc97. При запуске команды $ python manage.py fias --file fias_xml.rar --really-replace
получается ошибка:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/home/user/.virtualenvs/project/src/django-fias/fias/management/commands/fias.py", line 70, in handle
load_complete_xml(path=path, truncate=truncate)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/commands.py", line 20, in load_complete_xml
arch.load(truncate=truncate)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/archive.py", line 93, in load
ldr.load(truncate=truncate, update=False)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/loader/base.py", line 71, in load
_fast_iter(context=context, func=self.process_row)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/loader/base.py", line 14, in _fast_iter
func(elem)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/loader/house.py", line 34, in process_row
self._bulk.push(row, related_attrs=related_attrs)
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/bulk.py", line 78, in push
self._create()
File "/home/user/.virtualenvs/project/src/django-fias/fias/importer/bulk.py", line 41, in _create
self.model.objects.bulk_create(self.objects)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/manager.py", line 160, in bulk_create
return self.get_queryset().bulk_create(*args, **kwargs)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 356, in bulk_create
self._batched_insert(objs_with_pk, fields, batch_size)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 838, in _batched_insert
using=self.db)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/manager.py", line 232, in _insert
return insert_query(self.model, objs, fields, **kwargs)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 1514, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 903, in execute_sql
cursor.execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 69, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "fias_house_pkey"
DETAIL: Key (houseguid)=(96a60057-523d-4d66-b610-0000000608b3) already exists.
Используется postgresql.
$ ./manage.py fias --file=/home/user/.cache/fias_xml.rar --really-replace
Traceback (most recent call last):
File "/opt/pycharm-professional/helpers/pydev/pydevd.py", line 1733, in <module>
debugger.run(setup['file'], None, None)
File "/opt/pycharm-professional/helpers/pydev/pydevd.py", line 1226, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/home/user/workspace/project/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/management/commands/fias.py", line 70, in handle
load_complete_xml(path=path, truncate=truncate)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/commands.py", line 20, in load_complete_xml
arch.load(truncate=truncate)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/archive.py", line 93, in load
ldr.load(truncate=truncate, update=False)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/loader/base.py", line 71, in load
_fast_iter(context=context, func=self.process_row)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/loader/base.py", line 14, in _fast_iter
func(elem)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/loader/addrobj.py", line 28, in process_row
self._bulk.push(row)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/bulk.py", line 78, in push
self._create()
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/fias/importer/bulk.py", line 41, in _create
self.model.objects.bulk_create(self.objects)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/manager.py", line 160, in bulk_create
return self.get_queryset().bulk_create(*args, **kwargs)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 356, in bulk_create
self._batched_insert(objs_with_pk, fields, batch_size)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 838, in _batched_insert
using=self.db)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/manager.py", line 232, in _insert
return insert_query(self.model, objs, fields, **kwargs)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/query.py", line 1514, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 903, in execute_sql
cursor.execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 69, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/user/.virtualenvs/project/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
return self.cursor.execute(sql, params)
django.db.utils.DataError: integer out of range
Есть 2 проблемы с импортом в pyhton3.4, обе в importer/archive.py
:
from urllib import urlretrieve
, решается заменой на from urllib.request import urlretrieve
def dump_date(self):
ругается на TypeError: 'dict_items' object does not support indexing
, решается: table = list(self.tables.values())[0]
Пока что использование set и проверки actstatus несколько уменьшили вероятность появления дублей, но вряд ли полностью её исключили. Думаем дальше.
Пытаюсь импортировать базу, но вылетает следующая ошибка:
...
File "... /env/local/lib/python2.7/site-packages/fias/importer/table/init.py", line 35, in parse
return cls(filename=filename, **m.groupdict())
File "... /env/local/lib/python2.7/site-packages/fias/importer/table/dbf.py", line 26, in init
(f.name, f.rel.to) for f in self.model._meta.get_fields()
AttributeError: 'NoneType' object has no attribute '_meta'
В чем может быть ошибка? В версии django (пробовал на 1.9 и на 1.10) или из-за версии Python (пробовал на 2.7 и на 3.5)
Если проект не использует мускуль, и на хосте вообще нет библиотек для работы с ним, то вываливается ошибка использования mysql в django, а происходит это по причине принудительной зависимости fias от mysql (см. fias/config.py - FIAS_SEARCHD_CONNECTION - по-умолчанию mysql).
Это необходимо сделать опциональным, иначе проект вообще не стартует.
Django 1.8 включает UUIDField, теперь зависимость от django_extensions необязательна
Конфигурация: postgresql 9.3, python3.3, django 1.7
При вводе в поле в вместо адреса выводится AddrObj object
Скринкаст:
http://photoload.ru/data/25/bb/9b/25bb9b1a5b13dd60072763cdbb483973.gif
./manage.py runserver
Unhandled exception in thread started by <function check_errors..wrapper at 0x7f715fdb41e0>
Traceback (most recent call last):
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/utils/autoreload.py", line 229, in wrapper
fn(_args, *_kwargs)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/core/management/commands/runserver.py", line 107, in inner_run
autoreload.raise_last_exception()
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/utils/autoreload.py", line 252, in raise_last_exception
six.reraise(__exception)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/utils/six.py", line 658, in reraise
raise value.with_traceback(tb)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/utils/autoreload.py", line 229, in wrapper
fn(_args, **kwargs)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/init.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/tmp/django-fias/test_project/env/lib/python3.4/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/tmp/django-fias/test_project/env/lib/python3.4/importlib/init.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 2254, in _gcd_import
File "", line 2237, in _find_and_load
File "", line 2226, in _find_and_load_unlocked
File "", line 1200, in _load_unlocked
File "", line 1129, in _exec
File "", line 1471, in exec_module
File "", line 321, in _call_with_frames_removed
File "/tmp/django-fias/test_project/fias/models/init.py", line 6, in
from .normdoc import NormDoc
File "/tmp/django-fias/test_project/fias/models/normdoc.py", line 6, in
from fias.fields import UUIDField
File "/tmp/django-fias/test_project/fias/fields/init.py", line 5, in
from .address import AddressField, ChainedAreaField
File "/tmp/django-fias/test_project/fias/fields/address.py", line 11, in
from fias import forms
File "/tmp/django-fias/test_project/fias/forms.py", line 6, in
from django_select2.fields import HeavyModelSelect2ChoiceField
ImportError: No module named 'django_select2.fields
Должна подходить версия 4.3.1.
До сих пор не могу решить, как с ними поступать.
По логике вещей, нужно удалять из БД записи, содержащиеся в этих таблицах.
Но при наличии на них внешних ссылок всё может сломаться.
И я не проверял, но, возможно, там хранятся записи, устаревшие и изменённые (те, что с заполненным полем NEXTID и датой UPDATEDATE из прошлого). Тогда ничего делать и не нужно - в БД хранятся только актуальные версии адресных объектов.
Нужно снова почитать документацию...
Привет. Проблема была в том что ордеринг по aolevel сбивал к чертям собачьим ранжирование результатов по поисковому весу. Я поправил, залил в свой форк.
Плюс добавил sql_query_pre для mysql с установкой UTF8 (без него вопросики в индексе), ну и еще мелкие правки.
Вообщем все здесь:
https://github.com/magnitronus/django-fias/commit/249d82f5bdc3c9c926b24bba7fae93e7d11a2fbc
python /usr/local/lib/python2.7/site-packages/fias1/manage.py fias --skip --update
Database updating...
INFO: Downloading file: http://fias.nalog.ru/Public/Downloads/20160728/fias_delta_xml.rar
INFO: Updating table `house` from 278 to 279...
INFO: Fixed wrong BOM header
Out of date entry. Skipping...
Out of date entry. Skipping...
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/fias1/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/fias/management/commands/fias.py", line 74, in handle
load_delta_xml(skip=skip)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/commands.py", line 36, in load_delta_xml
arch.load(truncate=False, skip=skip)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/archive.py", line 137, in load
ldr.load(truncate=False, update=True)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/loader/base.py", line 71, in load
_fast_iter(context=context, func=self.process_row)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/loader/base.py", line 14, in _fast_iter
func(elem)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/loader/house.py", line 34, in process_row
self._bulk.push(row, related_attrs=related_attrs)
File "/usr/local/lib/python2.7/dist-packages/fias/importer/bulk.py", line 55, in push
self.objects.append(self.model(**data))
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 480, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'divtype' is an invalid keyword argument for this function
Параметр --skip не срабатывает, следующая дельта не загружается и не обрабатывается.
python --version
Python 2.7.12+
django.VERSION
(1, 8, 4, 'final', 0)
До версии 1.1.х консистентность данных никак не проверялась, таблицы импортировались независимо друг от друга и друг на друга не ссылались.
Теперь же между всеми таблицами созданы связи - ссылки через ForeignKey.
Тесты показали, что во всех таблицах есть записи, ссылающиеся вникуда.
Из-за них миграция на новую версию может провалиться из-за невыполнения ограничений БД (constraints).
Это вроде бы баг, но скорее баг в источнике - самой БД ФИАС. Они не следят за целостностью данных.
Пока что единственным решением этой пробемы является импорт данных в пустую БД.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.