Provides an easy way to run your scripts by console commands and hotkeys
Project description
Библиотека hotconsole - альтернатива argparse, которая позволяет совмещать консольные команды и горячие клавиши. Облегчает процесс автоматизации рабочей рутины и подходит в т.ч. для тех, кто мало пишет на питоне. Вам не нужно писать кучу инфраструктурного кода, просто напишите то, что хотите сделать.
Установка
Библиотека требует python 3.10 и выше (если устанавливаете в первый раз, соглайтесь на добавление переменной в path). Проверяем версию python --version, делаем python -m ensurepip и устанавливаем библиотеку командой:
python -m pip install hotconsole
При запуске любого скрипта при помощи библиотеки - в папке со скриптом появляется батник для установки hotconsole. Батник пригодится, чтобы не обновлять библиотеку вручную. А еще, чтобы ваши пользователи могли легко установить библиотеку, а также подтянуть все зависимости, которые вы добавите сами и выгрузите в файл requirements.txt.
Запуск команд
Рассмотрим простой пример пользовательского main.py - с командой для остановки службы
from hotconsole import Command, Runner, Hotkey, OSHelper
TurnService = Command("turn", "Отключить службу", labmda_: OSHelper.try_stop_service("SERVICE"))
def main():
Runner().run([Hotkey("alt+t", TurnService, None)])
Что происходит при запуске main.py:
- Появится окошко со списком горячих клавиш
- При нажатии alt+t останавливается служба SERVICE
- Также можно нажать alt+q, перейти в консольный режим, написать turn - и получить тот же результат
- У пользователя появится конфиг data.json в папке с main.py
Опции
Когда у нас парочка скриптов - можно создавать команды и без опций. Тогда по нажатию горячей клавиши сразу будет выполняться нужное действие.
С этим подходом возникают проблемы, когда скриптов становится много - и при этом они тематически тесно связаны. В результате приходится создавать однотипные команды и запоминать / просматривать в списке десятки горячих клавиш.
Решение - создавать определенные команды с опциями. У пользователя будет автоматически уточняться номер опции и передаваться в вашу функцию в качестве аргумента.
Например, при создании команды передаем опции ["Включить", "Выключить", "Перезапустить"]
Тогда функция будет выглядеть так:
def turn_service(option_number):
match option_number:
case 1:
OSHelper.try_stop_service("SERVICE")
case 2:
OSHelper.try_start_service("SERVICE")
case 3:
OSHelper.try_rerun_service("SERVICE")
А команда так:
TurnService = Command("turn", "Изменить состояние службы", turn_service, ["Включить", "Выключить", "Перезапустить"])
В результате:
- При нажатии alt+t в консоли появляется список вариантов: 1. Выключить, 2. Включить, 3. Перезапустить
- При выборе варианта выполняется соответствующее действие
- Если в горячей клавише указать вместо None, например, 1 - служба сразу остановится без вопросов в консоли
- Если перейти в консольный режим по alt+q и написать, например, turn 3 - служба сразу перезапустится
Также можно передать в команду option_message - вопрос, который будет уточнять у пользователя номер опции. По умолчанию это фраза "Введите номер варианта"
Возможности конфигурации
При первом запуске main.py - создается конфиг data.json с версией = 1.
Конфиг полезен:
- Для кэширования. Если в процессе выполнения команды нужно сохранить значение переменной, то можно в этот файл
- Для кастомизации. Например, по умолчанию в конфиге есть поле console_mode. Пользователь может выставить его в True и перейти в консольный режим без горячих клавиш.
- Для обновления. Если версия конфига пользователя неактуальна (расходится с версией в файле main.py), в конфиг автоматически добавляются новые поля. Также можно вставить в процесс инициализации миграцию.
Создаем конфиг для передачи в Runner:
config = Config (version=22, consoleMode=False, refuseStartup=False, isAnything = False)
Допустим, в 22 версии изменилось поле "isSomething" на "isAnything". Чтобы не потерять данные наших пользователей, можем сделать миграцию:
def migration_to_22():
config = OSHelper.extract_whole_json(CONFIG_PATH)
if "consoleModeIsDefault" in config.keys():
config["isAnything"] = config["isSomething"]
OSHelper.write_file(CONFIG_PATH, json.dumps(config, indent=4))
Также может возникнуть потребность перед запуском каждой команды выполнять определенные действия и актуализировать данные пользователя. Для этого при создании Runner в него можно передать метод для актуализации.
Hotstrings
Hotstring - это как горячая клавиша, но только для строк. Например, мы можем создать Hotstring("githot", "Гитхаб hotconsole", "https://github.com/Vecheren/hotconsole") И передать массив таких объектов в метод run.
Работает это так: пишем githot, нажимаем пробел - вместо githot в нашем случае подставляется ссылка.
Хелперы
В hotconsole также есть хелперы, которые могут пригодиться при написании команд. Например:
- DBHelper - для взаимодействия с БД SQLite.
- OSHelper - для взаимодействия с виндой.
- RequestsHelper - для создания запросов к внешнему API.
- InnGenerator - генератор ИНН
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 hotconsole-0.2.0.tar.gz
.
File metadata
- Download URL: hotconsole-0.2.0.tar.gz
- Upload date:
- Size: 21.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 25c9d9ebd3cb0ab21cc57a80afab25a4aa2f2dd55840df0410101ef2323486db |
|
MD5 | 9ae68c23979f30826774077c19b9eb32 |
|
BLAKE2b-256 | 0f8533f6d3073ee9d5c7c31f16c7a1601c15651bfb66a43f50f4bbe46feb7c21 |
File details
Details for the file hotconsole-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: hotconsole-0.2.0-py3-none-any.whl
- Upload date:
- Size: 20.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23c95d4c6e1895b902ad017718fe142e62b8164848ee0c10a06ccd4e7806c229 |
|
MD5 | 430511e3c152665c7323c4e98b4e9d92 |
|
BLAKE2b-256 | 3160a08430697c9379d9a5cee34a1a56f9f36ea06fe3583ac647c766adaeee42 |