@@ -23,7 +23,9 @@ def __init__(self, resource, data, checksum_type='standard', verbosity=0):
23
23
self .data = self .flatten ([data ])
24
24
self .verbosity = verbosity
25
25
if self .resource and self .resource .lower () not in [
26
- 'concept' , 'mapping' , 'source' , 'collection' , 'organization' , 'org' , 'user' , 'userprofile' ]:
26
+ 'concept' , 'mapping' , 'source' , 'collection' , 'organization' , 'org' , 'user' , 'userprofile' ,
27
+ 'conceptname' , 'conceptdescription'
28
+ ]:
27
29
raise ValueError (f"Invalid resource: { self .resource } " )
28
30
if self .checksum_type not in ['standard' , 'smart' ]:
29
31
raise ValueError (f"Invalid checksum type: { self .checksum_type } " )
@@ -48,6 +50,10 @@ def generate(self):
48
50
return self ._generate (checksums )
49
51
50
52
def _get_data_by_resource (self ):
53
+ if self .resource == 'conceptname' :
54
+ data = [self .get_concept_name_fields (_data ) for _data in self .data ]
55
+ if self .resource == 'conceptdescription' :
56
+ data = [self .get_concept_description_fields (_data ) for _data in self .data ]
51
57
if self .resource == 'concept' :
52
58
data = [self .get_concept_fields (_data ) for _data in self .data ]
53
59
elif self .resource == 'mapping' :
@@ -64,9 +70,17 @@ def _get_data_by_resource(self):
64
70
data = self .data
65
71
return data
66
72
73
+ @staticmethod
74
+ def get_concept_name_fields (data ):
75
+ fields = ['locale' , 'locale_preferred' , 'name' , 'name_type' , 'external_id' ]
76
+ return {field : getvalue (data , field , None ) for field in fields }
77
+
78
+ @staticmethod
79
+ def get_concept_description_fields (data ):
80
+ fields = ['locale' , 'locale_preferred' , 'description' , 'description_type' , 'external_id' ]
81
+ return {field : getvalue (data , field , None ) for field in fields }
82
+
67
83
def get_concept_fields (self , data ):
68
- name_fields = ['locale' , 'locale_preferred' , 'name' , 'name_type' , 'external_id' ]
69
- description_fields = ['locale' , 'locale_preferred' , 'description' , 'description_type' , 'external_id' ]
70
84
fields = {
71
85
'concept_class' : getvalue (data , 'concept_class' , None ),
72
86
'datatype' : getvalue (data , 'datatype' , None ),
@@ -80,13 +94,11 @@ def get_concept_fields(self, data):
80
94
'names' : self ._locales_for_checksums (
81
95
data ,
82
96
'names' ,
83
- name_fields ,
84
97
lambda _ : True
85
98
),
86
99
'descriptions' : self ._locales_for_checksums (
87
100
data ,
88
101
'descriptions' ,
89
- description_fields ,
90
102
lambda _ : True
91
103
),
92
104
'parent_concept_urls' : getvalue (data , 'parent_concept_urls' , []),
@@ -97,7 +109,6 @@ def get_concept_fields(self, data):
97
109
'names' : self ._locales_for_checksums (
98
110
data ,
99
111
'names' ,
100
- name_fields ,
101
112
lambda locale : self .is_fully_specified_type (getvalue (locale , 'name_type' , None ))
102
113
),
103
114
}
@@ -280,10 +291,10 @@ def _cleanup(fields):
280
291
result [key ] = value
281
292
return result
282
293
283
- @staticmethod
284
- def _locales_for_checksums (data , relation , fields , predicate_func ):
294
+ def _locales_for_checksums (self , data , relation , predicate_func ):
285
295
locales = getvalue (data , relation , [])
286
- return [{field : getvalue (locale , field , None ) for field in fields } for locale in locales if predicate_func (locale )]
296
+ locale_func = self .get_concept_name_fields if relation == 'names' else self .get_concept_description_fields
297
+ return [locale_func (locale ) for locale in locales if predicate_func (locale )]
287
298
288
299
def _generate (self , obj , hash_algorithm = 'MD5' ):
289
300
# hex encoding is used to make the hash more readable
0 commit comments