Skip to content

Commit 550fa86

Browse files
authored
Merge pull request #1857 from ivis-weko3-dev/feature/W2025-33
Feature/w2025 33
2 parents c3c42f4 + f2335f6 commit 550fa86

71 files changed

Lines changed: 5028 additions & 2342 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎modules/invenio-oaiharvester/invenio_oaiharvester/harvester.py‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,9 +1453,7 @@ def ddi_harvest_processing(self, harvest_data, res):
14531453
"""Process parsing DDI data."""
14541454
def get_mapping_ddi():
14551455
"""Get DDI mapping."""
1456-
item_type_id = self.itemtype.id
1457-
type_mapping = Mapping.get_record(item_type_id)
1458-
item_map = get_mapping(type_mapping, "ddi_mapping")
1456+
item_map = get_mapping(self.itemtype.id, "ddi_mapping")
14591457
lst_keys_x = list(item_map.keys())
14601458
for i in lst_keys_x:
14611459
lst_keys.append(i)
@@ -1543,7 +1541,7 @@ def parse_to_obj_data_by_mapping_keys(vals, keys):
15431541
def get_same_key_from_form(sub_key):
15441542
"""Get the same key with sub_key in form."""
15451543
for item_sub_key_form in item_sub_keys_form:
1546-
if item_sub_key_form.replace("[]", "") == sub_key:
1544+
if item_sub_key_form.replace("[]", "") in sub_key.split(','):
15471545
sub_key = item_sub_key_form
15481546
break
15491547
return sub_key

‎modules/invenio-oaiharvester/tests/test_harvester.py‎

Lines changed: 230 additions & 228 deletions
Large diffs are not rendered by default.

‎modules/invenio-oaiserver/invenio_oaiserver/response.py‎

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -711,13 +711,11 @@ def check_correct_system_props_mapping(object_uuid, system_mapping_config):
711711
712712
Correct mapping mean item map have the 2 field same with config
713713
"""
714-
from weko_records.api import ItemsMetadata, Mapping
714+
from weko_records.api import ItemsMetadata
715715
from weko_records.serializers.utils import get_mapping
716716

717717
item_type = ItemsMetadata.get_by_object_id(object_uuid)
718-
item_type_id = item_type.item_type_id
719-
type_mapping = Mapping.get_record(item_type_id)
720-
item_map = get_mapping(type_mapping, "jpcoar_mapping")
718+
item_map = get_mapping(item_type.item_type_id, "jpcoar_mapping")
721719

722720
if system_mapping_config:
723721
for key in system_mapping_config:
@@ -734,49 +732,49 @@ def combine_record_file_urls(record, object_uuid, meta_prefix):
734732
735733
Get file property information by item_mapping and put to metadata.
736734
"""
737-
from weko_records.api import ItemsMetadata, Mapping
735+
from weko_records.api import ItemsMetadata
738736
from weko_records.serializers.utils import get_mapping
739737
from weko_schema_ui.schema import get_oai_metadata_formats
740738

