eSEAT_Task.py
Simple Wiki Based Contents Management System
ソフトウェア関連 >> RTコンポーネント関連 >> eSEAT_v2.5 >> eSEATのファイル構成クラスについて >> eSEAT_Task.py

eSEAT/Task.py

eSEATの内部で実行されるタスクと状態を管理するクラス群。
eSEAT内部で実行されるタスクとは、<message>, <shell>, <script>, <log>, <statetransition>で定義された処理である。

Taskクラス

eSEATにおける <message>, <script>, <shell>, <log>, <statetransition>で登録された処理を実行するクラスの基底クラス
  • Class Task(object)
    • __init__(rtc)
      コンストラクタ
    • execute(data)
      現在は何もせずにTrueを返す
    • error(msg, val)
      self._loggerにエラーメッセージを出力する
    • checkCondition()
      現在を何もせずにTrueを返す

TaskMessageクラス

<message>タグで登録された処理を管理するクラス。sendtoで設定されたAdaptorに対してsendメソッドでメッセージ(文字列)を出力する
  • Class TaskMessage(Task)
    • __init__(rtc, sndto, data, encode, input_id)
      コンストラクタ
    • execute(data)
      self.sendtoで設定されたAdaptorにself.dataに格納されているメッセージを送信する

TaskShellクラス

<shell>タグで登録された処理を管理するクラス。Shellを起動し登録されたコマンドを実行する
  • Class TaskShell(Task)
    • __init__(rtc, sendto, data)
      コンストラクタ
    • execute(data)
      サブプロセスを起動して、登録されている命令(self.data)を実行する。self.sentoが設定されている場合には、実行結果をAdaptorに出力する

TaskScriptクラス

<script>タグで登録された処理を管理するクラス。登録されているPythonスクリプトを実行する
  • Class TaskScript(Task)
    • __init__(rtc, sendto, data, fname)
      コンストラクタ
    • execute(data)
      self.dataに登録されているPythonスクリプトをexec関数で実行する。self.fnameにファイル名が登録されていれば、self.dataのスクリプト実行前に、utils.exec_script_file関数で実行する。また、self.sendtoが設定されていれば、rtc_result変数に格納されているデータをAdaptorに出力する

TaskLogクラス

<log>タグで登録された処理を管理するクラス。登録されたメッセージを出力する
  • Class TaskLog(Task)
    • __init__(rtc, data)
      コンストラクタ
    • execute(data)
      self.dataに登録されているメッセージをself._loggerにエラーメッセージを出力する

TaskStatetransitionクラス

eSEATの内部状態を遷移させるクラス
  • Class TaskStatetransition(Task)
    • __init__(rtc, func, data)
      コンストラクタ
    • execute(data)
      self.dataに登録されている状態にeSEATの内部状態を遷移させる。ただし、self.funcが'push'の時には、現在の状態を状態管理スタックに追加し、'pop'であれば、状態管理スタックの最末尾に登録されている状態に遷移させる

TaskGroupクラス

複数のTaskを管理するクラス。SEATMLの<rule>に対応するクラスで、実行条件が登録されていれば、その条件を満たす場合に登録されているTask列を順に事項する。
  • Class TaskGroup(object)
    • __init__()
      コンストラクタ
    • execute(data=None)
      self.checkConditions()の値が真であれば、self.taskseqに登録されているTaskを実行(executeメソッドの呼び出し)する
    • executeEx(data=None)
      ほぼexecuteメソッドと同じであるが、TaskMessageを実行するときにencodingをNoneに設定する
    • setCondition(cond_str)
      self.conditionにcond_strを登録する
    • checkCondition()
      self.conditionsが文字列の時、eval関数で評価しその結果を返す。それ以外の場合には、self.conditionを返す
    • addTask(task)
      self.taskseqの最後尾にtaskを追加する
    • clearTasks()
      self.taskseqを空にする
    • addPattern(pat)
      self.patternsの最後尾にre.compile(pat)を追加する
    • addKey(key)
      self.keysの最後尾にkeyを追加する
    • match(msg)
      self.keyとmsgが一致するか self.patternsの各要素がmatch(msg)でマッチすれば真を返す。それ以外は偽を返す
    • execute_pre_script()
      self.pre_scriptに登録されているPythonファイルをutils.exec_sctipt_file関数で実行する

Stateクラス

eSEATの内部状態を管理するクラス
  • Class State(object)
    • __init__(name)
      コンストラクタ
    • updateKeys()
      self.keysをself.ruleのキーに更新する。self.ruleは、OrderDictである
    • registerRule(key, tasks)
      self.rule[key]にtasksを登録し、self.keysを更新する。この時keyは、(port, word)というリストである
    • registerRuleArray(key, tasks)
      self.rule[key]の最後尾にtasksを登録し、self.keysを更新する。このメソッドでtaskを登録すると self.rule[key]は配列になる。また、keyは (port, word)というリストである
    • removeRule(key)
      self.rule[key]を削除し、self.keyを更新する
    • matchkey(port, word)
      self.keysから (port,word)に照合するruleを返す。この時wordのみre.match関数のパターンマッチングの結果も使われる。
    • searchkey(port, word)
      matchKeyメソッドとほぼ同じであるが、re.match関数の代わりにre.search関数を使う
    • has_rule(port, word)
      self.keysに (port, word)があるかどうかを調べる。このメソッドは '='オペレータのみで照合をおこなう