Skip to main content

BobrTools


Содержание


Установка

Установить библиотеку можно с помощью pip:

pip install BobrTools

Переменные окружения

Перед использованием библиотеки необходимо настроить следующие переменные окружения:

  • SNOWFLAKE_USER: Ваше имя пользователя для Snowflake.
  • SNOWFLAKE_PASSWORD: Ваш пароль для Snowflake (не нужен, если задан SNOWFLAKE_PRIVATE_KEY).
  • SNOWFLAKE_PRIVATE_KEY: Приватный ключ в формате PEM для входа по ключу (необязательно). Если задан, используется вместо пароля.
  • SNOWFLAKE_ACCOUNT: Идентификатор вашего аккаунта в Snowflake.
  • SNOWFLAKE_ROLE: Роль для использования в Snowflake.
  • SNOWFLAKE_WAREHOUSE: Склад данных (warehouse) для Snowflake.
  • SNOWFLAKE_DATABASE: База данных для Snowflake.
  • SNOWFLAKE_SCHEMA: Схема для Snowflake.
  • PROXY_HOST: Хост прокси-сервера (если используется).
  • PROXY_PORT: Порт прокси-сервера (если используется).
  • PROXY_USERNAME: Имя пользователя прокси (если используется).
  • PROXY_PASSWORD: Пароль прокси (если используется).
  • MYSQL_HOST: Хост базы данных MySQL.
  • MYSQL_PORT: Порт базы данных MySQL.
  • MYSQL_USER: Имя пользователя MySQL.
  • MYSQL_PASSWORD: Пароль пользователя MySQL.
  • MYSQL_DATABASE: Имя базы данных MySQL по умолчанию.
  • CLICKHOUSE_HOST: Хост базы данных ClickHouse.
  • CLICKHOUSE_PORT: Порт базы данных ClickHouse.
  • CLICKHOUSE_USER: Имя пользователя ClickHouse.
  • CLICKHOUSE_PASSWORD: Пароль пользователя ClickHouse.
  • CLICKHOUSE_DATABASE: Имя базы данных ClickHouse по умолчанию.
  • TELEGRAM_BOT_TOKEN: Токен вашего бота Telegram для отправки сообщений.
  • SLACK_BOT_TOKEN: Токен вашего бота Slack для работы со Slack API.

После того как эти переменные будут настроены, библиотека будет автоматически их использовать, и нет необходимости прописывать их в коде.


Класс GoogleDocs

Параметры:

  • keyfile (str, необязательный, по умолчанию None): Путь к файлу JSON, содержащему учетные данные сервисного аккаунта Google API. Если параметр не передан, используется значение по умолчанию ./credentials.json.

Метод get_dataframe

Метод для получения данных из Google Таблицы и преобразования их в pandas DataFrame.

Параметры:

  • spreadsheet_key (str, обязательный): Идентификатор Google Spreadsheet, который можно найти в URL таблицы.
  • worksheet_index (int, необязательный, по умолчанию 0): Индекс листа в таблице (начинается с 0).
  • worksheet_title (str, необязательный, по умолчанию None): Заголовок листа. Если задан, он будет использован вместо индекса для поиска листа.

Пример использования:

docs = GoogleDocs()

df = docs.get_dataframe(
    spreadsheet_key="1A580_BbPyrhWLrbAq0342EmPqipDhqSFGQFx4TWvX56", 
    worksheet_title="Выгрузка"
)
print(df)

Метод write_dataframe

Метод для записи pandas DataFrame в Google Таблицу.

Параметры:

  • dataframe (pd.DataFrame, обязательный): Данные, которые нужно записать в Google Таблицу. Это объект pandas DataFrame, который будет преобразован в таблицу.
  • worksheet_title (str, обязательный): Заголовок листа, в который будет записан DataFrame. Если лист с таким заголовком уже существует, он будет перезаписан, иначе будет создан новый лист с таким именем.
  • default_dataframe_formatting (bool, необязательный, по умолчанию False): Если True, то данные на листе будут отформатированы. Это включает в себя заморозку первой строки (с заголовками столбцов).
  • spreadsheet_key (str, необязательный, по умолчанию None): Идентификатор Google Spreadsheet. Если не указан, будет создан новый документ.

Пример использования:

docs = GoogleDocs()

df = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
docs.write_dataframe(
    dataframe=df, 
    worksheet_title="Sheet1", 
    default_dataframe_formatting=True, 
    spreadsheet_key="1A580_BbPyrhWLrbAq0342EmPqipDhqSFGQFx4TWvX56"
)

Метод write_dataframes

Метод для записи нескольких pandas DataFrame в Google Таблицу.

