def _string_to_node(self, string, parent, on_attribute): if on_attribute == "exception": if string: self.first_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute=on_attribute, parent=parent)] return Node.from_fst(baron.parse("try: pass\nexcept %s: pass" % string)[0]["excepts"][0]["exception"], parent=parent, on_attribute=on_attribute) else: self.first_formatting = [] self.delimiter = "" self.target = "" return "" elif on_attribute == "target": if not self.exception: raise Exception("Can't set a target to an exception node that doesn't have an exception set") if string: self.delimiter = "as" self.second_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute=on_attribute, parent=parent)] self.third_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute=on_attribute, parent=parent)] return Node.from_fst(baron.parse("try: pass\nexcept a as %s: pass" % string)[0]["excepts"][0]["target"], parent=parent, on_attribute=on_attribute) else: self.delimiter = "" self.second_formatting = [] self.third_formatting = [] return "" else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "target": return Node.from_fst(baron.parse("for i in %s: pass" % string)[0]["target"], parent=parent, on_attribute=on_attribute) elif on_attribute == "iterator": return Node.from_fst(baron.parse("for %s in i: pass" % string)[0]["iterator"], parent=parent, on_attribute=on_attribute) else: return super(ForNode, self)._string_to_node(string, parent, on_attribute)
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("{a: %s}" % string)[0]["value"][0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "key": return Node.from_fst(baron.parse("{%s: a}" % string)[0]["value"][0]["key"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("def a(b=%s): pass" % string)[0]["arguments"][0]["value"], parent=parent, on_attribute=on_attribute) if string else "" elif on_attribute == "target": return Node.from_fst(baron.parse("def a(%s=b): pass" % string)[0]["arguments"][0]["target"], parent=parent, on_attribute=on_attribute) if string else "" else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "iterator": return Node.from_fst(baron.parse("[x for %s in x]" % string)[0]["generators"][0]["iterator"], parent=parent, on_attribute=on_attribute) elif on_attribute == "target": return Node.from_fst(baron.parse("[x for s in %s]" % string)[0]["generators"][0]["target"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "target": return Node.from_fst(baron.parse("%s = a" % string)[0]["target"], parent=parent, on_attribute=on_attribute) elif on_attribute == "value": return Node.from_fst(baron.parse("a = %s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "first": return Node.from_fst(baron.parse("%s and b" % string)[0]["first"], parent=parent, on_attribute=on_attribute) elif on_attribute == "second": return Node.from_fst(baron.parse("bb and %s" % string)[0]["second"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("@%s()\ndef a(): pass" % string)[0]["decorators"][0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "call": if string: return Node.from_fst(baron.parse("@a%s\ndef a(): pass" % string)[0]["decorators"][0]["call"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("assert %s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "message": if string: self.third_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute=on_attribute, parent=parent)] return Node.from_fst(baron.parse("assert plop, %s" % string)[0]["message"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def __setattr__(self, key, value): if key == "delimiter": if value == ",": self.second_formatting = [] self.third_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] elif value == "as": self.second_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] self.third_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] elif value: raise Exception("Delimiters of an except node can only be 'as' or ',' (without spaces around it).") super(ExceptNode, self).__setattr__(key, value)
def __setattr__(self, key, value): if key == "target": if not (re.match(r'^[a-zA-Z_]\w*$', value) or value in ("", None)): raise Exception("The target of a dotted as name node can only be a 'name' or an empty string or None") if value: self.first_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] self.second_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] super(DottedAsNameNode, self).__setattr__(key, value) if key == "value" and not isinstance(self.value, DotProxyList): setattr(self, "value", DotProxyList(self.value))
def __setattr__(self, key, value): if key == "target": if not (re.match(r'^[a-zA-Z_]\w*$', value) or value in ("", None)): raise Exception("The target of a name as name node can only be a 'name' or an empty string or None") if value: self.first_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] self.second_formatting = [Node.from_fst({"type": "space", "value": " "}, on_attribute="delimiter", parent=self)] elif key == "value": if not (re.match(r'^[a-zA-Z_]\w*$', value) or value in ("", None)): raise Exception("The value of a name as name node can only be a 'name' or an empty string or None") return super(NameAsNameNode, self).__setattr__(key, value)
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("with %s: pass" % string)[0]["contexts"][0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "as": if string: self.first_formatting = [{"type": "space", "value": " "}] self.second_formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("with a as %s: pass" % string)[0]["contexts"][0]["as"], parent=parent, on_attribute=on_attribute) else: self.first_formatting = [] self.second_formatting = [] return "" else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "lower": if string: return Node.from_fst(baron.parse("a[%s:]" % string)[0]["value"][1]["value"]["lower"], parent=parent, on_attribute=on_attribute) elif on_attribute == "upper": if string: return Node.from_fst(baron.parse("a[:%s]" % string)[0]["value"][1]["value"]["upper"], parent=parent, on_attribute=on_attribute) elif on_attribute == "step": self.has_two_colons = bool(string) if string: return Node.from_fst(baron.parse("a[::%s]" % string)[0]["value"][1]["value"]["step"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": self.formatting = [{"type": "space", "value": " "}] if string else [] if string: return Node.from_fst(baron.parse("return %s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("exec %s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "globals": if string: self.second_formatting = [{"type": "space", "value": " "}] self.third_formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("exec a in %s" % string)[0]["globals"], parent=parent, on_attribute=on_attribute) elif on_attribute == "locals": if not self.globals: raise Exception("I can't set locals when globals aren't set.") if string: self.fifth_formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("exec a in b, %s" % string)[0]["locals"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "destination": if string and not self.value: self.formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("print >>%s" % string)[0]["destination"], parent=parent, on_attribute=on_attribute) elif string and self.value: self.formatting = [{"type": "space", "value": " "}] result = Node.from_fst(baron.parse("print >>%s" % string)[0]["destination"], parent=parent, on_attribute=on_attribute) if len(self.value.node_list) and not self.value.node_list[0].type == "comma": self.value = NodeList([Node.from_fst({"type": "comma", "second_formatting": [{"type": "space", "value": " "}], "first_formatting": []}, parent=parent, on_attribute=on_attribute)]) + self.value return result elif self.value.node_list and self.value.node_list[0].type == "comma": self.formatting = [{"type": "space", "value": " "}] self.value = self.value.node_list[1:] else: self.formatting = [] else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": self.first_formatting = [{"type": "space", "value": " "}] if string else [] if string: return Node.from_fst(baron.parse("raise %s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) elif on_attribute == "instance": if not self.value: raise Exception("Can't set instance if there is not value") if string: self.third_formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("raise a, %s" % string)[0]["instance"], parent=parent, on_attribute=on_attribute) elif on_attribute == "traceback": if not self.instance: raise Exception("Can't set traceback if there is not instance") if string: self.fifth_formatting = [{"type": "space", "value": " "}] return Node.from_fst(baron.parse("raise a, b, %s" % string)[0]["traceback"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "result": return Node.from_fst(baron.parse("{%s for x in x}" % string)[0]["result"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "test": return Node.from_fst(baron.parse("while %s: pass" % string)[0]["test"], parent=parent, on_attribute=on_attribute) else: return super(WhileNode, self)._string_to_node(string, parent, on_attribute)
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("lambda *%s: x" % string)[0]["arguments"][0]["value"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("a[%s]" % string)[0]["value"][1]["value"], parent=parent, on_attribute=on_attribute)
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("[x for x in x if %s]" % string)[0]["generators"][0]["ifs"][0]["value"], parent=parent, on_attribute=on_attribute) else: raise Exception("Unhandled case")
def _string_to_node(self, string, parent, on_attribute): if on_attribute == "value": return Node.from_fst(baron.parse("f'%s" % string)[0]["value"], parent=parent, on_attribute=on_attribute) raise Exception