Генератор файловых шаблонов для питоновских модулей

Эта тема старая, я уже обращался к ней в 2015-ом (Автоматизируй это). Более того, эта тема не для всех.
Тема интересна только пользователям Линукса. Причём, только тем, кто пишет программы на Python. Причём, только тем, кто не использует IDE, а пользуется простыми текстовыми редакторами типа nano, mcedit, gedit, pluma, …

С 2015-го прошло почти пять лет. Мир немного изменился. Ушёл (или почти ушёл) Python v.2. Отпала необходимость указывать кодировку в начале файла (coding=utf-8). Ну и я тоже немного продвинулся в понимании чего я хочу от утилиты mkpy.

В общем, выкатываю в общее пользование маленький продукт, которым я пользуюсь почти каждый день.

Под катом исходный текст утилиты и скрипт для установки утилиты в систему.

Утилита mkpy (файл mkpy-0.2.5.py)

#!/usr/bin/env python3


'''
@file    mkpy-0.2.5
@brief   Утилита создает шаблон питоновского файла с именем, заданным
         пользователем, в текущем директории.
@version 0.2.5
@date    2020.02.04
@author  Жевак Александр
@email   zhevak@mail.ru
'''


import os
import pwd
import sys
import argparse
from datetime import datetime

EMAIL = u'zhevak@mail.ru'

FILE_TEMPLATE = """#!/usr/bin/env python3


'''
@module  {module}
@version <укажите версию>
@date    {date}
@author  {author}
@email   {email}

@brief   <вставьте сюда краткое описание модуля>
'''


if __name__ == "__main__":

    pass
"""


HELP = '''Генератор шаблонов Python-овских модулей.
Создаёт файлы-шаблоны и делает их исполняемыми.

Используйте так: mkpy [-h] [module[ module [module] ...]]]

Аргумены:
  -h, --help                        Показать эту помощь
  [module[ module [module] ...]]]   Список имён модулей (без суффикса ".py")
'''


def get_user_info():
    login = os.getlogin()
    info = pwd.getpwnam(login)
    gecos = info.pw_gecos.split(',')

    username = os.environ.get('GIT_AUTHOR_NAME') or (login if len(gecos) == 1 else gecos[0])
    email = os.environ.get('GIT_AUTHOR_EMAIL') or EMAIL
    return username, email


def make_py(module):
    if not module.lower().endswith('.py'):
        filename = module + '.py'
    else:
        filename = module

    # Убедимся, что не перезапишем существующий с таким же именем файл
    if os.path.isfile(filename):
        print('ОШИБКА: файл {} уже существует'.format(filename))
        return

    username, email = get_user_info()
    params = {
        'module': module,
        'date': datetime.now().strftime('%Y.%m.%d'),
        'author': username,
        'email': email
    }

    # Создадим файл и запишем в него шаблон
    with open(filename, 'w') as f:
        f.write(FILE_TEMPLATE.format(**params))

    # Сделаем файл исполняемым
    os.chmod(filename, 0o755)


def show_help():
    print('Используйте: mkpy <имя модуля>')


if __name__ == '__main__':

    if (len(sys.argv) == 1) or ('-h' in sys.argv) or ('--help' in sys.argv):
        print(HELP)
    else:
        for arg in sys.argv[1:]:
            make_py(arg)

Скрипт для установки утилиты mkpy в систему (файл mkpy-install.sh):

#!/usr/bin/env bash

# mkpy-install.sh -- Устанавливает в систему утилиту mkpy.py
# После инсталляции утилиту можно вызывать по упрощённому имени: mkpy
# 2019, 2020, Александр Жевак
# zhevak@mail.ru
# +7 (950) 194-4504


#rm /usr/bin/mkpy*
#rm /etc/alternatives/mkpy*
cp mkpy-0.2.5.py /usr/bin/
update-alternatives --install /usr/bin/mkpy mkpy /usr/bin/mkpy-0.2.5.py 2

Для установки в систему выполнить команду:

# mkpy-install.sh

В ближайшее время (сегодня вечером/ночью) я выложу эти файлы в git-репозиторий. А что не сейчас? Ну, сейчас я просто не имею такой физической возможности.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s