view.view のソースコード

# coding: utf-8

from commons.datamapping    import DataMapping
from commons.dynamicapp     import DynamicApp

[ドキュメント] class View(): """ ビュークラス。 Attributes ---------- log : MvcLogger datamapping : DataMapping dynamicapp : DynamicApp requestdict : dict 画面からのリクエストデータ sqldict : dict SQLデータ(sql.json) """ def __init__(self, vlog, vlogname, requestdict, sqldict): try: self.vlog = vlog self.vlogname = vlogname self.vlog.debug(self.vlogname, 'View init start') # 利用する外部クラスをインスタンス self.datamapping = DataMapping() self.dynamicapp = DynamicApp() # インスタンス変数を設定 self.requestdict = requestdict self.sqldict = sqldict except Exception as e: self.vlog.error(self.vlogname, f'View init exception message : {e}') finally: self.vlog.debug(self.vlogname, 'View init end')
[ドキュメント] def fromSqlToResponse(self, responsedict, temp_object): """ sql実行結果データからレスポンスデータを編集する。 Parameters ---------- responsedict : dict レスポンスデータ temp_object : Class サーバプログラム実行用のモデルオブジェクト -> AppCache.getViewObject() の戻り値 """ if 'records' in responsedict: for response_info in responsedict['records']: self.editResponse(response_info, temp_object) return
[ドキュメント] def editResponse(self, response_info, temp_object): """ レスポンスデータの編集 Parameters ---------- response_info : dict レスポンスデータの'record' の1要素 -> responsedict['records'][i] temp_object : Class サーバプログラム実行用のモデルオブジェクト -> AppCache.getViewObject() の戻り値 """ # beforeメソッド処理 result = self.dynamicapp.doBeforeAfterMethod('before', response_info, temp_object) if result == 'OK': self.editResponseRecord(response_info['record'], response_info) # afterメソッド処理 self.dynamicapp.doBeforeAfterMethod('after', response_info, temp_object) return
[ドキュメント] def editResponseRecord(self, response_record, response_info): """ レスポンスデータの行編集 Parameters ---------- response_record : dict response_infoの'record' の1要素 -> response_info['record'] response_info : dict レスポンスデータの'records' の1要素 -> responsedict['records'][i] """ for name, value in response_record.items(): # fromtype 処理 if 'fromtype' in value: if value['fromtype'] != '': if value['fromtype'] == 'request': # 違うid のrequest から編集する self.datamapping.fromRequestEditValue(value, self.requestdict) continue if value['fromio'] == 'input': # sqldict のinput から編集する self.datamapping.fromSqlInputEditValue(value, self.sqldict) else: # sql_data のoutput から編集する self.datamapping.fromSqlOutputEditValue(value, self.sqldict) continue # 同じid のsqldict から編集する for sql_info in self.sqldict['sqls']: if response_info['id'] != sql_info['id']: continue sql_record = sql_info['output']['record'] if name in sql_record: value['value'] = sql_record[name]['value'] break
[ドキュメント] def setRequestError(self, responsedict): """ リクエストエラーを設定する Parameters ---------- responsedict : dict レスポンスデータ Returns ------- responsedict : dict エラー設定後のレスポンスデータ """ responsedict['message'] = self.requestdict['message'] return responsedict
[ドキュメント] def setSqlError(self, responsedict): """ SQLエラーを設定する Parameters ---------- responsedict : dict レスポンスデータ Returns ------- responsedict : dict エラー設定後のレスポンスデータ """ responsedict['message'] = self.sqldict['message'] return responsedict
[ドキュメント] def call(self, json_cache, app_cache): """ メイン処理 Parameters ---------- json_cache : dict tran情報定義のキャッシュ -> JsonCache("tran.json") app_cache : dict ビューAPP のキャッシュ -> AppCache("view.py") Returns ------- responsedict : dict レスポンスデータ """ try: self.vlog.debug(self.vlogname, 'View call start') # レスポンスデータを取得 self.vlog.debug(self.vlogname, 'View レスポンスデータを取得 start') tran_data = json_cache.getJsonData(self.requestdict) responsedict = tran_data['response'] self.vlog.debug(self.vlogname, 'View レスポンスデータを取得 end') # ビューオブジェクトを動的生成 self.vlog.debug(self.vlogname, 'View ビューオブジェクトを動的生成 start') temp_object = app_cache.getViewObject(responsedict, self.sqldict, self.requestdict) self.vlog.debug(self.vlogname, 'View ビューオブジェクトを動的生成 end') # リクエストエラーを設定 self.vlog.debug(self.vlogname, 'View リクエストエラーを判定 start') if self.requestdict['message']['status'] != 'OK': self.vlog.debug( self.vlogname, 'View リクエストデータ エラー') return self.setRequestError(responsedict) self.vlog.debug(self.vlogname, 'View リクエストデータ OK') # SQLエラーを設定 self.vlog.debug(self.vlogname, 'View SQLエラーを判定 start') if self.sqldict['message']['status'] != 'OK': self.vlog.debug( self.vlogname, 'View SQLデータ エラー') return self.setSqlError(responsedict) # SQL OK ( sqldict['message']をresponsedict['message']にセット ) responsedict['message'] = self.sqldict['message'] self.vlog.debug(self.vlogname, 'View SQLデータ OK') # SQLデータからレスポンスデータを設定する self.vlog.debug(self.vlogname, 'View SQLデータからレスポンスデータを設定 start') self.fromSqlToResponse(responsedict, temp_object) self.vlog.debug(self.vlogname, 'View SQLデータからレスポンスデータを設定 end') return responsedict except Exception as e: responsedict['message']['status'] = 'ERROR' responsedict['message']['msg'] = e return responsedict finally: self.vlog.debug(self.vlogname, 'View call end')