Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Для интеграции с Региональной витриной данных был выделен отдельный пакет для использования его компонентов в различных продуктах.
На текущий момент интеграция реализуется в рамках проектов Электронная школа (ЭШ) и Электронный колледж (ЭК).
Со стороны Минцифры предоставляется спецификация (ЕФТТ) с требованиями по формату и механизму выгрузки данных.
Выбрана модель промежуточного хранения данных на стороне продукта, которые подлежат выгрузке. При помощи такого подхода, можно обеспечить формирование не хранящихся в продукте данных и дальнейшее их обновление и удаление. Упрощается процесс поиска ошибок в данных, т.к. можно явно определить, в каких записях находятся ошибки и далее анализировать существующие данные в продуктах или функционал по формированию данных.
Весь процесс разделен на сбор и выгрузку данных. Выделяются следующие понятия:
Модель продукта : Django-модель находящаяся в самом продукте. При помощи нее производится накапливание пользовательских данных;
Модель РВД : Django-модель находящаяся в пакете РВД продукта. Из моделей РВД формируется схема БД, позволяющая хранить данные для дальнейшей выгрузки в нормализованном виде;
Сущность РВД : Описание формата выгрузки данных в РВД в виде dataclass-а. Хранит в себе описание первичных, внешних ключей, обязательность и порядок полей.
На этапе сбора данных производится формирование данных моделей РВД на основе данных моделей продуктов. Существуют так называемые расчетные модели, для которых данные рассчитываются в процессе сбора.
Стоит обратить внимание, что сущности РВД могут содержать в себе данные из нескольких моделей РВД.
Для работы требуется Python >=3.7. Так же в зависимостях есть внутренние пакеты:
Версии всех пакетов уточнены в файлах с зависимостями.
Перед внедрением пакета в проект, необходимо убедиться, что:
В разных проектах существуют различные способы добавления настроек, где-то через плагины, где-то напрямую в 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_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', 'TIMEDELTA'): 3600,
('rdm_transfer_task', 'ENTITIES'): '',
('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,
('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,
})
Получение значений настроек из конфигурационного файла в 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')
# Настройка запуска периодической задачи выгрузки данных:
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_EXPIRE_SECOND = conf.get('rdm_transfer_task', 'LOCK_EXPIRE_SECONDS')
# Настройка запуска периодической задачи статуса загрузки данных в витрину:
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_EXPIRE_SECOND = conf.get('rdm_upload_status_task', '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_EXPIRE_SECOND = conf.get('rdm_check_suspend_task', 'LOCK_EXPIRE_SECONDS')
RDM_CHECK_SUSPEND_TASK_TIMEDELTA = conf.get_int('rdm_check_suspend_task', 'TIMEDELTA')
# Загрузка данных в Региональную витрину данных (РВД)
# Адрес витрины (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')
Перечень настроек в settings.py указан в таблице ниже.
Название настройки в settings | Описание | Значение по умолчанию |
---|---|---|
UPLOADS | Основная директория в MEDIA, в которой будет создана директория edu_rdm_integration для сохранения файлов для дальнейшей выгрузки | 500 |
RDM_COLLECT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию сбора данных | 500 |
RDM_EXPORT_CHUNK_SIZE | Количество записей моделей обрабатываемых за одну итерацию экспорта | 500 |
RDM_UPDATE_NON_EXPORTED_CHUNK_SIZE | # Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified | 5000 |
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_TRANSFER_TASK_MINUTE | Настройка запуска периодической задачи выгрузки данных. Минута | '0' |
RDM_TRANSFER_TASK_HOUR | Настройка запуска периодической задачи выгрузки данных. Час | '*/4' |
RDM_TRANSFER_TASK_DAY_OF_WEEK | Настройка запуска периодической задачи выгрузки данных. День недели | '*' |
RDM_TRANSFER_TASK_LOCK_EXPIRE_SECONDS | Время по истечении которого, блокировка может быть снята (в секунадх) | 21600 |
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_CHECK_SUSPEND_TASK_STAGE_TIMEOUT | Дельта для определения зависшего подэтапа. Минута | 120 |
В дефолтный конфиг проекта необходимо добавить:
# Общие настройки интеграции с РВД
[rmd_general]
# Префикс идентификаторов записей сущностей специфический для продукта. Указывается в settings.py и не должен
# изменяться. Возможность изменения через конфигурационный файл оставлена для экстренных случаев.
# EXPORT_ENTITY_ID_PREFIX =
# Количество записей моделей обрабатываемых за одну итерацию экспорта данных
EXPORT_CHUNK_SIZE = 500
# Количество записей моделей ЭШ обрабатываемых за одну итерацию сбора данных
COLLECT_CHUNK_SIZE = 500
# Количество не экспортированных записей моделей обрабатываемых за одну итерацию обновления поля modified
UPDATE_NON_EXPORTED_CHUNK_SIZE = 5_000
# Настройка запуска периодической задачи выгрузки данных
[rdm_transfer_task]
MINUTE=*/2
HOUR=*
DAY_OF_WEEK=*
LOCK_EXPIRE_SECONDS=21600
# Дельта между прошлым и текущим запуском, сек
TIMEDELTA=120
# Сущности, по которым должен производиться сбор и выгрузка данных. Перечисляются через запятую без пробелов.
ENTITIES =
# Настройка запуска периодической задачи статуса загрузки данных в витрину
[rdm_upload_status_task]
MINUTE=*/2
HOUR=*
DAY_OF_WEEK=*
LOCK_EXPIRE_SECONDS=7200
# Настройка запуска периодической задачи поиска зависших этапов экспорта
[rdm_check_suspend_task]
MINUTE=*/10
HOUR=*
DAY_OF_WEEK=*
LOCK_EXPIRE_SECONDS=7200
# Дельта для определения зависшего подэтапа, мин
STAGE_TIMEOUT=120
[uploader_client]
# Адрес витрины
URL = http://localhost:8090
# Мнемоника Витрины
DATAMART_NAME = test
# Количество повторных попыток запроса
REQUEST_RETRIES = 10
# Таймаут запроса, сек
REQUEST_TIMEOUT = 10
# Включить эмуляцию отправки запросов
ENABLE_REQUEST_EMULATION = True
На основе дефолтного конфига произвести конфигурирование приложений.
Сборка пакета производится при помощи Job-а в Jenkins M3.build_dist.
Пакет выкладывается в глобальный PYPI и во внутренний Nexus
С документацией можно ознакомиться по ссылке http://docs.py.bars.group/edu-rdm-integration/
Все изменения проекта должны быть отражены в этом файле.
Формат основан на Keep a Changelog и проект следует Семантическому версионированию.
Здесь должно быть расширенное описание того, что было сделано, какие есть планы у команды по дальнейшему развитию. Желательно будущие цели привязывать к конкретным задачам. Т.е. на каждую цель нужно поставить отдельную задачу и отразить ее номер здесь.
ПРОЕКТ-ZZZZ PATCH Название задачи или изменения.
ПРОЕКТ-YYYY MINOR Название задачи или изменения.
ПРОЕКТ-XXXX MAJOR Название задачи или изменения.
Повышение версии пакета до 3.4.8.
Добавлена настройка отображения пункта меню "Региональная витрина данных"
Исправлена ошибка формирования SQL-запроса с наименованиями таблиц (например, group), совпадающими с зарезервированными словами языка SQL.
Добавлена обработка ошибок чтения файла при отправке данных в РВД (UploadDataAsyncTask)
Добавлена ассинхронная менедж-команда простановки размеров файлов выгрузки в модель ExportingDataSubStageAttachment
Исправлена миграция простановки размеров файлов выгрузки в модель ExportingDataSubStageAttachment
Добавлены отдельные параметры по управлению временем запуска UploadDataAsyncTask
Добавлена документация по сбору/выгрузке сущностей для ЭДС, ЭК
В базовый класс тестирования функций сбора добавлена поддержка формата PhoneNumber для формирования экземпляра модели AuditLog. Повышена версия зависимости educommon >= 3.11.0. Вынесены утилиты и базовый класс для логирования и сбора по модели в рамках сущности
Задача UploadDataAsyncTask изменена с PeriodicAsyncTask на UploadDataAsyncTask
Добавлены команда (UploadEntitiesData) и модель (UploadDataCommand) для логирования и запуска выгрузки данных в витрину
Добавлена фильтрация по дате выгрузки при обновлении данных на экспорт в BaseExportLatestEntitiesData
Классы UniquePeriodicAsyncTask, PeriodicTaskLocker перенесены в educommon.
Поднята максимальная версия Django (<3.3)
Изменен порядок запуска сбора и экспорта по сущностям в периодической задаче TransferLatestEntitiesDataPeriodicTask с учетом многопоточности, скорректированы номера миграций
Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
Удалён устаревший параметр logs_sub_period_days у базового класса команды сбора данных BaseCollectModelsDataByGeneratingLogsCommand. Добавлен таймаут для сохранения информации об объемах файла в кеш.
Отправка файлов в РВД вынесена в отдельную задачу UploadDataAsyncTask, добавлен кеш файлов и очередь подэтапов отправки, а также расчет объемов отправляемых файлов
Исправлена ошибка задвоения сборки и экспорта в периодической задаче TransferLatestEntitiesDataPeriodicTask.
Исправлен файл MANIFEST.in для включения в сборку js-шаблонов.
Добавлен параметр export_off (Отключение экспорта для сущности) в модель TransferredEntity Изменен порядок запуска сбора и экспорта по сущностям в периодической задаче TransferLatestEntitiesDataPeriodicTask
Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
Добавлен параметр use_times_limit в BaseCollectLatestModelsData для использования переданных параметров logs_period_started_at и logs_period_ended_at
Внесены корректировки в запросы используемые в функциях get_collecting_managers_max_period_ended_dates и get_exporting_managers_max_period_ended_dates.
Внесены корректировки в запросы используемые в функциях get_collecting_managers_max_period_ended_dates и get_exporting_managers_max_period_ended_dates.
Изменения в переодической задаче TransferLatestEntitiesDataPeriodicTask, Изменено определение даты последнего успешного этапа сбора у менеджеров Функций сбора и экспорта. Изменения получения крайней даты из переданного поля по указанным моделям в BaseCollectLatestModelsData. Удалён параметр RDM_TRANSFER_TASK_TIMEDELTA.
Понижен уровень логирования при возникновении ошибки отправки запросов в РВД с ERROR до WARNING
Периодические задачи RDMCheckUploadStatus, CheckSuspendedExportedStagePeriodicTask, TransferLatestEntitiesDataPeriodicTask сделаны уникальными.
Понижен уровень логирования при возникновении ошибки отправки запросов в РВД с ERROR до WARNING
Добавлена поддержка setuptools 69.*. Поднята минимальная версия пакета pip 23.2.1
Возвращено проставление подэтапа выгрузки всем записям модели.
В классах примесей CollectCommandMixin и ExportCommandMixin указана очередь для celery используемая в рамках пакета. Указано базовое описание и тип задачи для отражения в реестре "Асинхронные задачи".
Изменены типы полей ОГРН и ОКФС в сущности Organisations на строковые. Исправлен тип передаваемого параметра institute_ids при выполнении поставленной задачи. Исправлена ошибка проставления подэтапа выгрузки у неотправленных записей.
Убрано окружение кавычками пустых необязательных полей.
Расширены возможности кастомизации поведения метода BaseExportDataFunctionHelper.prepare_record
.
required_fields
в метод prepare_record
helper-а функции.Исправление наследования Meta в моделях EduRdmCollectDataCommandProgress и EduRdmExportDataCommandProgress
Из ЭШ перенесена периодическая задача по сбору и выгрузке данных в РВД.
Также из ЭШ перенесены и переименованы модели:
Добавлена поддержка Django 3.1.
Добавлено сохранение чанка логов в list
перед его использованием в запускаемых классах в методе _get_runnable_objects
класса BaseCollectingDataRunner
.
list
перед его использованием в запускаемых классах в методе _get_runnable_objects
класса BaseCollectingDataRunner
.Откатил изменения сделанные в версии 2.0.1. Данные доработки приводили к невозможности отправить данные.
Изменена работа метода _calculate_last_finished_entity_export класса BaseExportLatestEntitiesData
Параметр school_ids переименован в institute_ids.
Добавлено разбиение на чанки запроса на обновление поля modified у невыгруженных записей,
при запуске команды export_latest_entities_data
.
_update_model_modified_field
класса BaseExportLatestEntitiesData
.Исправлено ограничение сбора логов периодом RDM_TRANSFER_TASK_TIMEDELTA
в BaseCollectLatestModelsData
RDM_TRANSFER_TASK_TIMEDELTA
в BaseCollectLatestModelsData
Удален дублирующийся клаcc LogChange
из collect_data.non_calculated.base.caches
.
LogChange
из collect_data.non_calculated.base.caches
.Рефакторинг принудительного запуска функций без добавления их в очередь на исполнение.
В класс кеша BaseCollectingExportedDataFunctionCacheStorage расчетных и не расчетных функций добавлен метод _ignore_logs. Добавлена утилита build_related_model_graph для построения графа связей между моделями. Добавлен миксин BaseIgnoreLogMixin, для исключения из обработки логов на основании описанных зависимостей.
Изменение в формировании LogChange. Не формируется LogChange с пустым fields.
Добавлена поддержка Django 3.0. В класс кеша BaseCollectingExportedDataFunctionCacheStorage расчетных и не расчетных функций добавлен метод _ignore_logs. Добавлена утилита build_related_model_graph для построения графа связей между моделями. Добавлен миксин BaseIgnoreLogMixin, для исключения из обработки логов на основании описанных зависимостей.
Добавлена явная регистрация периодических асинхронных задач Celery. Поднятие версии зависимостей пакета celery.
Добавлен реестр выбора сущностей для сбора и выгрузки данных. Удалена настройка RDM_TRANSFER_TASK_ENTITIES, вместо перечисления сущностей в конфиге используется реестр и модель TransferredEntity.
Из ЭШ перенесены периодические задачи по сбору статусов загрузки файлов в витрину, а также по поиску зависших этапов/подэтапов экспорта.
Также из ЭШ перенесены менедж-команды:
Типы получаемых из log_change.fields полей соответствуют типам полей из логируемых моделей.
В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к списковому типу (ArrayField).
Формирование логов вынесено на уровень команды, а не менеджера. Добавлено формирование логов на этапе экспорта данных.
Создание базовых хэлперов BaseCollectingDataFunctionHelper, BaseCollectingDataRunnerHelper. Создание нового метода get_filtered_operations в BaseCollectingDataFunctionHelper.
Исправление ошибок и несоответствий в журнале логов
Поднятие версии m3-db-utils,изменение UploaderClientLogManager
UploaderClientLogManager
.Исправлена ошибка внутри EntityEnumRegisterMixin
Вынесен функционал просмотра логов РВД из ЭШ. Удалено перечисление UploadStatusEnum. Удалена модель UploadStatus статусов загрузки в витрину. Вместо неё добавлена модель-перечисление DataMartRequestStatus.
Исправлена аннотация в шаблоне managers.py-tpl для функции экспорта.
В метод _clean_data класса BaseCollectingFunctionTestCase добавлена возможность обрабатывать поля относящиеся к временному типу. Добавление обработки plugins_info при генерации списка данных формирования команд.
Доработано получение множества моделей на основе данных plugins_info при работе метода _get_loggable_models.
Добавлено формирование логов для последующего скачивания. Доработаны шаблоны реализации Функций сбора и выгрузки данных. Написана документация для реализации функционала новой Сущности. Добавлено получение моделей на основе данных plugins_info при работе метода _get_loggable_models.
EDUSCHL-20072 MINOR - Реестр сбора и выгрузки. Логи
EDUSCHL-20954 PATCH Добавлена документация для реализации функционала новой Сущности.
EDUSCHL-20954 PATCH Произведена доработка шаблонов Функций сбора и выгрузки данных.
EDUSCHL-19576 PATCH - Добавлено получение моделей на основе данных plugins_info при работе метода _get_loggable_models.
При добавлении префикса RDM_EXPORT_ENTITY_ID_PREFIX в классе BaseExportDataFunctionHelper учтены поля из get_ignore_prefix_key_fields.
Доработка обработки ответа при отправке файлов в РВД. Добавлены менедж-команды для загрузки данных и запроса статуса загрузки в РВД с использованием uploader-client. Добавлена инструкция по реализации тестов РВД. В BaseCollectingFunctionTestCase добавлен метод создания подэтапов сбора данных.
EDUSCHL-20946 PATCH - Доработка обработки ответа при отправке файлов в РВД.
EDUSCHL-20946 MINOR - Добавлены менедж-команды для загрузки данных и запроса статуса загрузки в РВД с использованием uploader-client.
EDUSCHL-20951 MINOR - Инструкция по реализации тестов РВД
EDUSCHL-20951 MINOR - Добавлен метод создания подэтапов сбора данных
Скорректировано описание сущности РВД TELECOM. Рефакторинг обновления полей modified у невыгруженных записей при работе экспорта сущностей. Временное решение обеспечения совместимости регистрации моделей и сущностей старого и нового подхода. Добавлена возможность отправки запросов в РВД через Proxy API uploader_client. Изменено формирование логов для последующей обработки.
EDUSCHL-20884 PATCH - Изменено название поля rank на rank_contact в сущности РВД TelecomEntity.
EDUSCHL-20711 PATCH - Доработан метод BaseExportLatestEntitiesData._update_model_modified_field.
EDUSCHL-20858 PATCH - Временное решение обеспечения совместимости регистрации моделей и сущностей старого и нового подхода.
Добавлен миксин EntityEnumRegisterMixin для регистрации сущностей в RegionalDataMartEntityEnum. Миксин ModelEnumRegisterMixin для регистрации моделей в RegionalDataMartModelEnum. Добавлены методы для запуска регистрации моделей и сущностей.
Добавлен базовый класс для тестирования Функций сбора, добавлена явная зависимость Django.
Получение метода генерации логов вынесено в отдельный метод для избавления от необходимости хранить все методы в одном классе.
EDUCLLG-7634 PATCH - Получение метода генерации логов вынесено в отдельный метод для избавления от необходимости хранить все методы в одном классе;
EDUSCHL-20571 PATCH - При сборе актуальных данных моделей отслеживаются уже запущенные сборы и новый сбор по модели не запускается.
EDUSCHL-20571 PATCH - Указание назначения полей модели-перечисления сущностей RegionalDataMartEntityEnum;
EDUSCHL-20571 PATCH - Добавление возможности получения значений модели-перечисления RegionalDataMartEntityEnum моделей РВД для указанных сущностей.
Исправлена ошибка сборки, из-за которой файлы шаблонов *.py-tpl не попадали в пакет.
Доработка модели AbstractCollectDataCommandProgress и класса BaseFirstCollectModelsDataCommandsGenerator.
Дополнение поведения BaseExportDataFunctionHelper.
Добавлена функция set_failed_status_suspended_exporting_data_stages для определения и перевода зависших этапов/подэтапов экспорта в статус (FAILED). Добавлена функция set_failed_status_suspended_collecting_data_stages для определения и перевода зависших этапов/подэтапов сбора в статус (FAILED).
EDUSCHL-20487
MINOR Добавлена функция set_failed_status_suspended_exporting_data_stages
.
EDUSCHL-20487
MINOR Добавлена функция set_failed_status_suspended_collecting_data_stages
.
Повышена версия wheel
Исправлена ошибка добавления в описание асинхронной задачи списка выгруженных сущностей BaseExportLatestEntitiesData._set_description_to_async_task.
Баг фикс и дополнение поведения BaseExportLatestEntitiesData.
Доработаны классы BaseExportLatestEntitiesData и BaseExportEntitiesData.
Добавление pip в зависимости сборки пакета.
split_by_days_count переименовал в split_by_quantity.
Изменены параметры формирования подпериодов в generate_first_collect_models_data_script.
Замена базового класса функций.
Для BaseFirstCollectModelsDataCommandsGenerator добавлено условие - если не заполнен creating_trigger_models, то словарь с данными для команды не передается.
EDUSCHL-20227 PATCH Если у сущности не заполнен creating_trigger_models, то в генераторе BaseFirstCollectModelsDataCommandsGenerator не формируется словарь с параметрами для команды.
EDUSCHL-20229 PATCH Если у сущности не заполнен creating_trigger_models, то в генераторе BaseFirstCollectModelsDataCommandsGenerator не формируется словарь с параметрами для команды.
Дополнительная функциональность WebEduEntityValueCache была перенесена в EntityCache в function_tools.
EDUSCHL-20277 MINOR Удален WebEduEntityValueCache.
EDUSCHL-20277 MINOR Удален WebEduEntityCacheExtended.
Изменено формирование очередности сбора/экспорта моделей/сущностей. Вместо отдельных перечислений используется существующее поле order_number
модели-перечисления TitledModelEnum
. В случае, когда order_number
не указан, т.е. будет использоваться значение по умолчанию DEFAULT_ORDER_NUMBER
, модель/сущность будет исключена из сбора/экспорта.
Удален лишний вызов метода _prepare_logs
_prepare_logs
в методе __init__
класса BaseCollectingCalculatedExportedDataFunctionCacheStorage
Объединение обрабатываемых логов относящихся к одному объекту
ReformatLogsMixin
, новое поле is_merge_logs и новый метод _merge_logs у класса BaseCollectingExportedDataFunctionCacheStorage
Исправлен баг с timedelta
Исправлен баг с timedelta
Исправление ошибки учета миллисекунд, при генерации скриптов сбора и выгрузки данных. В текущий момент chunk_size все равно работает некорректно. Это связано с тем, что при обнулении миллисекунд за одной записью выборки может скрываться большое количество, например, которые были созданы или обновлены скриптами. Проблему необходимо решить в будущем, но текущего решения хватает для эксплуатации. В выборках моделей и логов не должна входить правая граница периода выборки.
EDUSCHL-20235 PATCH Исправлена ошибка учета миллисекунд в выборках при генерации скриптов с командами для сбора и выгрузки данных.
EDUSCHL-20235 PATCH В выборках моделей и логов не должна входить правая граница периода выборки.
Доработки для реализации принудительного выполнения функций экспорта данных сущностей.
Реализованы общие классы для команд сбора/экспорта.
Добавлено принудительное выполнение функций в ранере для экономии памяти.
Откат к спискам необработанных логов. Исправлена ошибка бесконечного создания чанков логов.
Организована передача необработанных логов в виде генератора.
Добавление функциональности для отложенного заполнения кешей. Заполнение производится перед началом работы запускаемого объекта.
EDUSCHL-20235 PATCH Добавлено отложенное заполнение кешей хелперов функций.
EDUSCHL-20235 MINOR Добавлено проставление подэтапа выгрузки данных у записей моделей.
Для API РВД добавлена поддержка параметра типа операции для загрузки данных.
Восстановление сборки пакета после ухода с poetry.
Перенос стратегий формирования Функций используемых в генерации исходников.
Возвращение ранее удаленных зависимостей миграции
EDUSCHL-20209 PATCH Возвращение зависимостей миграции.
EDUSCHL-20209 PATCH Доработки по формированию документации.
EDUSCHL-20200 Закреплены версии зависимостей, добавлена ссылка на uploader-client
Для раскатки миграций на ЭШ, пришлось закомментировать зависимости в initial-миграции.
Внесены изменения в кодовую базу после переноса механизма логирования из ЭШ в educommon.
Внесены изменения в кодовую базу после переноса механизма логирования из ЭШ в educommon.
FAQs
Интеграция с Региональной витриной данных
We found that edu-rdm-integration demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.