Библиотека hotconsole позволяет запускать ваши скрипты на Windows в двух режимах: при помощи горячих клавиш и консольных команд. Таким образом ваши скрипты становятся удобным инструментом для повседневного использования в одиночку или в команде - без всяких усилий с вашей стороны.
Hotconsole автоматически выводит в консоль информацию о командах, обрабатывает аргументы, запрашивает необходимую информацию у пользователя, дает возможность конфигурации и обновления (для командной работы), а также предоставляет ряд полезных методов.
Горячие клавиши работают глобально, поверх всех окон, а при необходимости действий в консоли - происходит автоматическое переключение на консоль. Примеры можно посмотреть и запустить в папке examples.
## Установка
Библиотека требует python 3.10 или выше (если устанавливаете в первый раз, соглайтесь на добавление переменной в path). Проверяем версию python --version, делаем python -m ensurepip и устанавливаем библиотеку командой:
```
python -m pip install hotconsole
```
При запуске любого скрипта при помощи библиотеки - в папке со скриптом появляется батник для установки hotconsole.
Батник пригодится, чтобы не обновлять библиотеку вручную. А еще, чтобы ваши пользователи могли легко установить библиотеку, а также подтянуть все зависимости, которые вы добавите сами и выгрузите в файл requirements.txt.
## Запуск команд
Рассмотрим простой пример пользовательского main.py - с командой для остановки службы
```
from hotconsole.hotconsole import Command, Runner, Hotkey
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 в нашем случае подставляется ссылка.
## Хелперы
В hotconsole.helpers также есть хелперы, которые могут пригодиться при написании команд.
Например:
- DBHelper - для взаимодействия с БД SQLite.
- OSHelper - для взаимодействия с виндой.
- RequestsHelper - для создания запросов к внешнему API.
- InnGenerator - генератор ИНН
## Известные ограничения
Hotconsole работает только на Windows, на линуксе и маке не запустится.
Библиотека проверялась на python 3.10, 3.11 и 3.12. Версия ниже не подойдет из-за использования pattern-matching, который наконец-то завезли в питон.
Запуск нескольких приложений с hotconsole одновременно - работает успешно. Но если у вас возникнет такая потребность, надо будет следить, чтобы не пересекались горячие клавиши в разных приложениях (иначе будут срабатывать сразу обе).
Приложение будет автоматически перезапускаться из-под админа, если указать if __name__ == "__main__": OSHelper.rerun_as_admin()
Но если у вас включен UAC, он будет доставать вас вопросами, запустить ли приложение. Для удобства можно выключить его в разделе "Изменение параметров контроля учетных записей".
Raw data
{
"_id": null,
"home_page": null,
"name": "hotconsole",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "commands, console, hotkeys, hotstrings, scripts, terminal",
"author": null,
"author_email": "Michael Noskov <vecheren@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/2d/74/2d007235ac4d99a9204c41924d72a8655f89200a2307ae49f88b39bf3143/hotconsole-0.5.0.tar.gz",
"platform": null,
"description": "\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 hotconsole \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043d\u0430 Windows \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0430\u0448\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443 \u0438\u043b\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 - \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u0441 \u0432\u0430\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \n\nHotconsole \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u044f\u0434 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.\n\n\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u0435\u0445 \u043e\u043a\u043e\u043d, \u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 - \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 examples.\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 python 3.10 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435 (\u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0435 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u0441\u043e\u0433\u043b\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 path). \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e python --version, \u0434\u0435\u043b\u0430\u0435\u043c python -m ensurepip \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:\n\n```\npython -m pip install hotconsole\n```\n\n\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 - \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0442\u043d\u0438\u043a \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 hotconsole.\n\u0411\u0430\u0442\u043d\u0438\u043a \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0410 \u0435\u0449\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u043b\u0438 \u043b\u0435\u0433\u043a\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0441\u0430\u043c\u0438 \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0432 \u0444\u0430\u0439\u043b requirements.txt.\n\n## \u0417\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\n\n\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e main.py - \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0443\u0436\u0431\u044b\n\n```\nfrom hotconsole.hotconsole import Command, Runner, Hotkey\nfrom hotconsole.helpers import OSHelper\n\nTurnService = Command(\"turn\", \"\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0443\", labmda_: OSHelper.try_stop_service(\"SERVICE\"))\n\ndef main():\n Runner().run([Hotkey(\"alt+t\", TurnService, None)])\n```\n\n\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 main.py:\n- \u041f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043e\u043a\u043e\u0448\u043a\u043e \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448\n- \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437-\u043f\u043e\u0434 \u0430\u0434\u043c\u0438\u043d\u0430\n- \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 alt+t \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0436\u0431\u0430 SERVICE\n- \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c alt+q, \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c turn - \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\n- \u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433 data.json \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 main.py\n\n## \u041e\u043f\u0446\u0438\u0438\n\n\u041a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u043f\u0430\u0440\u043e\u0447\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 - \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0431\u0435\u0437 \u043e\u043f\u0446\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441\u0440\u0430\u0437\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \n\n\u0421 \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e - \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0438 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0435\u0441\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u044b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c / \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448. \n\n\u0420\u0435\u0448\u0435\u043d\u0438\u0435 - \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441 \u043e\u043f\u0446\u0438\u044f\u043c\u0438. \u0423 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u043c\u0435\u0440 \u043e\u043f\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430. \n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043e\u043f\u0446\u0438\u0438 [\"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c\", \"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c\", \"\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\"] \n\u0422\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:\n\n```\ndef turn_service(option_number):\n match option_number:\n case 1:\n OSHelper.try_stop_service(\"SERVICE\")\n case 2:\n OSHelper.try_start_service(\"SERVICE\")\n case 3:\n OSHelper.try_rerun_service(\"SERVICE\")\n```\n\n\u0410 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0442\u0430\u043a:\n```\nTurnService = Command(\"turn\", \"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b\", turn_service, [\"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c\", \"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c\", \"\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\"])\n```\n\n\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435:\n- \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 alt+t \u0432 \u043b\u044e\u0431\u043e\u043c \u043e\u043a\u043d\u0435 - \u043f\u0440\u043e\u0438\u0441\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u043a\u043d\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u0438\n- \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432: 1. \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c, 2. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c, 3. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\n- \u041f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\n- \u0415\u0441\u043b\u0438 \u0432 \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e None, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1 - \u0441\u043b\u0443\u0436\u0431\u0430 \u0441\u0440\u0430\u0437\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438\n- \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u043e alt+q \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, turn 3 - \u0441\u043b\u0443\u0436\u0431\u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f\n\n\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 option_message - \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u043e\u043c\u0435\u0440 \u043e\u043f\u0446\u0438\u0438. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u0444\u0440\u0430\u0437\u0430 \"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\"\n\n## \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 main.py - \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433 data.json \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 = 1. \n\n\u041a\u043e\u043d\u0444\u0438\u0433 \u043f\u043e\u043b\u0435\u0437\u0435\u043d:\n1) \u0414\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b\n2) \u0414\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 console_mode. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 True \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0431\u0435\u0437 \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448. \n3) \u0414\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430 (\u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435 main.py), \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e.\n\n\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 Runner: \n\n```\nconfig = Config (version=22, consoleMode=False, refuseStartup=False, isAnything = False)\n```\n\n\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432 22 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0435 \"isSomething\" \u043d\u0430 \"isAnything\". \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e:\n\n```\ndef migration_to_22():\n config = OSHelper.extract_whole_json(CONFIG_PATH)\n if \"consoleModeIsDefault\" in config.keys():\n config[\"isAnything\"] = config[\"isSomething\"]\n OSHelper.write_file(CONFIG_PATH, json.dumps(config, indent=4))\n```\n\n\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 Runner \u0432 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \n\n## Hotstrings\n\nHotstring - \u044d\u0442\u043e \u043a\u0430\u043a \u0433\u043e\u0440\u044f\u0447\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0430, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a. \n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c Hotstring(\"githot\", \"\u0413\u0438\u0442\u0445\u0430\u0431 hotconsole\", \"https://github.com/Vecheren/hotconsole\")\n\u0418 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043c\u0435\u0442\u043e\u0434 run.\n\n\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a: \u043f\u0438\u0448\u0435\u043c githot, \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u043b - \u0432\u043c\u0435\u0441\u0442\u043e githot \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430.\n\n## \u0425\u0435\u043b\u043f\u0435\u0440\u044b\n\n\u0412 hotconsole.helpers \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \n- DBHelper - \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0411\u0414 SQLite.\n- OSHelper - \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0438\u043d\u0434\u043e\u0439.\n- RequestsHelper - \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 API.\n- InnGenerator - \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0418\u041d\u041d\n\n## \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\n\nHotconsole \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Windows, \u043d\u0430 \u043b\u0438\u043d\u0443\u043a\u0441\u0435 \u0438 \u043c\u0430\u043a\u0435 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.\n\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u043d\u0430 python 3.10, 3.11 \u0438 3.12. \u0412\u0435\u0440\u0441\u0438\u044f \u043d\u0438\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0438\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f pattern-matching, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0437\u0430\u0432\u0435\u0437\u043b\u0438 \u0432 \u043f\u0438\u0442\u043e\u043d.\n\n\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 hotconsole \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e - \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e. \u041d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u043b\u0438\u0441\u044c \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 (\u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u0435).\n\n\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0438\u0437-\u043f\u043e\u0434 \u0430\u0434\u043c\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c if __name__ == \"__main__\": OSHelper.rerun_as_admin()\n\n\u041d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d UAC, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439\".\n",
"bugtrack_url": null,
"license": null,
"summary": "Provides an easy way to run your scripts by console commands and hotkeys",
"version": "0.5.0",
"project_urls": {
"Homepage": "https://github.com/MishaVoyager/hotconsole",
"Issues": "https://github.com/MishaVoyager/hotconsole/issues"
},
"split_keywords": [
"commands",
" console",
" hotkeys",
" hotstrings",
" scripts",
" terminal"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8a41d06ae5461d275888484311693f6b2a02afb06c4007a1c8a638763e600368",
"md5": "f37938e657aa824da5cf28b44963c50d",
"sha256": "4703584fd131dc4ccc13836744713d93adcf348ad9a667dff8491a5639f84601"
},
"downloads": -1,
"filename": "hotconsole-0.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f37938e657aa824da5cf28b44963c50d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 20947,
"upload_time": "2024-11-08T14:43:30",
"upload_time_iso_8601": "2024-11-08T14:43:30.089526Z",
"url": "https://files.pythonhosted.org/packages/8a/41/d06ae5461d275888484311693f6b2a02afb06c4007a1c8a638763e600368/hotconsole-0.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2d742d007235ac4d99a9204c41924d72a8655f89200a2307ae49f88b39bf3143",
"md5": "b7cf1c55aabafc81241c56b802196a66",
"sha256": "b48dc3665e99f6f6425e7797d4649cf794e21b534824eeaa9df61a0ed0eab165"
},
"downloads": -1,
"filename": "hotconsole-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "b7cf1c55aabafc81241c56b802196a66",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 22424,
"upload_time": "2024-11-08T14:43:32",
"upload_time_iso_8601": "2024-11-08T14:43:32.068864Z",
"url": "https://files.pythonhosted.org/packages/2d/74/2d007235ac4d99a9204c41924d72a8655f89200a2307ae49f88b39bf3143/hotconsole-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-08 14:43:32",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "MishaVoyager",
"github_project": "hotconsole",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "keyboard",
"specs": [
[
">=",
"0.13.5"
]
]
},
{
"name": "pydantic",
"specs": [
[
">=",
"2.5.3"
]
]
},
{
"name": "pyperclip",
"specs": [
[
">=",
"1.8.2"
]
]
},
{
"name": "pywin32",
"specs": [
[
">=",
"306"
]
]
},
{
"name": "pywin32-ctypes",
"specs": [
[
">=",
"0.2.2"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.31.0"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "ansicon",
"specs": [
[
">=",
"1.89.0"
]
]
},
{
"name": "pytest",
"specs": [
[
"~=",
"8.3.2"
]
]
}
],
"lcname": "hotconsole"
}