def setUp(self): super(TestResourceIndex, self).setUp() self.risearch = self.repo.risearch pid = self.fedora_fixtures_ingested[0] self.object = self.repo.get_object(pid) # add some rels to query self.cmodel = DigitalObject(self.api, "control:TestObject") self.object.add_relationship(modelns.hasModel, self.cmodel) self.related = DigitalObject(self.api, "foo:123") self.object.add_relationship(self.rel_isMemberOf, self.related) self.object.add_relationship(self.rel_owner, "testuser")
def test_get_objects_by_cmodel(self): self.ingestFixture("object-with-pid.foxml") pid = self.fedora_fixtures_ingested[0] obj = self.repo.get_object(pid) # add a cmodel to test object so we can find our test object by cmodel cmodel = DigitalObject(self.api, "control:TestObject") obj.add_relationship(modelns.hasModel, cmodel) # query by test cmodel objs_by_cmodel = self.repo.get_objects_with_cmodel(cmodel.uri) self.assertEqual(objs_by_cmodel[0].pid, obj.pid) self.assertEqual(len(objs_by_cmodel), 1) # query by a non-existent cmodel no_cmodel = self.repo.get_objects_with_cmodel("control:NotARealCmodel") self.assertEqual([], no_cmodel)
def infer_object_subtype(self, api, pid=None, create=False, default_pidspace=None): """Construct a DigitalObject or appropriate subclass, inferring the appropriate subtype using :meth:`best_subtype_for_object`. Note that this method signature has been selected to match the :class:`~eulfedora.models.DigitalObject` constructor so that this method might be passed directly to :meth:`get_object` as a `type`:: >>> obj = repo.get_object(pid, type=repo.infer_object_subtype) See also: :class:`TypeInferringRepository` """ obj = DigitalObject(api, pid, create, default_pidspace) if create: return obj if not obj.exists: return obj match_type = self.best_subtype_for_object(obj) return match_type(api, pid)
def members(self): return [DigitalObject(self.api, pid=p) for p in self.member_pids]