m3-gar


Namem3-gar JSON
Version 1.1.0 PyPI version JSON
download
home_pageNone
SummaryGAR Django integration for m3
upload_time2024-04-12 07:23:04
maintainerNone
docs_urlNone
authorBARS Group
requires_pythonNone
licenseMIT license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Приложение для работы с базой данных ГАР в Django

Основные возможности
====================

* Импорт базы ГАР из:
    * архива XML
    * каталога с XML
    * напрямую с сайта http://fias.nalog.ru в формате XML
* Импорт всех существующих справочников и классификаторов ГАР (с возможностью выборочного импорта)
* Возможность хранить данные в отдельной БД

Совместимость
=============

* Гарантируется работа на Django 3.2 и Python 3.9

Описание ключей командной строки (./manage.py gar_load_data)
============================================================


--src <path|filename|url|auto>
    Путь до архива с БД ГАР, каталога, в который предварительно был распакован архив или URL-адрес, с которого требуется скачать импортируемый архив
    Значение `auto` означает автоматическое получение данных с сайта http://fias.nalog.ru

--truncate
    Указывает полностью удалять все данные из таблицы перед импортом в неё

--no-truncate
    Разрешает загрузку данных в непустую БД

--no-transaction
    Производит импорт без транзакции

--update
    Обновляет БД ГАР до актуальной версии (после импорта)

--limit
    Устанавливает размер пачки записей, единовременно загружаемой в БД
    Чем больше размер, тем быстрее импорт (в теории), но дольше обработка ошибок, если таковые возникнут
    По-умолчанию: 10000

--tables
    Задаёт список таблиц для импорта через запятую

--update-version-info, --no-update-version-info
    Указывает, обновлять ли список версий БД ГАР
    По-умолчанию: True

--tempdir TEMPDIR
    Путь к каталогу, где будут размещены временные файлы в процессе импорта
    Каталог должен существовать и быть доступен для записи


Установка
=========

1. Установите `m3-gar`::

        pip install m3-gar

2. Добавьте `m3_gar` в `INSTALLED_APPS`.

5. Если вы желаете использовать отдельную БД под данные ГАР, выполните следующее

* Создайте БД и подключите её в `DATABASES`
* Добавьте параметр::

        GAR_DATABASE_ALIAS = 'gar'

где `gar` - алиас БД в `DATABASES`

* Добавьте в список `DATABASE_ROUTERS`::

        m3_gar.routers.GARRouter

* Выполните::


        python manage.py migrate --database=gar

где `gar` - алиас БД в `DATABASES`

5. Выполните::

        python manage.py migrate


Импорт данных
=============

Расшифровка сокращений
----------------------
* T: Table (Таблица) - импортируемая в данный момент таблица
* L: Loaded (Загружено) - количество уже загруженных в таблицу строк
* U: Updated (Обновлено) - количество обновлённых записей
* FN: Filename (Имя файла) - имя файла импортируемой таблицы

Первоначальная загрузка данных
------------------------------
Существует несколько способов импортировать данные в БД ГАР

Полностью автоматический импорт с сайта ФИАС::

        python manage.py gar_load_data --src auto

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

        # Архив с XML-файлами
        python manage.py gar_load_data --src /path/to/gar_xml.zip
        # Каталог с распакованным содержимым архива
        python manage.py gar_load_data --src /path/to/gar_data/

**Но!**
В случае, если в БД уже есть какие-то данные, скрипт выдаст соответствующее сообщение и прекратит работу.
Такое поведение связано с тем, что при импорте из файла, если версия файла не совпадает с версией данных в какой-то таблице в БД ГАР,
данные в этой таблице могут быть удалены полностью и заменены новыми, при этом
ORM Django при наличии связанных таблиц удалит данные так же и оттуда.
Поэтому, если по этой или какой-то иной причине нужно импортировать всю БД ГАР заново, добавьте флаг *--truncate*::

        python manage.py gar_load_data --src /path/to/gar_xml.zip --truncate

