def test_recordtype_create_load(self): t = RecordType.create(self.testcoll, "type1", recordtype_create_values(type_id="type1")) td = RecordType.load(self.testcoll, "type1").get_values() v = recordtype_read_values(type_id="type1") self.assertKeysMatch(td, v) self.assertDictionaryMatch(td, v) return
def types(self): """ Generator enumerates and returns record types that may be stored """ for f in self._children(RecordType): t = RecordType.load(self, f) if t: yield t return
def _check_record_type_values(self, type_id, update="RecordType"): "Helper function checks content of record type entry with supplied type_id" self.assertTrue(RecordType.exists(self.testcoll, type_id)) t = RecordType.load(self.testcoll, type_id) self.assertEqual(t.get_id(), type_id) self.assertEqual(t.get_view_url(), TestHostUri + recordtype_url("testcoll", type_id)) v = recordtype_values(type_id=type_id, update=update) self.assertDictionaryMatch(t.get_values(), v) return t
def get_type(self, type_id): """ Retrieve identified type description type_id local identifier for the type to retrieve. returns a RecordType object for the identified type, or None. """ t = RecordType.load(self, type_id, altparent=self._parentsite) return t
def test_alt_parent_inherit_site(self): # Test inheritance of definitions from site with an alternative collection set coll_id = "newcoll" newcoll = Collection.create(self.testsite, coll_id, collection_create_values(coll_id)) altparents = newcoll.set_alt_entities(self.testcoll) parentids = [ p.get_id() for p in altparents ] self.assertEqual(parentids, ["newcoll", "testcoll", layout.SITEDATA_ID]) self.assertTrue(RecordType.exists(newcoll, "Default_type", altscope="all")) def_type = RecordType.load(newcoll, "Default_type", altscope="all") self.assertEquals(def_type["rdfs:label"], "Default record") return
def _load_types(self): """ Initialize cache of RecordType entities """ if not (self._types_by_id and self._types_by_uri): self._types_by_id = {} self._types_by_uri = {} for type_id in self._children(RecordType, altscope="all"): t = RecordType.load(self, type_id, altscope="all") self._update_type_cache(t) return
def get_type(self, type_id): """ Retrieve identified type description type_id local identifier for the type to retrieve. returns a RecordType object for the identified type, or None. """ self._load_types() t = self._types_by_id.get(type_id, None) # Was it created but not cached? if not t and RecordType.exists(self, type_id, altscope="all"): log.info("___ Collection.get_type: " + type_id) t = RecordType.load(self, type_id, altscope="all") self._update_type_cache(t) return t
def get_type(self, type_id): """ Retrieve identified type description type_id local identifier for the type to retrieve. returns a RecordType object for the identified type, or None. """ self._load_types() t = self._types_by_id.get(type_id, None) # Was it created but not cached? if not t and RecordType.exists(self, type_id, altscope="all"): log.info("___ Collection.get_type: "+type_id) t = RecordType.load(self, type_id, altscope="all") self._update_type_cache(t) return t
def cache_get_vocab(self, vocab_id): """ Retrieve namespace vocabulary entity for id (namespace prefix) from cache. Returns namespace vocabulary entity if found, otherwise None. """ vocab_cache.get_vocab(self, vocab_id) t = vocab_cache.get_vocab(self, vocab_id) # Was it previously created but not cached? if not t and RecordType.exists(self, vocab_id, altscope="all"): msg = ( "Collection.get_vocab %s present but not cached for collection %s"% (vocab_id, self.get_id()) ) log.warning(msg) t = RecordType.load(self, vocab_id, altscope="all") vocab_cache.set_vocab(self, t) # raise ValueError(msg) #@@@ (used in testing to help pinpoint errors) return t
def cache_get_type(self, type_id): """ Retrieve type from cache. Returns type entity if found, otherwise None. """ type_cache.get_type(self, type_id) t = type_cache.get_type(self, type_id) # Was it previously created but not cached? if not t and RecordType.exists(self, type_id, altscope="all"): msg = ( "Collection.get_type %s present but not cached for collection %s"% (type_id, self.get_id()) ) log.warning(msg) t = RecordType.load(self, type_id, altscope="all") type_cache.set_type(self, t) # raise ValueError(msg) #@@@ (used in testing to help pinpoint errors) return t
def test_recordtype_default_data(self): t = RecordType.load(self.testcoll, "Default_type", altparent=self.testsite) self.assertEqual(t.get_id(), "Default_type") self.assertIn("/c/testcoll/_annalist_collection/types/Default_type", t.get_url()) self.assertEqual(t.get_type_id(), "_type") td = t.get_values() self.assertEqual(set(td.keys()), set(recordtype_load_keys(type_uri=True))) v = recordtype_read_values(type_id="Default_type") v.update({ 'rdfs:label': 'Default record type', 'rdfs:comment': 'Default record type, applied when no type is specified when creating a record.', 'annal:uri': 'annal:Default_type' }) self.assertDictionaryMatch(td, v) return
def _check_record_type_values(self, type_id, update="RecordType", type_uri=None, extra_values=None): "Helper function checks content of record type entry with supplied type_id" self.assertTrue(RecordType.exists(self.testcoll, type_id)) t = RecordType.load(self.testcoll, type_id) self.assertEqual(t.get_id(), type_id) self.assertEqual(t.get_view_url(), TestHostUri + recordtype_url("testcoll", type_id)) v = recordtype_values(type_id=type_id, update=update, type_uri=type_uri) if extra_values: v.update(extra_values) # print "t: "+repr(t.get_values()) # print "v: "+repr(v) self.assertDictionaryMatch(t.get_values(), v) return t
def _check_record_type_values(self, type_id, update="RecordType", type_uri=None, extra_values=None ): "Helper function checks content of record type entry with supplied type_id" self.assertTrue(RecordType.exists(self.testcoll, type_id)) t = RecordType.load(self.testcoll, type_id) self.assertEqual(t.get_id(), type_id) self.assertEqual(t.get_view_url(), TestHostUri + recordtype_url("testcoll", type_id)) v = recordtype_values( type_id=type_id, update=update, type_uri=type_uri ) if extra_values: v.update(extra_values) # print "t: "+repr(t.get_values()) # print "v: "+repr(v) self.assertDictionaryMatch(t.get_values(), v) return t
def test_recordtype_default_data(self): t = RecordType.load(self.testcoll, "Default_type", altscope="all") self.assertEqual(t.get_id(), "Default_type") self.assertIn( "/c/_annalist_site/_annalist_collection/%(type_dir)s/Default_type" % self.layout, t.get_url()) self.assertIn( "/c/testcoll/d/%(type_typeid)s/Default_type" % self.layout, t.get_view_url()) self.assertEqual(t.get_type_id(), layout.TYPE_TYPEID) td = t.get_values() self.assertEqual(set(td.keys()), set(recordtype_load_keys(type_uri=True))) v = recordtype_read_values(type_id="Default_type") v.update({ 'rdfs:label': 'Default record', 'annal:uri': 'annal:Default_type' }) v.pop('rdfs:comment', None) self.assertDictionaryMatch(td, v) return
def test_recordtype_default_data(self): t = RecordType.load(self.testcoll, "Default_type", altscope="all") self.assertEqual(t.get_id(), "Default_type") self.assertIn( "/c/_annalist_site/_annalist_collection/%(type_dir)s/Default_type"%self.layout, t.get_url() ) self.assertIn( "/c/testcoll/d/%(type_typeid)s/Default_type"%self.layout, t.get_view_url() ) self.assertEqual(t.get_type_id(), layout.TYPE_TYPEID) td = t.get_values() self.assertEqual(set(td.keys()), set(recordtype_load_keys(type_uri=True))) v = recordtype_read_values(type_id="Default_type") v.update( { 'rdfs:label': 'Default record' , 'annal:uri': 'annal:Default_type' }) v.pop('rdfs:comment', None) self.assertDictionaryMatch(td, v) return
def __init__(self, site, coll, type_id, create_typedata=False): """ Set up type attribute values. site current site object coll collection object in which type is used type_id entity type id, which is a collection-defined value, or one of a number of special site-wide built-in types. create_typedata if true, requests that a RecordTypeData entity be created and saved on disk for user-defined types if it does not already exist. (Creating a RecordTypeData entity ensures that the corresponding data storage location is available for saving entity data.) Attributes of type information object are: recordtype type object describing the identified type entityparent Parent enbtity for entities of this type, or None if the type is not defined for the collection entityaltparent Alternative (site-wide) parent entity for built-in types, or None entityclass Python class object for entity entitymessages a table of message strings for diagnostics relating to operations on this type. and other values as initialized here. """ self.entitysite = site self.entitycoll = coll self.recordtype = None self.entityparent = None self.coll_id = coll.get_id() self.type_id = type_id self.permissions_map = None if type_id in TYPE_CLASS_MAP: self.recordtype = RecordType.load(coll, type_id, site) self.entityparent = coll self.entityaltparent = site self.entityclass = TYPE_CLASS_MAP[type_id] self.entitymessages = TYPE_MESSAGE_MAP[type_id] self.permissions_map = TYPE_PERMISSIONS_MAP[type_id] else: if RecordType.exists(coll, type_id, site): self.recordtype = RecordType.load(coll, type_id, site) if create_typedata and not RecordTypeData.exists(coll, type_id): self.entityparent = RecordTypeData.create(coll, type_id, {}) else: self.entityparent = RecordTypeData(coll, type_id) self.entityaltparent = None self.entityclass = EntityData self.entitymessages = ENTITY_MESSAGES self.permissions_map = ENTITY_PERMISSIONS if not self.recordtype: # .recordtype is used by views.displayinfo to locate the default # view and/or list id for examining records of a particular type. # # Also used in entityedit for getting @type URI/CURIE values. # # Used in render_utils to get link to type record log.warning("EntityTypeInfo.__init__: RecordType %s not found"%type_id) return