Awesome Python Typing
Коллекця ссылок на различные инструменты повышения качества кода и удобства работы.
Типизация, линтинг, автокомплиты и другие полезности.
Есть ссылка на надавно вышедшую SQLAlchemy2, так что актуальность поддерживается.
Странно что всё еще нет в списке Ruff. Хотя, в Issues уже добавили запрос. Но автор не уверен что эта тулза подходит для его списка.
#libs
Коллекця ссылок на различные инструменты повышения качества кода и удобства работы.
Типизация, линтинг, автокомплиты и другие полезности.
Есть ссылка на надавно вышедшую SQLAlchemy2, так что актуальность поддерживается.
Странно что всё еще нет в списке Ruff. Хотя, в Issues уже добавили запрос. Но автор не уверен что эта тулза подходит для его списка.
#libs
GitHub
GitHub - typeddjango/awesome-python-typing: Collection of awesome Python types, stubs, plugins, and tools to work with them.
Collection of awesome Python types, stubs, plugins, and tools to work with them. - typeddjango/awesome-python-typing
👍4
Библиотека platformdirs для получения стандартных локальных путей на компьютере юзера для хранения данных приложения и конфигов.
▫️кросплатформенная (Linux, macOS, Windows, Android)
▫️изоляция разных версий приложения
▫️большой список стандартных директорий
Альтернативная библиотека: appdirs
#libs
▫️кросплатформенная (Linux, macOS, Windows, Android)
▫️изоляция разных версий приложения
▫️большой список стандартных директорий
Альтернативная библиотека: appdirs
#libs
GitHub
GitHub - tox-dev/platformdirs: A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir". - tox-dev/platformdirs
👍8
Где хранить настройки мы уже выяснили. А как вы храните на хосте юзера чувствительные и секретные данные?
Занимаетесь обфускацией паролей и токенов делая защиту от дурака? Да, я тоже когда-то этим занимался😆
Правильным способом будет хранение в специальных шифрованных хранилищах, которые предпоставляет ваша ОС.
Сохранённую информацию можно получить только если залогиниться под юзером. То есть мы защищены паролем текущего юзера.
В каждой ОС своё решение, и удобно будет исопльзовать просплатформенные библиотеки. Самая популярная это keyring.
Использовать очень просто. Любой пароль или токен сессии нужно сохранить под каким-либо именем. Обычно это имя сервиса. Так же потребуется юзернейм.
С этими же данными можем получить пароль обратно.
Поддерживается основные бэкэнды из коробки и можно доставить сторонние или написать свой.
Для генерации и проверки паролей не забываем про secrets.
#libs
Занимаетесь обфускацией паролей и токенов делая защиту от дурака? Да, я тоже когда-то этим занимался😆
Правильным способом будет хранение в специальных шифрованных хранилищах, которые предпоставляет ваша ОС.
Сохранённую информацию можно получить только если залогиниться под юзером. То есть мы защищены паролем текущего юзера.
В каждой ОС своё решение, и удобно будет исопльзовать просплатформенные библиотеки. Самая популярная это keyring.
Использовать очень просто. Любой пароль или токен сессии нужно сохранить под каким-либо именем. Обычно это имя сервиса. Так же потребуется юзернейм.
С этими же данными можем получить пароль обратно.
>>> import keyring
keyring.set_password('myapp', 'username', 'pswd!')
print(keyring.get_password('myapp', 'username'))
# pswd!
Поддерживается основные бэкэнды из коробки и можно доставить сторонние или написать свой.
Для генерации и проверки паролей не забываем про secrets.
#libs
GitHub
GitHub - jaraco/keyring
Contribute to jaraco/keyring development by creating an account on GitHub.
👍5❤3
Библиотеки для рабты с коллекциями файлов (секвенциями)
▫️ Поиск коллекций в директории
▫️ Проверка целостности
▫️ Поиск пересечений
▫️ Форматирование
И другие функции
➡️ CLIQUE https://clique.readthedocs.io/en/stable/
➡️ PYSEQ https://pyseq.rsgalloway.com/
У библиотек схожий функционал но в деталях различается.
#libs
▫️ Поиск коллекций в директории
▫️ Проверка целостности
▫️ Поиск пересечений
▫️ Форматирование
И другие функции
➡️ CLIQUE https://clique.readthedocs.io/en/stable/
import clique
files = [
'/tmp/file1_001.png',
'/tmp/file1_002.png',
'/tmp/file1_003.png',
'/tmp/file1_005.png',
]
collection = clique.assemble(files)[0][0]
collection.head
# '/tmp/file1_'
collection.tail
# '.png'
collection.padding
# 3
collection.indexes
# <SortedSet "[1, 2, 3, 5]">
collection.holes()
# <Collection "/tmp/file1_%03d.png [4]">
collection.separate()
# [<Collection "/tmp/file1_%03d.png [1-3]">,
# <Collection "/tmp/file1_%03d.png [5]">]
➡️ PYSEQ https://pyseq.rsgalloway.com/
import pyseq
files = [
'/tmp/file1_001.png',
'/tmp/file1_002.png',
'/tmp/file1_003.png',
'/tmp/file1_005.png',
]
sequence = pyseq.Sequence(files)
sequence.head()
# 'file1_'
sequence.tail()
# '.png'
sequence.path()
# '/tmp/file1_1-5.png'
sequence.frames()
# [1, 2, 3, 5]
sequence.format('%p')
# '%03d'
sequence.missing()
# [4]
У библиотек схожий функционал но в деталях различается.
clique не умеет работать с pathlib.Path а pyseq не понимает генератор как источник. Но обе могут найти все коллекции в директории и выдать много информации о них.#libs
👍10❤1
PEP471 добавил в Python3.5 в модуль
▫️это генератор с соответствующими возможностями
▫️возвращает не просто строку а объект DirEntry
▫️работает в 4-10 раз быстрей чем
Раньше это была отдельная библиотека, которая позже стала частью CPython, как и ряд других новых библиотек в Python 3.
В настоящий момент метод
Обёртка, заставляющая обычную функцию работать как генератор
В тоже время
#libs
os новую функцию scandir()▫️это генератор с соответствующими возможностями
▫️возвращает не просто строку а объект DirEntry
▫️работает в 4-10 раз быстрей чем
os.listdir и os.walkРаньше это была отдельная библиотека, которая позже стала частью CPython, как и ряд других новых библиотек в Python 3.
В настоящий момент метод
Path.iterdir() всё еще использует os.listdir(). Обёртка, заставляющая обычную функцию работать как генератор
def iterdir(self):
for name in os.listdir(self):
yield self._make_child_relpath(name)
В тоже время
Path.glob() и Path.rglob() уже используют os.scandir(), то есть полноценные генераторы.#libs
Python Enhancement Proposals (PEPs)
PEP 471 – os.scandir() function – a better and faster directory iterator | peps.python.org
This PEP proposes including a new directory iteration function, os.scandir(), in the standard library. This new function adds useful functionality and increases the speed of os.walk() by 2-20 times (depending on the platform and file system) by avoiding...
👍8🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
rich
Библиотека для нескучного принта!
Добавляет в ваш терминал цвет и разные способы форматирования текста.
https://github.com/willmcgugan/rich
➡️ Мой небольшой пример
#libs
Библиотека для нескучного принта!
Добавляет в ваш терминал цвет и разные способы форматирования текста.
https://github.com/willmcgugan/rich
➡️ Мой небольшой пример
#libs
👍10
Библиотека psutil предоставляет весьма широкий инструментарий для взаимодействия с процессами.
Одна из полезных функций - узнать какие файлы открыты в контексте процесса или узнать какой процесс занимает файл.
Узнаём какие файлы использует процесс
Функция вернёт имя процесса который занял файл. Если файл не занят то вернёт
Для использования требуются админские права.
#libs
Одна из полезных функций - узнать какие файлы открыты в контексте процесса или узнать какой процесс занимает файл.
Узнаём какие файлы использует процесс
import psutil
def list_file_handlers(process_name):
for proc in psutil.process_iter():
if proc.name().lower().startswith(process_name):
for file in proc.open_files():
print(file)
list_file_handlers('python')
Функция вернёт имя процесса который занял файл. Если файл не занят то вернёт
None.def who_is_use(fpath):
for proc in psutil.process_iter():
for item in proc.open_files():
if fpath == item.path:
return proc.name()
Для использования требуются админские права.
#libs
GitHub
GitHub - giampaolo/psutil: Cross-platform lib for process and system monitoring in Python
Cross-platform lib for process and system monitoring in Python - giampaolo/psutil
❤6👍4
Библиотека APScheduler для управления заданиями в Python.
Может запускать планировщик и задания как отдельный поток (синхронный код) и как коркутины (асинхронный код), отложенные или через интервал.
Что есть в APScheduler:
▫️гибкий функционал создания задачи
▫️удобное управление созданными заданиями (pause\resume, listing, modify, reschedule)
▫️кастомизация классов библиотеки
▫️различные хранилища заданий (Memory и различные БД)
▫️интеграции в фреймворки
▫️7 вариантов планировщика
Три варианта тригеров для задач:
▫️по дате с помощью datetime
▫️через интервал с помощью datetime
▫️через интервал с помощью cron
и другие полезности
В данный момент готовится к релизу 4я версия
PS. Всегда использую вместе с FastAPI, очень рекомендую к ознакомлению.
#libs
Может запускать планировщик и задания как отдельный поток (синхронный код) и как коркутины (асинхронный код), отложенные или через интервал.
Что есть в APScheduler:
▫️гибкий функционал создания задачи
▫️удобное управление созданными заданиями (pause\resume, listing, modify, reschedule)
▫️кастомизация классов библиотеки
▫️различные хранилища заданий (Memory и различные БД)
▫️интеграции в фреймворки
▫️7 вариантов планировщика
Три варианта тригеров для задач:
▫️по дате с помощью datetime
▫️через интервал с помощью datetime
▫️через интервал с помощью cron
и другие полезности
В данный момент готовится к релизу 4я версия
PS. Всегда использую вместе с FastAPI, очень рекомендую к ознакомлению.
#libs
GitHub
GitHub - agronholm/apscheduler at 3.x
Task scheduling library for Python. Contribute to agronholm/apscheduler development by creating an account on GitHub.
🔥4👍2
POSIX (Portable Operating System Interface) — это набор стандартов, определяющих интерфейсы для обеспечения совместимости между операционными системами.
Данный стандарт поддерживается всеми UNIX-системами (GNU/Linux, macOS, FreeBSD, OpenBSD и другие). А вот в Windows либо частично, либо через подсистемы (такие как WSL).
Помимо прочих условий, один из важных моментов этого стандарта - правила синтаксического анализа строк, разбиение на токены.
В Python разбиением строки на токены занимается функция
Этот аргумент определяет, следует ли функции использовать правила синтаксического анализа соответствующие стандарту POSIX, или использовать обратно совместимый, легаси режим.
▫️posix=True
В POSIX-совместимом режиме функция
▫️posix=False
В легаси режиме используется более старый способ разбиения строк на токены, который будет игнорировать переменную окружения
Теперь смотрим некоторые примеры.
Учитвая, что аргумент
Рекомендую самостоятельно поэксперементировать с этим аргументом!
#libs
Данный стандарт поддерживается всеми UNIX-системами (GNU/Linux, macOS, FreeBSD, OpenBSD и другие). А вот в Windows либо частично, либо через подсистемы (такие как WSL).
Помимо прочих условий, один из важных моментов этого стандарта - правила синтаксического анализа строк, разбиение на токены.
В Python разбиением строки на токены занимается функция
shlex.split(), которая имеет один важный аргумент - posix.Этот аргумент определяет, следует ли функции использовать правила синтаксического анализа соответствующие стандарту POSIX, или использовать обратно совместимый, легаси режим.
▫️posix=True
В POSIX-совместимом режиме функция
shlex.split() будет учитывать переменную окружения IFS (Internal Field Separator) для определения разделителей полей и будет более строго следовать стандарту POSIX. Из строки удаляются неэкранированные кавычки и обратные слеши.▫️posix=False
В легаси режиме используется более старый способ разбиения строк на токены, который будет игнорировать переменную окружения
IFS и использовать whitespaces как разделители полей.Теперь смотрим некоторые примеры.
import shlex
# кавычки
text = r'"Do"Not"Separate" \"This\"'
shlex.split(text, posix=False)
# ['"Do"', 'Not"Separate"', '\\"This\\"']
shlex.split(text, posix=True)
# ['DoNotSeparate', '"This"']
# специсимволы
text = r'A\tB\nС\fD\vE'
shlex.split(text, posix=False)
# ['A\\tB\\nС\\fD\\vE']
shlex.split(text, posix=True)
# ['AtBnСfDvE']
# обратный слеш
text = r"cmd.exe c:\games\mario.exe"
shlex.split(text, posix=False)
# ['cmd.exe', 'c:\\games\\mario.exe']
shlex.split(text, posix=True)
# ['cmd.exe', 'c:gamesmario.exe']
Учитвая, что аргумент
posix по умолчанию True, стоит помнить этот факт при обработке строк с Windows-путями!Рекомендую самостоятельно поэксперементировать с этим аргументом!
#libs
👍7❤1