Skip to content

Commit e523891

Browse files
committed
OpenConceptLab/ocl_issues#1867 | Checksum | checksum for locales
1 parent 9e694c6 commit e523891

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

ocldev/checksum.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ def __init__(self, resource, data, checksum_type='standard', verbosity=0):
2323
self.data = self.flatten([data])
2424
self.verbosity = verbosity
2525
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+
]:
2729
raise ValueError(f"Invalid resource: {self.resource}")
2830
if self.checksum_type not in ['standard', 'smart']:
2931
raise ValueError(f"Invalid checksum type: {self.checksum_type}")
@@ -48,6 +50,10 @@ def generate(self):
4850
return self._generate(checksums)
4951

5052
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]
5157
if self.resource == 'concept':
5258
data = [self.get_concept_fields(_data) for _data in self.data]
5359
elif self.resource == 'mapping':
@@ -64,9 +70,17 @@ def _get_data_by_resource(self):
6470
data = self.data
6571
return data
6672

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+
6783
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']
7084
fields = {
7185
'concept_class': getvalue(data, 'concept_class', None),
7286
'datatype': getvalue(data, 'datatype', None),
@@ -80,13 +94,11 @@ def get_concept_fields(self, data):
8094
'names': self._locales_for_checksums(
8195
data,
8296
'names',
83-
name_fields,
8497
lambda _: True
8598
),
8699
'descriptions': self._locales_for_checksums(
87100
data,
88101
'descriptions',
89-
description_fields,
90102
lambda _: True
91103
),
92104
'parent_concept_urls': getvalue(data, 'parent_concept_urls', []),
@@ -97,7 +109,6 @@ def get_concept_fields(self, data):
97109
'names': self._locales_for_checksums(
98110
data,
99111
'names',
100-
name_fields,
101112
lambda locale: self.is_fully_specified_type(getvalue(locale, 'name_type', None))
102113
),
103114
}
@@ -280,10 +291,10 @@ def _cleanup(fields):
280291
result[key] = value
281292
return result
282293

283-
@staticmethod
284-
def _locales_for_checksums(data, relation, fields, predicate_func):
294+
def _locales_for_checksums(self, data, relation, predicate_func):
285295
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)]
287298

288299
def _generate(self, obj, hash_algorithm='MD5'):
289300
# hex encoding is used to make the hash more readable

0 commit comments

Comments
 (0)