Если скачанный файл не актуален, можно добавить к указанной выше команде флаг *--update* - скрипт сразу после импорта обновит БД до актуальной версии.::

        python manage.py gar_load_data --src /path/to/gar_xml.zip --update

Использование отложенной согласованности БД
--------------------------------------------

Для первоначальной загрузки данных может быть выгодно временно отключить ограничения и индексы БД и выполнять загрузку без транзакции.

Для отключения ограничений предусмотрена команда manage_constraints, генерирующая SQL-код для удаления или восстановления ограничений и индексов полей.

Аргументы:

state
    "enable" или "disable" для включения/отключения ограничений соответственно

Опции:

--fk
    изменение состояния внешних ключей

--unique
    изменение состояния ограничений уникальности

--index
    изменение состояния индексов базы данных

--logged
    изменение состояния журналируемости таблиц БД

--truncate
    очистка данных из базы (см. "Удаление данных из БД" ниже)

--commit
    запись изменений в БД, в противном случае происходит только генерация SQL-кода

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

1. Отключить ограничения:::

        python manage.py manage_constraints disable --fk --unique --index --logged --commit

2. Произвести загрузку общих справочников::

        python manage.py gar_load_data --no-truncate --no-transaction /path/to/gar_data/

В директории /path/to/gar_data/ должны лежать файлы AS_*.xml из корня архива, т.е.::

        /path/to/gar_data/AS_ADDHOUSE_TYPES_20211004_91e6dc75-0e20-4af0-8bd4-81701eeb8961.XML
        ...
        /path/to/gar_data/AS_ROOM_TYPES_20211004_5b63b804-601c-4fc2-b083-49a616a30723.XML

3. Произвести частичную загрузку одного или нескольких регионов::

        python manage.py gar_load_data --no-truncate --no-transaction /path/to/gar_data/

В директории /path/to/gar_data/ должны лежать директории с данными по регионам, т.е. для загрузки регионов 01 и 02 должна быть структура вида::

        /path/to/gar_data/01/AS_ADDR_OBJ_20211004_3d78254b-65da-4864-8495-fedad8adcbbf.XML
        ...
        /path/to/gar_data/01/AS_STEADS_PARAMS_20211004_edc5fddf-5a2b-4f47-915b-2300f436fca1.XML
        /path/to/gar_data/02/AS_ADDR_OBJ_20211004_46290f85-8a71-41de-9a8d-b6c01e3f6d60.XML
        ...
        /path/to/gar_data/02/AS_STEADS_PARAMS_20211004_738598d9-38b0-441d-9276-c7ac7e41d606.XML

4. Повторить п.3 для других регионов

5. После успешной загрузки всех данных включить ограничения обратно:::

        python manage.py manage_constraints enable --fk --unique --index --logged --commit


Удаление данных из БД
----------------------
Используется опция --truncate команды manage_constraints.
Принимает ничего, либо список регионов, разделённых запятой.
Для удаления данных по общим справочникам используется регион с кодом "0"
Выполнение происходит с учётом опции "--commit"

Для удаления всех данных::

        python manage.py manage_constraints disable --truncate --commit


Для удаления данных общих справочников::

        python manage.py manage_constraints disable --truncate=0 --commit


Для удаления данных общих справочников и некоторых регионов::

        python manage.py manage_constraints disable --truncate=0,1,2,3 --commit


Для удаления данных некоторых регионов::

        python manage.py manage_constraints disable --truncate=1,2,3 --commit


Обновление существующей БД
--------------------------
Для обновления БД выполните::

        python manage.py gar_load_data --update

Обновление выполняется только с сайта ФИАС. Обновить базу из файла нельзя.


Обновление схемы данных
=======================

Для обновления схемы данных ГАР предоставлена команда `gar_update_schema`

