Как создать CLI для репозитория Git, используя Python Argparse и Click - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать инструмент CLI для выполнения сценариев python в хранилище. Мой друг помог мне, но, учитывая, что я впервые использую argparse и click для создания CLI, у меня возникают проблемы с его правильным исполнением. Моя цель - создать CLI, который будет работать со всеми моими подкаталогами в моей папке Python:

https://github.com/Richard-Barrett/SalesforceCLI/tree/master/Python

Оказавшись здесь, я имею там есть скрипт: sfd c .py, который я хотел бы в конечном итоге импортировать как путь в /usr/local/bin для выполнения внутри оболочки.

Основной сценарий, который выполняет это, должен быть sfdc.py, и я хочу назвать его так

python sfdc.py <sub-directory> <optional_flag>, чтобы подкаталог был аргументом, а исполняемый скрипт - необязательным. флаг.

Вот основной код: https://github.com/Richard-Barrett/SalesforceCLI/blob/master/Python/sfdc.py

Фактический код:

#!/usr/bin/env python
import argparse

parser = argparse.ArgumentParser(
    description='SalesforceCLI will return Pandas Dataframes from Salesforce Cases within an Organizations SFDC. It will also allow you to interact with Salesforce Lighting Experience or Service console from within the CLI. You will even be able to make leads, create cases, and send off emails all from your CLI!',
    epilog="SalesforceCLI is here to help you automate reports and data within your Organizations SFDC"
)

# Poitional Arguments
parser.add_argument('accounts', help='Pandas Dataframe that shows all available accounts active within an organizational SFDC')
parser.add_argument('cases', help='cases dataframes related to defined case report, default is set to all cases')
parser.add_argument('contacts', help='return a list of contacts as a dataframe')
parser.add_argument('leads', help='leads dataframes related to all defined leads for user access, default is set to all concurrent leads within an organizational SFDC')
parser.add_argument('lightning', help='Work with Salesforce Lightning from the CLI')
parser.add_argument('service', help='Work with Salesforce Service Console from the CLI')
parser.add_argument('soql', help='SOQL custom query for users within an SFDC')
parser.add_argument('reports', help='reports dataframes related to defined reporst, default is set to list all available reports for use with SFDC access')

# Optional Arguments
parser.add_argument('-v','--version', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='Returns the version of SalesforceCLI'),
#printf("Optional Arguments for cases")
parser.add_argument('-s1','--sev1', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='Return Pandas Dataframe for all Severity Level 1 Cases')
parser.add_argument('-s2','--sev2', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='Return Pandas Dataframe for all Severity Level 2 Cases')
parser.add_argument('-s3','--sev3', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='Return Pandas Dataframe for all Severity Level 3 Cases')
parser.add_argument('-s4','--sev4', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='Return Pandas Dataframe for all Severity Level 4 Cases')

args = parser.parse_args()

if args.sev1:
   execfile('Cases/read_all_sev1_cases.py')

if args.sev2:
   execfile('Cases/read_all_sev2_cases.py')

Как я могу создать инструмент CLI, используя эту структуру? Помощь и вывод текста почти к тому, что я хочу. Я даже изменил это, чтобы включить строки, подобные этой, но это не сработало.

parser.add_argument('-s2','--sev2', action='store_true',
                    help='Return Pandas Dataframe for all Severity Level 2 Cases')

У кого-нибудь есть какие-либо предложения о том, как написать CLI для использования python?

Я при попытке запустить код способом

python sfdc.py cases --sev2

при его запуске я получаю следующую трассировку:

 richardbarret@1152-MBP  ~/Git/SalesforceCLI/Python   master ● ⍟1  python sfdc.py cases -s1                                                             ✔  1128  20:19:53
usage: sfdc.py [-h] [-v] [-s1]
               accounts cases contacts leads lightning service soql reports
sfdc.py: error: too few arguments

1 Ответ

1 голос
/ 25 апреля 2020

Итак, используя Click, так как он помечен в вопросе, я решил реализовать следующее:

import click


def sev1():
    os.system('python3 ~/Git/SalesforceCLI/Python/Cases/read_all_sev1_cases.py')

def sev2():
    os.system('python3 ~/Git/SalesforceCLI/Python/Cases/read_all_sev2_cases.py')

def sev3():
    os.system('python3 ~/Git/SalesforceCLI/Python/Cases/read_all_sev3_cases.py')

def sev4():
    os.system('python3 ~/Git/SalesforceCLI/Python/Cases/read_all_sev4_cases.py')

def handover():
    os.system('python3 ~/Git/SalesforceCLI/Python/Cases/read_all_handover_cases.py')

severities = [sev1, sev2, sev3, sev4]

@click.command('sfdc')
@click.argument('subdirectory', type=click.Path())
@click.version_option()
@click.option('-ho', '--handover', 'do_handover', is_flag=True)
@click.option('-s', '--severity', type=click.Choice(['1', '2', '3', '4']), required=False)
def sfdc(subdirectory, do_handover, severity):
    subdirectory = os.path.abspath(subdirectory)
    if severity:
        severity = int(severity) - 1
        severity_method = severities[severity]
        severity_method()
    if do_handover:
        handover()


if __name__ == '__main__':
    sfdc()

Это, кажется, снимает все требования и, в мое мнение, по крайней мере, немного более читабельно. Помогает ли это решить вашу проблему?

Пример выполнения:

python sfdc.py -ho -s 1
python sfdc.py -ho
python sfdc.py -s 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...