edu-rdm-integration


Nameedu-rdm-integration JSON
Version 3.12.0 PyPI version JSON
download
home_pageNone
SummaryИнтеграция с Региональной витриной данных
upload_time2025-07-09 13:39:49
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Проект "Интеграция с Региональной витриной данных (РВД)"

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

На текущий момент интеграция реализуется в рамках проектов Электронный детский сад (ЭДС), Электронная школа (ЭШ) и 
Электронный колледж (ЭК).

## Описание концепции

Со стороны Минцифры предоставляется спецификация (ЕФТТ) с требованиями по формату и механизму выгрузки данных. 

Выбрана модель промежуточного хранения данных на стороне продукта, которые подлежат выгрузке. При помощи такого подхода,
можно обеспечить формирование не хранящихся в продукте данных и дальнейшее их обновление и удаление. Упрощается процесс 
поиска ошибок в данных, т.к. можно явно определить, в каких записях находятся ошибки и далее анализировать существующие 
данные в продуктах или функционал по формированию данных.

## Принцип работы

Весь процесс разделен на сбор, выгрузку данных в файлы, отправку файлов. Выделяются следующие понятия:

Модель продукта
: Django-модель находящаяся в самом продукте. При помощи нее производится накапливание пользовательских данных;

Модель РВД
: Django-модель находящаяся в пакете РВД продукта. Из моделей РВД формируется схема БД, позволяющая хранить данные для 
дальнейшей выгрузки в нормализованном виде;

Сущность РВД
: Описание формата выгрузки данных в РВД в виде dataclass-а. Хранит в себе описание первичных, внешних ключей, 
обязательность и порядок полей.

На этапе сбора данных производится формирование данных моделей РВД на основе данных моделей продуктов. Существуют так 
называемые расчетные модели, для которых данные рассчитываются в процессе сбора.

Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.

Очереди для периодических задач сборки и выгрузки данных
: Важно учитывать, что с версии пакета 3.6 вводится две новые очереди и соответствущие этим очередям периодические задачи
сбора и выгрузки данных. Очередь для сущности указывается в реестре "Сущности для сбора и экспорта данных" - по умолчанию все
сущности относятся к основной очереди.
Итого - нужно настроить три очереди для работы.

 - "Быстрая" очередь - RDM_FAST - для сущностей, по которым данные должны отдаваться каждые 5/10/15 минут по требованиям 
витрины. Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
 - Основная очередь (та которая была до версии 3.6) - RDM- ля всех сущностей по умолчанию.
Периодическая задача - TransferLatestEntitiesDataFastPeriodicTask.
 - "Долгая" очередь - RDM_LONG - для сущностей по которым идет долгий сбор, например для расчетных сущностей. 
Периодическая задача - TransferLatestEntitiesDataLongPeriodicTask.

## Требования к окружению

Для работы требуется Python >=3.9. Так же в зависимостях есть внутренние пакеты:

- educommon;
- function-tools;
- m3-db-utils;
- uploader-client.

Версии всех пакетов уточнены в файлах с зависимостями.

## Разворачивание

Перед внедрением пакета в проект, необходимо убедиться, что:

- В проекте используется логирование из educommon;
- В проект внедрен function-tools;
- В проект внедрен m3-db-utils;
- В проект внедрен uploader-client. 

## Подключение в settings.py

INSTALLED_APPS = (
    ...
    'edu_rdm_integration',
    'edu_rdm_integration.collect_and_export_data',
    'edu_rdm_integration.core.registry',
    'edu_rdm_integration.rdm_entities',
    'edu_rdm_integration.rdm_models',
    'edu_rdm_integration.pipelines.transfer',
    'edu_rdm_integration.stages.collect_data',
    'edu_rdm_integration.stages.export_data',
    'edu_rdm_integration.stages.service',
    'edu_rdm_integration.stages.upload_data',
    'edu_rdm_integration.stages.upload_data.uploader_log',
    'edu_rdm_integration.stages.collect_data.registry',
    'edu_rdm_integration.stages.export_data.registry',
    ...
)

## Параметры конфигурационного файла

В разных проектах существуют различные способы добавления настроек, где-то через плагины, где-то напрямую в settings.py.
Будет рассмотрен подход указания настроек в settings.py и указания параметров в конфигурационном файле.

Для возможности конфигурирования необходимо проделать ряд действий:

- Определение значений по умолчанию настроек в settings.py:
    ```
    PROJECT_DEFAULT_CONFIG.update({
        # Настройки РВД
        ('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # Дефолтное значение нужно изменить на специфическое системе
        ('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,
        ('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,
        ('rdm_general', 'UPLOAD_QUEUE_MAX_SIZE'): 500_000_000,
        ('rdm_general', 'RDM_MENU_ITEM'): False,
        ('rdm_transfer_task', 'MINUTE'): '0',
        ('rdm_transfer_task', 'HOUR'): '*/4',
        ('rdm_transfer_task', 'DAY_OF_WEEK'): '*',
        ('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,
        ('rdm_transfer_task_fast', 'MINUTE'): '*/5',
        ('rdm_transfer_task_fast', 'HOUR'): '*',
        ('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',
        ('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,
        ('rdm_transfer_task_long', 'MINUTE'): '0',
        ('rdm_transfer_task_long', 'HOUR'): '*/6',
        ('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',
        ('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,
        ('rdm_upload_data_task', 'MINUTE'): '0',
        ('rdm_upload_data_task', 'HOUR'): '*/2',
        ('rdm_upload_data_task', 'DAY_OF_WEEK'): '*',
        ('rdm_upload_data_task', 'LOCK_EXPIRE_SECONDS'): 7200,
        ('rdm_upload_data_task', 'EXPORT_STAGES'): 500,
        ('rdm_upload_status_task', 'MINUTE'): '*/30',
        ('rdm_upload_status_task', 'HOUR'): '*',
        ('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',
        ('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,
        ('rdm_check_suspend_task', 'MINUTE'): '*/10',
        ('rdm_check_suspend_task', 'HOUR'): '*',
        ('rdm_check_suspend_task', 'DAY_OF_WEEK'): '*',
        ('rdm_check_suspend_task', 'LOCK_EXPIRE_SECONDS'): 7200,
        ('rdm_check_suspend_task', 'STAGE_TIMEOUT'): 120,
        # Настройки очереди отправки
        ('rdm_redis', 'REDIS_HOST'): 'localhost',
        ('rdm_redis', 'REDIS_PORT'): 6379,
        ('rdm_redis', 'REDIS_DB'): 1,
        ('rdm_redis', 'REDIS_PASSWORD'): '',
        ('rdm_redis', 'REDIS_CACHE_TIMEOUT_SECONDS'): 7200,
        ('uploader_client', 'URL'): 'http://localhost:8090',
        ('uploader_client', 'DATAMART_NAME'): '',
        ('uploader_client', 'REQUEST_RETRIES'): 10,
        ('uploader_client', 'REQUEST_TIMEOUT'): 10,
        ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,
        ('uploader_client', 'RESPONSE_FILE_STATUS'): 'success',
        ('uploader_client', 'USE_PROXY_API'): False,
        ('uploader_client', 'USERNAME'): '',
        ('uploader_client', 'PASSWORD'): '',
        ('uploader_client', 'ORGANIZATION_OGRN'): '',
        ('uploader_client', 'INSTALLATION_NAME'): '',
        ('uploader_client', 'INSTALLATION_ID'): '',
    })  
    ```
