From 2f0bbf53b7175f117d539ba1446e10ff1ed36ffd Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 12 Jul 2022 15:55:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20JSON=E3=81=AE=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=82=92=E5=8F=96=E3=82=8A=E9=99=A4=E3=81=8F?= =?UTF-8?q?=E3=83=91=E3=83=BC=E3=82=B5=E3=83=BC=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check-view-option/constants.py | 4 ++++ .../check-view-option/exceptions.py | 5 +++++ .../check-view-option/json_perser.py | 17 +++++++++++++++++ .../check-view-option/main.py | 17 ++++++++++++----- 4 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 lambda/check-view-security-option/check-view-option/json_perser.py diff --git a/lambda/check-view-security-option/check-view-option/constants.py b/lambda/check-view-security-option/check-view-option/constants.py index ac6b2bfa..1b8affc6 100644 --- a/lambda/check-view-security-option/check-view-option/constants.py +++ b/lambda/check-view-security-option/check-view-option/constants.py @@ -41,3 +41,7 @@ LAUNCH_ON_LOCAL = 'local' CHECK_TARGET_SCHEMAS = 'check_target_schemas' # メール本文に出力する不足ファイル名一覧のインデント MAIL_INDENT = '\n  ' +# JSONファイル上のコメント業を表すシンボル +JSON_COMMENT_SYMBOL = '#' +# JSON内のコメントを置き換える正規表現 +REPLACE_COMMENT_REGEX = rf'\s(?!\"){JSON_COMMENT_SYMBOL}[\s\S]*?.*' diff --git a/lambda/check-view-security-option/check-view-option/exceptions.py b/lambda/check-view-security-option/check-view-option/exceptions.py index aebd28c3..32ed09cc 100644 --- a/lambda/check-view-security-option/check-view-option/exceptions.py +++ b/lambda/check-view-security-option/check-view-option/exceptions.py @@ -32,3 +32,8 @@ class QueryExecutionException(MeDaCaException): class SNSPublishException(MeDaCaException): """AmazonSNSへの通知に失敗した場合の例外""" pass + + +class JSONParseException(MeDaCaException): + """JSONのパースに失敗した場合の例外""" + pass diff --git a/lambda/check-view-security-option/check-view-option/json_perser.py b/lambda/check-view-security-option/check-view-option/json_perser.py new file mode 100644 index 00000000..d691b18c --- /dev/null +++ b/lambda/check-view-security-option/check-view-option/json_perser.py @@ -0,0 +1,17 @@ +import json +import re + +from constants import REPLACE_COMMENT_REGEX + + +class JSONParser: + + __json_str: str = None + + def __init__(self, json_str: str) -> None: + self.__json_str = json_str + + def parse(self): + # コメントを除去して辞書に変換する + without_comment = re.sub(REPLACE_COMMENT_REGEX, '', self.__json_str) + return json.loads(without_comment) diff --git a/lambda/check-view-security-option/check-view-option/main.py b/lambda/check-view-security-option/check-view-option/main.py index c40d8c51..252fc262 100644 --- a/lambda/check-view-security-option/check-view-option/main.py +++ b/lambda/check-view-security-option/check-view-option/main.py @@ -2,8 +2,6 @@ Viewセキュリティオプション付与チェック用Lambda関数のエントリーポイント """ -import json - import botocore from aws.s3 import ConfigBucket @@ -20,8 +18,10 @@ from environments import (CONFIG_BUCKET_NAME, MBJ_NOTICE_TOPIC, NDS_NOTICE_TOPIC, NOTICE_MAIL_BODY_TEMPLATE_PATH, NOTICE_MAIL_TITLE_TEMPLATE_PATH) from exceptions import (DatabaseConnectionException, FileNotFoundException, - MeDaCaException, ParameterNotFoundException, - QueryExecutionException, SNSPublishException) + JSONParseException, MeDaCaException, + ParameterNotFoundException, QueryExecutionException, + SNSPublishException) +from json_perser import JSONParser from medaca_logger import MeDaCaLogger logger = MeDaCaLogger.get_logger() @@ -87,6 +87,7 @@ def read_check_target_schemas() -> list: Raises: FileNotFoundException: ファイルが読み込めなかったエラー + JSONParseException: JSONを辞書オブジェクトに変換できなかったエラー Exception: 想定外のエラー Returns: @@ -95,12 +96,18 @@ def read_check_target_schemas() -> list: try: config_bucket = ConfigBucket() check_target_schema_names = config_bucket.check_target_schema_names - return json.loads(check_target_schema_names)[CHECK_TARGET_SCHEMAS] except botocore.exceptions.ClientError as e: if e.response[RESPONSE_ERROR][RESPONSE_ERROR_CODE] == RESPONSE_CODE_NO_SUCH_KEY: raise FileNotFoundException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{e}') else: raise Exception(e) + try: + json_parser = JSONParser(check_target_schema_names) + check_target_schemas = json_parser.parse()[CHECK_TARGET_SCHEMAS] + except Exception as e: + raise JSONParseException('E-02-01', f'チェック対象スキーマ名ファイルの読み込みに失敗しました エラー内容:{e}') + + return check_target_schemas def read_db_param_from_parameter_store() -> tuple: