Skip to main content

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.commands import Command, Hotkey, Runner
from hotconsole.helpers import 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.

Конфиг полезен:

  1. Для кэширования. Если в процессе выполнения команды нужно сохранить значение переменной, то можно в этот файл
  2. Для кастомизации. Например, по умолчанию в конфиге есть поле console_mode. Пользователь может выставить его в True и перейти в консольный режим без горячих клавиш.
  3. Для обновления. Если версия конфига пользователя неактуальна (расходится с версией в файле 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 в нашем случае подставляется ссылка.

Перезапуск из-под админа

Для корректной работы горячих клавиш рекомендуется:

  • Автоматический запуск из-под админа
  • Включение английской раскладки

Для этого надо указать в конце main.py:

if __name__ == "__main__":
    OSHelper.rerun_app_as_admin()
    OSHelper.set_english_layout()
    main()

Хелперы

В модуле hotconsole.helpers собраны хелперы, которые могут пригодиться при написании команд. Например:

  • DBHelper - для взаимодействия с БД SQLite.
  • OSHelper - для взаимодействия с виндой.
  • RequestsHelper - для создания запросов к внешнему API.
  • InnGenerator - генератор ИНН

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hotconsole-0.1.8.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

hotconsole-0.1.8-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file hotconsole-0.1.8.tar.gz.

File metadata

  • Download URL: hotconsole-0.1.8.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for hotconsole-0.1.8.tar.gz
Algorithm Hash digest
SHA256 aab747e0feb65da03662a1ebde27759cb8579e586f8e7f1b49906f5cdb9e0a48
MD5 b49b46336f054c03e6963a96ae7f0278
BLAKE2b-256 645926047719b83b87c26a88a4e01263e92c90b8f3be2480350665788f71f672

See more details on using hashes here.

File details

Details for the file hotconsole-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: hotconsole-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for hotconsole-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e32d69a6df607c4f525b649426dadce80c64d77d8ef6a585ddda8349cef65100
MD5 fc13b9163fce95b47a40557193107efd
BLAKE2b-256 6ec715ba8051210f6f14191ce1630971119b09f42616824f6b8cfbe6bf08e6c1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page