- Получение значений настроек из конфигурационного файла в settings.py:

    ```
    # Ссылка на каталог с файлами для загрузки
    UPLOADS = 'uploads'
  
    # =============================================================================
    # Интеграция с Региональной витриной данных (РВД)
    # =============================================================================
    
    # Префикс идентификаторов записей сущностей специфический для продукта
    RDM_EXPORT_ENTITY_ID_PREFIX = conf.get('rdm_general', 'EXPORT_ENTITY_ID_PREFIX') 
  
    # Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
    RDM_COLLECT_CHUNK_SIZE = conf.get_int('rdm_general', 'COLLECT_CHUNK_SIZE')
    
    # Количество записей моделей обрабатываемых за одну итерацию экспорта данных
    RDM_EXPORT_CHUNK_SIZE = conf.get_int('rdm_general', 'EXPORT_CHUNK_SIZE')
  
    # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
    RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE = conf.get_int('rdm_general', 'UPDATE_NON_EXPORTED_CHUNK_SIZE')
  
    # Объем очереди файлов в витрину (в байтах) - по умолчанию 512 Мбайт
    RDM_UPLOAD_QUEUE_MAX_SIZE = conf.get_int('rdm_general', 'UPLOAD_QUEUE_MAX_SIZE')
  
    # Пункт меню "Региональная витрина данных" - Спрятать (False) / Отображать (True)
    RDM_MENU_ITEM = conf.get_bool('rdm_general', 'RDM_MENU_ITEM')
    
    # Настройка запуска периодической задачи выгрузки данных:
    RDM_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task', 'MINUTE')
    RDM_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task', 'HOUR')
    RDM_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task', 'DAY_OF_WEEK')
    RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS')
    
    # Настройка запуска периодической задачи выгрузки данных - быстрая очередь:
    RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')
    RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')
    RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')
    RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')
    
    # Настройка запуска периодической задачи выгрузки данных - долгая очередь расчетных моделей:
    RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')
    RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')
    RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')
    RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')
  
    # Настройка запуска периодической задачи поиска зависших этапов экспорта:
    RDM_CHECK_SUSPEND_TASK_MINUTE = conf.get('rdm_check_suspend_task', 'MINUTE')
    RDM_CHECK_SUSPEND_TASK_HOUR = conf.get('rdm_check_suspend_task', 'HOUR')
    RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK = conf.get('rdm_check_suspend_task', 'DAY_OF_WEEK')
    RDM_CHECK_SUSPEND_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_check_suspend_task', 'LOCK_EXPIRE_SECONDS')
    RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT = conf.get_int('rdm_check_suspend_task', 'STAGE_TIMEOUT')

    # Настройка запуска периодической задачи отправки файлов с данными РВД
    RDM_UPLOAD_DATA_TASK_MINUTE = conf.get('rdm_upload_data_task', 'MINUTE')
    RDM_UPLOAD_DATA_TASK_HOUR = conf.get('rdm_upload_data_task', 'HOUR')
    RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK = conf.get('rdm_upload_data_task', 'DAY_OF_WEEK')
    RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_upload_data_task', 'LOCK_EXPIRE_SECONDS')
    # Количество подэтапов для обработки в периодической задаче отправки данных
    RDM_UPLOAD_DATA_TASK_EXPORT_STAGES = conf.get_int('rdm_upload_data_task', 'EXPORT_STAGES')
    
    # Настройка запуска периодической задачи статуса загрузки данных в витрину:
    RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')
    RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')
    RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK = conf.get('rdm_upload_status_task', 'DAY_OF_WEEK')
    RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS')
  
    # Настройка очереди Redis для формирования файлов РВД.
    RDM_REDIS_HOST = conf.get('rdm_redis', 'REDIS_HOST')
    RDM_REDIS_PORT = conf.get('rdm_redis', 'REDIS_PORT')
    RDM_REDIS_DB = conf.get('rdm_redis', 'REDIS_DB')
    RDM_REDIS_PASSWORD = conf.get('rdm_redis', 'REDIS_PASSWORD')    
    # Таймаут для сохранения параметров в общем кеш.
    RDM_REDIS_CACHE_TIMEOUT_SECONDS = conf.get_int('rdm_redis', 'REDIS_CACHE_TIMEOUT_SECONDS')
  
    # Загрузка данных в Региональную витрину данных (РВД)
    # Адрес витрины (schema://host:port)
    RDM_UPLOADER_CLIENT_URL = conf.get('uploader_client', 'URL')    
    # Мнемоника Витрины
    RDM_UPLOADER_CLIENT_DATAMART_NAME = conf.get('uploader_client', 'DATAMART_NAME')    
    # Количество повторных попыток запроса
    RDM_UPLOADER_CLIENT_REQUEST_RETRIES = conf.get_int('uploader_client', 'REQUEST_RETRIES')    
    # Таймаут запроса, сек
    RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT = conf.get_int('uploader_client', 'REQUEST_TIMEOUT')    
    # Включить эмуляцию отправки запросов
    RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')
    # Установить тип ответа витрины при проверке статуса отправленного файла
    RDM_RESPONSE_FILE_STATUS = conf.get('uploader_client', 'RESPONSE_FILE_STATUS')
    # Использование Proxy API
    RDM_UPLOADER_CLIENT_USE_PROXY_API = conf.get_bool('uploader_client', 'USE_PROXY_API')
    # Имя пользователя IAM
    RDM_UPLOADER_CLIENT_USERNAME = conf.get('uploader_client', 'USERNAME')
    # Пароль пользователя IAM
    RDM_UPLOADER_CLIENT_PASSWORD = conf.get('uploader_client', 'PASSWORD')
    # ОГРН организации, в рамках которой развёрнута Витрина
    RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN = conf.get('uploader_client', 'ORGANIZATION_OGRN')
    # Имя инсталляции в целевой Витрине
    RDM_UPLOADER_CLIENT_INSTALLATION_NAME = conf.get('uploader_client', 'INSTALLATION_NAME')
    # Идентификатор инсталляции в целевой Витрине
    RDM_UPLOADER_CLIENT_INSTALLATION_ID = conf.get('uploader_client', 'INSTALLATION_ID')  
  
    # Директория логов сбора данных, доступных для скачивания
    RDM_COLLECT_LOG_DIR = os.path.join('logs', 'rdm', 'collect')
    os.makedirs(os.path.join(MEDIA_ROOT, RDM_COLLECT_LOG_DIR), exist_ok=True)
    # Директория логов экспорта данных, доступных для скачивания
    RDM_EXPORT_LOG_DIR = os.path.join('logs', 'rdm', 'export')
    os.makedirs(os.path.join(MEDIA_ROOT, RDM_EXPORT_LOG_DIR), exist_ok=True)
    # Директория логов отправки данных в витрину, доступных для скачивания
    RDM_UPLOAD_LOG_DIR = os.path.join('logs', 'rdm', 'upload')
    os.makedirs(os.path.join(MEDIA_ROOT, RDM_UPLOAD_LOG_DIR), exist_ok=True)
    ```