741739
metadata_formats = get_oai_metadata_formats(current_app)
742740
item_type = ItemsMetadata.get_by_object_id(object_uuid)
743-
item_type_id = item_type.item_type_id
744-
type_mapping = Mapping.get_record(item_type_id)
745741
mapping_type = metadata_formats[meta_prefix]['serializer'][1]['schema_type']
746-
item_map = get_mapping(type_mapping,
742+
item_map = get_mapping(item_type.item_type_id,
747743
"{}_mapping".format(mapping_type))
748-
file_keys = None
744+
file_keys_str = None
749745
if item_map:
750746
file_props = current_app.config["OAISERVER_FILE_PROPS_MAPPING"]
751747
if mapping_type in file_props:
752-
file_keys = item_map.get(file_props[mapping_type])
748+
file_keys_str = item_map.get(file_props[mapping_type])
753749
else:
754-
file_keys = None
750+
file_keys_str = None
755751

756-
if not file_keys:
752+
if not file_keys_str:
757753
return record
758754
else:
759-
file_keys = file_keys.split('.')
760-
761-
if len(file_keys) == 3 and record.get(file_keys[0]):
762-
attr_mlt = record[file_keys[0]]["attribute_value_mlt"]
763-
if isinstance(attr_mlt, list):
764-
for attr in attr_mlt:
765-
if attr.get('filename'):
766-
if not attr.get(file_keys[1]):
767-
attr[file_keys[1]] = {}
768-
attr[file_keys[1]][file_keys[2]] = create_files_url(
769-
request.url_root,
770-
record.get('recid'),
771-
attr.get('filename'))
772-
elif isinstance(attr_mlt, dict) and \
773-
attr_mlt.get('filename'):
774-
if not attr_mlt.get(file_keys[1]):
775-
attr_mlt[file_keys[1]] = {}
776-
attr_mlt[file_keys[1]][file_keys[2]] = create_files_url(
777-
request.url_root,
778-
record.get('recid'),
779-
attr_mlt.get('filename'))
755+
file_keys = file_keys_str.split(',')
756+
757+
for file_key in file_keys:
758+
key = file_key.split('.')
759+
if len(key) == 3 and record.get(key[0]):
760+
attr_mlt = record[key[0]]["attribute_value_mlt"]
761+
if isinstance(attr_mlt, list):
762+
for attr in attr_mlt:
763+
if attr.get('filename'):
764+
if not attr.get(key[1]):
765+
attr[key[1]] = {}
766+
attr[key[1]][key[2]] = create_files_url(
767+
request.url_root,
768+
record.get('recid'),
769+
attr.get('filename'))
770+
elif isinstance(attr_mlt, dict) and \
771+
attr_mlt.get('filename'):
772+
if not attr_mlt.get(key[1]):
773+
attr_mlt[key[1]] = {}
774+
attr_mlt[key[1]][key[2]] = create_files_url(
775+
request.url_root,
776+
record.get('recid'),
777+
attr_mlt.get('filename'))
780778

781779
return record
782780

‎modules/invenio-records-rest/invenio_records_rest/serializers/base.py‎

Lines changed: 64 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import pickle
1515

1616
import pytz
17+
import traceback
18+
19+
from flask import current_app
1720
from weko_records.api import Mapping
1821

1922
from invenio_records_rest.config import RECORDS_REST_DEFAULT_MAPPING_DICT
@@ -155,51 +158,76 @@ def get_keys(arr):
155158
def get_mapping(item_type_id):
156159
"""Get keys of metadata record by mapping."""
157160
# Get default mapping key and lang from config (defaults are None).
161+
from weko_items_ui.utils import get_options_and_order_list, get_hide_list_by_schema_form
162+
from weko_records.api import ItemTypes
163+
158164
mapping_dict = RECORDS_REST_DEFAULT_MAPPING_DICT
159165
# Get mapping of this record.
160-
mapping = Mapping.get_record(item_type_id)
161-
if not mapping:
166+
meta_option, item_type_mapping = get_options_and_order_list(item_type_id)
167+
item_type = ItemTypes.get_by_id(item_type_id)
168+
item_type_list = None
169+
if item_type:
170+
item_type_list = item_type.render.get('table_row')
171+
hide_list = get_hide_list_by_schema_form(item_type_id)
172+
if not item_type_mapping or not item_type_list:
162173
return mapping_dict
163174
# Update default mapping key and lang by mapping of this record.
164175
identifier = 'system_identifier'
165-
for k, v in mapping.items():
166-
if not type(v.get('jpcoar_mapping')) is dict:
167-
continue
168-
for k1, v1 in v.get('jpcoar_mapping').items():
169-
for k2, v2 in mapping_dict.items():
170-
if k1 != k2.split(':')[1] or not type(v1) is dict:
176+
for k in item_type_list:
177+
if k in item_type_mapping:
178+
v = item_type_mapping.get(k)
179+
prop_hidden = meta_option.get(k, {}).get('option', {}).get('hidden', False)
180+
if not type(v.get('jpcoar_mapping')) is dict \
181+
or prop_hidden:
182+
continue
183+
for k1, v1 in v.get('jpcoar_mapping').items():
184+
skip_flag = False
185+
for h in hide_list:
186+
if h.startswith(k) and \
187+
(('@value' in v1.keys() and
188+
h.endswith(v1.get('@value').split('.')[-1])) or \
189+
('creatorName' in v1.keys() and
190+
h.endswith(v1.get('creatorName', {}).get('@value').split('.')[-1]))):
191+
skip_flag = True
192+
if skip_flag:
171193
continue
172-
key = identifier if identifier in k else k
173-
key_arr = ['metadata', key, 'attribute_value_mlt', 0]
174-
lang_arr = key_arr.copy()
175-
if k1 == 'creator':
176-
name = v1.get('creatorName')
177-
# Set all key for __lang
178-
attr = name.get('@attributes', {})
179-
xml_lang = attr.get('xml:lang', '').split('.')
180-
lang_arr.extend(get_keys(xml_lang))
181-
# Set all key for key
182-
name_arr = name.get('@value').split('.')
183-
key_arr.extend(get_keys(name_arr))
184-
elif '.' in v1.get('@value', ''):
185-
# Set key for __lang
186-
attr = v1.get('@attributes', {})
187-
xml_lang = attr.get('xml:lang', '').split('.')
188-
lang_arr.extend(get_keys(xml_lang))
189-
# Set all key for key
190-
name_arr = v1.get('@value').split('.')
191-
key_arr.extend(get_keys(name_arr))
192-
else:
193-
# Set key for __lang
194-
attr = v1.get('@attributes', {})
195-
lang_arr.append(attr.get('xml:lang'))
196-
# Set all key for key
197-
key_arr.append(v1.get('@value'))
198-
mapping_dict[k2] = key_arr
199-
mapping_dict['{}__lang'.format(k2)] = lang_arr
194+
for k2, v2 in mapping_dict.items():
195+
if k1 != k2.split(':')[1] or \
196+
not type(v1) is dict or \
197+
mapping_dict[k2]:
198+
continue
199+
key = identifier if identifier in k else k
200+
key_arr = ['metadata', key, 'attribute_value_mlt', 0]
201+
lang_arr = key_arr.copy()
202+
if k1 == 'creator':
203+
name = v1.get('creatorName')
204+
# Set all key for __lang
205+
attr = name.get('@attributes', {})
206+
xml_lang = attr.get('xml:lang', '').split('.')
207+
lang_arr.extend(get_keys(xml_lang))
208+
# Set all key for key
209+
name_arr = name.get('@value').split('.')
210+
key_arr.extend(get_keys(name_arr))
211+
elif '.' in v1.get('@value', ''):
212+
# Set key for __lang
213+
attr = v1.get('@attributes', {})
214+
xml_lang = attr.get('xml:lang', '').split('.')
215+
lang_arr.extend(get_keys(xml_lang))
216+
# Set all key for key
217+
name_arr = v1.get('@value').split('.')
218+
key_arr.extend(get_keys(name_arr))
219+
else:
220+
# Set key for __lang
221+
attr = v1.get('@attributes', {})
222+
lang_arr.append(attr.get('xml:lang'))
223+
# Set all key for key
224+
key_arr.append(v1.get('@value'))
225+
mapping_dict[k2] = key_arr
226+
mapping_dict['{}__lang'.format(k2)] = lang_arr
200227
return mapping_dict
201228

202229
links_factory = links_factory or (lambda x, record=None, **k: dict())
230+
203231
metadata = pickle.loads(pickle.dumps(record.replace_refs(), -1)) if self.replace_refs \
204232
else record.dumps()
205233
# Get keys of metadata record by mapping.

0 commit comments

Comments
 (0)