python click 參數中自訂自己的檢查類 type
原生函式其實已經非常足夠了,只是如果專案比較刁鑽一點又不想把檢查函式寫在 command 函式中,而是傳入之前檢查可以自訂類來做
目標先挑一個你覺得有用的免得要重寫太多功能,這邊假設是路徑就挑 click.Path
這個類別繼承,然後在此之上加上自己的功能
# 自訂 type 類別 ExtPath 用例
class ExtPath(click.Path):
def __init__(self, my_check=False, **kwargs):
self.my_check = my_check
super().__init__(**kwargs)
def convert(self, value, param, ctx):
print(f"ExtPath.convert():: 啟動此函數的對象參數是 {param.name} 目前值為 {value}, 自訂參數 my_check={self.my_check}")
return super().convert(value, param, ctx)
# 群組命令3:: demo2
@entry.command()
@click.argument('name', required=True, nargs=1, type=ExtPath())
@click.argument('path', required=True, nargs=-1, type=ExtPath(my_check=True, exists=True))
def demo2(name, path):
cli.echo_inf_message(f"[\n name: {name}\n path: {path}\n]")
"""獲取從cli設置的初始化信息"""
大致上會用到的部分都寫上了,自己參考著應該就能知道怎麼使用了
範例用例
(.venv) PS C:\Users\user\OneDrive\Git Repository\PyCli_Template> myapp demo2 Test setup.py *.ps1
ExtPath.convert():: 啟動此函數的對象參數是 name 目前值為 Test, 自訂參數 my_check=False
ExtPath.convert():: 啟動此函數的對象參數是 path 目前值為 setup.py, 自訂參數 my_check=True
ExtPath.convert():: 啟動此函數的對象參數是 path 目前值為 deploy.ps1, 自訂參數 my_check=True
[
name: Test
path: ('setup.py', 'deploy.ps1')
]
需要講的大概就是順序了,這個類的順序在參數擴展之後的 for 迴圈之內,就算是附加在 nargs=-1 裡面也會自動跑多次,可以從範例中看到。
這裡處理完畢之後就會正式進入 comannd 函式了,可以在這裡修改變數值但不是很建議,可能會跟官方功能有衝突。
沒有留言:
張貼留言