executor.xml 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <class name="Executor">
  2. <relationships>
  3. <association name="parent" class="MvKController" min="1" max="1"/>
  4. </relationships>
  5. <constructor>
  6. <parameter name="mvk"/>
  7. <body>
  8. <![CDATA[
  9. self.request_queue = [("", "", "load_primitives", [], None)]
  10. self.mvk = mvk
  11. self.first = True
  12. self.mvs_response = None
  13. ]]>
  14. </body>
  15. </constructor>
  16. <scxml initial="init">
  17. <parallel id="init">
  18. <state id="queue">
  19. <state id="queue">
  20. <transition event="execute" target=".">
  21. <parameter name="returnpath"/>
  22. <parameter name="username"/>
  23. <parameter name="operation"/>
  24. <parameter name="params"/>
  25. <parameter name="request_id"/>
  26. <script>
  27. self.request_queue.append(("/" + returnpath, username, operation, params, request_id))
  28. </script>
  29. </transition>
  30. </state>
  31. </state>
  32. <state id="execute" initial="idle">
  33. <state id="idle">
  34. <transition cond="self.request_queue" target="../execution"/>
  35. </state>
  36. <state id="execution">
  37. <onentry>
  38. <script>
  39. try:
  40. _, username, operation, params, _ = self.request_queue[0]
  41. self.mvs_commands = self.mvk.execute_yields(username, operation, params, self.mvs_response)
  42. except:
  43. import traceback
  44. traceback.print_exc()
  45. print("Exec error")
  46. #TODO for debugging
  47. sys.exit(0)
  48. self.mvs_commands = None
  49. </script>
  50. </onentry>
  51. <transition cond="self.mvs_commands is None" target="../idle">
  52. <script>
  53. returnpath, _, _, _, request_id = self.request_queue.pop(0)
  54. self.mvs_response = None
  55. </script>
  56. <raise event="executed" scope="narrow" target="'parent' + returnpath">
  57. <parameter expr="self.mvk.returnvalue"/>
  58. <parameter expr="self.mvk.success"/>
  59. <parameter expr="request_id"/>
  60. </raise>
  61. <script>
  62. self.mvk.returnvalue = None
  63. self.mvk.success = True
  64. self.first = True
  65. </script>
  66. </transition>
  67. <transition cond="len(self.mvs_commands) > 0" target="../waiting_for_response">
  68. <raise event="HTTP_input" scope="narrow" target="'parent/to_mvs'">
  69. <parameter expr="'requests=%s' % json.dumps(self.mvs_commands)"/>
  70. <parameter expr="'parent/executor'"/>
  71. </raise>
  72. </transition>
  73. <transition cond="len(self.mvs_commands) == 0" target=".">
  74. </transition>
  75. </state>
  76. <state id="waiting_for_response">
  77. <transition event="HTTP_output" target="../execution">
  78. <parameter name="data"/>
  79. <script>
  80. self.mvs_response = [v[0] for v in json.loads(data["data"])]
  81. if len(self.mvs_response) == 1:
  82. self.mvs_response = self.mvs_response[0]
  83. </script>
  84. </transition>
  85. </state>
  86. </state>
  87. </parallel>
  88. </scxml>
  89. </class>