From 266e7cd28b49320e101e9d5150cf49009a1bedba Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 11:30:58 +0900 Subject: [PATCH 01/20] =?UTF-8?q?fix:=20=E5=90=8C=E6=99=82=E6=8E=A5?= =?UTF-8?q?=E7=B6=9A=E3=81=A7=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=82=8B=E5=95=8F=E9=A1=8C=E3=81=AE=E8=A7=A3=E6=B6=88=E7=AD=96?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=E3=80=81DB=E3=82=BB=E3=83=83?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E5=8F=96=E3=82=8A=E5=9B=9E?= =?UTF-8?q?=E3=81=97=E6=96=B9=E6=B3=95=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F=EF=BC=88=E3=81=BE=E3=81=9A=E3=81=AF=E5=85=B1=E9=80=9A?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=81=AE=E6=9C=AA=E4=BF=AE=E6=AD=A3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/core/__init__.py | 0 ecs/jskult-webapp/src/core/task.py | 12 ++ ecs/jskult-webapp/src/db/database.py | 106 ++++++++++-------- ecs/jskult-webapp/src/db/tasks.py | 7 ++ ecs/jskult-webapp/src/depends/database.py | 20 ++-- ecs/jskult-webapp/src/depends/services.py | 4 +- ecs/jskult-webapp/src/logging/get_logger.py | 2 +- ecs/jskult-webapp/src/main.py | 24 +++- .../src/repositories/base_repository.py | 8 +- .../src/router/session_router.py | 30 +++-- 10 files changed, 132 insertions(+), 81 deletions(-) create mode 100644 ecs/jskult-webapp/src/core/__init__.py create mode 100644 ecs/jskult-webapp/src/core/task.py create mode 100644 ecs/jskult-webapp/src/db/tasks.py diff --git a/ecs/jskult-webapp/src/core/__init__.py b/ecs/jskult-webapp/src/core/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ecs/jskult-webapp/src/core/task.py b/ecs/jskult-webapp/src/core/task.py new file mode 100644 index 00000000..437f3239 --- /dev/null +++ b/ecs/jskult-webapp/src/core/task.py @@ -0,0 +1,12 @@ +"""FastAPIサーバーの起動イベントのラッパー""" + +from typing import Callable + +from src.db.tasks import init_db + + +def create_start_app_handler() -> Callable: + def start_app() -> None: + init_db() + + return start_app diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index b4a54fb8..93818e9c 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -1,6 +1,7 @@ -from sqlalchemy import (Connection, CursorResult, Engine, NullPool, - create_engine, event, exc, text) +from sqlalchemy import (CursorResult, Engine, NullPool, create_engine, event, + exc, text) from sqlalchemy.engine.url import URL +from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import Pool from src.error.exceptions import DBException @@ -24,9 +25,8 @@ def ping_connection(dbapi_connection, connection_record, connection_proxy): cursor.close() -class Database: - """データベース操作クラス""" - __connection: Connection = None +class DatabaseSession: + """データベースセッション管理クラス""" __engine: Engine = None __host: str = None __port: str = None @@ -34,6 +34,7 @@ class Database: __password: str = None __schema: str = None __connection_string: str = None + __instance = None def __init__(self, username: str, password: str, host: str, port: int, schema: str) -> None: """このクラスの新たなインスタンスを初期化します @@ -73,32 +74,49 @@ class Database: Returns: Database: DB操作クラスインスタンス """ - return cls( - username=environment.DB_USERNAME, - password=environment.DB_PASSWORD, - host=environment.DB_HOST, - port=environment.DB_PORT, - schema=environment.DB_SCHEMA - ) + if cls.__instance is None: + cls.__instance = cls( + username=environment.DB_USERNAME, + password=environment.DB_PASSWORD, + host=environment.DB_HOST, + port=environment.DB_PORT, + schema=environment.DB_SCHEMA + ) - @property - def connection(self): + return cls.__instance + + def create_session(self): """ DBの接続を返します。 """ - return self.__connection - - def connect(self): - """ - DBに接続します。接続に失敗した場合、リトライします。 - Raises: - DBException: 接続失敗 - """ try: - self.__connection = self.__engine.connect() + return sessionmaker(autoflush=False, bind=self.__engine)() except Exception as e: raise DBException(e) + +class DatabaseClient: + + __session: Session = None + + def __init__(self, session: Session) -> None: + self.__session = session + + @property + def session(self) -> Session: + """ + DBのセッションを返します。 + """ + if self.__session is None: + raise DBException('DBに接続していません') + return self.__session + + def connect(self): + ... + + def disconnect(self): + ... + def execute_select(self, select_query: str, parameters=None) -> list[dict]: """SELECTクエリを実行します。 @@ -112,14 +130,11 @@ class Database: Returns: list[dict]: カラム名: 値の辞書リスト """ - if self.__connection is None: - raise DBException('DBに接続していません') - result = None try: # トランザクションが開始している場合は、トランザクションを引き継ぐ - if self.__connection.in_transaction(): - result = self.__connection.execute(text(select_query), parameters) + if self.session.in_transaction(): + result = self.session.execute(text(select_query), parameters) else: # トランザクションが明示的に開始していない場合は、クエリ単位でトランザクションをbegin-commitする。 result = self.__execute_with_transaction(select_query, parameters) @@ -142,14 +157,11 @@ class Database: Returns: CursorResult: 取得結果 """ - if self.__connection is None: - raise DBException('DBに接続していません') - result = None try: # トランザクションが開始している場合は、トランザクションを引き継ぐ - if self.__connection.in_transaction(): - result = self.__connection.execute(text(query), parameters) + if self.session.in_transaction(): + result = self.session.execute(text(query), parameters) else: # トランザクションが明示的に開始していない場合は、クエリ単位でトランザクションをbegin-commitする。 result = self.__execute_with_transaction(query, parameters) @@ -160,35 +172,35 @@ class Database: def begin(self): """トランザクションを開始します。""" - if not self.__connection.in_transaction(): - self.__connection.begin() + if not self.session.in_transaction(): + self.session.begin() def commit(self): """トランザクションをコミットします""" - if self.__connection.in_transaction(): - self.__connection.commit() + if self.session.in_transaction(): + self.session.commit() def rollback(self): """トランザクションをロールバックします""" - if self.__connection.in_transaction(): - self.__connection.rollback() + if self.session.in_transaction(): + self.session.rollback() - def disconnect(self): - """DB接続を切断します。""" - if self.__connection is not None: - self.__connection.close() - self.__connection = None + # def disconnect(self): + # """DB接続を切断します。""" + # if self.__session is not None: + # self.__session.close() + # self.session = None def to_jst(self): self.execute('SET time_zone = "+9:00"') def __execute_with_transaction(self, query: str, parameters: dict): # トランザクションを開始してクエリを実行する - with self.__connection.begin(): + with self.session.begin(): try: - result = self.__connection.execute(text(query), parameters=parameters) + result = self.session.execute(text(query), parameters) except Exception as e: - self.__connection.rollback() + self.session.rollback() raise e # ここでコミットされる return result diff --git a/ecs/jskult-webapp/src/db/tasks.py b/ecs/jskult-webapp/src/db/tasks.py new file mode 100644 index 00000000..10189beb --- /dev/null +++ b/ecs/jskult-webapp/src/db/tasks.py @@ -0,0 +1,7 @@ +from src.db.database import DatabaseSession + + +def init_db() -> None: + # DB接続モジュールを初期化 + # 以降、get_instance()で唯一のインスタンスを取得する + DatabaseSession.get_instance() diff --git a/ecs/jskult-webapp/src/depends/database.py b/ecs/jskult-webapp/src/depends/database.py index 2dea5dab..1a26214c 100644 --- a/ecs/jskult-webapp/src/depends/database.py +++ b/ecs/jskult-webapp/src/depends/database.py @@ -1,13 +1,15 @@ from starlette.requests import Request -from src.db.database import Database +from src.db.database import DatabaseClient, DatabaseSession -def get_database(request: Request) -> Database: - # medaca_routerでDB接続エンジンが初期化される - db = getattr(request.app.state, '_db', None) - # uvicornのワーカーが起動したタイミングでは、dbがセットされていないので、ここでセットここでセットする - if db is None: - db = Database.get_instance() - setattr(request.app.state, '_db', db) - return db +def get_database(request: Request) -> DatabaseClient: + try: + database_session = DatabaseSession.get_instance() + session = database_session.create_session() + database = DatabaseClient(session) + yield database + finally: + database.disconnect() + # FIXME; リポジトリを直し終えたら消す + session.close() diff --git a/ecs/jskult-webapp/src/depends/services.py b/ecs/jskult-webapp/src/depends/services.py index 40bf31cf..ff071965 100644 --- a/ecs/jskult-webapp/src/depends/services.py +++ b/ecs/jskult-webapp/src/depends/services.py @@ -2,13 +2,13 @@ from typing import Callable, Type from fastapi import Depends -from src.db.database import Database +from src.db.database import DatabaseClient from src.depends.database import get_database from src.services.base_service import BaseService def get_service(Service_type: Type[BaseService]) -> Callable: - def get_service(db: Database = Depends(get_database)) -> Type[BaseService]: + def get_service(db: DatabaseClient = Depends(get_database)) -> Type[BaseService]: repositories = {key: repository(db) for key, repository in Service_type.REPOSITORIES.items()} clients = {key: client() for key, client in Service_type.CLIENTS.items()} return Service_type(repositories=repositories, clients=clients) diff --git a/ecs/jskult-webapp/src/logging/get_logger.py b/ecs/jskult-webapp/src/logging/get_logger.py index f36f1199..8c15d6e7 100644 --- a/ecs/jskult-webapp/src/logging/get_logger.py +++ b/ecs/jskult-webapp/src/logging/get_logger.py @@ -27,7 +27,7 @@ def get_logger(log_name: str) -> logging.Logger: logger.addHandler(handler) formatter = logging.Formatter( - '%(name)s\t[%(levelname)s]\t%(asctime)s\t%(message)s', + '%(name)s[%(process)d][%(thread)d]\t[%(levelname)s]\t%(asctime)s\t%(message)s', '%Y-%m-%d %H:%M:%S' ) diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 6ed9e6da..495c4cc7 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -1,14 +1,18 @@ import os.path as path -from fastapi import FastAPI +from fastapi import Depends, FastAPI from fastapi.staticfiles import StaticFiles from starlette import status import src.static as static from src.controller import (bio, bio_download, healthcheck, login, logout, master_mainte, menu, root, ultmarc) +from src.core import task +from src.depends.services import get_service from src.error.exception_handler import http_exception_handler from src.error.exceptions import UnexpectedException +from src.logging.get_logger import get_logger +from src.services.batch_status_service import BatchStatusService app = FastAPI() @@ -40,3 +44,21 @@ app.add_exception_handler(status.HTTP_403_FORBIDDEN, http_exception_handler) # サーバーエラーが発生した場合のハンドラー。HTTPExceptionではハンドリングできないため、個別に設定 app.add_exception_handler(UnexpectedException, http_exception_handler) + +# サーバー起動時のイベント +app.add_event_handler('startup', task.create_start_app_handler) + + +# logger = get_logger(__name__) + + +# @app.get('/sample/') +# def sample(service: BatchStatusService = Depends(get_service(BatchStatusService))): +# # import os +# # import threading +# logger.info('START') +# res = service.hdke_table_record +# logger.info(res) +# logger.info('END') +# return res +# # return f'{os.getpid()}, {threading.get_ident()}' diff --git a/ecs/jskult-webapp/src/repositories/base_repository.py b/ecs/jskult-webapp/src/repositories/base_repository.py index 6d5e793a..d6a97c38 100644 --- a/ecs/jskult-webapp/src/repositories/base_repository.py +++ b/ecs/jskult-webapp/src/repositories/base_repository.py @@ -3,15 +3,15 @@ from abc import ABCMeta import pandas as pd from sqlalchemy import text -from src.db.database import Database +from src.db.database import DatabaseClient from src.model.db.base_db_model import BaseDBModel class BaseRepository(metaclass=ABCMeta): - _database: Database + _database: DatabaseClient - def __init__(self, db: Database) -> None: + def __init__(self, db: DatabaseClient) -> None: self._database = db def fetch_all(self) -> list[BaseDBModel]: @@ -36,7 +36,7 @@ class BaseRepository(metaclass=ABCMeta): sql_query = pd.read_sql( text(query), - con=self._database.connection, + con=self._database.session.connection(), params=params) df = pd.DataFrame( diff --git a/ecs/jskult-webapp/src/router/session_router.py b/ecs/jskult-webapp/src/router/session_router.py index ccb5bc96..e8cb23f9 100644 --- a/ecs/jskult-webapp/src/router/session_router.py +++ b/ecs/jskult-webapp/src/router/session_router.py @@ -5,7 +5,7 @@ from fastapi.exceptions import HTTPException from fastapi.routing import APIRoute from starlette import status -from src.db.database import Database +# from src.db.database import Database from src.depends.auth import (check_session_expired, get_current_session, verify_session) from src.error.exceptions import DBException, UnexpectedException @@ -78,16 +78,16 @@ class MeDaCaRoute(APIRoute): return response -class PrepareDatabaseRoute(MeDaCaRoute): - """事前処理として、データベースのエンジンを作成するルートハンドラー - Args: - MeDaCaRoute (MeDaCaRoute): 共通ルートハンドラー - """ - async def pre_process_route(self, request: Request): - request = await super().pre_process_route(request) - # DBエンジンを構築して状態にセット - request.app.state._db = Database.get_instance() - return request +# class PrepareDatabaseRoute(MeDaCaRoute): +# """事前処理として、データベースのエンジンを作成するルートハンドラー +# Args: +# MeDaCaRoute (MeDaCaRoute): 共通ルートハンドラー +# """ +# async def pre_process_route(self, request: Request): +# request = await super().pre_process_route(request) +# # DBエンジンを構築して状態にセット +# request.app.state._db = Database.get_instance() +# return request class BeforeCheckSessionRoute(MeDaCaRoute): @@ -112,12 +112,8 @@ class BeforeCheckSessionRoute(MeDaCaRoute): return session_request -class AfterSetCookieSessionRoute(PrepareDatabaseRoute): - """事後処理として、セッションキーをcookieに設定するカスタムルートハンドラー - - Args: - PrepareDatabaseRoute (PrepareDatabaseRoute): DBエンジンセットアップルートハンドラー - """ +class AfterSetCookieSessionRoute(MeDaCaRoute): # (PrepareDatabaseRoute): + """事後処理として、セッションキーをcookieに設定するカスタムルートハンドラー""" async def post_process_route(self, request: Request, response: Response): response = await super().post_process_route(request, response) session_key = response.headers.get('session_key', None) From 4a6020c136dea3fe6a14606745a2077d16856d69 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 11:46:00 +0900 Subject: [PATCH 02/20] =?UTF-8?q?feat:=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E3=81=A7Uvicorn=E3=82=92=E8=B5=B7=E5=8B=95=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/Pipfile | 1 + 1 file changed, 1 insertion(+) diff --git a/ecs/jskult-webapp/Pipfile b/ecs/jskult-webapp/Pipfile index 33f3c234..7e38abb1 100644 --- a/ecs/jskult-webapp/Pipfile +++ b/ecs/jskult-webapp/Pipfile @@ -5,6 +5,7 @@ name = "pypi" [scripts] app = "uvicorn src.main:app --reload --no-server-header" +"app:local" = "gunicorn src.main:app -w 2 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8000 --timeout 300" [packages] fastapi = "==0.*" From 485648879f167986cf898ced3d86853ee7ba05be Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 12:58:08 +0900 Subject: [PATCH 03/20] =?UTF-8?q?feat:=20repository=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=B9=E3=81=A7connect-disconnect=E3=82=92=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/repositories/ultmarc_doctor_repository.py | 6 ------ .../src/repositories/ultmarc_dr_wrkplace_his_repository.py | 3 --- .../src/repositories/ultmarc_dr_wrkplace_repository.py | 6 ------ .../src/repositories/ultmarc_inst_repository.py | 6 ------ .../src/repositories/ultmarc_inst_trt_course_repository.py | 3 --- .../src/repositories/ultmarc_sosiety_repository.py | 3 --- .../repositories/ultmarc_specialist_license_repository.py | 3 --- .../src/repositories/ultmarc_trt_course_repository.py | 3 --- .../src/repositories/user_master_repository.py | 3 --- .../src/repositories/wholesaler_master_repository.py | 3 --- 10 files changed, 39 deletions(-) diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py index a60a3583..ceca822d 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_doctor_repository.py @@ -53,7 +53,6 @@ class UltmarcDoctorRepository(BaseRepository): def fetch_many(self, parameter: UltmarcDoctorSearchModel) -> list[UltmarcDoctorDBModel]: try: - self._database.connect() # 文字列の検索を部分一致にするため、モデルをコピー。以降はこのコピーを使用する。 clone_parameter = UltmarcDoctorSearchModel(**parameter.model_dump()) where_clause = self.__build_condition(clone_parameter) @@ -66,8 +65,6 @@ class UltmarcDoctorRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() def __build_condition(self, parameter: UltmarcDoctorSearchModel): where_clauses: list[SQLCondition] = [] @@ -187,7 +184,6 @@ class UltmarcDoctorRepository(BaseRepository): def fetch_one(self, id) -> UltmarcDoctorInfoDBModel: try: - self._database.connect() query = self.FETCH_ONE_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcDoctorInfoDBModel(**r) for r in result] @@ -197,5 +193,3 @@ class UltmarcDoctorRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py index cd2464cd..708c30a9 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_his_repository.py @@ -31,7 +31,6 @@ class UltmarcDoctorWrkplaceHisRepository(BaseRepository): def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceHisDBModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcDoctorWrkplaceHisDBModel(**r) for r in result] @@ -41,5 +40,3 @@ class UltmarcDoctorWrkplaceHisRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py index 0e98f64b..fc42685a 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_dr_wrkplace_repository.py @@ -30,7 +30,6 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): def fetch_many(self, id) -> list[UltmarcDoctorWrkplaceDBModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcDoctorWrkplaceDBModel(**r) for r in result] @@ -40,8 +39,6 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() FETCH_COUNT_SQL = """\ SELECT COUNT(*) AS count @@ -51,7 +48,6 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): def fetch_count(self, id) -> UltmarcDoctorWrkplaceCountDBModel: try: - self._database.connect() query = self.FETCH_COUNT_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcDoctorWrkplaceCountDBModel(**r) for r in result] @@ -61,5 +57,3 @@ class UltmarcDoctorWrkplaceRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py index 3b485402..6a86c9df 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_repository.py @@ -39,7 +39,6 @@ class UltmarcInstRepository(BaseRepository): def fetch_many(self, parameter: UltmarcInstSearchModel) -> list[UltmarcInstDBModel]: try: - self._database.connect() # 文字列の検索を部分一致にするため、モデルをコピー。以降はこのコピーを使用する。 clone_parameter = UltmarcInstSearchModel(**parameter.model_dump()) where_clause = self.__build_condition(clone_parameter) @@ -52,8 +51,6 @@ class UltmarcInstRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() def __build_condition(self, parameter: UltmarcInstSearchModel): where_clauses: list[SQLCondition] = [] @@ -188,7 +185,6 @@ class UltmarcInstRepository(BaseRepository): def fetch_one(self, id) -> UltmarcInstInfoDBModel: try: - self._database.connect() query = self.FETCH_ONE_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcInstInfoDBModel(**r) for r in result] @@ -198,5 +194,3 @@ class UltmarcInstRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py index 0c6c2827..9fb36a8a 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_inst_trt_course_repository.py @@ -18,7 +18,6 @@ class UltmarcInstTrtCourseRepository(BaseRepository): def fetch_many(self, id) -> list[UltmarcInstTrtCourseDBModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) @@ -29,5 +28,3 @@ class UltmarcInstTrtCourseRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py index 0cd55e8c..97418a9a 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_sosiety_repository.py @@ -18,7 +18,6 @@ class UltmarcSosietyRepository(BaseRepository): def fetch_many(self, id) -> list[UltmarcSosietyDBModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcSosietyDBModel(**r) for r in result] @@ -28,5 +27,3 @@ class UltmarcSosietyRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py index 7024b616..1e331142 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_specialist_license_repository.py @@ -20,7 +20,6 @@ class UltmarcSpecialistLicenseRepository(BaseRepository): def fetch_many(self, id) -> UltmarcSpecialistLicenseDBModel: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) models = [UltmarcSpecialistLicenseDBModel(**r) for r in result] @@ -30,5 +29,3 @@ class UltmarcSpecialistLicenseRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py index 5709a361..16eaa8fe 100644 --- a/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py +++ b/ecs/jskult-webapp/src/repositories/ultmarc_trt_course_repository.py @@ -18,7 +18,6 @@ class UltmarcDrTrtCourseRepository(BaseRepository): def fetch_many(self, id) -> list[UltmarcDrTrtCourseDBModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, {'id': id}) @@ -29,5 +28,3 @@ class UltmarcDrTrtCourseRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/user_master_repository.py b/ecs/jskult-webapp/src/repositories/user_master_repository.py index d109c57e..7edde00a 100644 --- a/ecs/jskult-webapp/src/repositories/user_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/user_master_repository.py @@ -17,7 +17,6 @@ class UserMasterRepository(BaseRepository): def fetch_one(self, parameter: dict) -> UserMasterModel: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query, parameter) models = [UserMasterModel(**r) for r in result] @@ -27,5 +26,3 @@ class UserMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/wholesaler_master_repository.py b/ecs/jskult-webapp/src/repositories/wholesaler_master_repository.py index e9229d8e..0ed59753 100644 --- a/ecs/jskult-webapp/src/repositories/wholesaler_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/wholesaler_master_repository.py @@ -31,7 +31,6 @@ class WholesalerMasterRepository(BaseRepository): def fetch_all(self) -> list[WholesalerMasterModel]: try: - self._database.connect() result = self._database.execute_select(self.FETCH_SQL) result_data = [res for res in result] models = [WholesalerMasterModel(**r) for r in result_data] @@ -39,5 +38,3 @@ class WholesalerMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e}") raise e - finally: - self._database.disconnect() From 36a6a441003d72940abd2442601d074a4f458d4e Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:09:47 +0900 Subject: [PATCH 04/20] =?UTF-8?q?style:=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E4=BF=AE=E6=AD=A3=E3=81=AA=E3=81=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/db/database.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index 93818e9c..e1571d03 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -72,7 +72,7 @@ class DatabaseSession: """インスタンスを取得します Returns: - Database: DB操作クラスインスタンス + DatabaseSession: DB操作クラスインスタンス """ if cls.__instance is None: cls.__instance = cls( @@ -85,9 +85,12 @@ class DatabaseSession: return cls.__instance - def create_session(self): + def create_session(self) -> Session: """ DBの接続を返します。 + + Returns: + Session: sqlalchemy.orm.Session """ try: return sessionmaker(autoflush=False, bind=self.__engine)() @@ -112,9 +115,11 @@ class DatabaseClient: return self.__session def connect(self): + # FIXME: 未使用。後ほど削除 ... def disconnect(self): + # FIXME: エラーにしないための仮実装。後で消す ... def execute_select(self, select_query: str, parameters=None) -> list[dict]: @@ -187,9 +192,9 @@ class DatabaseClient: # def disconnect(self): # """DB接続を切断します。""" - # if self.__session is not None: - # self.__session.close() - # self.session = None + # if self.session is not None: + # self.session.close() + # self.__session = None def to_jst(self): self.execute('SET time_zone = "+9:00"') From cef42f64b8d07091acfb1644caea5b525bb65ac3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:14:05 +0900 Subject: [PATCH 05/20] =?UTF-8?q?refactor:=20=E3=83=AD=E3=82=B0=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=82=92=E5=89=8A=E6=B8=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/depends/auth.py | 2 -- ecs/jskult-webapp/src/model/internal/jwt_token.py | 4 ---- 2 files changed, 6 deletions(-) diff --git a/ecs/jskult-webapp/src/depends/auth.py b/ecs/jskult-webapp/src/depends/auth.py index f2383d4e..7c51d9f8 100644 --- a/ecs/jskult-webapp/src/depends/auth.py +++ b/ecs/jskult-webapp/src/depends/auth.py @@ -34,8 +34,6 @@ def check_session_expired(session: Union[UserSession, None] = Depends(get_curren last_access_time = session.last_access_time last_access_datetime = datetime.datetime.fromtimestamp(last_access_time) session_expired_period = last_access_datetime + datetime.timedelta(minutes=environment.SESSION_EXPIRE_MINUTE) - logger.debug(f'last_access_time: {last_access_datetime}') - logger.debug(f'session_expired_period: {session_expired_period}') if session_expired_period < datetime.datetime.now(): return None diff --git a/ecs/jskult-webapp/src/model/internal/jwt_token.py b/ecs/jskult-webapp/src/model/internal/jwt_token.py index 69865846..30a7540f 100644 --- a/ecs/jskult-webapp/src/model/internal/jwt_token.py +++ b/ecs/jskult-webapp/src/model/internal/jwt_token.py @@ -140,10 +140,6 @@ class JWTToken: # Cognitoのサーバー時間とのズレにより、Issued atクレームの検証に失敗するパターンに対処する options={'verify_iat': False} ) - # トークン有効期限をログに出力 - exp = verified_jwt.get('exp') - expire_datetime = datetime.datetime.fromtimestamp(exp) if exp else None - logger.info(f"トークン有効期限:{expire_datetime}") # 有効期限(exp)が切れた場合、トークンをリフレッシュする except jwt.ExpiredSignatureError: logger.info('IDトークンの有効期限が切れたため、トークンをリフレッシュ') From 9644be45866eace74bdd69d9d1fc6c64cb638166 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:14:43 +0900 Subject: [PATCH 06/20] =?UTF-8?q?refactor:=20=E6=9C=AA=E4=BD=BF=E7=94=A8im?= =?UTF-8?q?port=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/model/internal/jwt_token.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ecs/jskult-webapp/src/model/internal/jwt_token.py b/ecs/jskult-webapp/src/model/internal/jwt_token.py index 30a7540f..1f5a6cf7 100644 --- a/ecs/jskult-webapp/src/model/internal/jwt_token.py +++ b/ecs/jskult-webapp/src/model/internal/jwt_token.py @@ -1,5 +1,4 @@ import base64 -import datetime import json from typing import Optional From ab81dd14d779effd4b952f5b2e2359e265dd38f3 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:15:34 +0900 Subject: [PATCH 07/20] =?UTF-8?q?refactor:=20SessionLocal=E3=81=AE?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=E7=A2=BA=E8=AA=8D=E7=94=A8Endpoint=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/main.py | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 495c4cc7..3bd9e73c 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -1,6 +1,6 @@ import os.path as path -from fastapi import Depends, FastAPI +from fastapi import FastAPI from fastapi.staticfiles import StaticFiles from starlette import status @@ -8,11 +8,8 @@ import src.static as static from src.controller import (bio, bio_download, healthcheck, login, logout, master_mainte, menu, root, ultmarc) from src.core import task -from src.depends.services import get_service from src.error.exception_handler import http_exception_handler from src.error.exceptions import UnexpectedException -from src.logging.get_logger import get_logger -from src.services.batch_status_service import BatchStatusService app = FastAPI() @@ -47,18 +44,3 @@ app.add_exception_handler(UnexpectedException, http_exception_handler) # サーバー起動時のイベント app.add_event_handler('startup', task.create_start_app_handler) - - -# logger = get_logger(__name__) - - -# @app.get('/sample/') -# def sample(service: BatchStatusService = Depends(get_service(BatchStatusService))): -# # import os -# # import threading -# logger.info('START') -# res = service.hdke_table_record -# logger.info(res) -# logger.info('END') -# return res -# # return f'{os.getpid()}, {threading.get_ident()}' From 9bbdc2e1b859edc74b21c0de4ccb7a96dbe0b3b1 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:20:39 +0900 Subject: [PATCH 08/20] =?UTF-8?q?feat:=20pid,=20tid=E3=81=AF=E5=87=BA?= =?UTF-8?q?=E3=81=95=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/logging/get_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/src/logging/get_logger.py b/ecs/jskult-webapp/src/logging/get_logger.py index 8c15d6e7..f36f1199 100644 --- a/ecs/jskult-webapp/src/logging/get_logger.py +++ b/ecs/jskult-webapp/src/logging/get_logger.py @@ -27,7 +27,7 @@ def get_logger(log_name: str) -> logging.Logger: logger.addHandler(handler) formatter = logging.Formatter( - '%(name)s[%(process)d][%(thread)d]\t[%(levelname)s]\t%(asctime)s\t%(message)s', + '%(name)s\t[%(levelname)s]\t%(asctime)s\t%(message)s', '%Y-%m-%d %H:%M:%S' ) From 5711c333b25a0e2e9a5568e0744c5e11e869edc6 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:27:31 +0900 Subject: [PATCH 09/20] =?UTF-8?q?style:=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=82=A6=E3=83=88=E3=81=A7=E6=AE=8B=E3=81=97?= =?UTF-8?q?=E3=81=A6=E3=81=8A=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/router/session_router.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/ecs/jskult-webapp/src/router/session_router.py b/ecs/jskult-webapp/src/router/session_router.py index e8cb23f9..9389a722 100644 --- a/ecs/jskult-webapp/src/router/session_router.py +++ b/ecs/jskult-webapp/src/router/session_router.py @@ -5,7 +5,6 @@ from fastapi.exceptions import HTTPException from fastapi.routing import APIRoute from starlette import status -# from src.db.database import Database from src.depends.auth import (check_session_expired, get_current_session, verify_session) from src.error.exceptions import DBException, UnexpectedException @@ -78,18 +77,6 @@ class MeDaCaRoute(APIRoute): return response -# class PrepareDatabaseRoute(MeDaCaRoute): -# """事前処理として、データベースのエンジンを作成するルートハンドラー -# Args: -# MeDaCaRoute (MeDaCaRoute): 共通ルートハンドラー -# """ -# async def pre_process_route(self, request: Request): -# request = await super().pre_process_route(request) -# # DBエンジンを構築して状態にセット -# request.app.state._db = Database.get_instance() -# return request - - class BeforeCheckSessionRoute(MeDaCaRoute): """事前処理として、セッションチェックを行うルートハンドラー @@ -112,7 +99,7 @@ class BeforeCheckSessionRoute(MeDaCaRoute): return session_request -class AfterSetCookieSessionRoute(MeDaCaRoute): # (PrepareDatabaseRoute): +class AfterSetCookieSessionRoute(MeDaCaRoute): """事後処理として、セッションキーをcookieに設定するカスタムルートハンドラー""" async def post_process_route(self, request: Request, response: Response): response = await super().post_process_route(request, response) From 175048d7cccca1362762666dce6a97327fdf0f82 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 13:39:08 +0900 Subject: [PATCH 10/20] =?UTF-8?q?feat:=20Worker=E8=B5=B7=E5=8B=95=E6=95=B0?= =?UTF-8?q?=E3=82=92=E8=AA=BF=E6=95=B41=E2=86=922?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/Dockerfile b/ecs/jskult-webapp/Dockerfile index aea8870f..b865a24d 100644 --- a/ecs/jskult-webapp/Dockerfile +++ b/ecs/jskult-webapp/Dockerfile @@ -16,4 +16,4 @@ RUN \ COPY src ./src -CMD ["gunicorn", "src.main:app", "-w", "1", "-k" ,"uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:80", "--timeout", "300"] +CMD ["gunicorn", "src.main:app", "-w", "2", "-k" ,"uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:80", "--timeout", "300"] From 4d27d8fea1aea9030f333b371e8c162eaa5247ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=9C=A8=E8=A6=81?= Date: Thu, 31 Aug 2023 13:40:46 +0900 Subject: [PATCH 11/20] =?UTF-8?q?feat:=20=E5=AE=9F=E6=B6=88=E5=8C=96&?= =?UTF-8?q?=E3=82=A2=E3=83=AB=E3=83=88=E3=83=9E=E3=83=BC=E3=82=AF=20?= =?UTF-8?q?=E3=82=A2=E3=83=AB=E3=83=88=E3=83=9E=E3=83=BC=E3=82=AF=E7=85=A7?= =?UTF-8?q?=E4=BC=9A=E7=94=BB=E9=9D=A2=E3=81=A7=E3=80=81DB=E9=96=A2?= =?UTF-8?q?=E9=80=A3=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=8C=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/master_mainte_emp_chg_inst_function.py | 3 --- .../src/repositories/bio_sales_lot_repository.py | 6 ------ .../src/repositories/bu_master_cd_repository.py | 3 --- .../src/repositories/emp_chg_inst_repository.py | 12 ------------ .../src/repositories/emp_master_repository.py | 3 --- .../src/repositories/hdke_tbl_repository.py | 3 --- .../src/repositories/inst_master_repository.py | 3 --- .../src/repositories/mst_inst_repository.py | 3 --- .../pharmacy_product_master_repository.py | 3 --- .../src/repositories/prefc_master_repository.py | 3 --- .../src/services/master_mainte_service.py | 3 --- 11 files changed, 45 deletions(-) diff --git a/ecs/jskult-webapp/src/model/internal/master_mainte_emp_chg_inst_function.py b/ecs/jskult-webapp/src/model/internal/master_mainte_emp_chg_inst_function.py index d4379a43..18a5cb0c 100644 --- a/ecs/jskult-webapp/src/model/internal/master_mainte_emp_chg_inst_function.py +++ b/ecs/jskult-webapp/src/model/internal/master_mainte_emp_chg_inst_function.py @@ -29,7 +29,6 @@ class MasterMainteEmpChgInstFunction(metaclass=ABCMeta): def save(self): error_list = [] try: - self.emp_chginst_repository.connect() self.emp_chginst_repository.to_jst() self.emp_chginst_repository.begin() (result_message, error_list) = self.write_emp_chg_inst_table() @@ -40,8 +39,6 @@ class MasterMainteEmpChgInstFunction(metaclass=ABCMeta): except Exception as e: self.emp_chginst_repository.rollback() raise e - finally: - self.emp_chginst_repository.disconnect() return (result_message, error_list) diff --git a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py index 30e2b562..33182d6a 100644 --- a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py +++ b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py @@ -65,7 +65,6 @@ class BioSalesLotRepository(BaseRepository): def fetch_many(self, parameter: BioModel) -> list[BioSalesLotDBModel]: try: - self._database.connect() logger.debug('DB参照実行') where_clause = self.__build_condition(parameter) # システムとしての最大取得件数 +1 まで取る @@ -78,12 +77,9 @@ class BioSalesLotRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() def fetch_as_data_frame(self, parameter: BioModel, limitation: int): try: - self._database.connect() logger.debug('DB参照実行') where_clause = self.__build_condition(parameter) query = self.FETCH_SQL.format(where_clause=where_clause, limit=limitation) @@ -95,8 +91,6 @@ class BioSalesLotRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() def __build_condition(self, parameter: BioModel): where_clauses: list[SQLCondition] = [] diff --git a/ecs/jskult-webapp/src/repositories/bu_master_cd_repository.py b/ecs/jskult-webapp/src/repositories/bu_master_cd_repository.py index 36992192..319918e0 100644 --- a/ecs/jskult-webapp/src/repositories/bu_master_cd_repository.py +++ b/ecs/jskult-webapp/src/repositories/bu_master_cd_repository.py @@ -18,7 +18,6 @@ class BuMasterRepository(BaseRepository): def fetch_count(self, bu_cd) -> MasterMenteCountModel: try: - self._database.connect() query = self.FETCH_COUNT_SQL result = self._database.execute_select(query, {'bu_cd': bu_cd}) models = [MasterMenteCountModel(**r) for r in result] @@ -28,5 +27,3 @@ class BuMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/emp_chg_inst_repository.py b/ecs/jskult-webapp/src/repositories/emp_chg_inst_repository.py index fc362257..d91be694 100644 --- a/ecs/jskult-webapp/src/repositories/emp_chg_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/emp_chg_inst_repository.py @@ -11,9 +11,6 @@ logger = get_logger('従業員担当施設マスタ') class EmpChgInstRepository(BaseRepository): - def connect(self): - self._database.connect() - def to_jst(self): self._database.to_jst() @@ -26,9 +23,6 @@ class EmpChgInstRepository(BaseRepository): def rollback(self): self._database.rollback() - def disconnect(self): - self._database.disconnect() - INSERT_SQL = """\ INSERT INTO {table_name} ( @@ -147,7 +141,6 @@ class EmpChgInstRepository(BaseRepository): def fetch_count(self, inst_cd, ta_cd, start_date, table_name) -> MasterMenteCountModel: try: - self._database.connect() query = self.FETCH_COUNT_SQL.format(table_name=table_name) result = self._database.execute_select(query, {'inst_cd': inst_cd, 'ta_cd': ta_cd, 'start_date': start_date}) @@ -158,8 +151,6 @@ class EmpChgInstRepository(BaseRepository): except Exception as e: logger.exception(f'DB Error : Exception={e.args}') raise e - finally: - self._database.disconnect() FETCH_SQL = """\ SELECT DISTINCT @@ -190,7 +181,6 @@ class EmpChgInstRepository(BaseRepository): def fetch_as_data_frame(self, table_name: str, parameter: MasterMainteCsvDlModel): try: - self._database.connect() where_clause = self.__build_condition(parameter) query = self.FETCH_SQL.format(table_name=table_name, where_clause=where_clause) logger.debug(f'SQL: {query}') @@ -200,8 +190,6 @@ class EmpChgInstRepository(BaseRepository): except Exception as e: logger.exception(f'DB Error : Exception={e.args}') raise e - finally: - self._database.disconnect() def __build_condition(self, parameter: MasterMainteCsvDlModel): where_clauses: list[SQLCondition] = [] diff --git a/ecs/jskult-webapp/src/repositories/emp_master_repository.py b/ecs/jskult-webapp/src/repositories/emp_master_repository.py index 8c278177..9ef6aa4a 100644 --- a/ecs/jskult-webapp/src/repositories/emp_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/emp_master_repository.py @@ -20,7 +20,6 @@ class EmpMasterRepository(BaseRepository): def fetch_count(self, emp_cd, start_work_date) -> MasterMenteCountModel: try: - self._database.connect() query = self.FETCH_COUNT_SQL result = self._database.execute_select(query, {'emp_cd': emp_cd, 'start_work_date': start_work_date}) models = [MasterMenteCountModel(**r) for r in result] @@ -30,5 +29,3 @@ class EmpMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py index 967fbbe1..b99485e9 100644 --- a/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py +++ b/ecs/jskult-webapp/src/repositories/hdke_tbl_repository.py @@ -10,7 +10,6 @@ class HdkeTblRepository(BaseRepository): def fetch_all(self) -> list[HdkeTblModel]: try: - self._database.connect() query = self.FETCH_SQL result = self._database.execute_select(query) models = [HdkeTblModel(**r) for r in result] @@ -18,5 +17,3 @@ class HdkeTblRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/inst_master_repository.py b/ecs/jskult-webapp/src/repositories/inst_master_repository.py index 4de6b732..59abcc5e 100644 --- a/ecs/jskult-webapp/src/repositories/inst_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/inst_master_repository.py @@ -18,7 +18,6 @@ class InstDivMasterRepository(BaseRepository): def fetch_all(self) -> list[InstDivMasterModel]: try: - self._database.connect() result = self._database.execute_select(self.FETCH_SQL) result_data = [res for res in result] models = [InstDivMasterModel(**r) for r in result_data] @@ -26,5 +25,3 @@ class InstDivMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/mst_inst_repository.py b/ecs/jskult-webapp/src/repositories/mst_inst_repository.py index 9c92599c..6ad64652 100644 --- a/ecs/jskult-webapp/src/repositories/mst_inst_repository.py +++ b/ecs/jskult-webapp/src/repositories/mst_inst_repository.py @@ -18,7 +18,6 @@ class MstInstRepository(BaseRepository): def fetch_count(self, inst_cd) -> MasterMenteCountModel: try: - self._database.connect() query = self.FETCH_COUNT_SQL result = self._database.execute_select(query, {'inst_cd': inst_cd}) models = [MasterMenteCountModel(**r) for r in result] @@ -28,5 +27,3 @@ class MstInstRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/pharmacy_product_master_repository.py b/ecs/jskult-webapp/src/repositories/pharmacy_product_master_repository.py index c2bd95ed..4b4083c8 100644 --- a/ecs/jskult-webapp/src/repositories/pharmacy_product_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/pharmacy_product_master_repository.py @@ -30,12 +30,9 @@ class PharmacyProductMasterRepository(BaseRepository): def fetch_all(self) -> list[PharmacyProductMasterModel]: try: - self._database.connect() result = self._database.execute_select(self.FETCH_SQL) models = [PharmacyProductMasterModel(**r) for r in result] return models except Exception as e: logger.exception(f"DB Error : Exception={e}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/repositories/prefc_master_repository.py b/ecs/jskult-webapp/src/repositories/prefc_master_repository.py index e83e5d78..b9a7f795 100644 --- a/ecs/jskult-webapp/src/repositories/prefc_master_repository.py +++ b/ecs/jskult-webapp/src/repositories/prefc_master_repository.py @@ -20,7 +20,6 @@ class PrefcMasterRepository(BaseRepository): def fetch_all(self) -> list[PrefcMasterModel]: try: - self._database.connect() result = self._database.execute_select(self.FETCH_SQL) result_data = [res for res in result] models = [PrefcMasterModel(**r) for r in result_data] @@ -28,5 +27,3 @@ class PrefcMasterRepository(BaseRepository): except Exception as e: logger.exception(f"DB Error : Exception={e.args}") raise e - finally: - self._database.disconnect() diff --git a/ecs/jskult-webapp/src/services/master_mainte_service.py b/ecs/jskult-webapp/src/services/master_mainte_service.py index 57ba896d..f3bbdb1a 100644 --- a/ecs/jskult-webapp/src/services/master_mainte_service.py +++ b/ecs/jskult-webapp/src/services/master_mainte_service.py @@ -148,7 +148,6 @@ class MasterMainteService(BaseService): def copy_data_real_to_dummy(self) -> TableOverrideViewModel: try: - self.emp_chginst_repository.connect() self.emp_chginst_repository.to_jst() self.emp_chginst_repository.begin() self.emp_chginst_repository.delete_dummy_table() @@ -157,8 +156,6 @@ class MasterMainteService(BaseService): except Exception as e: self.emp_chginst_repository.rollback() raise e - finally: - self.emp_chginst_repository.disconnect() # コピー完了をマークして画面に返却 table_override = TableOverrideViewModel( From 5d5ef883399b1ecff1f8b0a24d8b9818bc1a8a55 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 31 Aug 2023 17:20:26 +0900 Subject: [PATCH 12/20] =?UTF-8?q?feat:=20DB=E5=88=87=E6=96=AD=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/db/database.py | 17 ++++------------- ecs/jskult-webapp/src/depends/database.py | 2 -- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index e1571d03..32e1fdc2 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -114,14 +114,6 @@ class DatabaseClient: raise DBException('DBに接続していません') return self.__session - def connect(self): - # FIXME: 未使用。後ほど削除 - ... - - def disconnect(self): - # FIXME: エラーにしないための仮実装。後で消す - ... - def execute_select(self, select_query: str, parameters=None) -> list[dict]: """SELECTクエリを実行します。 @@ -190,11 +182,10 @@ class DatabaseClient: if self.session.in_transaction(): self.session.rollback() - # def disconnect(self): - # """DB接続を切断します。""" - # if self.session is not None: - # self.session.close() - # self.__session = None + def disconnect(self): + """DB接続を切断します。""" + self.session.close() + self.__session = None def to_jst(self): self.execute('SET time_zone = "+9:00"') diff --git a/ecs/jskult-webapp/src/depends/database.py b/ecs/jskult-webapp/src/depends/database.py index 1a26214c..3813ca54 100644 --- a/ecs/jskult-webapp/src/depends/database.py +++ b/ecs/jskult-webapp/src/depends/database.py @@ -11,5 +11,3 @@ def get_database(request: Request) -> DatabaseClient: yield database finally: database.disconnect() - # FIXME; リポジトリを直し終えたら消す - session.close() From 11990ab6ccbdd0c2ece3916f240f956074cf1619 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Sep 2023 11:19:13 +0900 Subject: [PATCH 13/20] =?UTF-8?q?fix:=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=8C=87=E6=91=98=E5=8F=8D=E6=98=A0=E3=80=81=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E3=82=A4=E3=83=99?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=8C=E5=AE=9F=E8=A1=8C=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 3bd9e73c..7d65e130 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -43,4 +43,4 @@ app.add_exception_handler(status.HTTP_403_FORBIDDEN, http_exception_handler) app.add_exception_handler(UnexpectedException, http_exception_handler) # サーバー起動時のイベント -app.add_event_handler('startup', task.create_start_app_handler) +app.add_event_handler('startup', task.create_start_app_handler()) From 2ad76ade27db5100c4c8010ce52b6c74170fccf8 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 1 Sep 2023 20:33:54 +0900 Subject: [PATCH 14/20] =?UTF-8?q?fix:=20ALB=E3=81=AEidle=20timeout?= =?UTF-8?q?=E3=82=88=E3=82=8A=E3=80=81gunicorn=E3=81=AEkeepalive=E3=81=8C?= =?UTF-8?q?=E7=9F=AD=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/Dockerfile b/ecs/jskult-webapp/Dockerfile index b865a24d..d0285a04 100644 --- a/ecs/jskult-webapp/Dockerfile +++ b/ecs/jskult-webapp/Dockerfile @@ -16,4 +16,4 @@ RUN \ COPY src ./src -CMD ["gunicorn", "src.main:app", "-w", "2", "-k" ,"uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:80", "--timeout", "300"] +CMD ["gunicorn", "src.main:app", "-w", "2", "-k" ,"uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:80", "--timeout", "1200", "--keep-alive", "1200"] From f64a881871911589ce3fed2c25d03405acc3d5c2 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Sep 2023 15:33:35 +0900 Subject: [PATCH 15/20] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=A2=E3=83=AA?= =?UTF-8?q?=E3=82=92=E5=8A=B9=E7=8E=87=E3=82=88=E3=81=8F=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=80=81SELECT=E7=B5=90?= =?UTF-8?q?=E6=9E=9C=E3=82=92=E3=82=B8=E3=82=A7=E3=83=8D=E3=83=AC=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AB=E3=81=97=E3=81=A6=E8=BF=94=E3=81=99=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3(=5Fto=5Fdataframe=E4=BB=A5?= =?UTF-8?q?=E5=A4=96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/db/database.py | 5 +++-- ecs/jskult-webapp/src/db/db_row_generator.py | 14 ++++++++++++++ .../src/repositories/bio_sales_lot_repository.py | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 ecs/jskult-webapp/src/db/db_row_generator.py diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index 32e1fdc2..c729faf5 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -4,6 +4,7 @@ from sqlalchemy.engine.url import URL from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import Pool +from src.db.db_row_generator import DBRowGenerator from src.error.exceptions import DBException from src.logging.get_logger import get_logger from src.system_var import environment @@ -125,7 +126,7 @@ class DatabaseClient: DBException: DBエラー Returns: - list[dict]: カラム名: 値の辞書リスト + DBRowGenerator: カラム名: 値の辞書リストを返すジェネレータオブジェクト """ result = None try: @@ -138,7 +139,7 @@ class DatabaseClient: except Exception as e: raise DBException(e) - result_rows = result.mappings().all() + result_rows = DBRowGenerator(result.mappings()) return result_rows def execute(self, query: str, parameters=None) -> CursorResult: diff --git a/ecs/jskult-webapp/src/db/db_row_generator.py b/ecs/jskult-webapp/src/db/db_row_generator.py new file mode 100644 index 00000000..f45617b1 --- /dev/null +++ b/ecs/jskult-webapp/src/db/db_row_generator.py @@ -0,0 +1,14 @@ +from sqlalchemy import MappingResult + + +class DBRowGenerator: + """DBの検索結果を指定行数ごとに返すジェネレータ + """ + FETCH_MANY_SIZE = 2000 + + def __init__(self, mapping_result: MappingResult) -> None: + self.mapping_result = mapping_result + + def __iter__(self): + yield_per = self.mapping_result.yield_per(self.FETCH_MANY_SIZE) + yield from yield_per diff --git a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py index 33182d6a..10c7cba3 100644 --- a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py +++ b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py @@ -71,8 +71,8 @@ class BioSalesLotRepository(BaseRepository): query = self.FETCH_SQL.format(where_clause=where_clause, limit=environment.BIO_SEARCH_RESULT_MAX_COUNT + 1) logger.debug(f'SQL: {query}') result = self._database.execute_select(query, parameter.model_dump()) - logger.debug(f'count= {len(result)}') models = [BioSalesLotDBModel(**r) for r in result] + logger.debug(f'count= {len(models)}') return models except Exception as e: logger.exception(f"DB Error : Exception={e.args}") From ce122ee898bf0d01ef5dd17e66a83fac9201d6e0 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Sep 2023 15:42:13 +0900 Subject: [PATCH 16/20] =?UTF-8?q?feat:=20=E3=83=AD=E3=83=BC=E3=82=AB?= =?UTF-8?q?=E3=83=AB=E8=B5=B7=E5=8B=95=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97?= =?UTF-8?q?=E3=83=88=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=A0=E3=82=A2=E3=82=A6?= =?UTF-8?q?=E3=83=88=E3=80=81keepalive=E3=82=92=E3=83=87=E3=83=97=E3=83=AD?= =?UTF-8?q?=E3=82=A4=E7=94=A8=E3=81=AE=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=A8=E4=B8=80=E8=87=B4=E3=81=95=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/Pipfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/Pipfile b/ecs/jskult-webapp/Pipfile index 7e38abb1..2fb1efb9 100644 --- a/ecs/jskult-webapp/Pipfile +++ b/ecs/jskult-webapp/Pipfile @@ -5,7 +5,7 @@ name = "pypi" [scripts] app = "uvicorn src.main:app --reload --no-server-header" -"app:local" = "gunicorn src.main:app -w 2 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8000 --timeout 300" +"app:local" = "gunicorn src.main:app -w 2 -k uvicorn.workers.UvicornWorker -b 127.0.0.1:8000 --timeout 1200 --keep-alive 1200" [packages] fastapi = "==0.*" From a8258b3f889825db7e28f3991cb738fabcf306e9 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Sep 2023 16:43:45 +0900 Subject: [PATCH 17/20] =?UTF-8?q?feat:=20Excel/CSV=E3=81=AE=E3=83=80?= =?UTF-8?q?=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/bio_download.py | 3 +- .../src/templates/bioSearchList.html | 34 +++++-------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/ecs/jskult-webapp/src/controller/bio_download.py b/ecs/jskult-webapp/src/controller/bio_download.py index f076f28b..0bcee13a 100644 --- a/ecs/jskult-webapp/src/controller/bio_download.py +++ b/ecs/jskult-webapp/src/controller/bio_download.py @@ -9,7 +9,6 @@ from starlette import status from src.depends.auth import verify_session from src.depends.services import get_service -from src.error.exceptions import DBException from src.logging.get_logger import get_logger from src.model.internal.session import UserSession from src.model.request.bio import BioModel @@ -114,7 +113,7 @@ def _search_bio_data( search_param, limitation=environment.BIO_EXCEL_RESULT_MAX_COUNT) elif download_param.ext == 'csv': search_result_df, query = bio_service.search_download_bio_data(search_param) - except DBException as e: + except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail={'error': 'db_error', 'message': e.args} diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index a7035b28..37ccc19e 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -243,26 +243,28 @@ loading.stop(); $(`#modal_${ext}`).modal('toggle'); } catch (e) { - alert("エラーが発生しました。:" + e.message); + // 予期せぬエラーが発生した場合 + loading.stop(); + $(`#modal_${ext}`).modal('toggle'); + $(`#ErrorModal_Unexpected`).modal('toggle'); + return } }, error: function(jqXHR, textStatus, errorThrown) { + loading.stop() const responseJson = jqXHR.responseJSON if (responseJson?.detail?.error === 'db_error') { - loading.stop() $(`#modal_${ext}`).modal('toggle'); $(`#ErrorModal_DB`).modal('toggle'); return } if (responseJson?.detail?.error === 'aws_error') { - loading.stop(); $(`#modal_${ext}`).modal('toggle'); - $(`#ErrorModal_AWS`).modal('toggle'); + $(`#ErrorModal_Unexpected`).modal('toggle'); return } // 予期せぬエラーが発生した場合 - loading.stop(); $(`#modal_${ext}`).modal('toggle'); $(`#ErrorModal_Unexpected`).modal('toggle'); return @@ -425,29 +427,11 @@ %} {% include '_modal.html' %} {% endwith %} - - {% with - modal_id='ErrorModal_AWS', - modal_title='エラー', - message='AWS環境に異常が発生しました。管理者にお問い合わせください。', - icon_key='warning', - modal_close_event='location.href="/logout/?reason="', - buttons = [ - { - 'id': 'error_modal_aws', - 'class': 'btn btn-primary', - 'text': 'OK', - 'onclick_event': 'location.href="/logout/?reason=''"' - } - ] - %} - {% include '_modal.html' %} - {% endwith %} {% with modal_id='ErrorModal_DB', modal_title='エラー', - message='DB接続に失敗しました。管理者にお問い合わせください。', + message='DB接続に失敗しました。しばらく経ってから再度実行してください。', icon_key='warning', modal_close_event='location.href="/logout/?reason="', buttons = [ @@ -466,7 +450,7 @@ {% with modal_id='ErrorModal_Unexpected', modal_title='エラー', - message='サーバーエラーが発生しました。管理者にお問い合わせください。', + message='予期せぬエラーが発生しました。しばらく経ってから再度実行してください。', icon_key='warning', modal_close_event='location.href="/logout/?reason="', buttons = [ From 4a3dfd2f3bce27ed5c768329c211ab7e25f76780 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 5 Sep 2023 12:16:14 +0900 Subject: [PATCH 18/20] =?UTF-8?q?feat:=20=E3=83=A2=E3=83=BC=E3=83=80?= =?UTF-8?q?=E3=83=AB=E3=81=AE=E6=96=87=E8=A8=80=E5=A4=89=E6=9B=B4=E3=80=81?= =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=A2=E3=83=BC=E3=83=80=E3=83=AB?= =?UTF-8?q?=E3=81=AE=E3=83=9C=E3=82=BF=E3=83=B3=E6=8A=BC=E4=B8=8B=E6=99=82?= =?UTF-8?q?=E3=81=AB=E7=94=BB=E9=9D=A2=E3=81=AB=E3=81=A8=E3=81=A9=E3=81=BE?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/templates/bioSearchList.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index 37ccc19e..4d90cf96 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -433,13 +433,13 @@ modal_title='エラー', message='DB接続に失敗しました。しばらく経ってから再度実行してください。', icon_key='warning', - modal_close_event='location.href="/logout/?reason="', + modal_close_event='', buttons = [ { 'id': 'error_modal_db', 'class': 'btn btn-primary', - 'text': 'OK', - 'onclick_event': 'location.href="/logout/?reason=''"' + 'dismiss': 'modal', + 'text': 'OK' } ] %} @@ -450,15 +450,15 @@ {% with modal_id='ErrorModal_Unexpected', modal_title='エラー', - message='予期せぬエラーが発生しました。しばらく経ってから再度実行してください。', + message='サーバーからの応答がありません。しばらく経ってから再度実行してください。', icon_key='warning', - modal_close_event='location.href="/logout/?reason="', + modal_close_event='', buttons = [ { 'id': 'error_modal_unexpected', 'class': 'btn btn-primary', 'text': 'OK', - 'onclick_event': 'location.href="/logout/?reason=''"' + 'dismiss': 'modal' } ] %} From bec524c5643432ca0062db2704b431dba1acf6bb Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 5 Sep 2023 12:19:47 +0900 Subject: [PATCH 19/20] =?UTF-8?q?refactor:=20JS=E3=81=AEdownload=E3=83=A1?= =?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=81=AB=E4=BD=99=E5=88=86=E3=81=AA?= =?UTF-8?q?=E5=BC=95=E6=95=B0=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/templates/bioSearchList.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index 4d90cf96..f0d47570 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -200,7 +200,7 @@