From f1fb7520400aae3991d9b2c4f8722947c12d6ffc Mon Sep 17 00:00:00 2001 From: Morichan Date: Wed, 27 May 2026 16:56:22 +0900 Subject: [PATCH] =?UTF-8?q?:memo:=20docs:=20docstring=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Google Styleに併せて記述方法を変更する。 - クラスの __init__ に記述しない - クラスのAttributeとプロパティを重複記述しない - プロパティとセッターを重複記述しない - enumは各項目ごとに記述する - ほかコピペミスの修正など --- src/auth/authorizer.py | 9 ++-- src/aws_resources/ec2_instance.py | 41 +++++++------------ src/aws_resources/lambda_function/__init__.py | 11 ++--- src/aws_resources/lambda_function/request.py | 33 +++++---------- src/aws_resources/lambda_function/response.py | 35 ++++++++-------- 5 files changed, 51 insertions(+), 78 deletions(-) diff --git a/src/auth/authorizer.py b/src/auth/authorizer.py index 1777107..408d181 100644 --- a/src/auth/authorizer.py +++ b/src/auth/authorizer.py @@ -13,15 +13,12 @@ class Authorizer: IAMユーザーのアクセスキーを用いたBasic認証により、APIへのアクセス可否を判定する。 環境変数 IS_SKIPPED を true と設定している場合、認証スキップができる(Lambda自体の実行はする)。 + Args: + event (dict): API Gatewayから受取ったイベント。 + """ def __init__(self, event): - """初期化する。 - - Args: - event (dict): API Gatewayから受取ったイベント。 - - """ self._event = event self._is_skipped = os.getenv('IS_SKIPPED') == 'true' diff --git a/src/aws_resources/ec2_instance.py b/src/aws_resources/ec2_instance.py index d96c744..0de9063 100644 --- a/src/aws_resources/ec2_instance.py +++ b/src/aws_resources/ec2_instance.py @@ -17,21 +17,13 @@ class EC2Instance: boto3を使用してEC2インスタンスの状態確認・起動を行う。 - Attributes: - state (State): インスタンスの現在の状態。 + Args: instance_id (str): 対象のEC2インスタンスID。 - dry_run (bool): ドライランモードの場合は真を表す真偽値。 + dry_run (bool, optional): Trueの場合は実際の起動を行わない、デフォルトはFalse。 """ def __init__(self, instance_id, dry_run=False): - """初期化する。 - - Args: - instance_id (str): 対象のEC2インスタンスID。 - dry_run (bool, optional): Trueの場合は実際の起動を行わない、デフォルトはFalse。 - - """ self._state = State.UNDEFINED self._instance_id = instance_id self._dry_run = dry_run @@ -40,7 +32,7 @@ def __init__(self, instance_id, dry_run=False): @property def state(self): - """インスタンスの現在の状態。 + """State: インスタンスの現在の状態。 インスタンスの現在の状態を表す。 本クラスの各種メソッドを呼出すタイミングによって自動的に変化する。 @@ -50,12 +42,12 @@ def state(self): @property def instance_id(self): - """対象のEC2インスタンスID。""" + """str: 対象のEC2インスタンスID。""" return self._instance_id @property def dry_run(self): - """ドライランモードの場合は真を表す真偽値。""" + """bool: ドライランモードの場合は真を表す真偽値。""" return self._dry_run def _describe_instance(self): @@ -112,7 +104,7 @@ def start(self): """EC2インスタンスを起動する。 Returns: - dict: boto3のstart_instancesレスポンス。ドライランの場合はNone。 + dict | None: boto3のstart_instancesレスポンス。ドライランの場合はNone。 Raises: ClientError: インスタンスの起動に失敗した場合。 @@ -144,24 +136,21 @@ def _start_instance(self, instance_id, dry_run): class State(Enum): - """EC2インスタンスの状態を表す列挙子。 - - Attributes: - UNDEFINED: 初期状態。 - DRY_RUN: ドライランモードで実行した状態。 - INSTANCE_ID_IS_NOT_STRING: インスタンスIDが文字列でない状態。 - INSTANCE_ID_IS_NOT_FOUND: インスタンスIDが見つからない状態。 - INSTANCE_IS_NOT_RUNNING: インスタンスが起動中でない状態。 - INSTANCE_IS_RUNNING: インスタンスが起動中の状態。 - INSUFFICIENT_CAPACITY: キャパシティ不足の状態。 - INSTANCE_STARTING_IS_FAILED: インスタンスの起動に失敗した状態。 + """EC2インスタンスの状態を表す列挙子。""" - """ UNDEFINED = auto() + """int: 初期状態。""" DRY_RUN = auto() + """int: ドライランモードで実行した状態。""" INSTANCE_ID_IS_NOT_STRING = auto() + """int: インスタンスIDが文字列でない状態。""" INSTANCE_ID_IS_NOT_FOUND = auto() + """int: インスタンスIDが見つからない状態。""" INSTANCE_IS_NOT_RUNNING = auto() + """int: インスタンスが起動中でない状態。""" INSTANCE_IS_RUNNING = auto() + """int: インスタンスが起動中の状態。""" INSUFFICIENT_CAPACITY = auto() + """int: キャパシティ不足の状態。""" INSTANCE_STARTING_IS_FAILED = auto() + """int: インスタンスの起動に失敗した状態。""" diff --git a/src/aws_resources/lambda_function/__init__.py b/src/aws_resources/lambda_function/__init__.py index 1cbac34..fcc5c6a 100644 --- a/src/aws_resources/lambda_function/__init__.py +++ b/src/aws_resources/lambda_function/__init__.py @@ -18,16 +18,13 @@ class LambdaFunction: API Gatewayから受取ったイベントを解析し、実行結果をレスポンスとして返す。 + Args: + event (dict): API Gatewayから受取ったイベント。 + context (dict): Lambda実行コンテキスト。 + """ def __init__(self, event, context): - """初期化する。 - - Args: - event (dict): API Gatewayから受取ったイベント。 - context (dict): Lambda実行コンテキスト。 - - """ self._event = event self._context = context diff --git a/src/aws_resources/lambda_function/request.py b/src/aws_resources/lambda_function/request.py index f14abe2..6e34b08 100644 --- a/src/aws_resources/lambda_function/request.py +++ b/src/aws_resources/lambda_function/request.py @@ -12,20 +12,12 @@ class Request: API Gatewayから受取ったイベントを解析し、インスタンスIDやドライランフラグを取出す。 - Attributes: - state (State): リクエストの現在の状態。 - instance_id (str): EC2インスタンスID。 - dry_run (bool): ドライランモードの場合は真を表す真偽値。 + Args: + event (dict): API Gatewayから受取ったイベント。 """ def __init__(self, event): - """Requestを初期化する。 - - Args: - event (dict): API Gatewayから受取ったイベント。 - - """ self._state = State.UNDEFINED self._instance_id = None self._dry_run = False @@ -33,7 +25,7 @@ def __init__(self, event): @property def state(self): - """リクエストの現在の状態。 + """State: リクエストの現在の状態。 リクエストの現在の状態を表す。 本クラスの各種メソッドを呼出すタイミングによって自動的に変化する。 @@ -43,12 +35,12 @@ def state(self): @property def instance_id(self): - """EC2インスタンスID。""" + """str: EC2インスタンスID。""" return self._instance_id @property def dry_run(self): - """ドライランモードの場合は真を表す真偽値。""" + """bool: ドライランモードの場合は真を表す真偽値。""" return self._dry_run def extract(self, event): @@ -89,18 +81,15 @@ def _extract_body(self, event): class State(Enum): - """リクエストの状態を表す列挙子。 - - Attributes: - UNDEFINED: 初期状態。 - BODY_IS_EMPTY: ボディが空の状態。 - BODY_IS_NOT_JSON: ボディがJSON形式でない状態。 - BODY_HAS_NOT_INSTANCE_ID: ボディにinstance_idが含まれない状態。 - BODY_IS_VALID: ボディが正常に解析できた状態。 + """リクエストの状態を表す列挙子。""" - """ UNDEFINED = auto() + """int: 初期状態。""" BODY_IS_EMPTY = auto() + """int: ボディが空の状態。""" BODY_IS_NOT_JSON = auto() + """int: ボディがJSON形式でない状態。""" BODY_HAS_NOT_INSTANCE_ID = auto() + """int: ボディにinstance_idが含まれない状態。""" BODY_IS_VALID = auto() + """int: ボディが正常に解析できた状態。""" diff --git a/src/aws_resources/lambda_function/response.py b/src/aws_resources/lambda_function/response.py index 037152f..ab41b71 100644 --- a/src/aws_resources/lambda_function/response.py +++ b/src/aws_resources/lambda_function/response.py @@ -6,41 +6,30 @@ class Response: 設定された状態に基づき、HTTPステータスコードとボディを含むレスポンスを生成する。 - Attributes: - status_code (int): HTTPステータスコード。 - body (str): ドライランモードの場合は真を表す真偽値。 - state (State): レスポンスの現在の状態。 - """ def __init__(self): - """初期化する。 - - stateの初期値はNoneState。 - - """ self.state = NoneState() @property def status_code(self): - """HTTPステータスコード。""" + """int: HTTPステータスコード。""" return self.state.status_code @property def body(self): - """JSONシリアライズしたレスポンスボディ。""" + """str: JSONシリアライズしたレスポンスボディ。""" return json.dumps({ "message": self.state.body_message, }) @property def state(self): - """レスポンスの現在の状態。""" + """State: レスポンスの現在の状態。初期値はNoneState。""" return self._state @state.setter def state(self, state): - """レスポンスの状態を設定する。""" self._state = state def create_response(self): @@ -48,6 +37,10 @@ def create_response(self): Returns: dict: HTTPステータスコードとボディを含むレスポンス。 + { + "statusCode": int, + "body": str + } """ return { @@ -60,10 +53,10 @@ class State: """レスポンスの状態を表す基底クラス。 具象クラスは status_code と body_message を必ずオーバーライドする必要がある。 + オブジェクト生成時に上記がオーバーライドされているか確認する。 - Attributes: - status_code: HTTPステータスコード。 - body_message: レスポンスボディに設定する文字列。 + Raises: + NotImplementedError: 実装必須プロパティが実装されていない場合。 """ @@ -72,13 +65,21 @@ def __init__(self): @property def status_code(self): + """int: HTTPステータスコード。""" raise NotImplementedError @property def body_message(self): + """str: レスポンスボディに設定する文字列。""" raise NotImplementedError def check(self): + """実装必須メソッドが正常に実装されているかチェックする。 + + Raises: + NotImplementedError: 実装必須プロパティが実装されていない場合。 + + """ self._check_must_overriding_methods() def _check_must_overriding_methods(self):