diff --git a/amuser/am_browser_ability.py b/amuser/am_browser_ability.py
index e1fc0da6..bf6691b2 100644
--- a/amuser/am_browser_ability.py
+++ b/amuser/am_browser_ability.py
@@ -218,7 +218,7 @@ def wait_for_dip_in_transfer_backlog(self, dip_uuid):
).send_keys(dip_uuid)
Select(
self.driver.find_element_by_css_selector('select[title="field name"]')
- ).select_by_visible_text("SIP UUID")
+ ).select_by_visible_text("Transfer UUID")
Select(
self.driver.find_element_by_css_selector('select[title="query type"]')
).select_by_visible_text("Phrase")
diff --git a/amuser/am_mets_ability.py b/amuser/am_mets_ability.py
index 1e7dc0d6..9872ed82 100644
--- a/amuser/am_mets_ability.py
+++ b/amuser/am_mets_ability.py
@@ -24,24 +24,23 @@ def get_premis_events(mets):
dicts.
"""
result = []
- for premis_event_el in mets.findall(".//premis3:event", c.METS_NSMAP):
+ for premis_event_el in mets.findall(".//premis:event", c.METS_NSMAP):
result.append(
{
"event_type": premis_event_el.find(
- "premis3:eventType", c.METS_NSMAP
+ "premis:eventType", c.METS_NSMAP
).text,
"event_detail": premis_event_el.find(
- "premis3:eventDetailInformation/premis3:eventDetail",
- c.METS_NSMAP,
+ "premis:eventDetailInformation/premis:eventDetail", c.METS_NSMAP
).text,
"event_outcome": premis_event_el.find(
- "premis3:eventOutcomeInformation/premis3:eventOutcome",
+ "premis:eventOutcomeInformation/premis:eventOutcome",
c.METS_NSMAP,
).text,
"event_outcome_detail_note": premis_event_el.find(
- "premis3:eventOutcomeInformation"
- "/premis3:eventOutcomeDetail"
- "/premis3:eventOutcomeDetailNote",
+ "premis:eventOutcomeInformation"
+ "/premis:eventOutcomeDetail"
+ "/premis:eventOutcomeDetailNote",
c.METS_NSMAP,
).text,
}
@@ -120,13 +119,13 @@ def assert_empty_dir_documented_identified(mets_doc, empty_dir_rel_path):
assert dmd_sec_el is not None
identifiers = []
for obj_idfr_el in dmd_sec_el.findall(
- "mets:mdWrap/" "mets:xmlData/" "premis3:object/" "premis3:objectIdentifier",
+ "mets:mdWrap/" "mets:xmlData/" "premis:object/" "premis:objectIdentifier",
ns,
):
identifiers.append(
(
- obj_idfr_el.find("premis3:objectIdentifierType", ns).text,
- obj_idfr_el.find("premis3:objectIdentifierValue", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierType", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierValue", ns).text,
)
)
uuid_id = [ival for itype, ival in identifiers if itype == "UUID"][0]
@@ -153,27 +152,27 @@ def _add_entity_identifiers(entity, doc, ns):
obj_idfr_els = amd_sec_el.findall(
".//mets:mdWrap/"
"mets:xmlData/"
- "premis3:object/"
- "premis3:objectIdentifier",
+ "premis:object/"
+ "premis:objectIdentifier",
ns,
)
for obj_idfr_el in obj_idfr_els:
identifiers.append(
(
- obj_idfr_el.find("premis3:objectIdentifierType", ns).text,
- obj_idfr_el.find("premis3:objectIdentifierValue", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierType", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierValue", ns).text,
)
)
else:
dmd_sec_el = doc.xpath("mets:dmdSec[@ID='{}']".format(e_id), namespaces=ns)[0]
for obj_idfr_el in dmd_sec_el.findall(
- "mets:mdWrap/" "mets:xmlData/" "premis3:object/" "premis3:objectIdentifier",
+ "mets:mdWrap/" "mets:xmlData/" "premis:object/" "premis:objectIdentifier",
ns,
):
identifiers.append(
(
- obj_idfr_el.find("premis3:objectIdentifierType", ns).text,
- obj_idfr_el.find("premis3:objectIdentifierValue", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierType", ns).text,
+ obj_idfr_el.find("premis:objectIdentifierValue", ns).text,
)
)
entity["identifiers"] = identifiers
diff --git a/amuser/constants.py b/amuser/constants.py
index 63b74b32..cfa1d40a 100644
--- a/amuser/constants.py
+++ b/amuser/constants.py
@@ -315,8 +315,7 @@ def varvn(varname, vn):
# Namespace map for parsing METS XML.
METS_NSMAP = {
"mets": "http://www.loc.gov/METS/",
- "premis": "info:lc/xmlns/premis-v2",
- "premis3": "http://www.loc.gov/premis/v3",
+ "premis": "http://www.loc.gov/premis/v3",
"dc": "http://purl.org/dc/elements/1.1/",
"dcterms": "http://purl.org/dc/terms/",
"xlink": "http://www.w3.org/1999/xlink",
diff --git a/features/steps/aip_encryption_steps.py b/features/steps/aip_encryption_steps.py
index 4821012f..e5066250 100644
--- a/features/steps/aip_encryption_steps.py
+++ b/features/steps/aip_encryption_steps.py
@@ -51,7 +51,9 @@ def step_impl(context):
" attributes"
" Purpose: AIP Storage;"
" Relative path: var/archivematica/sharedDirectory/www/AIPsStoreEncrypted;"
- " Description: Store AIP Encrypted in standard Archivematica Directory;"
+ " Description: {};".format(
+ utils.get_gpg_space_location_description(context.scenario.space_uuid)
+ )
)
@@ -149,15 +151,19 @@ def step_impl(context):
)
context.scenario.new_key_name = new_key_name
context.scenario.new_key_fingerprint = new_key_fingerprint
- # Edit the "standard GPG-encrypted space" to use the new GPG key
- standard_encr_space_uuid = context.am_user.browser.search_for_ss_space(
- {
- "Access protocol": "GPG encryption on Local Filesystem",
- "Path": "/",
- "Staging path": "/var/archivematica/storage_service/storage_service_encrypted",
- "GnuPG Private Key": "Archivematica Storage Service GPG Key",
- }
- )["uuid"]
+ if getattr(context.scenario, "space_uuid", None) is not None:
+ # Don't look for a space if previos steps saved it
+ standard_encr_space_uuid = context.scenario.space_uuid
+ else:
+ # Edit the "standard GPG-encrypted space" to use the new GPG key
+ standard_encr_space_uuid = context.am_user.browser.search_for_ss_space(
+ {
+ "Access protocol": "GPG encryption on Local Filesystem",
+ "Path": "/",
+ "Staging path": "/var/archivematica/storage_service/storage_service_encrypted",
+ "GnuPG Private Key": "Archivematica Storage Service GPG Key",
+ }
+ )["uuid"]
new_key_repr = "{} <{}>".format(new_key_name, new_key_email)
logger.info('Created a new GPG key "%s"', new_key_repr)
context.am_user.browser.change_encrypted_space_key(
@@ -170,7 +176,9 @@ def step_impl(context):
)
def step_impl(context):
context.execute_steps(
- 'Given the processing config decision "Store AIP location" is set to "Store AIP Encrypted in standard Archivematica Directory"\n'
+ 'Given the processing config decision "Store AIP location" is set to "{}"\n'.format(
+ utils.get_gpg_space_location_description(context.scenario.space_uuid)
+ )
)
@@ -207,15 +215,19 @@ def step_impl(context):
"""Edit the standard GPG-encrypted space so that it is using a GPG key
other than the one stored in ``context.scenario.new_key_name``.
"""
- # Edit the "standard GPG-encrypted space" to use the new GPG key
- standard_encr_space_uuid = context.am_user.browser.search_for_ss_space(
- {
- "Access protocol": "GPG encryption on Local Filesystem",
- "Path": "/",
- "Staging path": "/var/archivematica/storage_service/storage_service_encrypted",
- "GnuPG Private Key": context.scenario.new_key_name,
- }
- )["uuid"]
+ if getattr(context.scenario, "space_uuid", None) is not None:
+ # Don't look for a space if previos steps saved it
+ standard_encr_space_uuid = context.scenario.space_uuid
+ else:
+ # Edit the "standard GPG-encrypted space" to use the new GPG key
+ standard_encr_space_uuid = context.am_user.browser.search_for_ss_space(
+ {
+ "Access protocol": "GPG encryption on Local Filesystem",
+ "Path": "/",
+ "Staging path": "/var/archivematica/storage_service/storage_service_encrypted",
+ "GnuPG Private Key": context.scenario.new_key_name,
+ }
+ )["uuid"]
context.am_user.browser.change_encrypted_space_key(standard_encr_space_uuid)
@@ -346,7 +358,7 @@ def step_impl(context):
'.//mets:mdWrap[@MDTYPE="PREMIS:EVENT"]', context.am_user.mets.mets_nsmap
):
premis_event_type_el = premis_event_el.find(
- "mets:xmlData/premis3:event/premis3:eventType",
+ "mets:xmlData/premis:event/premis:eventType",
context.am_user.mets.mets_nsmap,
)
if premis_event_type_el.text.strip() == "encryption":
@@ -356,13 +368,13 @@ def step_impl(context):
# program=gpg (GPG); version=1.4.16; python-gnupg;
# version=0.4.0
premis_event_detail = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventDetailInformation/premis3:eventDetail",
+ "mets:xmlData/premis:event/premis:eventDetailInformation/premis:eventDetail",
context.am_user.mets.mets_nsmap,
).text
assert "GPG" in premis_event_detail
assert "version=" in premis_event_detail
premis_event_od_note = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventOutcomeInformation/premis3:eventOutcomeDetail/premis3:eventOutcomeDetailNote",
+ "mets:xmlData/premis:event/premis:eventOutcomeInformation/premis:eventOutcomeDetail/premis:eventOutcomeDetailNote",
context.am_user.mets.mets_nsmap,
).text.strip()
assert 'Status="encryption ok"' in premis_event_od_note
@@ -590,7 +602,7 @@ def assert_pointer_premis_event(**kwargs):
kwargs["context"].am_user.mets.mets_nsmap,
):
premis_event_type_el = premis_event_el.find(
- "mets:xmlData/premis3:event/premis3:eventType",
+ "mets:xmlData/premis:event/premis:eventType",
kwargs["context"].am_user.mets.mets_nsmap,
)
if premis_event_type_el.text.strip() == kwargs["event_type"]:
@@ -598,13 +610,13 @@ def assert_pointer_premis_event(**kwargs):
break
assert premis_event is not None
premis_event_uuid = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventIdentifier/premis3:eventIdentifierValue",
+ "mets:xmlData/premis:event/premis:eventIdentifier/premis:eventIdentifierValue",
kwargs["context"].am_user.mets.mets_nsmap,
).text.strip()
if kwargs.get("in_evt_dtl"):
in_evt_dtl = kwargs["in_evt_dtl"] or []
premis_event_detail = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventDetailInformation/premis3:eventDetail",
+ "mets:xmlData/premis:event/premis:eventDetailInformation/premis:eventDetail",
kwargs["context"].am_user.mets.mets_nsmap,
).text.strip()
for substr in in_evt_dtl:
@@ -612,7 +624,7 @@ def assert_pointer_premis_event(**kwargs):
if kwargs.get("in_evt_out"):
in_evt_out = kwargs["in_evt_out"] or []
premis_event_out = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventOutcomeInformation/premis3:eventOutcome",
+ "mets:xmlData/premis:event/premis:eventOutcomeInformation/premis:eventOutcome",
kwargs["context"].am_user.mets.mets_nsmap,
).text.strip()
for substr in in_evt_out:
@@ -620,7 +632,7 @@ def assert_pointer_premis_event(**kwargs):
if kwargs.get("in_evt_out_dtl_nt"):
in_evt_out_dtl_nt = kwargs["in_evt_out_dtl_nt"] or []
premis_event_od_note = premis_event.find(
- "mets:xmlData/premis3:event/premis3:eventOutcomeInformation/premis3:eventOutcomeDetail/premis3:eventOutcomeDetailNote",
+ "mets:xmlData/premis:event/premis:eventOutcomeInformation/premis:eventOutcomeDetail/premis:eventOutcomeDetailNote",
kwargs["context"].am_user.mets.mets_nsmap,
).text.strip()
for substr in in_evt_out_dtl_nt:
@@ -706,14 +718,14 @@ def assert_pointer_transform_file_encryption(pointer_path, ns, fingerprint=None)
"TRANSFORMKEY fingerprint {} does not match expected"
" fingerprint {}".format(transform_key, fingerprint)
)
- # premis3:compositionLevel incremented
+ # premis:compositionLevel incremented
compos_lvl_el = doc.find(
"mets:amdSec/mets:techMD/mets:mdWrap/mets:xmlData/premis:object/premis:objectCharacteristics/premis:compositionLevel",
ns,
)
assert compos_lvl_el is not None
assert compos_lvl_el.text.strip() == "2"
- # premis3:inhibitors added
+ # premis:inhibitors added
inhibitors_el = doc.find(
"mets:amdSec/mets:techMD/mets:mdWrap/mets:xmlData/premis:object/premis:objectCharacteristics/premis:inhibitors",
ns,
diff --git a/features/steps/black_box_steps.py b/features/steps/black_box_steps.py
index 5c81de73..56daab40 100644
--- a/features/steps/black_box_steps.py
+++ b/features/steps/black_box_steps.py
@@ -231,9 +231,9 @@ def step_impl(context):
'mets:amdSec[@ID="{}"]'.format(amdsec_id), namespaces=context.mets_nsmap
)
object_uuid = amdsec.xpath(
- "mets:techMD/mets:mdWrap/mets:xmlData/premis3:object/"
- 'premis3:objectIdentifier/premis3:objectIdentifierType[text()="UUID"]/'
- "../premis3:objectIdentifierValue",
+ "mets:techMD/mets:mdWrap/mets:xmlData/premis:object/"
+ 'premis:objectIdentifier/premis:objectIdentifierType[text()="UUID"]/'
+ "../premis:objectIdentifierValue",
namespaces=context.mets_nsmap,
)[0].text
assert object_uuid == file_uuid
@@ -263,7 +263,7 @@ def step_impl(context):
tree = etree.parse(context.current_transfer["aip_mets_location"])
premis_events = tree.findall(
'mets:amdSec/mets:digiprovMD/mets:mdWrap[@MDTYPE="PREMIS:EVENT"]/'
- "mets:xmlData/premis3:event",
+ "mets:xmlData/premis:event",
namespaces=context.mets_nsmap,
)
error = "The {} file does not contain any PREMIS events".format(
@@ -272,12 +272,12 @@ def step_impl(context):
assert premis_events, error
for event in premis_events:
event_agents = event.findall(
- "premis3:linkingAgentIdentifier", namespaces=context.mets_nsmap
+ "premis:linkingAgentIdentifier", namespaces=context.mets_nsmap
)
event_agent_types = set(
[
event_agent.findtext(
- "premis3:linkingAgentIdentifierType", namespaces=context.mets_nsmap
+ "premis:linkingAgentIdentifierType", namespaces=context.mets_nsmap
)
for event_agent in event_agents
]
diff --git a/features/steps/utils.py b/features/steps/utils.py
index aa5cb601..003eacbc 100644
--- a/features/steps/utils.py
+++ b/features/steps/utils.py
@@ -869,3 +869,9 @@ def assert_source_md_in_bagit_mets(mets_root, mets_nsmap):
assert element_count > 0, "No elements in BagIt transfer metadata: {}".format(
element_count
)
+
+
+def get_gpg_space_location_description(space_uuid):
+ return "Store AIP Encrypted in standard Archivematica Directory ({})".format(
+ space_uuid
+ )
diff --git a/features/steps/uuids_for_directories_steps.py b/features/steps/uuids_for_directories_steps.py
index 48258843..bcce49f8 100644
--- a/features/steps/uuids_for_directories_steps.py
+++ b/features/steps/uuids_for_directories_steps.py
@@ -240,10 +240,10 @@ def step_impl(context):
), "Could not find a for directory at {}".format(dirpath)
try:
id_type = dmdSec_el.find(
- ".//premis3:objectIdentifierType", ns
+ ".//premis:objectIdentifierType", ns
).text.strip()
id_val = dmdSec_el.find(
- ".//premis3:objectIdentifierValue", ns
+ ".//premis:objectIdentifierValue", ns
).text.strip()
except AttributeError:
logger.info(ns)