Параметры:

  • dataframes (Dict[str, pd.DataFrame], обязательный): Словарь, где ключ – название листа, а значение – соответствующий pandas DataFrame, который будет записан в этот лист.
  • spreadsheet_key (str, необязательный, по умолчанию None): Идентификатор Google Spreadsheet, в который будут записаны данные. Если не указан, будет создан новый документ.
  • spreadsheet_title (str, необязательный, по умолчанию None): Заголовок Google Spreadsheet, используемый при создании нового документа.
  • folder_id (str, необязательный, по умолчанию None): Идентификатор папки на Google Диске, в которую будет сохранён новый документ.
  • default_dataframe_formatting (bool, необязательный, по умолчанию False): Если True, к каждому DataFrame будет применено форматирование по умолчанию (например, заморозка первой строки с заголовками).
  • drop_existing_sheets (bool, необязательный, по умолчанию True): Если True, из документа будут удалены все листы, имена которых отсутствуют среди ключей словаря dataframes.

Пример использования:

docs = GoogleDocs()

df = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
docs.write_dataframe(
    dataframe=df, 
    worksheet_title="Sheet1", 
    default_dataframe_formatting=True, 
    spreadsheet_key="1A580_BbPyrhWLrbAq0342EmPqipDhqSFGQFx4TWvX56"
)

Класс SnowflakeConnector

Метод upload_dataframe

Метод для загрузки pandas DataFrame в таблицу Snowflake.

Параметры:

  • dataframe (pd.DataFrame, обязательный): pandas DataFrame, который нужно загрузить.
  • table_name (str, обязательный): Имя таблицы в Snowflake, в которую будут загружены данные.
  • overwrite (bool, необязательный, по умолчанию True): Если True, то таблица будет перезаписана, если она существует.
  • auto_create_table (bool, необязательный, по умолчанию True): Если True, то таблица будет автоматически создана, если не существует.
  • warehouse (str, необязательный, по умолчанию None): Имя склада данных для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_WAREHOUSE.
  • database (str, необязательный, по умолчанию None): Имя базы данных для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_DATABASE.
  • schema (str, необязательный, по умолчанию None): Имя схемы для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_SCHEMA.

Пример использования:

snowflake = SnowflakeConnector()

data = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
snowflake.upload_dataframe(
    data, 
    table_name="my_table", 
    overwrite=True, 
    auto_create_table=True
)

Метод get_dataframe (Snowflake)

Метод для выполнения SQL-запроса в Snowflake и преобразования результата в pandas DataFrame.

Параметры:

  • query (str, обязательный): SQL-запрос для получения данных. Можно передавать набор разделенных ;
  • warehouse (str, необязательный, по умолчанию None): Имя склада данных для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_WAREHOUSE.
  • database (str, необязательный, по умолчанию None): Имя базы данных для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_DATABASE.
  • schema (str, необязательный, по умолчанию None): Имя схемы для подключения. Если не указано, будет использовано значение из окруженной переменной SNOWFLAKE_SCHEMA.

Возвращаемое значение:

  • pandas DataFrame: Результат выполнения SQL-запроса, преобразованный в pandas DataFrame, где имена столбцов соответствуют именам колонок в ответе SQL-запроса.

Пример использования:

snowflake = SnowflakeConnector()

query = "USE WAREHOUSE MY_WAREHOUSE; SELECT * FROM my_table"
data = snowflake.get_dataframe(
    query=query
)
print(data)

Класс MysqlConnector

Метод get_dataframe (MySQL)

Метод для выполнения SQL-запроса в MySQL и преобразования результата в pandas DataFrame.

Параметры:

  • query (str, обязательный): SQL-запрос для получения данных.

Возвращаемое значение:

  • pandas DataFrame: Результат выполнения SQL-запроса.

Пример использования:

mysql = MysqlConnector()

data = mysql.get_dataframe(
    query="SELECT * FROM my_table LIMIT 100"
)
print(data)

Класс ClickHouseConnector

Метод get_dataframe (ClickHouse)

Метод для выполнения SQL-запроса в ClickHouse и преобразования результата в pandas DataFrame.

Параметры:

  • query (str, обязательный): SQL-запрос для получения данных.

Возвращаемое значение:

  • pandas DataFrame: Результат выполнения SQL-запроса.

Пример использования:

clickhouse = ClickHouseConnector()

data = clickhouse.get_dataframe(
    query="SELECT * FROM my_table LIMIT 100"
)
print(data)

Метод upload_dataframe (ClickHouse)

Метод для загрузки pandas DataFrame в таблицу ClickHouse. Вставка синхронная; после неё метод проверяет, что в таблице есть строки, иначе выбрасывает RuntimeError.

