def debug_print(self, printer, index): debug = self._params.debug if not self._params.enable: printer.simple_write("skipped_action: {0}".format(index)) if not debug: return if debug == True: debug = ["in", "out"] if isinstance(debug, util.basestring): debug_dict = {debug: debug} elif isinstance(debug, list): debug_dict = dict([(k, k) for k in debug]) elif isinstance(debug, dict): debug_dict = debug else: debug_dict = {util.unicode(debug): util.unicode(debug)} variables = {} variables.update({ "in": self.input, "out": self.output, "res": self.output, "this": self.__dict__ }) try: result = template.expand_param(debug_dict, variables) printer.write(result) except Exception as e: printer.write({"error": util.unicode(e)})
def _filter(self, global_env): variables = dict(global_env) variables.update({ "in": self.input, "out": self.output, "res": self.output, "this": self.__dict__ }) for filter_dict in self._params.filter_list: self.output.update(template.expand_param(filter_dict, variables))
def _expand_params(self, parent, key, value, global_env): # 文字列の場合はテンプレートとして扱い、 # 辞書、リストの場合はさらにその中の要素を展開する。 # ここで指定していない数値等の型はそのまま if isinstance(value, util.basestring): # key に + が付いている場合は変数をそのまま代入する if isinstance(key, util.basestring) and key.startswith('+'): original_key = key.lstrip('+') result = template.expand_param({original_key: value}, global_env) parent[original_key] = result[original_key] del parent[key] else: parent[key] = template.expand(value, global_env) elif isinstance(value, dict): # see: scenarioloader.py # 辞書オブジェクトに勝手に __line__ が入ることによって挙動が変わることがあるので # 削除しておく if '__line__' in value: del value['__line__'] for k, v in value.items(): self._expand_params(value, k, v, global_env) elif isinstance(value, list): for k, v in enumerate(value): self._expand_params(value, k, v, global_env)