"""
コマンドライン引数を管理するための tkArgs クラスを提供するモジュール。
このモジュールは、argparse.ArgumentParser と tklib.tkobject.tkObject を継承した
tkArgs クラスを定義します。これにより、コマンドライン引数の追加と解析を容易にし、
プログラムに関するメタ情報(ファイル名、バージョン、作者など)の管理も行います。
プログラムの引数処理を簡素化し、共通のオブジェクトプロパティを統合するのに役立ちます。
関連リンク:
:doc:`tkargs_usage`
"""
import sys
import argparse
from tklib.tkobject import tkObject
[ドキュメント]
class tkArgs(argparse.ArgumentParser, tkObject):
"""
コマンドライン引数を処理するためのクラス。
このクラスは、argparse.ArgumentParser の機能と tklib.tkobject.tkObject の共通プロパティを組み合わせ、
プログラムの引数解析と情報管理を簡素化します。
ファイル名、バージョン、作者、作成日、最終更新日などのプログラム情報を保持できます。
"""
def __init__(self, program_file = None, program_path = None, version = None,
author = None, creation_date = None, last_update_date = None, **kwargs):
"""
tkArgs クラスのインスタンスを初期化します。
プログラムの基本情報(ファイル名、バージョンなど)を設定し、
tkObject の初期化も行います。argparse.ArgumentParser の初期化は
initialize メソッドまたは super().__init__ 呼び出しで別途行われる場合があります。
:param program_file: str, optional: プログラムのファイル名。指定がない場合は sys.argv[0] が使用されます。
:param program_path: str, optional: プログラムのパス。
:param version: str, optional: プログラムのバージョン。
:param author: str, optional: プログラムの作者。
:param creation_date: str, optional: プログラムの作成日。
:param last_update_date: str, optional: プログラムの最終更新日。
:param kwargs: dict: tkObject または argparse.ArgumentParser の初期化に渡される追加キーワード引数。
:returns: None
"""
if program_file:
self.program_file = program_file
else:
self.program_file = sys.argv[0]
self.program_path = program_path
self.version = version
self.author = author
self.creation_date = creation_date
self.last_update_date = last_update_date
self.update(**kwargs)
[ドキュメント]
def initialize(self, **kwargs):
"""
argparse.ArgumentParser の初期化を行います。
tkArgs クラスのインスタンスが作成された後、追加の argparse.ArgumentParser 固有の
引数で初期化が必要な場合に使用されます。
:param kwargs: dict: argparse.ArgumentParser のコンストラクタに渡されるキーワード引数。
:returns: None
"""
super().__init__(**kwargs)
# def __del__(self):
# print("{} destroyed".format(self.name))
def __str__(self):
"""
オブジェクトの文字列表現を返します。
このメソッドは、オブジェクトが文字列として表現される際に呼び出されます。
現在の実装では、最適化オブジェクトとしてそのメソッド名を出力します。
:returns: str: オブジェクトの文字列表現。
"""
return "optimization object by {}".format(self.method)
[ドキュメント]
def checkkwargs(self, nargs = '?', **kwargs):
"""
add_arg メソッドに渡されるキーワード引数をチェックし、修正します。
特に 'action' が 'version' に設定されている場合は 'nargs' を変更せず、
それ以外の場合は指定されたデフォルトの 'nargs' を設定します。
:param nargs: str, optional: 'nargs' のデフォルト値。デフォルトは `'?'`。
:param kwargs: dict: チェック対象のキーワード引数。
:returns: dict: 修正されたキーワード引数。
"""
try:
if kwargs["action"] == 'version':
pass
except:
kwargs["nargs"] = nargs
return kwargs
[ドキュメント]
def add_arg(self, key1, key2 = None, nargs = '?', **kwargs):
"""
コマンドライン引数を追加します。
argparse.ArgumentParser.add_argument のラッパーであり、引数に 'nargs' を
デフォルトで設定する機能を提供します。
:param key1: str: 引数の名前。例: `"-f"` または `"--file"`。
:param key2: str, optional: 引数の名前(ショートオプションなど)。`None` の場合、`key1` のみが使用されます。
:param nargs: str, optional: 引数の予想される数。デフォルトは `'?'`。
:param kwargs: dict: argparse.ArgumentParser.add_argument に渡される追加キーワード引数。
:returns: None
"""
self.checkkwargs(nargs = nargs, **kwargs)
"""
print(key1, ":")
print(" ", kwargs)
print("")
"""
if key2 is None:
super().add_argument(key1, **kwargs)
else:
super().add_argument(key1, key2, **kwargs)
[ドキュメント]
def add_floatarg(self, key1, key2 = None, nargs = '?', type = float, **kwargs):
"""
float型のコマンドライン引数を追加します。
argparse.ArgumentParser.add_argument を呼び出しますが、
引数の `type` を `float` に設定します。
:param key1: str: 引数の名前。例: `"-v"` または `"--value"`。
:param key2: str, optional: 引数の名前。`None` の場合、`key1` のみが使用されます。
:param nargs: str, optional: 引数の予想される数。デフォルトは `'?'`。
:param type: type, optional: 引数の型。デフォルトは `float`。
:param kwargs: dict: argparse.ArgumentParser.add_argument に渡される追加キーワード引数。
:returns: None
"""
if key2 is None:
super().add_argument(key1, nargs = nargs, type = type, **kwargs)
else:
super().add_argument(key1, key2, nargs = nargs, type = type, **kwargs)
[ドキュメント]
def add_intarg(self, key1, key2 = None, nargs = '?', type = int, **kwargs):
"""
int型のコマンドライン引数を追加します。
argparse.ArgumentParser.add_argument を呼び出しますが、
引数の `type` を `int` に設定します。
:param key1: str: 引数の名前。例: `"-c"` または `"--count"`。
:param key2: str, optional: 引数の名前。`None` の場合、`key1` のみが使用されます。
:param nargs: str, optional: 引数の予想される数。デフォルトは `'?'`。
:param type: type, optional: 引数の型。デフォルトは `int`。
:param kwargs: dict: argparse.ArgumentParser.add_argument に渡される追加キーワード引数。
:returns: None
"""
if key2 is None:
super().add_argument(key1, nargs = nargs, type = type, **kwargs)
else:
super().add_argument(key1, key2, nargs = nargs, type = type, **kwargs)
[ドキュメント]
def print_args(self,print_attributes = 0, print_args = 1):
"""
プログラムの属性と解析されたコマンドライン引数を出力します。
tkObject の print_attributes メソッドと argparse.ArgumentParser.parse_args
の結果を組み合わせて表示します。
:param print_attributes: int, optional: オブジェクトの属性を出力するかどうかを示すフラグ。`1` の場合出力します。デフォルトは `0`。
:param print_args: int, optional: 解析された引数を出力するかどうかを示すフラグ。`1` の場合出力します。デフォルトは `1`。
:returns: None
"""
if print_attributes:
self.print_attributes(1)
if print_args:
print("args: ", self.parse_args())