--url
    URL-адрес, с которого требуется скачать архив со схемами в формате XSD

--path
    Путь до уже скачанного архива

--testmode
    Указывает полностью удалять все данные из таблицы перед импортом в неё


Настройка settings.py
=====================
`GAR_DATABASE_ALIAS` - алиас БД в `DATABASES` для данных ГАР


Заполнение полей name_with_parents в модели иерархий и полей name_with_typename в модели AddrOdj
================================================================================================

В БД были добавлены дополнительные поля name_with_parents (в модели иерархий) и name_with_typename (в модели AddrOdj).
Для заполнения данных полей данными предоставлена команда `fill_custom_fields`
Для нее доступны следующие параметры:

--parents
    Заполняем поля name_with_parents в модели иерархий, по умолчанию в муниципальной иерархии, можно указать ключи:
        --adm - поля заполняются для административной иерархии
        --guids - можно через запятую указать guid-ы объектов, для которых нужно заполнить поле
        --levels - можно через запятую указать уровни объектов, для которых нужно заполнить поле

--typenames
    Заполняем поля name_with_typename в модели AddrOdj для уровней 7 и 8 (улицы, микрорайоны, территории и т.д.)
        --guids_typenames - можно через запятую указать guid-ы объектов, для которых нужно заполнить поле