Параметры:

  • dataframe (pd.DataFrame, обязательный): pandas DataFrame, который нужно загрузить.
  • table_name (str, обязательный): Имя таблицы в ClickHouse.
  • database (str, необязательный, по умолчанию None): Имя базы данных. Если не указано, используется значение из переменной окружения CLICKHOUSE_DATABASE.
  • auto_create_table (bool, необязательный, по умолчанию False): Если True, таблица создаётся, если её нет: ReplicatedMergeTree на кластере all-replicated, ORDER BY tuple(). Типы колонок определяются по типам DataFrame (все Nullable):
    • bool → Bool
    • int → Int64
    • float → Float64
    • datetime → DateTime64(3)
    • остальное → String
  • overwrite (bool, необязательный, по умолчанию False): Если True (и auto_create_table=True), таблица удаляется и создаётся заново. Без auto_create_table не действует — данные дописываются.

Пример использования:

clickhouse = ClickHouseConnector()

data = pd.DataFrame({'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']})
clickhouse.upload_dataframe(
    data,
    table_name="my_table",
    auto_create_table=True,
    overwrite=True
)

Класс TelegramClient

Параметры:

  • token (str, необязательный, по умолчанию None): Токен бота Telegram. Если параметр не передан, то значение токена будет взято из окруженной переменной TELEGRAM_BOT_TOKEN.

Метод send_message

Метод для отправки сообщений в Telegram чат или канал через бота.

Параметры:

  • chat_id (int или str, обязательный): Идентификатор чата или канала, куда будет отправлено сообщение.
  • text (str, обязательный): Текст сообщения, которое будет отправлено в чат.
  • parse_mode (str, необязательный, по умолчанию None): Форматирование текста (например, "HTML" или "Markdown"). Если не указано, то форматирование будет отключено.
  • disable_notification (bool, необязательный, по умолчанию False): Если True, сообщение будет отправлено без уведомления (по умолчанию уведомление будет включено).
  • max_retries (int, необязательный, по умолчанию 5): Максимальное количество попыток отправить сообщение в случае ошибки. Если метод не может отправить сообщение, он попробует повторить отправку до достижения максимального числа попыток.
  • timeout_delay (int, необязательный, по умолчанию 5): Время (в секундах), которое бот будет ожидать перед повторной попыткой отправки сообщения в случае ошибки тайм-аута (например, при временной потере соединения).

Пример использования:

telegram = TelegramClient()

await telegram_client.send_message(
    chat_id=-1002181072995,
    text="Hello, world!",
    parse_mode="HTML",
    disable_notification=True
)

Класс SlackClient

Параметры:

  • token (str, необязательный, по умолчанию None): Токен для доступа к Slack API. Если параметр не передан, то значение токена будет взято из окруженной переменной SLACK_BOT_TOKEN.

Метод send_message

Метод для отправки сообщения в Slack канал через API.

Параметры:

  • channel (str, обязательный): Идентификатор канала, куда будет отправлено сообщение (например, #general или ID канала).
  • text (str, обязательный): Текст сообщения, которое будет отправлено.
  • thread_ts (str, необязательный, по умолчанию None): Временная метка родительского сообщения для отправки ответа в треде.
  • parse (str, необязательный, по умолчанию None): Параметр, определяющий форматирование сообщения).

Пример использования:

slack = SlackClient()

slack_client.send_message(
    channel="#general",
    text="Привет, Slack!"
)

Обновление библиотеки

Для обновления библиотеки до следующей версии нужно:

  1. В файле setup.py указать следующую версию
  2. Для сборки и обновления библиотеки в pypi используйте команды:
python3 setup.py sdist bdist_wheel
python3 -m twine upload dist/*

Metadata

Release files for BobrTools 0.1.43

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for BobrTools 0.1.43
File Size Uploaded Provenance Actions
bobrtools-0.1.43.tar.gz 13.0 kB Without provenance Details for bobrtools-0.1.43.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for BobrTools 0.1.43
File Interpreter ABI Platform Actions
bobrtools-0.1.43-py3-none-any.whl Python 3 none any Details for bobrtools-0.1.43-py3-none-any.whl

Total release size: 27.6 kB

Release files / bobrtools-0.1.43.tar.gz

Download URL bobrtools-0.1.43.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b5a0802841ec77c8d70359a67e6cab3321cf9ff67c7e40ee3d07cedf60e95ffd
BLAKE2b-256 checksum
How to use checksums
b0b71ba69af7d6162a4f7f4753acff5d4a8ded8f669a996a3b6458d6db0a8f75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / bobrtools-0.1.43-py3-none-any.whl

Download URL bobrtools-0.1.43-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76a73908421d2cf07d0ce27385b4f5121388785366ced003fb0bdd604116e480
BLAKE2b-256 checksum
How to use checksums
3d3718a8a405eb57b4b73ea43f5e12cd9233fb21a56343012061082a06df9a00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Security for BobrTools 0.1.43

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.43 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page