Test Failed
Push — master ( 9ea4cd...0ffab9 )
by Koen
03:34 queued 13s
created

atramhasis.skos.create_registry()   B

Complexity

Conditions 2

Size

Total Lines 152
Code Lines 109

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 109
dl 0
loc 152
rs 7
c 0
b 0
f 0
cc 2
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
import logging
2
3
from skosprovider.registry import Registry
4
from skosprovider.uri import UriPatternGenerator
5
from skosprovider_sqlalchemy.providers import SQLAlchemyProvider
6
7
from skosprovider_getty.providers import AATProvider, TGNProvider
8
9
import requests
10
from cachecontrol import CacheControl
11
from cachecontrol.heuristics import ExpiresAfter
12
13
from datetime import date
14
15
log = logging.getLogger(__name__)
16
LICENSES = [
17
    'https://creativecommons.org/licenses/by/4.0/',
18
    'http://data.vlaanderen.be/doc/licentie/modellicentie-gratis-hergebruik/v1.0'
19
]
20
21
22
def create_registry(request):
23
    try:
24
        registry = Registry(instance_scope='threaded_thread')
25
        dataseturigenerator = UriPatternGenerator(
26
            'https://id.erfgoed.net/datasets/thesauri/%s'
27
        )
28
29
        trees = SQLAlchemyProvider(
30
            {'id': 'TREES', 'conceptscheme_id': 1},
31
            request.db
32
        )
33
34
        geo = SQLAlchemyProvider(
35
            {'id': 'GEOGRAPHY', 'conceptscheme_id': 2},
36
            request.db
37
        )
38
39
        styles = SQLAlchemyProvider(
40
            {
41
                'id': 'STYLES',
42
                'conceptscheme_id': 3,
43
                'dataset': {
44
                    'uri': dataseturigenerator.generate(id='stijlen_en_culturen'),
45
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
46
                    'created': [date(2008, 2, 14)],
47
                    'language': ['nl-BE'],
48
                    'license': LICENSES
49
                }
50
51
            },
52
            request.db,
53
            uri_generator=UriPatternGenerator(
54
                'https://id.erfgoed.net/thesauri/stijlen_en_culturen/%s'
55
            )
56
        )
57
58
        materials = SQLAlchemyProvider(
59
            {
60
                'id': 'MATERIALS',
61
                'conceptscheme_id': 4,
62
                'dataset': {
63
                    'uri': dataseturigenerator.generate(id='materialen'),
64
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
65
                    'created': [date(2011, 3, 16)],
66
                    'language': ['nl-BE'],
67
                    'license': LICENSES
68
                }
69
            },
70
            request.db,
71
            uri_generator=UriPatternGenerator(
72
                'https://id.erfgoed.net/thesauri/materialen/%s'
73
            )
74
        )
75
76
        eventtypes = SQLAlchemyProvider(
77
            {
78
                'id': 'EVENTTYPE',
79
                'conceptscheme_id': 5,
80
                'dataset': {
81
                    'uri': dataseturigenerator.generate(id='gebeurtenistypes'),
82
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
83
                    'created': [date(2010, 8, 13)],
84
                    'language': ['nl-BE'],
85
                    'license': LICENSES
86
                }
87
            },
88
            request.db,
89
            uri_generator=UriPatternGenerator(
90
                'https://id.erfgoed.net/thesauri/gebeurtenistypes/%s'
91
            )
92
        )
93
94
        heritagetypes = SQLAlchemyProvider(
95
            {
96
                'id': 'HERITAGETYPE',
97
                'conceptscheme_id': 6,
98
                'dataset': {
99
                    'uri': dataseturigenerator.generate(id='erfgoedtypes'),
100
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
101
                    'created': [date(2008, 2, 14)],
102
                    'language': ['nl-BE'],
103
                    'license': LICENSES
104
                }
105
            },
106
            request.db,
107
            uri_generator=UriPatternGenerator(
108
                'https://id.erfgoed.net/thesauri/erfgoedtypes/%s'
109
            )
110
        )
111
112
        periods = SQLAlchemyProvider(
113
            {
114
                'id': 'PERIOD',
115
                'conceptscheme_id': 7,
116
                'dataset': {
117
                    'uri': dataseturigenerator.generate(id='dateringen'),
118
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
119
                    'created': [date(2008, 2, 14)],
120
                    'language': ['nl-BE'],
121
                    'license': LICENSES
122
                }
123
            },
124
            request.db,
125
            uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/dateringen/%s')
126
        )
127
128
        species = SQLAlchemyProvider(
129
            {
130
                'id': 'SPECIES',
131
                'conceptscheme_id': 8,
132
                'dataset': {
133
                    'uri': dataseturigenerator.generate(id='soorten'),
134
                    'publisher': ['https://id.erfgoed.net/actoren/501'],
135
                    'created': [date(2011, 5, 23)],
136
                    'language': ['nl-BE', 'la'],
137
                    'license': LICENSES
138
                },
139
                'atramhasis.force_display_label_language': 'la'
140
            },
141
            request.db,
142
            uri_generator=UriPatternGenerator('https://id.erfgoed.net/thesauri/soorten/%s')
143
        )
144
145
        # use 'subject': ['external'] for read only external providers
146
        # (only available in REST service)
147
148
        getty_session = CacheControl(requests.Session(), heuristic=ExpiresAfter(weeks=1))
149
150
        aat = AATProvider(
151
            {'id': 'AAT', 'subject': ['external']},
152
            session=getty_session
153
        )
154
155
        tgn = TGNProvider(
156
            {'id': 'TGN', 'subject': ['external']},
157
            session=getty_session
158
        )
159
160
        registry.register_provider(trees)
161
        registry.register_provider(geo)
162
        registry.register_provider(styles)
163
        registry.register_provider(materials)
164
        registry.register_provider(eventtypes)
165
        registry.register_provider(heritagetypes)
166
        registry.register_provider(periods)
167
        registry.register_provider(species)
168
        registry.register_provider(aat)
169
        registry.register_provider(tgn)
170
        return registry
171
    except AttributeError:
172
        log.exception("Attribute error during creation of Registry.")
173
        raise
174