p4で最後に同期された変更リストを取得するためのpythonメソッドがあるとしましょう。(質問自体はp4とは関係なく、基本的なpythonの質問のみです)
def get_last_synced_changelist(p4port, client_name, p4 = None):
with P4Connection(p4port) as p4:
last_change_list = p4.run_changes("-m1", "@%s" % client_name)
if last_change_list:
return last_change_list[0]["change"]
else:
return None
このメソッドの呼び出し元は、文字列である p4port を提供するか、p4 オブジェクト自体を提供することができます。私の要件は、「p4」オブジェクトが提供されている場合、withコンテキストなしでメソッド本体を実行したいということです。つまり、 p4 で呼び出されたenterまたはexitメソッドは必要ありません。これは、p4 オブジェクトを閉じる/入力する責任が呼び出し元にあるためです。p4 オブジェクトが指定されていない場合は、p4port 文字列を使用してこのプログラムで with 構文を構築する必要があります。
このメソッドを構築する最良の方法を誰か教えてもらえますか? 身体の変化はなるべく少なくしたい。基本的に次のようなもの
p4 or with P4Connection(p4port) as p4:
p4.run_changes(...)
しかし、最適な構文が何であるかはわかりません。