예제 #1
0
 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)
예제 #2
0
def includeme(config):
    TERMEN = SQLAlchemyProvider({
        'id': 'TERMEN',
        'conceptscheme_id': 1
    }, config.registry.dbmaker)
    skosregis = config.get_skos_registry()
    skosregis.register_provider(TERMEN)
예제 #3
0
 def test_set_invalid_expand_strategy(self):
     with pytest.raises(ValueError):
         SQLAlchemyProvider({
             'id': 'SOORTEN',
             'conceptscheme_id': 1
         },
                            self.session_maker,
                            expand_strategy='invalid')
예제 #4
0
 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')
예제 #5
0
 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
예제 #6
0
 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)
예제 #7
0
 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')
예제 #8
0
 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)
예제 #9
0
 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'))
예제 #10
0
    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
            })
예제 #11
0
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
예제 #12
0
 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'
예제 #13
0
    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)
예제 #14
0
 def test_provider_without_cs_id(self):
     with pytest.raises(ValueError):
         SQLAlchemyProvider({'id': 'SOORTEN'}, self.session_maker)
예제 #15
0
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)
예제 #16
0
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)