Примеры выполнения команды:

    - Обновление всех полей name_with_parents в модели муниципальной иерархии:

            python manage.py fill_custom_fields --parents

    - Обновление полей name_with_parents в модели муниципальной иерархии для уровней 1 и 2:

            python manage.py fill_custom_fields --parents --levels=1,2

    - Обновление всех полей name_with_typename в модели AddrObj:

            python manage.py fill_custom_fields --typenames

    - Обновление поля name_with_typename в модели AddrObj для объекта по guid:

            python manage.py fill_custom_fields --typenames --guids_typenames=6b87470a-ac30-418b-991b-3c0d42515192

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "m3-gar",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "BARS Group",
    "author_email": "bars@bars.group",
    "download_url": "https://files.pythonhosted.org/packages/a5/2f/7d2706b3a426e8f2296e9f1e0e605286867a6c97317a0df2153853f4c051/m3-gar-1.1.0.tar.gz",
    "platform": null,
    "description": "\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0413\u0410\u0420 \u0432 Django\n\n\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n====================\n\n* \u0418\u043c\u043f\u043e\u0440\u0442 \u0431\u0430\u0437\u044b \u0413\u0410\u0420 \u0438\u0437:\n    * \u0430\u0440\u0445\u0438\u0432\u0430 XML\n    * \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441 XML\n    * \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u0441\u0430\u0439\u0442\u0430 http://fias.nalog.ru \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XML\n* \u0418\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0413\u0410\u0420 (\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430)\n* \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0411\u0414\n\n\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\n=============\n\n* \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430 Django 3.2 \u0438 Python 3.9\n\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (./manage.py gar_load_data)\n============================================================\n\n\n--src <path|filename|url|auto>\n    \u041f\u0443\u0442\u044c \u0434\u043e \u0430\u0440\u0445\u0438\u0432\u0430 \u0441 \u0411\u0414 \u0413\u0410\u0420, \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0430\u0440\u0445\u0438\u0432 \u0438\u043b\u0438 URL-\u0430\u0434\u0440\u0435\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0440\u0445\u0438\u0432\n    \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `auto` \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u0430\u0439\u0442\u0430 http://fias.nalog.ru\n\n--truncate\n    \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0434 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u043c \u0432 \u043d\u0435\u0451\n\n--no-truncate\n    \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0435\u043f\u0443\u0441\u0442\u0443\u044e \u0411\u0414\n\n--no-transaction\n    \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0438\u043c\u043f\u043e\u0440\u0442 \u0431\u0435\u0437 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\n\n--update\n    \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0411\u0414 \u0413\u0410\u0420 \u0434\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 (\u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430)\n\n--limit\n    \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u0447\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0435\u0434\u0438\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u0432 \u0411\u0414\n    \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u043c\u043f\u043e\u0440\u0442 (\u0432 \u0442\u0435\u043e\u0440\u0438\u0438), \u043d\u043e \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\n    \u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: 10000\n\n--tables\n    \u0417\u0430\u0434\u0430\u0451\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e\n\n--update-version-info, --no-update-version-info\n    \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0441\u0438\u0439 \u0411\u0414 \u0413\u0410\u0420\n    \u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: True\n\n--tempdir TEMPDIR\n    \u041f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0433\u0434\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\n    \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438\n\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n=========\n\n1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 `m3-gar`::\n\n        pip install m3-gar\n\n2. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 `m3_gar` \u0432 `INSTALLED_APPS`.\n\n5. \u0415\u0441\u043b\u0438 \u0432\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0411\u0414 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0435 \u0413\u0410\u0420, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435\n\n* \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0411\u0414 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0435\u0451 \u0432 `DATABASES`\n* \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440::\n\n        GAR_DATABASE_ALIAS = 'gar'\n\n\u0433\u0434\u0435 `gar` - \u0430\u043b\u0438\u0430\u0441 \u0411\u0414 \u0432 `DATABASES`\n\n* \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a `DATABASE_ROUTERS`::\n\n        m3_gar.routers.GARRouter\n\n* \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435::\n\n\n        python manage.py migrate --database=gar\n\n\u0433\u0434\u0435 `gar` - \u0430\u043b\u0438\u0430\u0441 \u0411\u0414 \u0432 `DATABASES`\n\n5. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435::\n\n        python manage.py migrate\n\n\n\u0418\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\n=============\n\n\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0439\n----------------------\n* T: Table (\u0422\u0430\u0431\u043b\u0438\u0446\u0430) - \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\n* L: Loaded (\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e) - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0440\u043e\u043a\n* U: Updated (\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e) - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n* FN: Filename (\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430) - \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n\n\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n------------------------------\n\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0411\u0414 \u0413\u0410\u0420\n\n\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 \u0441 \u0441\u0430\u0439\u0442\u0430 \u0424\u0418\u0410\u0421::\n\n        python manage.py gar_load_data --src auto\n\n\u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u0435\u043d \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0435\u0433\u043e::\n\n        # \u0410\u0440\u0445\u0438\u0432 \u0441 XML-\u0444\u0430\u0439\u043b\u0430\u043c\u0438\n        python manage.py gar_load_data --src /path/to/gar_xml.zip\n        # \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0430\u0440\u0445\u0438\u0432\u0430\n        python manage.py gar_load_data --src /path/to/gar_data/\n\n**\u041d\u043e!**\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432 \u0411\u0414 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.\n\u0422\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432 \u0411\u0414 \u0413\u0410\u0420,\n\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u043c\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c\nORM Django \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0443\u0434\u0430\u043b\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u043a \u0436\u0435 \u0438 \u043e\u0442\u0442\u0443\u0434\u0430.\n\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0411\u0414 \u0413\u0410\u0420 \u0437\u0430\u043d\u043e\u0432\u043e, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0444\u043b\u0430\u0433 *--truncate*::\n\n        python manage.py gar_load_data --src /path/to/gar_xml.zip --truncate\n\n\u0415\u0441\u043b\u0438 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0444\u043b\u0430\u0433 *--update* - \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u0411\u0414 \u0434\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.::\n\n        python manage.py gar_load_data --src /path/to/gar_xml.zip --update\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0411\u0414\n--------------------------------------------\n\n\u0414\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0411\u0414 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0431\u0435\u0437 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.\n\n\u0414\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 manage_constraints, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0430\u044f SQL-\u043a\u043e\u0434 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043f\u043e\u043b\u0435\u0439.\n\n\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:\n\nstate\n    \"enable\" \u0438\u043b\u0438 \"disable\" \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f/\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\n\n\u041e\u043f\u0446\u0438\u0438:\n\n--fk\n    \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439\n\n--unique\n    \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438\n\n--index\n    \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\n\n--logged\n    \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0411\u0414\n\n--truncate\n    \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b (\u0441\u043c. \"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0411\u0414\" \u043d\u0438\u0436\u0435)\n\n--commit\n    \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0411\u0414, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f SQL-\u043a\u043e\u0434\u0430\n\n\u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:\n\n1. \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:::\n\n        python manage.py manage_constraints disable --fk --unique --index --logged --commit\n\n2. \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u0431\u0449\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432::\n\n        python manage.py gar_load_data --no-truncate --no-transaction /path/to/gar_data/\n\n\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 /path/to/gar_data/ \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0435\u0436\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b AS_*.xml \u0438\u0437 \u043a\u043e\u0440\u043d\u044f \u0430\u0440\u0445\u0438\u0432\u0430, \u0442.\u0435.::\n\n        /path/to/gar_data/AS_ADDHOUSE_TYPES_20211004_91e6dc75-0e20-4af0-8bd4-81701eeb8961.XML\n        ...\n        /path/to/gar_data/AS_ROOM_TYPES_20211004_5b63b804-601c-4fc2-b083-49a616a30723.XML\n\n3. \u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432::\n\n        python manage.py gar_load_data --no-truncate --no-transaction /path/to/gar_data/\n\n\u0412 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 /path/to/gar_data/ \u0434\u043e\u043b\u0436\u043d\u044b \u043b\u0435\u0436\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c, \u0442.\u0435. \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 01 \u0438 02 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0438\u0434\u0430::\n\n        /path/to/gar_data/01/AS_ADDR_OBJ_20211004_3d78254b-65da-4864-8495-fedad8adcbbf.XML\n        ...\n        /path/to/gar_data/01/AS_STEADS_PARAMS_20211004_edc5fddf-5a2b-4f47-915b-2300f436fca1.XML\n        /path/to/gar_data/02/AS_ADDR_OBJ_20211004_46290f85-8a71-41de-9a8d-b6c01e3f6d60.XML\n        ...\n        /path/to/gar_data/02/AS_STEADS_PARAMS_20211004_738598d9-38b0-441d-9276-c7ac7e41d606.XML\n\n4. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f.3 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432\n\n5. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e:::\n\n        python manage.py manage_constraints enable --fk --unique --index --logged --commit\n\n\n\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0411\u0414\n----------------------\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u044f --truncate \u043a\u043e\u043c\u0430\u043d\u0434\u044b manage_constraints.\n\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043b\u0438\u0431\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043e\u0431\u0449\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u043e\u043d \u0441 \u043a\u043e\u0434\u043e\u043c \"0\"\n\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043e\u043f\u0446\u0438\u0438 \"--commit\"\n\n\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445::\n\n        python manage.py manage_constraints disable --truncate --commit\n\n\n\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0449\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432::\n\n        python manage.py manage_constraints disable --truncate=0 --commit\n\n\n\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0449\u0438\u0445 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432::\n\n        python manage.py manage_constraints disable --truncate=0,1,2,3 --commit\n\n\n\u0414\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432::\n\n        python manage.py manage_constraints disable --truncate=1,2,3 --commit\n\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0411\u0414\n--------------------------\n\u0414\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0411\u0414 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435::\n\n        python manage.py gar_load_data --update\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0441\u0430\u0439\u0442\u0430 \u0424\u0418\u0410\u0421. \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435\u043b\u044c\u0437\u044f.\n\n\n\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445\n=======================\n\n\u0414\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0413\u0410\u0420 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 `gar_update_schema`\n\n--url\n    URL-\u0430\u0434\u0440\u0435\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441\u043e \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XSD\n\n--path\n    \u041f\u0443\u0442\u044c \u0434\u043e \u0443\u0436\u0435 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430\n\n--testmode\n    \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0434 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u043c \u0432 \u043d\u0435\u0451\n\n\n\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 settings.py\n=====================\n`GAR_DATABASE_ALIAS` - \u0430\u043b\u0438\u0430\u0441 \u0411\u0414 \u0432 `DATABASES` \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0413\u0410\u0420\n\n\n\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 name_with_parents \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0439 \u0438 \u043f\u043e\u043b\u0435\u0439 name_with_typename \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 AddrOdj\n================================================================================================\n\n\u0412 \u0411\u0414 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f name_with_parents (\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0439) \u0438 name_with_typename (\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 AddrOdj).\n\u0414\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 `fill_custom_fields`\n\u0414\u043b\u044f \u043d\u0435\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n\n--parents\n    \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044f name_with_parents \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0439, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438:\n        --adm - \u043f\u043e\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438\n        --guids - \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c guid-\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435\n        --levels - \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435\n\n--typenames\n    \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044f name_with_typename \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 AddrOdj \u0434\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u0435\u0439 7 \u0438 8 (\u0443\u043b\u0438\u0446\u044b, \u043c\u0438\u043a\u0440\u043e\u0440\u0430\u0439\u043e\u043d\u044b, \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u0438 \u0442.\u0434.)\n        --guids_typenames - \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u044c guid-\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435\n\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b:\n\n    - \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439 name_with_parents \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438:\n\n            python manage.py fill_custom_fields --parents\n\n    - \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 name_with_parents \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0434\u043b\u044f \u0443\u0440\u043e\u0432\u043d\u0435\u0439 1 \u0438 2:\n\n            python manage.py fill_custom_fields --parents --levels=1,2\n\n    - \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439 name_with_typename \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 AddrObj:\n\n            python manage.py fill_custom_fields --typenames\n\n    - \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f name_with_typename \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 AddrObj \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e guid:\n\n            python manage.py fill_custom_fields --typenames --guids_typenames=6b87470a-ac30-418b-991b-3c0d42515192\n",
    "bugtrack_url": null,
    "license": "MIT license",
    "summary": "GAR Django integration for m3",
    "version": "1.1.0",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "57b4de8f570abf253cbf511b1a4743a629cab31043dff8fdf4c4720a852082bb",
                "md5": "1e1cfcb0169a5f2272aff939af0a99f2",
                "sha256": "f548b91a28794a1d2aea3ab4c19ece6994f8f26bc424ca114824510a9f7b35f1"
            },
            "downloads": -1,
            "filename": "m3_gar-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1e1cfcb0169a5f2272aff939af0a99f2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 79175,
            "upload_time": "2024-04-12T07:23:02",
            "upload_time_iso_8601": "2024-04-12T07:23:02.114015Z",
            "url": "https://files.pythonhosted.org/packages/57/b4/de8f570abf253cbf511b1a4743a629cab31043dff8fdf4c4720a852082bb/m3_gar-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a52f7d2706b3a426e8f2296e9f1e0e605286867a6c97317a0df2153853f4c051",
                "md5": "8318783b73e24d6136395b5390faa6a9",
                "sha256": "4e3bd8b30ecec064aaa568b3618392d9f1e8cee46dad0eef0bfc3d25fa6c1f29"
            },
            "downloads": -1,
            "filename": "m3-gar-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "8318783b73e24d6136395b5390faa6a9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 56263,
            "upload_time": "2024-04-12T07:23:04",
            "upload_time_iso_8601": "2024-04-12T07:23:04.509840Z",
            "url": "https://files.pythonhosted.org/packages/a5/2f/7d2706b3a426e8f2296e9f1e0e605286867a6c97317a0df2153853f4c051/m3-gar-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-12 07:23:04",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "m3-gar"
}
        
Elapsed time: 0.39733s