class Repository(object): """ Storage container for :class:`.Model` instances. The constructor for this class has an identical signature to that for the :class:`.Graph` class. For example:: >>> from py2neo.ogm import Repository >>> from py2neo.ogm.models.movies import Movie >>> repo = Repository("bolt://neo4j@localhost:7687", password="******") >>> repo.match(Movie, "The Matrix").first() <Movie title='The Matrix'> *New in version 2020.0. In earlier versions, a :class:`.Graph` was required to co-ordinate all reads and writes to the remote database. This class completely replaces that, removing the need to import from any other packages when using OGM.* """ @classmethod def wrap(cls, graph): """ Wrap an existing :class:`.Graph` object as a :class:`.Repository`. """ obj = object.__new__(Repository) obj.graph = graph return obj def __init__(self, profile=None, name=None, **settings): self.graph = Graph(profile, name=name, **settings) def __repr__(self): return "<Repository profile=%r>" % (self.graph.service.profile, ) def reload(self, obj): """ Reload data from the remote graph into the local object. """ self.graph.pull(obj) def save(self, *objects): """ Save data from the local object into the remote graph. """ def push_all(tx): for obj in objects: tx.push(obj) self.graph.update(push_all) def delete(self, obj): """ Delete the object in the remote graph. """ self.graph.delete(obj) def exists(self, obj): """ Check whether the object exists in the remote graph. """ return self.graph.exists(obj) def match(self, model, primary_value=None): """ Select one or more objects from the remote graph. :param model: the :class:`.Model` subclass to match :param primary_value: value of the primary property (optional) :rtype: :class:`.ModelMatch` """ return ModelMatcher(model, self).match(primary_value) def get(self, model, primary_value=None): """ Match and return a single object from the remote graph. :param model: the :class:`.Model` subclass to match :param primary_value: value of the primary property (optional) :rtype: :class:`.Model` """ return self.match(model, primary_value).first() @deprecated("Repository.create is a compatibility alias, " "please use Repository.save instead") def create(self, obj): self.graph.create(obj) @deprecated("Repository.merge is a compatibility alias, " "please use Repository.save instead") def merge(self, obj): self.graph.merge(obj) @deprecated("Repository.pull is a compatibility alias, " "please use Repository.load instead") def pull(self, obj): self.graph.pull(obj) @deprecated("Repository.push is a compatibility alias, " "please use Repository.save instead") def push(self, obj): self.graph.push(obj)
class Repository(object): """ Storage container for :class:`.GraphObject` instances. """ @classmethod def wrap(cls, graph): """ Wrap an existing :class:`.Graph` object as a :class:`.Repository`. """ obj = object.__new__(Repository) obj.graph = graph return obj def __init__(self, profile=None, name=None, **settings): self.graph = Graph(profile, name=name, **settings) def reload(self, obj): """ Reload data from the remote graph into the local object. """ self.graph.pull(obj) def save(self, *objects): """ Save data from the local object into the remote graph. """ def push_all(tx): for obj in objects: tx.push(obj) self.graph.play(push_all) def delete(self, obj): """ Delete the object in the remote graph. """ self.graph.delete(obj) def exists(self, obj): """ Check whether the object exists in the remote graph. """ return self.graph.exists(obj) def match(self, ogm_class, primary_value=None): """ Select one or more objects from the remote graph. :param ogm_class: the :class:`.GraphObject` subclass to match :param primary_value: value of the primary property (optional) :rtype: :class:`.GraphObjectMatch` """ return GraphObjectMatcher(ogm_class, self).match(primary_value) def get(self, ogm_class, primary_value=None): """ Match and return a single object from the remote graph. :param ogm_class: the :class:`.GraphObject` subclass to match :param primary_value: value of the primary property (optional) :rtype: :class:`.GraphObject` """ return self.match(ogm_class, primary_value).first() @deprecated("Repository.create is a compatibility alias, " "please use Repository.save instead") def create(self, obj): self.graph.create(obj) @deprecated("Repository.merge is a compatibility alias, " "please use Repository.save instead") def merge(self, obj): self.graph.merge(obj) @deprecated("Repository.pull is a compatibility alias, " "please use Repository.load instead") def pull(self, obj): self.graph.pull(obj) @deprecated("Repository.push is a compatibility alias, " "please use Repository.save instead") def push(self, obj): self.graph.push(obj)