def visit_Num(self, node: Node) -> Node: # complex objects are not json-serializable if isinstance(node["n"], complex): node.update( {"n": { "real": node["n"].real, "imag": node["n"].imag }}) return node
def visit_Num(self, node: Node) -> Node: # complex objects are not json-serializable if isinstance(node["n"], complex): node.update({"n": {"real": node["n"].real, "imag": node["n"].imag}}) # infinity and nan are not json-serializable elif not math.isfinite(node["n"]): node.update({"n": str(node["n"])}) return node
def visit_Bytes(self, node: Node) -> VisitResult: try: s = node["s"].decode() encoding = 'utf8' except UnicodeDecodeError: # try with base64 s = encode(node["s"], 'base64').decode().strip() encoding = 'base64' node.update({"s": s, "encoding": encoding}) return node
def visit_NameConstant(self, node: Node) -> Node: if "value" in node: repr_val = repr(node["value"]) if repr_val in ("True", "False"): node.update({"LiteralValue": "True" if node["value"] else "False", "ast_type": "BoolLiteral"}) elif repr_val == "None": node = self.visit_NoneType(node) else: node["ast_type"] = "NameConstant" return node