diff --git a/dmedvedev/python/17.args_kwsrgs.ipynb b/dmedvedev/python/17.args_kwsrgs.ipynb new file mode 100644 index 0000000..ad22d72 --- /dev/null +++ b/dmedvedev/python/17.args_kwsrgs.ipynb @@ -0,0 +1,198 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6d37ef1e", + "metadata": {}, + "source": [ + "Задача 1. Список таблиц для обработки\n", + "Напиши функцию process_tables, которая принимает любое количество названий таблиц через *args.\n", + "Функция должна:\n", + " вывести строку \"Начинаем обработку\";\n", + " затем для каждой таблицы вывести:\n", + "\n", + "Обрабатываем таблицу: users" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e10a9075", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Начинаем обработку\n", + "Обрабатываем таблицу: users\n", + "Обрабатываем таблицу: orders\n" + ] + } + ], + "source": [ + "def process_tables(*args):\n", + " print(\"Начинаем обработку\")\n", + " for table in args:\n", + " print(f\"Обрабатываем таблицу: {table}\")\n", + "\n", + "process_tables(\"users\", \"orders\")" + ] + }, + { + "cell_type": "markdown", + "id": "1b0576ec", + "metadata": {}, + "source": [ + "Задача2. Напиши функцию build_select_query, которая принимает:\n", + " table_name\n", + " любое количество колонок через args\n", + "Логика:\n", + "если колонки не переданы, вернуть:\n", + "\n", + " SELECT * FROM users\n", + "\n", + "если колонки переданы, вернуть:\n", + " \n", + " SELECT id,name,email FROM users" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "5dfaa1e0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SELECT id, name FROM users\n" + ] + } + ], + "source": [ + "def build_select_query(table_name, *args):\n", + " if args:\n", + " arg = \", \".join(args)\n", + " else:\n", + " arg = \"*\"\n", + " return f\"SELECT {arg} FROM {table_name}\"\n", + "print(build_select_query(\"users\", \"id\", \"name\"))" + ] + }, + { + "cell_type": "markdown", + "id": "a95cdb0a", + "metadata": {}, + "source": [ + "Задача 3. Напиши функцию create_connection_config, которая принимает:\n", + " connection_name\n", + " любое количество именованных параметров через *kwargs\n", + "Функция должна вернуть словарь вида:\n", + "\n", + " {\n", + " \"connection_name\":\"source_pg\",\n", + " \"settings\": {\n", + " \"host\":\"localhost\",\n", + " \"port\":5432,\n", + " \"user\":\"etl_user\"\n", + " }\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "69c1b275", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'connection_name': 'source_pg', 'settings': {'host': 'localhost', 'port': 5432, 'user': 'etl_user'}}\n" + ] + } + ], + "source": [ + "def create_coonnection_config(connection_name, **kwargs):\n", + " config = {\n", + " \"connection_name\" : connection_name,\n", + " \"settings\" : kwargs\n", + " }\n", + " return config\n", + "result = create_connection_config(\"source_pg\",host=\"localhost\",port=5432,user=\"etl_user\")\n", + "print(result)" + ] + }, + { + "cell_type": "markdown", + "id": "ce6811bd", + "metadata": {}, + "source": [ + "Задача 4. Запуск ETL-задачи\n", + "Напиши функцию run_etl_task, которая принимает:\n", + " task_name\n", + " любое количество колонок через args\n", + " любое количество опций через *kwargs\n", + "Логика:\n", + " вывести имя задачи;\n", + " вывести список колонок;\n", + " вывести словарь с опциями.\n", + "Пример:\n", + "\n", + " run_etl_task(\n", + " \"load_users\",\n", + " \"id\",\"name\",\"email\",\n", + " source=\"s3\",\n", + " target=\"greenplum\",\n", + " mode=\"append\",\n", + " retries=3\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "bd011ce6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['load_users', ('id', 'name', 'email'), {'source': 's3', 'target': 'greenplum', 'mode': 'append', 'retries': 3}]\n" + ] + } + ], + "source": [ + "def run_etl_task(tsk_name, *args, **kwargs):\n", + " config = [tsk_name, args, kwargs]\n", + " return config\n", + "print(run_etl_task(\"load_users\", \"id\",\"name\",\"email\", source=\"s3\", target=\"greenplum\", mode=\"append\", retries=3))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}