def _check_menu(self, uri_pattern=None): if not uri_pattern: uri_pattern = 'urn:x-skosprovider:menu:%s' sql_prov = SQLAlchemyProvider({ 'id': 'MENU', 'conceptscheme_id': 1 }, self.session_maker) self.assertEqual(11, len(sql_prov.get_all())) eb = sql_prov.get_by_id(1) self.assertIsInstance(eb, Concept) self.assertEqual(1, eb.id) self.assertEqual(uri_pattern % '1', eb.uri) self.assertEqual('Egg and Bacon', eb.label().label) self.assertEqual('prefLabel', eb.label().type) self.assertEqual([], eb.notes) eb = sql_prov.get_by_uri(uri_pattern % '3') self.assertIsInstance(eb, Concept) self.assertEqual(3, eb.id) self.assertEqual(uri_pattern % '3', eb.uri) spam = sql_prov.find({'label': 'Spam'}) self.assertEqual(8, len(spam)) eb = sql_prov.get_by_id(11) self.assertIsInstance(eb, Concept) self.assertEqual(11, eb.id) self.assertEqual('Lobster Thermidor', eb.label().label) self.assertIsInstance(eb.notes[0], Note) self.assertIn('Mornay', eb.notes[0].note) self.assertEqual('note', eb.notes[0].type)
def includeme(config): TERMEN = SQLAlchemyProvider({ 'id': 'TERMEN', 'conceptscheme_id': 1 }, config.registry.dbmaker) skosregis = config.get_skos_registry() skosregis.register_provider(TERMEN)
def test_set_invalid_expand_strategy(self): with pytest.raises(ValueError): SQLAlchemyProvider({ 'id': 'SOORTEN', 'conceptscheme_id': 1 }, self.session_maker, expand_strategy='invalid')
def test_internal_providers(self): self.dummy.provider = SQLAlchemyProvider(metadata={ 'id': 'Test', 'conceptscheme_id': 1 }, session_maker=None) self.dummy.internal_providers('ok') self.assertEqual(self.dummy.dummy, 'ok')
def test_override_expand_strategy(self): # Set up provider provider = SQLAlchemyProvider({ 'id': 'SOORTEN', 'conceptscheme_id': 1 }, self.session_maker, expand_strategy='visit') assert 'visit' == provider.expand_strategy
def test_external_providers(self): self.dummy.provider = SQLAlchemyProvider(metadata={ 'id': 'Test', 'conceptscheme_id': 1, 'subject': ['external'] }, session_maker=None) self.assertRaises(HTTPMethodNotAllowed, self.dummy.internal_providers, 'ok') self.assertIsNone(self.dummy.dummy)
def setUp(self): Base.metadata.create_all(self.engine) self.session = self.session_maker() Initialiser(self.session).init_all() self.visitationprovider = SQLAlchemyProvider( { 'id': 'SOORTEN', 'conceptscheme_id': 1 }, self.session_maker, expand_strategy='visit')
def test_set_uri_generator(self): from skosprovider.uri import UriPatternGenerator # Set up provider provider = SQLAlchemyProvider({ 'id': 'SOORTEN', 'conceptscheme_id': 1 }, self.session_maker, uri_generator=UriPatternGenerator( 'http://id.example.com/trees/%s')) assert 'http://id.example.com/trees/1' == provider.uri_generator.generate( id=1)
def setUp(self): Base.metadata.create_all(self.engine) self.session = self.session_maker() Initialiser(self.session).init_all() create_data(self.session) self.provider = SQLAlchemyProvider( { 'id': 'SOORTEN', 'conceptscheme_id': 1 }, self.session_maker, uri_generator=UriPatternGenerator('urn:x-skosprovider-sa:test:%s'))
def _check_trees(self, conceptscheme_label): sql_prov = SQLAlchemyProvider({ 'id': 'TREES', 'conceptscheme_id': 1 }, self.session_maker) dump = dict_dumper(sql_prov) self.assertEqual(conceptscheme_label, sql_prov.concept_scheme.labels[0].label) obj_1 = [ item for item in dump if item['uri'] == 'http://id.trees.org/2' ][0] self.assertEqual(obj_1['broader'], []) self.assertEqual(obj_1['id'], 2) self.assertEqual(obj_1['member_of'], [3]) self.assertEqual(obj_1['narrower'], []) label_en = [ label for label in obj_1['labels'] if label['language'] == 'en' ][0] self.assertDictEqual(label_en, { 'label': 'The Chestnut', 'language': 'en', 'type': 'prefLabel' }) label_nl = [ label for label in obj_1['labels'] if label['language'] == 'nl' ][0] self.assertDictEqual(label_nl, { 'label': 'De Paardekastanje', 'language': 'nl', 'type': 'altLabel' }) label_fr = [ label for label in obj_1['labels'] if label['language'] == 'fr' ][0] self.assertDictEqual(label_fr, { 'label': u'la châtaigne', 'language': 'fr', 'type': 'altLabel' }) self.assertDictEqual( obj_1['notes'][0], { 'language': 'en', 'note': 'A different type of tree.', 'type': 'definition', 'markup': None })
def get_internal_providers(config): ret = [] engine = create_engine(config.get_settings()['sqlalchemy.url'], echo=True) engine.connect() result = engine.execute('SELECT * from conceptscheme') for row in result: scheme_db_id = row[0] scheme_uri = row[1] scheme_id = scheme_uri.split('/')[-1] scheme = SQLAlchemyProvider( { 'id': scheme_id, 'conceptscheme_id': scheme_db_id }, config.registry.dbmaker, uri_generator=UriPatternGenerator(f'{scheme_uri}/%s')) ret.append(scheme) engine.dispose() return ret
def test_gen_uri(self): from skosprovider_sqlalchemy.models import Concept, ConceptScheme from skosprovider.uri import UriPatternGenerator # Set up provider provider = SQLAlchemyProvider({ 'id': 'SOORTEN', 'conceptscheme_id': 99 }, self.session_maker, uri_generator=UriPatternGenerator( 'http://id.example.com/trees/%s')) c1 = Concept(concept_id=1, conceptscheme=ConceptScheme( id=99, uri='http://id.example.com/trees')) session = self.session_maker() session.add(c1) session.commit() assert c1.uri is None c2 = provider.get_by_id(1) assert c2.uri == 'http://id.example.com/trees/1'
def setUp(self): self.config = Configurator(settings=settings) self.config.add_route('login', '/auth/login') self.config.add_route('logout', '/auth/logout') includeme(self.config) self.config.add_static_view('atramhasis/static', 'atramhasis:static') Base.metadata.drop_all(self.engine) Base.metadata.create_all(self.engine) Base.metadata.bind = self.engine self.config.registry.dbmaker = self.session_maker self.config.add_request_method(db, reify=True) with transaction.manager: local_session = self.session_maker() import_provider( trees, ConceptScheme(id=1, uri='urn:x-skosprovider:trees'), local_session) import_provider(materials, ConceptScheme(id=4, uri='urn:x-vioe:materials'), local_session) import_provider(geo, ConceptScheme(id=2), local_session) local_session.add(ConceptScheme(id=3)) local_session.add(LabelType('hiddenLabel', 'A hidden label.')) local_session.add(LabelType('altLabel', 'An alternative label.')) local_session.add(LabelType('prefLabel', 'A preferred label.')) local_session.add(Language('nl', 'Dutch')) local_session.add(Language('en', 'English')) local_session.add(MatchType('broadMatch', '')) local_session.add(MatchType('closeMatch', '')) local_session.add(MatchType('exactMatch', '')) local_session.add(MatchType('narrowMatch', '')) local_session.add(MatchType('relatedMatch', '')) local_session.add(Language(id='de', name='test')) TREES = SQLAlchemyProvider({ 'id': 'TREES', 'conceptscheme_id': 1 }, self.config.registry.dbmaker) GEO = SQLAlchemyProvider({ 'id': 'GEOGRAPHY', 'conceptscheme_id': 2 }, self.config.registry.dbmaker) STYLES = SQLAlchemyProvider({ 'id': 'STYLES', 'conceptscheme_id': 3 }, self.config.registry.dbmaker) MATERIALS = SQLAlchemyProvider( { 'id': 'MATERIALS', 'conceptscheme_id': 4 }, self.config.registry.dbmaker, uri_generator=UriPatternGenerator('urn:x-vioe:materials:%s')) self.config.add_subscriber(self.mock_event_handler, ProtectedResourceEvent) self.config.add_subscriber( self.mock_event_handler_provider_unavailable, ProtectedResourceEvent) skosregis = self.config.get_skos_registry() skosregis.register_provider(TREES) skosregis.register_provider(GEO) skosregis.register_provider(STYLES) skosregis.register_provider(MATERIALS) skosregis.register_provider(TEST) self.app = self.config.make_wsgi_app() self.testapp = TestApp(self.app)
def test_provider_without_cs_id(self): with pytest.raises(ValueError): SQLAlchemyProvider({'id': 'SOORTEN'}, self.session_maker)
def includeme(config): # pragma: no cover TREES = SQLAlchemyProvider({ 'id': 'TREES', 'conceptscheme_id': 1 }, config.registry.dbmaker) GEO = SQLAlchemyProvider({ 'id': 'GEOGRAPHY', 'conceptscheme_id': 2 }, config.registry.dbmaker) STYLES = SQLAlchemyProvider({ 'id': 'STYLES', 'conceptscheme_id': 3 }, config.registry.dbmaker) MATERIALS = SQLAlchemyProvider( { 'id': 'MATERIALS', 'conceptscheme_id': 4 }, config.registry.dbmaker, uri_generator=UriPatternGenerator('urn:x-vioe:materials:%s')) # use 'subject': ['external'] for read only external providers (only available in REST service) AAT = AATProvider({'id': 'AAT', 'subject': ['external']}, ) TGN = TGNProvider({'id': 'TGN', 'subject': ['external']}) EH_PERIOD = HeritagedataProvider( { 'id': 'EH_PERIOD', 'subject': ['external'] }, scheme_uri='http://purl.org/heritagedata/schemes/eh_period') EH_MONUMENT_TYPE = HeritagedataProvider( { 'id': 'EH_MONUMENT_TYPE', 'subject': ['external'] }, scheme_uri='http://purl.org/heritagedata/schemes/eh_tmt2') EH_MATERIALS = HeritagedataProvider( { 'id': 'EH_MATERIALS', 'subject': ['external'] }, scheme_uri='http://purl.org/heritagedata/schemes/eh_tbm') skosregis = config.get_skos_registry() skosregis.register_provider(TREES) skosregis.register_provider(GEO) skosregis.register_provider(STYLES) skosregis.register_provider(MATERIALS) skosregis.register_provider(AAT) skosregis.register_provider(TGN) skosregis.register_provider(EH_PERIOD) skosregis.register_provider(EH_MONUMENT_TYPE) skosregis.register_provider(EH_MATERIALS)
def includeme(config): # pragma: no cover dataseturigenerator = UriPatternGenerator('https://id.erfgoed.net/datasets/thesauri/%s') TREES = SQLAlchemyProvider( {'id': 'TREES', 'conceptscheme_id': 1}, config.registry.dbmaker ) GEO = SQLAlchemyProvider( {'id': 'GEOGRAPHY', 'conceptscheme_id': 2}, config.registry.dbmaker ) STYLES = SQLAlchemyProvider( { 'id': 'STYLES', 'conceptscheme_id': 3, 'dataset': { 'uri': dataseturigenerator.generate(id='stijlen_en_culturen'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2008,2,14)], 'language': ['nl-BE'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/stijlen_en_culturen/%s') ) MATERIALS = SQLAlchemyProvider( { 'id': 'MATERIALS', 'conceptscheme_id': 4, 'dataset': { 'uri': dataseturigenerator.generate(id='materialen'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2011,3,16)], 'language': ['nl-BE'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/materialen/%s') ) EVENTTYPES = SQLAlchemyProvider( { 'id': 'EVENTTYPE', 'conceptscheme_id': 5, 'dataset': { 'uri': dataseturigenerator.generate(id='gebeurtenistypes'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2010,8,13)], 'language': ['nl-BE'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/gebeurtenistypes/%s') ) HERITAGETYPES = SQLAlchemyProvider( { 'id': 'HERITAGETYPE', 'conceptscheme_id': 6, 'dataset': { 'uri': dataseturigenerator.generate(id='erfgoedtypes'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2008,2,14)], 'language': ['nl-BE'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/erfgoedtypes/%s') ) PERIODS = SQLAlchemyProvider( { 'id': 'PERIOD', 'conceptscheme_id': 7, 'dataset': { 'uri': dataseturigenerator.generate(id='dateringen'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2008,2,14)], 'language': ['nl-BE'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/dateringen/%s') ) SPECIES = SQLAlchemyProvider( { 'id': 'SPECIES', 'conceptscheme_id': 8, 'dataset': { 'uri': dataseturigenerator.generate(id='soorten'), 'publisher': ['https://id.erfgoed.net/actoren/501'], 'created': [date(2011,5,23)], 'language': ['nl-BE', 'la'], 'license': [ 'https://creativecommons.org/licenses/by/4.0/', 'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0' ] } }, config.registry.dbmaker, uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/soorten/%s') ) # use 'subject': ['external'] for read only external providers (only available in REST service) getty_session = CacheControl(requests.Session(), heuristic=ExpiresAfter(weeks=1)) AAT = AATProvider( {'id': 'AAT', 'subject': ['external']}, session=getty_session ) TGN = TGNProvider( {'id': 'TGN', 'subject': ['external']}, session=getty_session ) eh_session = CacheControl(requests.Session(), heuristic=ExpiresAfter(weeks=1)) EH_PERIOD = HeritagedataProvider( {'id': 'EH_PERIOD', 'subject': ['external']}, scheme_uri='http://purl.org/heritagedata/schemes/eh_period', session=eh_session ) EH_MONUMENT_TYPE = HeritagedataProvider( {'id': 'EH_MONUMENT_TYPE', 'subject': ['external']}, scheme_uri='http://purl.org/heritagedata/schemes/eh_tmt2', session=eh_session ) EH_MATERIALS = HeritagedataProvider( {'id': 'EH_MATERIALS', 'subject': ['external']}, scheme_uri='http://purl.org/heritagedata/schemes/eh_tbm', session=eh_session ) skosregis = config.get_skos_registry() skosregis.register_provider(TREES) skosregis.register_provider(GEO) skosregis.register_provider(STYLES) skosregis.register_provider(MATERIALS) skosregis.register_provider(EVENTTYPES) skosregis.register_provider(HERITAGETYPES) skosregis.register_provider(PERIODS) skosregis.register_provider(SPECIES) skosregis.register_provider(AAT) skosregis.register_provider(TGN) skosregis.register_provider(EH_PERIOD) skosregis.register_provider(EH_MONUMENT_TYPE) skosregis.register_provider(EH_MATERIALS)