Coder Social home page Coder Social logo

django-fias's People

Contributors

aldev12 avatar andrey-oparin avatar babayko avatar eshikvtumane avatar i2xs avatar linntroll avatar malyshevalex avatar mullakhmetov avatar netsuileo avatar skorpyon avatar stelzzz avatar yuego avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

django-fias's Issues

PyPI installation isn't working

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

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

Не работает с Django 1.9/1.8

К сожалению библиотека не работает с 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

При разворачивании следовал инструкции, что я делаю не так?

TypeError when initially load remote file

(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 и тому подобное?

Ошибка при установке под Windows

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...

Drop Indexes

Включать или не включать по-умолчанию, вот в чём вопрос.

В теории удаление индексов должно давать прирост в скорости. А на практике... будем посмотреть.

Типы данных в модели FIASHouse

Считаю что в модели 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 modulefias1.filters.yaroslavl_addrobjdoes not exists

Вывод адреса в "человеческом" формате

Не сильно принципиально, но можно улучшить отображение адреса, показывая "человеческий" адрес с правильным порядком вывода элементов объекта и пунктуацией:
например

Волгоградская область. город Волгоград, улица Мира

или

Волгоградская обл., г. Волгоград, ул. Мира

Проблема со столбцом eststatus в таблице fias_house

Здравствуйте.
При полном импорте (с нуля) возникла проблема со столбцом eststatus в таблице fias_house. Он всегда принимает значение 1. А это очень плохо, т. к. получается, что все здания становятся владениями.
К сожалению, я не могу посмотреть, какие данные находятся в полном xml-файле, но в дельте eststatus имеет разные значения.

Версия django-fias 0.6.1
Версия ФИАС от 17.08.2015.

Huge import log

Thousands of "Out of date entry. Skipping..." entries in full import log.

There's two possible ways to resolve it:

  1. Using logging options (levels of messages)
  2. Write custom logger class which will use :
  • chr(8) to minimize output, but leaving it realtime.
  • counters & last recieved error for stackable items, e.g. Skipped 187 outdated items…

I can implement second one tomorrow and make a pull request.

PS: Пишу по-английски ради практики :)

Sphinx не запускается с сгенерированным конфигом

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 requirements

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)
    This fixes #13 (comment)

Лицензия на исходный код

Добрый день, не обнаружил информации по лицензии на исходный код проекта, можете пролить свет на этот момент?

Полнотекстовый поиск адреса

Посоветуйте, как сделать, чтоб никого не обидеть?

Я ориентируюсь на PostgreSQL, но есть еще куча других БД.
Джанго Full Text поддерживает только для MySQL - и то с костылями.

Сторонние модули и приложения ориентированы на конкретные БД.

Есть еще Sphinx - можно что-нибудь с ним сотворить.

Вот.

Использование addrobj в шаблонах

В шаблоне (и не только) при использовании addrobj получаем только последний элемент (улицу). Хотелось бы иметь легкий доступ к полному адресу, городу, улице, коду и т.д.
{{item.location.city}}
{{item.location.street}}
{{item.location.full_address}}

[develop] Не применяются миграции django_

Ветка develop.
Не применяются миграции к приложениям django, вследствие чего таблицы отсутствуют в БД.
Проблема проявляется (как минимум), когда FIAS_DATABASE_ALIAS = 'default', т.е. для сайта и для ФИАС используется одна БД.

Как воспроизвести:

  1. Создать бд в postgresql

  2. Склонировать репозиторий

  3. Указать конфигурацию:

    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 установить в пустой список, т.е. не использовать роутер, это, пожалуй, основная проблема.

Проблемы с новым Sphinxit

Во views.py у Вас есть хак для исправления бага с сортировкой в Sphinxit. Не так давно этот баг был исправлен. Теперь в этом месте возникает ошибка, по крайней мере у меня.
Решилось избавлением от u'weight() DESC', но потом возникла проблема с индексацией. В результате черной магии все стало хорошо, однако, обратите внимание )

Возможность частичного импорта

Дело в том, что команда ./manage.py fias --file fias_xml.rar выполняется довольно продолжительное время. На данный момент прошло уже больше полутора суток, размер базы привысил 8gb. Все это время утилизация диска зашкаливает (у меня обычные hdd).

А на самом деле мне нужны лишь улицы с домами определенного города. Есть ли такая возможность?

