Beispiel #1
0
    def _save(self, query):
        values = self.wrap()
        identifier, update = values.pop('identifier')
        self._tmp_identifier = generate_tmp_identifier()

        ##  create or update the vertex
        create = False
        if not identifier:
            create = True
            query = query.create_vertex()
        else:
            query = query.by_identifier(self.identifier)

        for name, (value, update) in values.iteritems():
            if create or update:
                query.set(name, value)
        query.store(self._tmp_identifier)

        # save any edge if needed

        for edge in chain(self.incomings, self.outgoings):
            if not edge.saving():
                edge._save(query)

        return query
Beispiel #2
0
 def tmp_identifier(vertex_name, query):
     vertex = getattr(self, vertex_name)
     if vertex.new():
         if not vertex.saving():
             vertex._save(query)
     else:
         # FIXME: don't need to load the object to retrieve the
         # identifier
         if not vertex._tmp_identifier:
             query = query.by_identifier(vertex.identifier)
             vertex._tmp_identifier = generate_tmp_identifier()
             query.store(vertex._tmp_identifier)
     return vertex._tmp_identifier
Beispiel #3
0
    def _save(self, query):
        values = self.wrap()
        identifier, update = values.pop('identifier')
        self._tmp_identifier = generate_tmp_identifier()

        ##  create or update
        create = False
        if not identifier:
            create = True

            def tmp_identifier(vertex_name, query):
                vertex = getattr(self, vertex_name)
                if vertex.new():
                    if not vertex.saving():
                        vertex._save(query)
                else:
                    # FIXME: don't need to load the object to retrieve the
                    # identifier
                    if not vertex._tmp_identifier:
                        query = query.by_identifier(vertex.identifier)
                        vertex._tmp_identifier = generate_tmp_identifier()
                        query.store(vertex._tmp_identifier)
                return vertex._tmp_identifier
            start = tmp_identifier('start', query)
            end = tmp_identifier('end', query)
            query = query.create_edge(
                start,
                end,
            )
        else:
            query = query.by_identifier(self.identifier)

        for name, (value, update) in values.iteritems():
            if create or update:
                query.set(name, value)

        self._tmp_identifier = generate_tmp_identifier()
        query.store(self._tmp_identifier)
        return query