commons package
Submodules
commons.appcache module
- class commons.appcache.AppCache(mvclog, mvclogname, py_type)[ソース]
ベースクラス:
objectpython ファイルを読み込む。 HaluConf の'load_type' の設定値に応じてデータをキャッシュする(未実装)。
- appendpath
- Type:
- mvclog
ログ出力用オブジェクト。
- Type:
- mvclogname
ログの出力ファイル名。
- Type:
str
- py_type
python ファイルの種類('controller.py'/ 'model.py'/ 'view.py'/ 'form.py')
- Type:
str
- getAppData(data)[ソース]
アプリデータを取得する。
- パラメータ:
data (json) -- リクエストデータ、SQLデータ、レスポンスデータのいずれか
- 戻り値:
app_data -- python ファイルの文字列データ -> self.getFileData() の戻り値
- 戻り値の型:
str
- getControllerObject(requestdict, validation_data)[ソース]
サーバプログラム実行用のコントローラクラスを動的にインスタンス。 サーバプログラムとサーバプログラム用モジュール(Sever/Commons)のパス追加も行う。
- パラメータ:
requestdict (json)
validation_data (json)
- 戻り値:
app_object -- サーバプログラムを実行するクラスのインスタンスオブジェクト
- 戻り値の型:
object
- getFileData(file_path)[ソース]
python プログラムファイルを読み込む。 load_type が'file' 以外の場合はキャッシュからデータを取得(未実装)。
- パラメータ:
file_path (str) -- ファイルパス -> FilePath.getAppsPath() の戻り値
- 戻り値:
file_data -- python ファイルの文字列データ -> FilePath.readFile() の戻り値
- 戻り値の型:
str
- getFormImportString(data)[ソース]
プログラム実行クラスのimport 用文字列を生成。 クラスが不要(python プログラムが呼ばれない)の場合、空文字をリターン。
- パラメータ:
data (json) -- コントローラはrequestdict , モデルはsqldict, ビューはresponsedict
- 戻り値:
class_name (str) -- インスタンスするクラス名
w_import (str) -- クラスのimport 文 -> 'from [File_name] import [Class_name]'
- getFormObject(excelcreate, responsedict, sqldict, requestdict)[ソース]
フォームクラスを動的にインスタンス。 サーバプログラムとサーバプログラム用モジュール(Sever/Commons)のパス追加も行う。
- パラメータ:
pdfcreate
responsedict (json)
sqldict (json)
requestdict (json)
- 戻り値:
app_object -- プログラムを実行するクラスのインスタンス。
- 戻り値の型:
object
- getImportString(data)[ソース]
プログラム実行クラスのimport 用文字列を生成。 クラスが不要(python プログラムが呼ばれない)の場合、空文字をリターン。
- パラメータ:
data (json) -- コントローラはrequestdict , モデルはsqldict, ビューはresponsedict
- 戻り値:
class_name (str) -- インスタンスするクラス名
w_import (str) -- クラスのimport 文 -> 'from [File_name] import [Class_name]'
commons.appendpath module
commons.datamapping module
- class commons.datamapping.DataMapping[ソース]
ベースクラス:
object項目移送を行う。 tran.json/ sql.json で'fromtype' が設定されている項目のvalue データを編集する。
- fromRequestEditValue(value, requestdict)[ソース]
tran.json/ sql.json で'fromtype' が'request' の項目が対象。 リクエストデータの指定id の値をvalueデータに移送する。
- パラメータ:
value (dict.value) -- sql_info['input']['record']['value']/ response_record['value']
requestdict (dict(json))
commons.dynamicapp module
- class commons.dynamicapp.DynamicApp[ソース]
ベースクラス:
objectbefore after メソッドを動的に実行する。
- doBeforeAfterMethod(method_type, record_info, temp_object)[ソース]
json に指定されているbefore/ after メソッドを実行する。
- パラメータ:
method_type (str) -- メソッドの種類('before'/ 'after')
record_info (dict) -- requestdict['records']/ sqldict['sqls']/ responsedict['records']
temp_object (object) -- メソッド実行オブジェクト。AppCache クラスでインスタンスされる。
- 戻り値:
result -- メソッド実行結果('OK'/ 'ERROR')
- 戻り値の型:
str
commons.filepath module
- class commons.filepath.FilePath(mvclog, mvclogname)[ソース]
ベースクラス:
objectファイル操作およびファイルパスの取得、編集を行う。
- mvclog
ログ出力用オブジェクト。
- Type:
- mvclogname
ログの出力ファイル名。
- Type:
str
- getAppsPath(py_type, data)[ソース]
pyファイルの絶対パスを取得する。
- パラメータ:
py_type (str) -- controller.py/ model.py/ view.py
data (json) -- requestdict/ sqldict/ responsedict
- 戻り値:
pyファイル名(絶対パス)
- 戻り値の型:
apps_path1
- getFolderName(data)[ソース]
JSONデータのhtml情報からプログラムフォルダ名を取得する。 例)'Member/Json/Apps/Login' -> 'Login'
- パラメータ:
data (json) -- リクエストデータ、SQLデータ、レスポンスデータのいずれか
- 戻り値:
folder_name -- フォルダ名
- 戻り値の型:
str
- getJsonsPath(json_type, data)[ソース]
JSONファイルの絶対パスを取得する。
- パラメータ:
json_type (str) -- validation.json/ sql.json/ tran.json
data (json) -- requestdict/ sqldict/ responsedict
- 戻り値:
jsons_path + json_type -- JSONファイル名(絶対パス)
- 戻り値の型:
str
- getProjectName(data)[ソース]
JSONデータのhtml情報からプロジェクト名を取得する。 例)'Member/Json/Apps/Login' -> 'Member'
- パラメータ:
data (json) -- リクエストデータ、SQLデータ、レスポンスデータのいずれか
- 戻り値:
プロジェクト名
- 戻り値の型:
project_name
- hconf = <halumain.haluconf.HaluConf object>
- readFile(file_name)[ソース]
ファイルの絶対パスを使用して、ファイル内容を文字コード:UTF-8で読み込む。
- パラメータ:
file_name (str) -- 読み込み対象ファイルの絶対パス
- 戻り値:
data
- 戻り値の型:
ファイル内に記述された情報
commons.jsoncache module
- class commons.jsoncache.JsonCache(mvclog, mvclogname, json_type)[ソース]
ベースクラス:
objectJson ファイルを読み込む。 HaluConf の'load_type' の設定値に応じてデータをキャッシュする(未実装)。
- json_type
json ファイルの種類('validation.json'/ 'sql.json'/ 'tran.json'/ 'form.json')
- Type:
str
- getFileData(file_path)[ソース]
json ファイルを読み込む。 load_type が'file' 以外の場合はキャッシュからデータを取得(未実装)。
- パラメータ:
file_path (str) -- ファイルパス -> FilePath.getJsonPath() の戻り値
- 戻り値:
file_data -- json ファイルの文字列データ -> FilePath.readFile() の戻り値
- 戻り値の型:
str
commons.jsonchunk module
使用法
import 方法(getjsonchunkbyidが直接記述できる) from commons.jsonchunk import getjsonchunkbyid
リクエスト・レスポンスの指定方法 getjsonchunkbyid(jsondict, 'records', 'idname') getjsonchunkbyid(jsondict, 'records', 'idname', 'record')
SQLの指定方法 getjsonchunkbyid(jsondict, 'sqls', 'idname') getjsonchunkbyid(jsondict, 'sqls', 'idname', 'input') getjsonchunkbyid(jsondict, 'sqls', 'idname', 'input', 'record') getjsonchunkbyid(jsondict, 'sqls', 'idname', 'output') getjsonchunkbyid(jsondict, 'sqls', 'idname', 'output', 'record')
commons.mail module
- class commons.mail.Mail(mvclog, mvclogname)[ソース]
ベースクラス:
objectメール送信用のクラス。メールの作成・送信を行う。
- mvclog
ログ出力用オブジェクト。
- Type:
- mvclogname
ログの出力ファイル名。
- Type:
str
commons.specialcharconvert module
- class commons.specialcharconvert.SpecialCharConvert[ソース]
ベースクラス:
object特殊文字(', ", ?, )を変換/ 変換した特殊文字をもとに戻す
- editRequestDataToSpecialChar(requestdict)[ソース]
リクエストデータの特殊文字を変換する
- パラメータ:
requestdict (dict) -- HaluController から受け取ったリクエストデータ 0.tran.jsonの"request": {}を受け取る 1."records": [{}を探す 2."record": {}を探す 3."ログインID":{"value": [""] }を探す 4.{"value": [""] }の[""]をvarにする 5.varが文字列なら置き換える
- 戻り値:
requestdict -- 特殊文字を変換済のリクエストデータ
- 戻り値の型:
dict
commons.sqlescape module
検索条件フック(setSql系)が SQL 文字列リテラルへ値を埋め込む際のエスケープ処理。
■ なぜ通常の「' を '' へ置換」では効かないか
フックが受け取るリクエスト値は、Controller 層の特殊文字変換 (HaluServer commons/specialcharconvert.py editRequestDataToSpecialChar)により シングルクォート「'」が全角2文字「’’」へ置換済みで、ASCII のクォートは残っていない。 この置換は SQL 文の組み立てが終わったあとに database.py(doGenerateSql)の editSqlDataToNormalChar が「’’」→「'」へ復元する。
そのためフックが値をそのまま文字列リテラルへ埋め込むと、復元の時点でリテラルが閉じ、 SQL の構造が変わる(SQLインジェクションが成立する)。実測では検索値 「x' OR 'a' LIKE 'a」で WHERE 句が常に真となり全件が返った(C-030)。
■ 対策
リテラルへ埋め込む前に「’’」を2倍化しておくと、復元後に「''」 (SQL標準のエスケープ済みシングルクォート)になり、リテラル内の1文字として扱われる。 ユーザーが全角の「’」を2文字入力した場合も同じ経路で復元されるため、本処理で同時に塞がる。
■ 適用範囲
本処理は「フックが自分で文字列リテラルを組み立てる」場合に必要なもの。 sql.json の input/バインド変数(fieldtype: char / doublequote)経由で埋め込む値は フレームワーク側が処理するため、本処理を通す必要はない。
利用方法は `from commons.sqlescape import escapeSqlLiteral`(アプリのフックからそのまま import可能。フレームワークと同一プロセスで動作しLibrariesがsys.path上にあるため)。