def __init__(self, columns): self.__columns = tuple(column for column in columns if not column.startswith("_")) self.__len = len(self.__columns) dct = dict.fromkeys(self.__columns) dct["__producer__"] = self self.__type = type(xstr("Record"), (Record, ), dct)
def __init__(self, columns): self.__columns = tuple(column for column in columns if not column.startswith("_")) self.__len = len(self.__columns) dct = dict.fromkeys(self.__columns) dct["__producer__"] = self self.__type = type(xstr("Record"), (Record,), dct)
def __str__(self): return xstr(self.__unicode__())
def __str__(self): return xstr(self.statement)
def _convert_xml(src, prefixes=None, verb=None, method=jsonify, ensure_ascii=True, separator="\n"): """ Convert data from XML source to Cypher or Geoff. """ TAG_PATTERN = re.compile(r"^(\{(.*)\})?(.*)$") if prefixes: prefixes = dict((b, a) for a, b in prefixes.items()) nodes, rels, buffer, node_ids = [], [], [], [] def local(tag): groups = TAG_PATTERN.match(tag).groups() if prefixes and groups[1] and groups[1] in prefixes: return prefixes[groups[1]] + "_" + groups[2] else: return groups[2] def node_no(node): if node not in nodes: n = len(nodes) + 1 nodes.append(node) node_id = node.attrib.get("id") if node_id and (not ensure_ascii or SIMPLE_NAME.match(node_id)): node_ids.append(node_id) else: node_ids.append("node_{0}".format(n)) return nodes.index(node) def walk(parent, child): if parent is not None: rels.append((node_no(parent), local(child.tag), node_no(child), dict((key, value) for key, value in child.attrib.items() if key != "id") )) for grandchild in child: if len(grandchild) > 0: walk(child, grandchild) def typed(value): try: return int(value) except ValueError: try: return float(value) except ValueError: return value walk(None, ElementTree.fromstring(xstr(src))) for i, node in enumerate(nodes): properties = {} for child in node: is_leaf = len(child) == 0 if child.text: inner_value = typed(child.text.strip()) else: inner_value = None if is_leaf: if inner_value is not None: properties[local(child.tag)] = inner_value for key, value in child.attrib.items(): if key != "id": properties[local(child.tag) + " " + local(key)] = typed(value) if properties: buffer.append("({0} {1})".format(node_ids[i], method(properties, ensure_ascii=ensure_ascii))) else: buffer.append("({0})".format(node_ids[i])) for rel in rels: properties = rel[3] if properties: buffer.append("({0})-[:{1} {3}]->({2})".format( node_ids[rel[0]], rel[1] if SIMPLE_NAME.match(rel[1]) else method(rel[1], ensure_ascii=ensure_ascii), node_ids[rel[2]], method(properties, ensure_ascii=ensure_ascii), )) else: buffer.append("({0})-[:{1}]->({2})".format( node_ids[rel[0]], rel[1] if SIMPLE_NAME.match(rel[1]) else method(rel[1], ensure_ascii=ensure_ascii), node_ids[rel[2]], )) if verb: return verb + "\n" + separator.join(buffer) else: return separator.join(buffer)
def _convert_xml(src, prefixes=None, verb=None, method=jsonify, ensure_ascii=True, separator="\n"): """ Convert data from XML source to Cypher or Geoff. """ TAG_PATTERN = re.compile(r"^(\{(.*)\})?(.*)$") if prefixes: prefixes = dict((b, a) for a, b in prefixes.items()) nodes, rels, buffer, node_ids = [], [], [], [] def local(tag): groups = TAG_PATTERN.match(tag).groups() if prefixes and groups[1] and groups[1] in prefixes: return prefixes[groups[1]] + "_" + groups[2] else: return groups[2] def node_no(node): if node not in nodes: n = len(nodes) + 1 nodes.append(node) node_id = node.attrib.get("id") if node_id and (not ensure_ascii or SIMPLE_NAME.match(node_id)): node_ids.append(node_id) else: node_ids.append("node_{0}".format(n)) return nodes.index(node) def walk(parent, child): if parent is not None: rels.append((node_no(parent), local(child.tag), node_no(child), dict((key, value) for key, value in child.attrib.items() if key != "id"))) for grandchild in child: if len(grandchild) > 0: walk(child, grandchild) def typed(value): try: return int(value) except ValueError: try: return float(value) except ValueError: return value walk(None, ElementTree.fromstring(xstr(src))) for i, node in enumerate(nodes): properties = {} for child in node: is_leaf = len(child) == 0 if child.text: inner_value = typed(child.text.strip()) else: inner_value = None if is_leaf: if inner_value is not None: properties[local(child.tag)] = inner_value for key, value in child.attrib.items(): if key != "id": properties[local(child.tag) + " " + local(key)] = typed(value) if properties: buffer.append("({0} {1})".format( node_ids[i], method(properties, ensure_ascii=ensure_ascii))) else: buffer.append("({0})".format(node_ids[i])) for rel in rels: properties = rel[3] if properties: buffer.append("({0})-[:{1} {3}]->({2})".format( node_ids[rel[0]], rel[1] if SIMPLE_NAME.match(rel[1]) else method( rel[1], ensure_ascii=ensure_ascii), node_ids[rel[2]], method(properties, ensure_ascii=ensure_ascii), )) else: buffer.append("({0})-[:{1}]->({2})".format( node_ids[rel[0]], rel[1] if SIMPLE_NAME.match(rel[1]) else method( rel[1], ensure_ascii=ensure_ascii), node_ids[rel[2]], )) if verb: return verb + "\n" + separator.join(buffer) else: return separator.join(buffer)