Может открыть группу google для вопросов?

Проблема при установке в ActivePython 3.4 (Win64)

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

При импорте данных из таблицы 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'")

AddrObj всегда как обязательное поле *

Не получается убрать атрибут обязательного поля (*). Передача параметров blank=True, null=True никак не влияет на результат.

address = AddressField(blank=True, null=True, default=None, verbose_name = _('Location'))

Импорт из dbf файлов

ФИАС предоставляет дельты и сами базы в формате xml и dbf.

Для python есть утилита dbfread. Она позволяет последовательно, без полной загрузки файла в память считывать данные, автоматически приводить их к нужному типу (даты), работает быстрее и ест меньше памяти.

Работает это всё дело намного быстрее парсинга xml и прочих операций соответственно.

Насколько я понимаю ваш код, переписать его для поддержки dbf вместо xml будет не очень сложно, там действительно очень мало различий - в паре мест убрать валидацию по тегу (row.tag == 'Object', например) и конверсию дат вручную - и вместо dict(row.attrib()) просто возвращать row в bulk index.

У меня есть прототип основанный на частях вашего кода, на моём не очень быстром ПК импорт 1200000 записей из таблицы AddrObj происходит в течение 30-40 минут. Код прототипа пока что выложить не могу к сожалению, т.к. он очень сырой.

IntegrityError: duplicate key value violates unique constraint "fias_house_pkey"

Используется 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

Импорт в python3.4

Есть 2 проблемы с импортом в pyhton3.4, обе в importer/archive.py:

  1. Импорт from urllib import urlretrieve, решается заменой на from urllib.request import urlretrieve
  2. Функция def dump_date(self): ругается на TypeError: 'dict_items' object does not support indexing, решается: table = list(self.tables.values())[0]

Дубли при импорте данных

Пока что использование set и проверки actstatus несколько уменьшили вероятность появления дублей, но вряд ли полностью её исключили. Думаем дальше.

Ошибка AttributeError: 'NoneType' object has no attribute '_meta'

Пытаюсь импортировать базу, но вылетает следующая ошибка:
...
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

Если проект не использует мускуль, и на хосте вообще нет библиотек для работы с ним, то вываливается ошибка использования mysql в django, а происходит это по причине принудительной зависимости fias от mysql (см. fias/config.py - FIAS_SEARCHD_CONNECTION - по-умолчанию mysql).

Это необходимо сделать опциональным, иначе проект вообще не стартует.

Django 1.8 and UUIDField

Django 1.8 включает UUIDField, теперь зависимость от django_extensions необязательна

Неактуальная версия django_select2 в зависимостях

./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.

Что делать с DEL-таблицами?

До сих пор не могу решить, как с ними поступать.
По логике вещей, нужно удалять из БД записи, содержащиеся в этих таблицах.
Но при наличии на них внешних ссылок всё может сломаться.

И я не проверял, но, возможно, там хранятся записи, устаревшие и изменённые (те, что с заполненным полем NEXTID и датой UPDATEDATE из прошлого). Тогда ничего делать и не нужно - в БД хранятся только актуальные версии адресных объектов.

Нужно снова почитать документацию...

Оптимизация поиска sphinx и фиксы для генерации конфига sphinx

Привет. Проблема была в том что ордеринг по aolevel сбивал к чертям собачьим ранжирование результатов по поисковому весу. Я поправил, залил в свой форк.

Плюс добавил sql_query_pre для mysql с установкой UTF8 (без него вопросики в индексе), ну и еще мелкие правки.

Вообщем все здесь:

https://github.com/magnitronus/django-fias/commit/249d82f5bdc3c9c926b24bba7fae93e7d11a2fbc

Ошибка при импорте с сайта Fias

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.0.X до 1.1.0

До версии 1.1.х консистентность данных никак не проверялась, таблицы импортировались независимо друг от друга и друг на друга не ссылались.

Теперь же между всеми таблицами созданы связи - ссылки через ForeignKey.
Тесты показали, что во всех таблицах есть записи, ссылающиеся вникуда.

Из-за них миграция на новую версию может провалиться из-за невыполнения ограничений БД (constraints).

Это вроде бы баг, но скорее баг в источнике - самой БД ФИАС. Они не следят за целостностью данных.

Пока что единственным решением этой пробемы является импорт данных в пустую БД.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.