Lazy utils each I use sometimes
Project description
Различные утилиты которые лень писать каждый раз
saver
- Предназначена для сохранения файловua
- Ротация юзер агентов. Мне не очень нравятся другие библиотекиrepo
- Базовый репозиторий для crud операция а также фабрикаparsed
- Сохраняет в csv спарсенные и не удачно спарсенные файлыproxy
- Менеджер для сервиса ротации прокси (самописного)
saver
Назначение
Cохранять структурированно скаченные файлы в зависимости от даты и времени в формате:
{базовая_папка}/год/месяц/день/час/путь
Установка:
pip install mangust228[saver]
Пример использования:
from mangust228.saver import AsyncSaveManager, SyncSaveManager
saver = AsyncSaveManager(base_path="example", compress=True)
# Первый аргумент - контент str, все последующие: то что добавить к названию
path = await saver.save_html("this is content", "seller_id", 4, 5)
print(path) # "example/2024/05/29/22/seller_id_4_5.html.xz"
Для Синхронного метода методы аналогичные, только без await
Возможные аргументы
base_path
: str Начальная папка в которую будет все сохранятьсяadd_uuid
: bool Добавить случайные символы в конце(на самом деле используется nanoid)compress
: bool Сжать ли документ в формат .xzdebug
: bool Отображать ли логи
ua
Назначение
Ротация user-agent. Мне не очень нравятся другие библиотеки из за устаревших ua.
Установка:
pip install mangust228[ua]
Пример использования:
# get Random User-Agent
UaRandom.web()
# get User-Agent like Chrome
UaRandom.web("chrome")
# get User-Agent like Firefox
UaRandom.web("firefox")
# get User-Agent like Safari
UaRadom.web("safari")
repo
Назначение
Фабрика и Базовый репозиторий для выполнения CRUD операция
Установка:
pip install mangust228[repo]
Пример использования:
from mangust228.utils.repo import AsyncBaseRepo, AsyncBaseRepoFactory
# Модель алхимии
class UserModel(Base):
name: Mapped[str]
surname: Mapped[str]
class UserRepo(AsyncBaseRepo[UserModel]):
model = UserModel
# Кастомный метод для работы с моделью
async def do_something(self):
stmt = select().where()
self.session.execute(stmt)
return 42
class Repository(AsyncBaseRepoFactory):
session = session_maker # Объект SQLAlchemy
# Добавить кол-во репозиториев можно сколько угодно.
user: UserRepo
another_repo: AnotherRepo
async with Repository() as repo:
user_model = UserModel(name="Sergey", surname="Sergeevich") # >> None
user = await repo.user.add_by_model(user_model) # Добавить в сессию модель
await repo.user.add_by_kwargs(name="Ivan", surname="Ivanov") # >> UserModel
# Удаляет по фильтру
await repo.user.delete(name="Ivan") # >> int (Количество удаленных строк)
# Обновить по id (Модель должна содержать поле id!)
await repo.user.update_by_id(id=5) # >> UserModel | None
# Получить одного удовлетворящего условиям
await repo.user.get_one_or_none(id=2, name="Sergey") # >> UserModel | None
# Получить много моделей по фильтру. Можно передать limit and offset
await repo.user.get_many(limit=5, name="Ivan") # list[UserModel]
# Получить кол-во записей, удовлетворяющих условию(можно не передавать условия)
await repo.user.count(surname="Petrov") # int (Кол-во Петровых)
Аргументы которые можно передать в Repository()
:
commit
(default: True): Сохраянть ли изменения, если использовать только GET, то можно поставить Falsedebug
(default: False): Выводить логиkwargs
Аргументы которые передатутся в сессию
proxy
Назначение
Методы для работы с собственным сервисом ротации проксей
Установка:
pip install mangust228[proxy]
Пример использования:
from mangust228.proxy import SyncProxyManager, AsyncProxyManager
with SyncProxyManager() as pm:
# Получить прокси
proxy_1: ProxySchema = pm.get()
# Поменять прокси, если была вызвана ошибка
proxy_2: ProxySchema = pm.change_with_error(new_proxy, reason="just a test")
# Поменять прокси, просто для профилактики
proxy_3: ProxySchema = pm.change_without_error(new_proxy)
# Освободить прокси
pm.free(proxy_3)
async with AsyncProxyManager as pm:
proxy = await pm.get() # Методы аналоичные
# атрибуты объекта proxy:
proxy.req_conn # формат, который подходит для вставки в requests или httpx
proxy.pw_conn # формат, который подходит для вставки в playwright
Переменные окружения
PROXY_SERVICE_URL=http://100.100.100.100 # IP на котором сервис ротации
PROXY_SERVICE_API_KEY=SUPER_SECRET_API_KEY # API ключ
PROXY_SERVICE_SERVICE_NAME=test # Сервис который парсим
PROXY_SERVICE_SERVICE_ID=1 # id сервиса который парсим
PROXY_SERVICE_LOCK_TIME=300 # На сколько замораживаем прокси (в сек.)
# not required
PROXY_SERVICE_LOGIC=linear # Алгоритм вычисления блокировки прокси
PROXY_SERVICE_LOGIC_BASE_TIME=10 # Базовое время блокировки (см. доку по сервису Ротации)
PROXY_SERVICE_IGNORE_HOURS=24 # см. доку по сервису Ротации
PROXY_SERVICE_TYPE_ID=1 # Тип прокси 1 - IPv4
PROXY_SERVICE_LOCATION_ID=1 # Геолокация 1 - Россия
parsed
Назначение
Отслеживать, что спарсил, а что нет.
Установка:
pip install mangust228[parsed]
Пример использования:
from parsed_manager import AsyncParsedManager as ParsedManager
# Добавить в неудачно спарсенные
await ParsedManager.wrong.add("url/path", reason)
# Добавить в те что удачно спарсились
await ParsedManager.success.add("url/path")
# Проверить, есть ли в неудачно спарсенных,
if ParsedManager.wrong.is_exist("url/path"):
pass # This block is executed if the URL/path has been parsed before.
Для Синхронного метода методы аналогичные, только без await
В качестве аргумента функции принимают любые строки, в целом можно использовать и для других целей.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mangust228-0.8.22.tar.gz
.
File metadata
- Download URL: mangust228-0.8.22.tar.gz
- Upload date:
- Size: 17.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b78c8e2704c53a880f31b873bef257c1373bc67965f16d2c119e12407cee912 |
|
MD5 | 77c44c06e3999bdececc8f361c4f3be6 |
|
BLAKE2b-256 | 58cd51eca0601d265886c48c77e026a381a5b380884e5634d2f3df0f90d404d0 |
File details
Details for the file mangust228-0.8.22-py3-none-any.whl
.
File metadata
- Download URL: mangust228-0.8.22-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cc1189483dd7eef268a3135c4790bfab62d6119fdce2dba5d465acb929df51e |
|
MD5 | 1193e58565712e771b4dd91cc2998b34 |
|
BLAKE2b-256 | cb6566b0237334a229333796bf250730015d2c6f136da5a41720cd1f2a19c212 |