Name | edu-rdm-integration JSON |
Version |
3.12.0
JSON |
| download |
home_page | None |
Summary | Интеграция с Региональной витриной данных |
upload_time | 2025-07-09 13:39:49 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
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"
}