Перечень настроек в settings.py указан в таблице ниже.

| Название настройки в settings                | Описание                                                                                                                           | Значение по умолчанию   |
|----------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------|-------------------------|
| UPLOADS                                      | Основная директория в MEDIA, в которой будет создана директория edu_rdm_integration  для сохранения файлов для дальнейшей выгрузки | 500                     |
| RDM_EXPORT_ENTITY_ID_PREFIX                  | Префикс идентификаторов записей сущностей специфический для продукта                                                               |                         |
| RDM_COLLECT_CHUNK_SIZE                       | Количество записей моделей обрабатываемых за одну итерацию сбора данных                                                            | 500                     |
| RDM_EXPORT_CHUNK_SIZE                        | Количество записей моделей обрабатываемых за одну итерацию экспорта                                                                | 500                     |
| RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE           | # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified                          | 5000                    |
| RDM_UPLOAD_QUEUE_MAX_SIZE                    | Объем очереди файлов в витрину (в байтах).                                                                                         | 500_000_000             |
| RDM_MENU_ITEM                                | Отображение пункта меню Пункт меню "Региональная витрина данных"                                                                   | False                   |
| RDM_TRANSFER_TASK_MINUTE                     | Настройка запуска периодической задачи выгрузки данных. Минута                                                                     | '0'                     |
| RDM_TRANSFER_TASK_HOUR                       | Настройка запуска периодической задачи выгрузки данных. Час                                                                        | '*/4'                   |
| RDM_TRANSFER_TASK_DAY_OF_WEEK                | Настройка запуска периодической задачи выгрузки данных. День недели                                                                | '*'                     |
| RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS        | Время по истечении которого, блокировка может быть снята (в секундах)                                                              | 21600                   |
| RDM_FAST_TRANSFER_TASK_MINUTE                | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Минута                                                   | '*/5'                   |
| RDM_FAST_TRANSFER_TASK_HOUR                  | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. Час                                                      | '*'                     |
| RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK           | Настройка запуска периодической задачи (быстрая очередь) выгрузки данных. День недели                                              | '*'                     |
| RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS   | Время по истечении которого, блокировка может быть снята (в секундах)                                                              | 1800                    |
| RDM_LONG_TRANSFER_TASK_MINUTE                | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Минута                                                    | 0                       |
| RDM_LONG_TRANSFER_TASK_HOUR                  | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. Час                                                       | '*/6'                   |
| RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK           | Настройка запуска периодической задачи (долгая очередь) выгрузки данных. День недели                                               | '*'                     |
| RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS   | Время по истечении которого, блокировка может быть снята (в секундах)                                                              | 28800                   |
| RDM_CHECK_SUSPEND_TASK_MINUTE                | Настройка запуска периодической задачи поиска зависших этапов экспорта. Минута                                                     | */10                    |
| RDM_CHECK_SUSPEND_TASK_HOUR                  | Настройка запуска периодической задачи поиска зависших этапов экспорта. Час                                                        | *                       |
| RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK           | Настройка запуска периодической задачи поиска зависших этапов экспорта. День недели                                                | *                       |
| RDM_CHECK_SUSPEND_TASK_LOCK_EXPIRE_SECONDS   | Время по истечении которого, блокировка может быть снята (в секундах).                                                             | 7200                    |
| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT         | Дельта для определения зависшего подэтапа. Минута                                                                                  | 120                     |
| RDM_UPLOAD_DATA_TASK_MINUTE                  | Настройка запуска периодической задачи отправки файлов с данными РВД (минута).                                                     | '0'                     |
| RDM_UPLOAD_DATA_TASK_HOUR                    | Настройка запуска периодической задачи отправки файлов с данными РВД (час).                                                        | '*/2'                   |
| RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK             | Настройка запуска периодической задачи отправки файлов с данными РВД (день недели).                                                | '*'                     |
| RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS     | Время по истечении которого, блокировка может быть снята (в секундах).                                                             | 7200                    |
| RDM_UPLOAD_DATA_TASK_EXPORT_STAGES           | Количество подэтапов для обработки в периодической задаче отправки данных.                                                         | 500                     |
| RDM_UPLOAD_STATUS_TASK_MINUTE                | Настройка запуска периодической задачи статуса загрузки данных в витрину. Минута                                                   | '*/30'                  |
| RDM_UPLOAD_STATUS_TASK_HOUR                  | Настройка запуска периодической задачи статуса загрузки данных в витрину. Час                                                      | '*'                     |
| RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK           | Настройка запуска периодической задачи статуса загрузки данных в витрину. День недели                                              | '*'                     |
| RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS   | Время по истечении которого, блокировка может быть снята (в секундах)                                                              | 3600                    |
| RDM_REDIS_HOST                               | Настройка очереди Redis для формирования файлов РВД (хост).                                                                        |                         |
| RDM_REDIS_PORT                               | Настройка очереди Redis для формирования файлов РВД (порт).                                                                        |                         |
| RDM_REDIS_DB                                 | Настройка очереди Redis для формирования файлов РВД (номер бд).                                                                    |                         |
| RDM_REDIS_PASSWORD                           | Настройка очереди Redis для формирования файлов РВД (пароль).                                                                      |                         |
| RDM_REDIS_CACHE_TIMEOUT_SECONDS              | Таймаут для сохранения параметров в общем кеш (секунды).                                                                           | 7200                    |
| RDM_UPLOADER_CLIENT_URL                      | Адрес витрины (schema://host:port)                                                                                                 | 'http://localhost:8090' |
| RDM_UPLOADER_CLIENT_DATAMART_NAME            | Мнемоника Витрины                                                                                                                  | 'test'                  |
| RDM_UPLOADER_CLIENT_REQUEST_RETRIES          | Количество повторных попыток запроса                                                                                               | 10                      |
| RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT          | Таймаут запроса, сек                                                                                                               | 10                      |
| RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION | Включить эмуляцию отправки запросов                                                                                                | True                    |
| RDM_RESPONSE_FILE_STATUS                     | Установить тип ответа витрины при проверке статуса отправленного файла                                                             | 'success'               |
| RDM_UPLOADER_CLIENT_USE_PROXY_API            | Использование Proxy API                                                                                                            | False                   |
| RDM_UPLOADER_CLIENT_USERNAME                 | Имя пользователя IAM                                                                                                               |                         |
| RDM_UPLOADER_CLIENT_PASSWORD                 | Пароль пользователя IAM                                                                                                            |                         |
| RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN        | ОГРН организации, в рамках которой развёрнута Витрина                                                                              |                         |
| RDM_UPLOADER_CLIENT_INSTALLATION_NAME        | Имя инсталляции в целевой Витрине                                                                                                  |                         |
| RDM_UPLOADER_CLIENT_INSTALLATION_ID          | Идентификатор инсталляции в целевой Витрине                                                                                        |                         |
| RDM_COLLECT_LOG_DIR                          | Директория логов сбора данных, доступных для скачивания                                                                            |                         |
| RDM_EXPORT_LOG_DIR                           | Директория логов экспорта данных, доступных для скачивания                                                                         |                         |
| RDM_UPLOAD_LOG_DIR                           | Директория логов отправки данных в витрину, доступных для скачивания                                                               |                         |

- В дефолтный конфиг проекта необходимо добавить:

    ```
    # Общие настройки интеграции с РВД
    [rmd_general]
    # Префикс идентификаторов записей сущностей специфический для продукта. Указывается в settings.py и не должен 
    # изменяться. Возможность изменения через конфигурационный файл оставлена для экстренных случаев.
    # EXPORT_ENTITY_ID_PREFIX = 
    # Количество записей моделей обрабатываемых за одну итерацию экспорта данных
    EXPORT_CHUNK_SIZE = 500
    # Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
    COLLECT_CHUNK_SIZE = 500
    # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
    UPDATE_NON_EXPORTED_CHUNK_SIZE = 5000
    # Объем очереди файлов в витрину (в байтах) - по умолчанию 512 Мбайт.
    UPLOAD_QUEUE_MAX_SIZE = 500000000
    # Отображение пункта меню "Региональная витрина данных"
    RDM_MENU_ITEM = False
    
    # Настройка запуска периодической задачи выгрузки данных
    [rdm_transfer_task]
    MINUTE=*/2
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS=21600
  
    [rdm_transfer_task_fast]
    MINUTE=*/2
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS = 1800

    [rdm_transfer_task_long]
    MINUTE=*/15
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS = 21600
    
    # Настройка запуска периодической задачи поиска зависших этапов экспорта
    [rdm_check_suspend_task]
    MINUTE=*/10
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS=7200
    # Дельта для определения зависшего подэтапа, мин
    STAGE_TIMEOUT=120
  
    # Настройка запуска периодической задачи отправки csv-файлов в витрину.
    [rdm_upload_data_task]
    MINUTE=*/2
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS = 7200
    EXPORT_STAGES = 500
    
    # Настройка запуска периодической задачи статуса загрузки данных в витрину
    [rdm_upload_status_task]
    MINUTE=*/2
    HOUR=*
    DAY_OF_WEEK=*
    LOCK_EXPIRE_SECONDS=7200
  
    # Настройка очереди Redis для формирования файлов РВД.
    [rdm_redis]
    REDIS_HOST = localhost
    REDIS_PORT = 6379
    REDIS_DB = 1
    REDIS_PASSWORD = 
    # Таймаут для сохранения параметров в общем кеш.
    REDIS_CACHE_TIMEOUT_SECONDS = 7200
    
    [uploader_client]
    # Адрес витрины
    URL = http://localhost:8090
    # Мнемоника Витрины
    DATAMART_NAME = test
    # Количество повторных попыток запроса
    REQUEST_RETRIES = 10
    # Таймаут запроса, сек
    REQUEST_TIMEOUT = 10
    # Включить эмуляцию отправки запросов
    ENABLE_REQUEST_EMULATION = True
    # Использовать Proxy API
    USE_PROXY_API = False
    # Имя пользователя IAM
    USERNAME =
    # Пароль пользователя IAM
    PASSWORD =
    # ОГРН организации, в рамках которой развёрнута Витрина
    ORGANIZATION_OGRN =
    # Имя инсталляции в целевой Витрине
    INSTALLATION_NAME =
    # Идентификатор инсталляции в целевой Витрине
    INSTALLATION_ID =
    ```
На основе дефолтного конфига произвести конфигурирование приложений.

## Форматирование

Форматирование исходного кода осуществляется при помощи ruff. Ниже приведены команды для осуществления форматирования.

```bash
$ ruff format src/
$ ruff check --fix --unsafe-fixes src/
```

## Сборка и распространение

Сборка пакета производится при помощи [Job-а в Jenkins M3.build_dist](http://jenkins.py.bars.group/view/PY/job/M3.packages/job/M3.build_dist/).

Пакет выкладывается в глобальный [PYPI](https://pypi.org/project/edu-rdm-integration/) и во внутренний [Nexus](http://nexus.py.bars.group/#browse/browse:pypi-edu-private:edu-rdm-integration) 

## Документация

С документацией можно ознакомиться по ссылке http://docs.py.bars.group/edu-rdm-integration/

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "edu-rdm-integration",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "BARS Group <education_dev@bars.group>",
    "download_url": "https://files.pythonhosted.org/packages/ea/43/99833b23ab1eab777701eff3eee2164602d97b47427c00979f7d6109b2a2/edu_rdm_integration-3.12.0.tar.gz",
    "platform": null,
    "description": "# \u041f\u0440\u043e\u0435\u043a\u0442 \"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0442\u0440\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0420\u0412\u0414)\"\n\n\u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0442\u0440\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \n\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445. \n\n\u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0434\u0435\u0442\u0441\u043a\u0438\u0439 \u0441\u0430\u0434 (\u042d\u0414\u0421), \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u0448\u043a\u043e\u043b\u0430 (\u042d\u0428) \u0438 \n\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043b\u043b\u0435\u0434\u0436 (\u042d\u041a).\n\n## \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438\n\n\u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u041c\u0438\u043d\u0446\u0438\u0444\u0440\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f (\u0415\u0424\u0422\u0422) \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0443 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \n\n\u0412\u044b\u0431\u0440\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0442 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430,\n\u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435. \u0423\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \n\u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442.\u043a. \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \n\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u0445 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445.\n\n## \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b\n\n\u0412\u0435\u0441\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u0441\u0431\u043e\u0440, \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u044b, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412\u044b\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f:\n\n\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\n: Django-\u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0430\u044f\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;\n\n\u041c\u043e\u0434\u0435\u043b\u044c \u0420\u0412\u0414\n: Django-\u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0420\u0412\u0414 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0418\u0437 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0420\u0412\u0414 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0445\u0435\u043c\u0430 \u0411\u0414, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \n\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435;\n\n\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0420\u0412\u0414\n: \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0420\u0412\u0414 \u0432 \u0432\u0438\u0434\u0435 dataclass-\u0430. \u0425\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445, \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439, \n\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0435\u0439.\n\n\u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0420\u0412\u0414 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a \n\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u0430.\n\n\u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0420\u0412\u0414 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0420\u0412\u0414.\n\n\u041e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\n: \u0412\u0430\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 3.6 \u0432\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0432\u0435 \u043d\u043e\u0432\u044b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0449\u0438\u0435 \u044d\u0442\u0438\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\n\u0441\u0431\u043e\u0440\u0430 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \"\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\" - \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435\n\u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.\n\u0418\u0442\u043e\u0433\u043e - \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b.\n\n - \"\u0411\u044b\u0441\u0442\u0440\u0430\u044f\" \u043e\u0447\u0435\u0440\u0435\u0434\u044c - RDM_FAST - \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 5/10/15 \u043c\u0438\u043d\u0443\u0442 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \n\u0432\u0438\u0442\u0440\u0438\u043d\u044b. \u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 - TransferLatestEntitiesDataFastPeriodicTask.\n - \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c (\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 3.6) - RDM- \u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.\n\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 - TransferLatestEntitiesDataFastPeriodicTask.\n - \"\u0414\u043e\u043b\u0433\u0430\u044f\" \u043e\u0447\u0435\u0440\u0435\u0434\u044c - RDM_LONG - \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0434\u0435\u0442 \u0434\u043e\u043b\u0433\u0438\u0439 \u0441\u0431\u043e\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \n\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 - TransferLatestEntitiesDataLongPeriodicTask.\n\n## \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044e\n\n\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Python >=3.9. \u0422\u0430\u043a \u0436\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b:\n\n- educommon;\n- function-tools;\n- m3-db-utils;\n- uploader-client.\n\n\u0412\u0435\u0440\u0441\u0438\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438.\n\n## \u0420\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435\n\n\u041f\u0435\u0440\u0435\u0434 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e:\n\n- \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 educommon;\n- \u0412 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d function-tools;\n- \u0412 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d m3-db-utils;\n- \u0412 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d uploader-client. \n\n## \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 settings.py\n\nINSTALLED_APPS = (\n    ...\n    'edu_rdm_integration',\n    'edu_rdm_integration.collect_and_export_data',\n    'edu_rdm_integration.core.registry',\n    'edu_rdm_integration.rdm_entities',\n    'edu_rdm_integration.rdm_models',\n    'edu_rdm_integration.pipelines.transfer',\n    'edu_rdm_integration.stages.collect_data',\n    'edu_rdm_integration.stages.export_data',\n    'edu_rdm_integration.stages.service',\n    'edu_rdm_integration.stages.upload_data',\n    'edu_rdm_integration.stages.upload_data.uploader_log',\n    'edu_rdm_integration.stages.collect_data.registry',\n    'edu_rdm_integration.stages.export_data.registry',\n    ...\n)\n\n## \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\n\n\u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0433\u0434\u0435-\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u0433\u0434\u0435-\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 settings.py.\n\u0411\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 settings.py \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.\n\n\u0414\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u044f\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:\n\n- \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 settings.py:\n    ```\n    PROJECT_DEFAULT_CONFIG.update({\n        # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0420\u0412\u0414\n        ('rdm_general', 'EXPORT_ENTITY_ID_PREFIX'): '', # \u0414\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0435\n        ('rdm_general', 'COLLECT_CHUNK_SIZE'): 500,\n        ('rdm_general', 'EXPORT_CHUNK_SIZE'): 500,\n        ('rdm_general', 'UPLOAD_QUEUE_MAX_SIZE'): 500_000_000,\n        ('rdm_general', 'RDM_MENU_ITEM'): False,\n        ('rdm_transfer_task', 'MINUTE'): '0',\n        ('rdm_transfer_task', 'HOUR'): '*/4',\n        ('rdm_transfer_task', 'DAY_OF_WEEK'): '*',\n        ('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS'): 21600,\n        ('rdm_transfer_task_fast', 'MINUTE'): '*/5',\n        ('rdm_transfer_task_fast', 'HOUR'): '*',\n        ('rdm_transfer_task_fast', 'DAY_OF_WEEK'): '*',\n        ('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS'): 1800,\n        ('rdm_transfer_task_long', 'MINUTE'): '0',\n        ('rdm_transfer_task_long', 'HOUR'): '*/6',\n        ('rdm_transfer_task_long', 'DAY_OF_WEEK'): '*',\n        ('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS'): 28800,\n        ('rdm_upload_data_task', 'MINUTE'): '0',\n        ('rdm_upload_data_task', 'HOUR'): '*/2',\n        ('rdm_upload_data_task', 'DAY_OF_WEEK'): '*',\n        ('rdm_upload_data_task', 'LOCK_EXPIRE_SECONDS'): 7200,\n        ('rdm_upload_data_task', 'EXPORT_STAGES'): 500,\n        ('rdm_upload_status_task', 'MINUTE'): '*/30',\n        ('rdm_upload_status_task', 'HOUR'): '*',\n        ('rdm_upload_status_task', 'DAY_OF_WEEK'): '*',\n        ('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS'): 7200,\n        ('rdm_check_suspend_task', 'MINUTE'): '*/10',\n        ('rdm_check_suspend_task', 'HOUR'): '*',\n        ('rdm_check_suspend_task', 'DAY_OF_WEEK'): '*',\n        ('rdm_check_suspend_task', 'LOCK_EXPIRE_SECONDS'): 7200,\n        ('rdm_check_suspend_task', 'STAGE_TIMEOUT'): 120,\n        # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\n        ('rdm_redis', 'REDIS_HOST'): 'localhost',\n        ('rdm_redis', 'REDIS_PORT'): 6379,\n        ('rdm_redis', 'REDIS_DB'): 1,\n        ('rdm_redis', 'REDIS_PASSWORD'): '',\n        ('rdm_redis', 'REDIS_CACHE_TIMEOUT_SECONDS'): 7200,\n        ('uploader_client', 'URL'): 'http://localhost:8090',\n        ('uploader_client', 'DATAMART_NAME'): '',\n        ('uploader_client', 'REQUEST_RETRIES'): 10,\n        ('uploader_client', 'REQUEST_TIMEOUT'): 10,\n        ('uploader_client', 'ENABLE_REQUEST_EMULATION'): False,\n        ('uploader_client', 'RESPONSE_FILE_STATUS'): 'success',\n        ('uploader_client', 'USE_PROXY_API'): False,\n        ('uploader_client', 'USERNAME'): '',\n        ('uploader_client', 'PASSWORD'): '',\n        ('uploader_client', 'ORGANIZATION_OGRN'): '',\n        ('uploader_client', 'INSTALLATION_NAME'): '',\n        ('uploader_client', 'INSTALLATION_ID'): '',\n    })  \n    ```\n- \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 settings.py:\n\n    ```\n    # \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\n    UPLOADS = 'uploads'\n  \n    # =============================================================================\n    # \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0442\u0440\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0420\u0412\u0414)\n    # =============================================================================\n    \n    # \u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\n    RDM_EXPORT_ENTITY_ID_PREFIX = conf.get('rdm_general', 'EXPORT_ENTITY_ID_PREFIX') \n  \n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u042d\u0428 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n    RDM_COLLECT_CHUNK_SIZE = conf.get_int('rdm_general', 'COLLECT_CHUNK_SIZE')\n    \n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n    RDM_EXPORT_CHUNK_SIZE = conf.get_int('rdm_general', 'EXPORT_CHUNK_SIZE')\n  \n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f modified\n    RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE = conf.get_int('rdm_general', 'UPDATE_NON_EXPORTED_CHUNK_SIZE')\n  \n    # \u041e\u0431\u044a\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445) - \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 512 \u041c\u0431\u0430\u0439\u0442\n    RDM_UPLOAD_QUEUE_MAX_SIZE = conf.get_int('rdm_general', 'UPLOAD_QUEUE_MAX_SIZE')\n  \n    # \u041f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e \"\u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0438\u0442\u0440\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\" - \u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c (False) / \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c (True)\n    RDM_MENU_ITEM = conf.get_bool('rdm_general', 'RDM_MENU_ITEM')\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:\n    RDM_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task', 'MINUTE')\n    RDM_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task', 'HOUR')\n    RDM_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task', 'DAY_OF_WEEK')\n    RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS')\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 - \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c:\n    RDM_FAST_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_fast', 'MINUTE')\n    RDM_FAST_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_fast', 'HOUR')\n    RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_fast', 'DAY_OF_WEEK')\n    RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_fast', 'LOCK_EXPIRE_SECONDS')\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 - \u0434\u043e\u043b\u0433\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439:\n    RDM_LONG_TRANSFER_TASK_MINUTE = conf.get('rdm_transfer_task_long', 'MINUTE')\n    RDM_LONG_TRANSFER_TASK_HOUR = conf.get('rdm_transfer_task_long', 'HOUR')\n    RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK = conf.get('rdm_transfer_task_long', 'DAY_OF_WEEK')\n    RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_transfer_task_long', 'LOCK_EXPIRE_SECONDS')\n  \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:\n    RDM_CHECK_SUSPEND_TASK_MINUTE = conf.get('rdm_check_suspend_task', 'MINUTE')\n    RDM_CHECK_SUSPEND_TASK_HOUR = conf.get('rdm_check_suspend_task', 'HOUR')\n    RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK = conf.get('rdm_check_suspend_task', 'DAY_OF_WEEK')\n    RDM_CHECK_SUSPEND_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_check_suspend_task', 'LOCK_EXPIRE_SECONDS')\n    RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT = conf.get_int('rdm_check_suspend_task', 'STAGE_TIMEOUT')\n\n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0420\u0412\u0414\n    RDM_UPLOAD_DATA_TASK_MINUTE = conf.get('rdm_upload_data_task', 'MINUTE')\n    RDM_UPLOAD_DATA_TASK_HOUR = conf.get('rdm_upload_data_task', 'HOUR')\n    RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK = conf.get('rdm_upload_data_task', 'DAY_OF_WEEK')\n    RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_upload_data_task', 'LOCK_EXPIRE_SECONDS')\n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u044d\u0442\u0430\u043f\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\n    RDM_UPLOAD_DATA_TASK_EXPORT_STAGES = conf.get_int('rdm_upload_data_task', 'EXPORT_STAGES')\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443:\n    RDM_UPLOAD_STATUS_TASK_MINUTE = conf.get('rdm_upload_status_task', 'MINUTE')\n    RDM_UPLOAD_STATUS_TASK_HOUR = conf.get('rdm_upload_status_task', 'HOUR')\n    RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK = conf.get('rdm_upload_status_task', 'DAY_OF_WEEK')\n    RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS = conf.get_int('rdm_upload_status_task', 'LOCK_EXPIRE_SECONDS')\n  \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414.\n    RDM_REDIS_HOST = conf.get('rdm_redis', 'REDIS_HOST')\n    RDM_REDIS_PORT = conf.get('rdm_redis', 'REDIS_PORT')\n    RDM_REDIS_DB = conf.get('rdm_redis', 'REDIS_DB')\n    RDM_REDIS_PASSWORD = conf.get('rdm_redis', 'REDIS_PASSWORD')    \n    # \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u043c \u043a\u0435\u0448.\n    RDM_REDIS_CACHE_TIMEOUT_SECONDS = conf.get_int('rdm_redis', 'REDIS_CACHE_TIMEOUT_SECONDS')\n  \n    # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0438\u0442\u0440\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0420\u0412\u0414)\n    # \u0410\u0434\u0440\u0435\u0441 \u0432\u0438\u0442\u0440\u0438\u043d\u044b (schema://host:port)\n    RDM_UPLOADER_CLIENT_URL = conf.get('uploader_client', 'URL')    \n    # \u041c\u043d\u0435\u043c\u043e\u043d\u0438\u043a\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u044b\n    RDM_UPLOADER_CLIENT_DATAMART_NAME = conf.get('uploader_client', 'DATAMART_NAME')    \n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430\n    RDM_UPLOADER_CLIENT_REQUEST_RETRIES = conf.get_int('uploader_client', 'REQUEST_RETRIES')    \n    # \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u0435\u043a\n    RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT = conf.get_int('uploader_client', 'REQUEST_TIMEOUT')    \n    # \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\n    RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION = conf.get_bool('uploader_client', 'ENABLE_REQUEST_EMULATION')\n    # \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043e\u0442\u0432\u0435\u0442\u0430 \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\n    RDM_RESPONSE_FILE_STATUS = conf.get('uploader_client', 'RESPONSE_FILE_STATUS')\n    # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Proxy API\n    RDM_UPLOADER_CLIENT_USE_PROXY_API = conf.get_bool('uploader_client', 'USE_PROXY_API')\n    # \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM\n    RDM_UPLOADER_CLIENT_USERNAME = conf.get('uploader_client', 'USERNAME')\n    # \u041f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM\n    RDM_UPLOADER_CLIENT_PASSWORD = conf.get('uploader_client', 'PASSWORD')\n    # \u041e\u0413\u0420\u041d \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u0430\n    RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN = conf.get('uploader_client', 'ORGANIZATION_OGRN')\n    # \u0418\u043c\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435\n    RDM_UPLOADER_CLIENT_INSTALLATION_NAME = conf.get('uploader_client', 'INSTALLATION_NAME')\n    # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435\n    RDM_UPLOADER_CLIENT_INSTALLATION_ID = conf.get('uploader_client', 'INSTALLATION_ID')  \n  \n    # \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f\n    RDM_COLLECT_LOG_DIR = os.path.join('logs', 'rdm', 'collect')\n    os.makedirs(os.path.join(MEDIA_ROOT, RDM_COLLECT_LOG_DIR), exist_ok=True)\n    # \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f\n    RDM_EXPORT_LOG_DIR = os.path.join('logs', 'rdm', 'export')\n    os.makedirs(os.path.join(MEDIA_ROOT, RDM_EXPORT_LOG_DIR), exist_ok=True)\n    # \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f\n    RDM_UPLOAD_LOG_DIR = os.path.join('logs', 'rdm', 'upload')\n    os.makedirs(os.path.join(MEDIA_ROOT, RDM_UPLOAD_LOG_DIR), exist_ok=True)\n    ```\n\n\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 settings.py \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438\u0436\u0435.\n\n| \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 settings                | \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435                                                                                                                           | \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   |\n|----------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------|-------------------------|\n| UPLOADS                                      | \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0432 MEDIA, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f edu_rdm_integration  \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 | 500                     |\n| RDM_EXPORT_ENTITY_ID_PREFIX                  | \u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430                                                               |                         |\n| RDM_COLLECT_CHUNK_SIZE                       | \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445                                                            | 500                     |\n| RDM_EXPORT_CHUNK_SIZE                        | \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430                                                                | 500                     |\n| RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE           | # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f modified                          | 5000                    |\n| RDM_UPLOAD_QUEUE_MAX_SIZE                    | \u041e\u0431\u044a\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445).                                                                                         | 500_000_000             |\n| RDM_MENU_ITEM                                | \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u0435\u043d\u044e \u041f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e \"\u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0438\u0442\u0440\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\"                                                                   | False                   |\n| RDM_TRANSFER_TASK_MINUTE                     | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0438\u043d\u0443\u0442\u0430                                                                     | '0'                     |\n| RDM_TRANSFER_TASK_HOUR                       | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0430\u0441                                                                        | '*/4'                   |\n| RDM_TRANSFER_TASK_DAY_OF_WEEK                | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438                                                                | '*'                     |\n| RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS        | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)                                                              | 21600                   |\n| RDM_FAST_TRANSFER_TASK_MINUTE                | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0438\u043d\u0443\u0442\u0430                                                   | '*/5'                   |\n| RDM_FAST_TRANSFER_TASK_HOUR                  | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0430\u0441                                                      | '*'                     |\n| RDM_FAST_TRANSFER_TASK_DAY_OF_WEEK           | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438                                              | '*'                     |\n| RDM_FAST_TRANSFER_TASK_LOCK_EXPIRE_SECONDS   | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)                                                              | 1800                    |\n| RDM_LONG_TRANSFER_TASK_MINUTE                | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0434\u043e\u043b\u0433\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u0438\u043d\u0443\u0442\u0430                                                    | 0                       |\n| RDM_LONG_TRANSFER_TASK_HOUR                  | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0434\u043e\u043b\u0433\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0430\u0441                                                       | '*/6'                   |\n| RDM_LONG_TRANSFER_TASK_DAY_OF_WEEK           | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0434\u043e\u043b\u0433\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c) \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438                                               | '*'                     |\n| RDM_LONG_TRANSFER_TASK_LOCK_EXPIRE_SECONDS   | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)                                                              | 28800                   |\n| RDM_CHECK_SUSPEND_TASK_MINUTE                | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u041c\u0438\u043d\u0443\u0442\u0430                                                     | */10                    |\n| RDM_CHECK_SUSPEND_TASK_HOUR                  | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u0427\u0430\u0441                                                        | *                       |\n| RDM_CHECK_SUSPEND_TASK_DAY_OF_WEEK           | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438                                                | *                       |\n| RDM_CHECK_SUSPEND_TASK_LOCK_EXPIRE_SECONDS   | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445).                                                             | 7200                    |\n| RDM_CHECK_SUSPEND_TASK_STAGE_TIMEOUT         | \u0414\u0435\u043b\u044c\u0442\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u044d\u0442\u0430\u043f\u0430. \u041c\u0438\u043d\u0443\u0442\u0430                                                                                  | 120                     |\n| RDM_UPLOAD_DATA_TASK_MINUTE                  | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0420\u0412\u0414 (\u043c\u0438\u043d\u0443\u0442\u0430).                                                     | '0'                     |\n| RDM_UPLOAD_DATA_TASK_HOUR                    | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0420\u0412\u0414 (\u0447\u0430\u0441).                                                        | '*/2'                   |\n| RDM_UPLOAD_DATA_TASK_DAY_OF_WEEK             | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0420\u0412\u0414 (\u0434\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438).                                                | '*'                     |\n| RDM_UPLOAD_DATA_TASK_LOCK_EXPIRE_SECONDS     | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445).                                                             | 7200                    |\n| RDM_UPLOAD_DATA_TASK_EXPORT_STAGES           | \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u044d\u0442\u0430\u043f\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.                                                         | 500                     |\n| RDM_UPLOAD_STATUS_TASK_MINUTE                | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443. \u041c\u0438\u043d\u0443\u0442\u0430                                                   | '*/30'                  |\n| RDM_UPLOAD_STATUS_TASK_HOUR                  | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443. \u0427\u0430\u0441                                                      | '*'                     |\n| RDM_UPLOAD_STATUS_TASK_DAY_OF_WEEK           | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443. \u0414\u0435\u043d\u044c \u043d\u0435\u0434\u0435\u043b\u0438                                              | '*'                     |\n| RDM_UPLOAD_STATUS_TASK_LOCK_EXPIRE_SECONDS   | \u0412\u0440\u0435\u043c\u044f \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043d\u044f\u0442\u0430 (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445)                                                              | 3600                    |\n| RDM_REDIS_HOST                               | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414 (\u0445\u043e\u0441\u0442).                                                                        |                         |\n| RDM_REDIS_PORT                               | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414 (\u043f\u043e\u0440\u0442).                                                                        |                         |\n| RDM_REDIS_DB                                 | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414 (\u043d\u043e\u043c\u0435\u0440 \u0431\u0434).                                                                    |                         |\n| RDM_REDIS_PASSWORD                           | \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414 (\u043f\u0430\u0440\u043e\u043b\u044c).                                                                      |                         |\n| RDM_REDIS_CACHE_TIMEOUT_SECONDS              | \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u043c \u043a\u0435\u0448 (\u0441\u0435\u043a\u0443\u043d\u0434\u044b).                                                                           | 7200                    |\n| RDM_UPLOADER_CLIENT_URL                      | \u0410\u0434\u0440\u0435\u0441 \u0432\u0438\u0442\u0440\u0438\u043d\u044b (schema://host:port)                                                                                                 | 'http://localhost:8090' |\n| RDM_UPLOADER_CLIENT_DATAMART_NAME            | \u041c\u043d\u0435\u043c\u043e\u043d\u0438\u043a\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u044b                                                                                                                  | 'test'                  |\n| RDM_UPLOADER_CLIENT_REQUEST_RETRIES          | \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430                                                                                               | 10                      |\n| RDM_UPLOADER_CLIENT_REQUEST_TIMEOUT          | \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u0435\u043a                                                                                                               | 10                      |\n| RDM_UPLOADER_CLIENT_ENABLE_REQUEST_EMULATION | \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432                                                                                                | True                    |\n| RDM_RESPONSE_FILE_STATUS                     | \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0438\u043f \u043e\u0442\u0432\u0435\u0442\u0430 \u0432\u0438\u0442\u0440\u0438\u043d\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430                                                             | 'success'               |\n| RDM_UPLOADER_CLIENT_USE_PROXY_API            | \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Proxy API                                                                                                            | False                   |\n| RDM_UPLOADER_CLIENT_USERNAME                 | \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM                                                                                                               |                         |\n| RDM_UPLOADER_CLIENT_PASSWORD                 | \u041f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM                                                                                                            |                         |\n| RDM_UPLOADER_CLIENT_ORGANIZATION_OGRN        | \u041e\u0413\u0420\u041d \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u0430                                                                              |                         |\n| RDM_UPLOADER_CLIENT_INSTALLATION_NAME        | \u0418\u043c\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435                                                                                                  |                         |\n| RDM_UPLOADER_CLIENT_INSTALLATION_ID          | \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435                                                                                        |                         |\n| RDM_COLLECT_LOG_DIR                          | \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f                                                                            |                         |\n| RDM_EXPORT_LOG_DIR                           | \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f                                                                         |                         |\n| RDM_UPLOAD_LOG_DIR                           | \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u043b\u043e\u0433\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f                                                               |                         |\n\n- \u0412 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c:\n\n    ```\n    # \u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0420\u0412\u0414\n    [rmd_general]\n    # \u041f\u0440\u0435\u0444\u0438\u043a\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 settings.py \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \n    # \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u043b\u044f \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432.\n    # EXPORT_ENTITY_ID_PREFIX = \n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n    EXPORT_CHUNK_SIZE = 500\n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u042d\u0428 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n    COLLECT_CHUNK_SIZE = 500\n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f modified\n    UPDATE_NON_EXPORTED_CHUNK_SIZE = 5000\n    # \u041e\u0431\u044a\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445) - \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 512 \u041c\u0431\u0430\u0439\u0442.\n    UPLOAD_QUEUE_MAX_SIZE = 500000000\n    # \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u0435\u043d\u044e \"\u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0438\u0442\u0440\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\"\n    RDM_MENU_ITEM = False\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\n    [rdm_transfer_task]\n    MINUTE=*/2\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS=21600\n  \n    [rdm_transfer_task_fast]\n    MINUTE=*/2\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS = 1800\n\n    [rdm_transfer_task_long]\n    MINUTE=*/15\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS = 21600\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\n    [rdm_check_suspend_task]\n    MINUTE=*/10\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS=7200\n    # \u0414\u0435\u043b\u044c\u0442\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u044d\u0442\u0430\u043f\u0430, \u043c\u0438\u043d\n    STAGE_TIMEOUT=120\n  \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 csv-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443.\n    [rdm_upload_data_task]\n    MINUTE=*/2\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS = 7200\n    EXPORT_STAGES = 500\n    \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0442\u0440\u0438\u043d\u0443\n    [rdm_upload_status_task]\n    MINUTE=*/2\n    HOUR=*\n    DAY_OF_WEEK=*\n    LOCK_EXPIRE_SECONDS=7200\n  \n    # \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Redis \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0420\u0412\u0414.\n    [rdm_redis]\n    REDIS_HOST = localhost\n    REDIS_PORT = 6379\n    REDIS_DB = 1\n    REDIS_PASSWORD = \n    # \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043e\u0431\u0449\u0435\u043c \u043a\u0435\u0448.\n    REDIS_CACHE_TIMEOUT_SECONDS = 7200\n    \n    [uploader_client]\n    # \u0410\u0434\u0440\u0435\u0441 \u0432\u0438\u0442\u0440\u0438\u043d\u044b\n    URL = http://localhost:8090\n    # \u041c\u043d\u0435\u043c\u043e\u043d\u0438\u043a\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u044b\n    DATAMART_NAME = test\n    # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430\n    REQUEST_RETRIES = 10\n    # \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0441\u0435\u043a\n    REQUEST_TIMEOUT = 10\n    # \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\n    ENABLE_REQUEST_EMULATION = True\n    # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Proxy API\n    USE_PROXY_API = False\n    # \u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM\n    USERNAME =\n    # \u041f\u0430\u0440\u043e\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f IAM\n    PASSWORD =\n    # \u041e\u0413\u0420\u041d \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430 \u0412\u0438\u0442\u0440\u0438\u043d\u0430\n    ORGANIZATION_OGRN =\n    # \u0418\u043c\u044f \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435\n    INSTALLATION_NAME =\n    # \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0412\u0438\u0442\u0440\u0438\u043d\u0435\n    INSTALLATION_ID =\n    ```\n\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\n\n## \u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\n\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ruff. \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\n\n```bash\n$ ruff format src/\n$ ruff check --fix --unsafe-fixes src/\n```\n\n## \u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\n\n\u0421\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 [Job-\u0430 \u0432 Jenkins M3.build_dist](http://jenkins.py.bars.group/view/PY/job/M3.packages/job/M3.build_dist/).\n\n\u041f\u0430\u043a\u0435\u0442 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 [PYPI](https://pypi.org/project/edu-rdm-integration/) \u0438 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 [Nexus](http://nexus.py.bars.group/#browse/browse:pypi-edu-private:edu-rdm-integration) \n\n## \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n\u0421 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 http://docs.py.bars.group/edu-rdm-integration/\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0420\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0442\u0440\u0438\u043d\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445",
    "version": "3.12.0",
    "project_urls": {
        "Homepage": "https://stash.bars-open.ru/projects/EDUBASE/repos/edu-rdm-integration/browse",
        "Repository": "https://stash.bars-open.ru/scm/edubase/edu-rdm-integration.git"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0e88bb59342b22d67886ba47e2689aa74279a95a93a8f1020c292450ffce5437",
                "md5": "4618517c4144987fc3d3273d6d5a2d47",
                "sha256": "a58894168dddbffec44425112386da3f7c4f498ad000cceb1cd5ce50735f7b9a"
            },
            "downloads": -1,
            "filename": "edu_rdm_integration-3.12.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4618517c4144987fc3d3273d6d5a2d47",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 252540,
            "upload_time": "2025-07-09T13:39:48",
            "upload_time_iso_8601": "2025-07-09T13:39:48.039645Z",
            "url": "https://files.pythonhosted.org/packages/0e/88/bb59342b22d67886ba47e2689aa74279a95a93a8f1020c292450ffce5437/edu_rdm_integration-3.12.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ea4399833b23ab1eab777701eff3eee2164602d97b47427c00979f7d6109b2a2",
                "md5": "9378d58d88de19f8a71cd9a3ebd4cd71",
                "sha256": "0c3727a76194a079480f963c1597e264a7ec3daaf23adda54a0f00e7051c3fb6"
            },
            "downloads": -1,
            "filename": "edu_rdm_integration-3.12.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9378d58d88de19f8a71cd9a3ebd4cd71",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 171801,
            "upload_time": "2025-07-09T13:39:49",
            "upload_time_iso_8601": "2025-07-09T13:39:49.649058Z",
            "url": "https://files.pythonhosted.org/packages/ea/43/99833b23ab1eab777701eff3eee2164602d97b47427c00979f7d6109b2a2/edu_rdm_integration-3.12.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-09 13:39:49",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "edu-rdm-integration"
}
        
Elapsed time: 0.44034s