Разработка
На данной странице описаны частные случаи, описывающие шаблонные действия для расширения, модификации или тестирования функционала Multirec.
Добавление новых команд CLI
Для добавления новых команд необходима модификация модуля cli.py
в корне пакета multirec
. Для добавления новой команды необходимо создать новую функцию и обернуть ее в декоратор @manage.command
, добавляя далее необходимые вам декораторы в соответствии с библиотекой click. Например:
@manage.command()
@click.argument(
'csv_path',
type=click.Path(exists=True, dir_okay=False)
)
@click.option(
'--mappings',
type=click.STRING
)
@click.option(
'--index',
type=click.STRING,
default=None,
help='Наименование столбца индексов.'
)
def web(csv_path, mappings, index):
env = dict()
if mappings:
env['MAPPINGS'] = mappings
if index:
env['INDEX'] = index
os.environ.update(env)
subprocess.run([
"streamlit", "run", "src/multirec/web/app.py",
csv_path
])
После реализации команда будет доступна через Kedro и через утилиту multirec, устанавливаемую с пакетом:
kedro manage web --index Rank --mappings Shikimori_url:Url,recommendations:Recommendations,Russian_name:Name,Russian_description:Description data/03_primary/anime_with_recommendations.csv
Добавление новых модульных пайплайнов
Добавление новых модульных пайплайнов осуществляется с помощью утилиты Kedro, например:
kedro pipeline create drop_nan_column
После выполнения вышеуказанной команды в подпакете pipelines
пакета multirec
создастся новый пайплайн (подпакет) с указанным именем и с шаблонными файлами:
README.md
, содержащий описание пайплайна (его входные, выходные данные и описание работы);nodes.py
, предназначенный для хранения функций, который ответственный за основной функционал;pipeline.py
, предназначенный для оборачивания функций изnodes.py
вnode
и затем вpipeline
, функцийcreate_pipeline
должна возвращать готовыйpipeline
.
Также одновременно создастся одноименный пакет в директории tests
, предназначенный для хранения тестов соответствующего пайплайна.
После реализации модульного пайплайна также необходимо создать в его пакете файл requirements.txt
с требуемыми для него библиотеками Python, который также необходимо продублировать в корневой requirements.txt
пакета multirec
.
Для включения модульного пайплайна в "общие" пайплайны, запускаемые через утилиту Kedro или multirec
, необходимо зарегистрировать в файле pipeline_registry.py
в корне пакета multirec
новый пайплайн или добавить в уже существующий (подробнее об этом).
Кастомные датасеты
В данном проекте используется кастомный датасет MongoDBDataset
:
- при загрузке происходит экспорт указанной коллекции в JSON
, затем его конвертация в pandas.Dataframe
, который передается далее пайплайну;
- при сохранении происходит конвертация полученного на вход pandas.Dataframe
в JSON
и его вставка с перезаписью в указанную коллекцию MondoDB
.
Пример конфигурации MongoDBDataset
:
dataframe_with_recs:
type: multirec.extras.datasets.mongo_dataset.MongoDBDataset
filepath: mongodb://localhost:27017
database: test
collection: anime
# filter_columns - опционален
filter_columns:
- Name
- Episodes
- Studio
- Rating
- Description
- Tags
- Related_Mange
- recommendations
Тестирование
Запуск тестов осуществляется с помощью утилиты Tox. Для запуска необходимо в корне проекта запустить следующую команду, которая запустит все найденные ею тесты в пакете tests
:
tox
Сборка пакета
Для сборки пакета необходимо в корне репозитория выполнить команду python -m build . --wheel
, после чего в директории dist
появится пакет .whl
, который затем можно установить.
Микроупаковка модульных пайплайнов
Для микроупаковки модульного пайплайна Kedro необходимо ввести следующую команду в корне репозитория:
kedro micropkg package pipelines.<pipeline_name>
Для вставки микропакета модульного пайплайна в другой проект Kedro:
kedro micropkg pull -d pipelines /path/to/tag.gz