Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ANW-1843 Exclude URIs from EAD export #3228

Merged
merged 3 commits into from
Jun 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion backend/app/controllers/exports.rb
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ class ArchivesSpaceService < Sinatra::Base
curl -s -F password="admin" "http://localhost:8089/users/admin/login"
set SESSION="session_id"
curl -H "X-ArchivesSpace-Session: $SESSION" \\
"http://localhost:8089/repositories/2/resource_descriptions/577.xml?include_unpublished=false&include_daos=true&numbered_cs=true&ead3=false" //
"http://localhost:8089/repositories/2/resource_descriptions/577.xml?include_unpublished=false&include_daos=true&include_uris=true&numbered_cs=true&ead3=false" //
--output ead.xml
SHELL
end
Expand Down Expand Up @@ -350,6 +350,8 @@ class ArchivesSpaceService < Sinatra::Base
"Include unpublished records", :optional => true],
["include_daos", BooleanParam,
"Include digital objects in dao tags", :optional => true],
["include_uris", BooleanParam,
"Include unitid tags containing ArchivesSpace URIs", :optional => true],
["numbered_cs", BooleanParam,
"Use numbered <c> tags in ead", :optional => true],
["repo_id", :repo_id],
Expand All @@ -361,6 +363,7 @@ class ArchivesSpaceService < Sinatra::Base
ead_stream = generate_ead(params[:id],
(params[:include_unpublished] || false),
(params[:include_daos] || false),
(params[:include_uris]),
(params[:numbered_cs] || false),
(params[:ead3] || false))
stream_response(ead_stream)
Expand Down
17 changes: 17 additions & 0 deletions backend/app/exporters/models/ead.rb
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,23 @@ def include_daos?
end


def include_uris?
include_uris
end


# Defaults to true if @include_uris is not defined or its value is nil.
def include_uris
if instance_variable_defined?(:@include_uris)
@include_uris = true if @include_uris.nil?

return @include_uris
end

@include_uris = true
end


def use_numbered_c_tags?
@use_numbered_c_tags
end
Expand Down
9 changes: 7 additions & 2 deletions backend/app/exporters/serializers/ead.rb
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ def stream(data)
@fragments = ASpaceExport::RawXMLHandler.new
@include_unpublished = data.include_unpublished?
@include_daos = data.include_daos?
@include_uris = data.include_uris?
@use_numbered_c_tags = data.use_numbered_c_tags?
@id_prefix = I18n.t('archival_object.ref_id_export_prefix', :default => 'aspace_')

Expand Down Expand Up @@ -193,7 +194,9 @@ def stream(data)

handle_arks(data, xml)

serialize_aspace_uri(data, xml)
if @include_uris
serialize_aspace_uri(data, xml)
end

serialize_extents(data, xml, @fragments)

Expand Down Expand Up @@ -321,7 +324,9 @@ def serialize_child(data, xml, fragments, c_depth = 1)

handle_arks(data, xml)

serialize_aspace_uri(data, xml)
if @include_uris
serialize_aspace_uri(data, xml)
end

if @include_unpublished
data.external_ids.each do |exid|
Expand Down
10 changes: 8 additions & 2 deletions backend/app/exporters/serializers/ead3.rb
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ def stream(data)
@fragments = ASpaceExport::RawXMLHandler.new
@include_unpublished = data.include_unpublished?
@include_daos = data.include_daos?
@include_uris = data.include_uris?
@use_numbered_c_tags = data.use_numbered_c_tags?
@id_prefix = I18n.t('archival_object.ref_id_export_prefix', :default => 'aspace_')

Expand Down Expand Up @@ -486,7 +487,10 @@ def stream(data)

handle_arks(data, xml)

serialize_aspace_uri(data, xml)

if @include_uris
serialize_aspace_uri(data, xml)
end

unless data.repo.nil? || data.repo.name.nil?
xml.repository {
Expand Down Expand Up @@ -1173,7 +1177,9 @@ def serialize_child(data, xml, fragments, c_depth = 1)

handle_arks(data, xml)

serialize_aspace_uri(data, xml)
if @include_uris
serialize_aspace_uri(data, xml)
end

if !data.component_id.nil? && !data.component_id.empty?
xml.unitid data.component_id
Expand Down
3 changes: 2 additions & 1 deletion backend/app/lib/export.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def generate_marc(id, include_unpublished = false)
end


def generate_ead(id, include_unpublished, include_daos, use_numbered_c_tags, ead3)
def generate_ead(id, include_unpublished, include_daos, include_uris, use_numbered_c_tags, ead3)
resolve = ['repository', 'linked_agents', 'subjects', 'digital_object', 'top_container', 'top_container::container_profile']

resource = Resource.get_or_die(id)
Expand All @@ -94,6 +94,7 @@ def generate_ead(id, include_unpublished, include_daos, use_numbered_c_tags, ead
opts = {
:include_unpublished => include_unpublished,
:include_daos => include_daos,
:include_uris => include_uris,
:use_numbered_c_tags => use_numbered_c_tags,
:ead3 => ead3
}
Expand Down
22 changes: 18 additions & 4 deletions backend/spec/export_ead3_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,15 @@ def archival_object(index)

as_test_user("admin", true) do
load_export_fixtures
@doc = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&ead3=true")
@doc = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&include_uris=true&ead3=true")
@doc_nsless = Nokogiri::XML::Document.parse(@doc.to_xml)
@doc_nsless.remove_namespaces!

@doc_include_uris_false = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true&ead3=true&include_uris=false")
@doc_include_uris_missing = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true&ead3=true")
@doc_include_uris_false.remove_namespaces!
@doc_include_uris_missing.remove_namespaces!

raise Sequel::Rollback
end
end
Expand Down Expand Up @@ -419,6 +425,14 @@ def archival_object(index)
mt(object.uri, "#{desc_path}/did/unitid[@localtype='aspace_uri']")
end

it "does not map {archival_object}.uri to {desc_path}/did/unitid[@type='aspace_uri'] if include_uris is false" do
expect(@doc_include_uris_false).not_to have_node("#{desc_path}/did/unitid[@localtype='aspace_uri']")
end

it "does map {archival_object}.uri to {desc_path}/did/unitid[@type='aspace_uri'] if include_uris is missing" do
expect(@doc_include_uris_missing).to have_node("#{desc_path}/did/unitid[@localtype='aspace_uri']")
end

it "maps {archival_object}.(id_[0-3]|component_id) to {desc_path}/did/unitid" do
if !unitid_src.nil? && !unitid_src.empty?
mt(unitid_src, "#{desc_path}/did/unitid")
Expand Down Expand Up @@ -1377,7 +1391,7 @@ def description_content(obj)
describe "Test unpublished record EAD exports" do

def get_xml_doc(include_unpublished = false)
doc_for_unpublished_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@unpublished_resource_jsonmodel.id}.xml?include_unpublished=#{include_unpublished}&include_daos=true&ead3=true", true)
doc_for_unpublished_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@unpublished_resource_jsonmodel.id}.xml?include_unpublished=#{include_unpublished}&include_daos=true&include_uris=true&ead3=true", true)

doc_nsless_for_unpublished_resource = Nokogiri::XML::Document.parse(doc_for_unpublished_resource)
doc_nsless_for_unpublished_resource.remove_namespaces!
Expand Down Expand Up @@ -1483,7 +1497,7 @@ def get_xml_doc(include_unpublished = false)
def get_xml_doc
as_test_user("admin") do
DB.open(true) do
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource_jsonmodel.id}.xml?include_unpublished=true&include_daos=true", true)
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource_jsonmodel.id}.xml?include_unpublished=true&include_daos=true&include_uris=true", true)

doc_nsless_for_resource = Nokogiri::XML::Document.parse(doc_for_resource)
doc_nsless_for_resource.remove_namespaces!
Expand Down Expand Up @@ -1579,7 +1593,7 @@ def get_xml_doc
def get_xml_doc
as_test_user("admin") do
DB.open(true) do
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&ead3=true", true)
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&include_uris=true&ead3=true", true)

doc_nsless_for_resource = Nokogiri::XML::Document.parse(doc_for_resource)
doc_nsless_for_resource.remove_namespaces!
Expand Down
26 changes: 19 additions & 7 deletions backend/spec/export_ead_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ def test_mapping_template(doc, data, path, trib=nil)
end

node = doc.at(path)
val = nil

if data
expect(doc).to have_node(path)
Expand Down Expand Up @@ -247,11 +246,16 @@ def archival_object(index)

as_test_user("admin", true) do
load_export_fixtures
@doc = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true")
@doc_unpub = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true")

@doc = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&include_uris=true")
@doc_unpub = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true&include_uris=true")
@doc_nsless = Nokogiri::XML::Document.parse(@doc.to_xml)
@doc_nsless.remove_namespaces!

@doc_include_uris_false = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true&include_uris=false")
@doc_include_uris_missing = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_daos=true")
@doc_include_uris_false.remove_namespaces!
@doc_include_uris_missing.remove_namespaces!

raise Sequel::Rollback
end
end
Expand Down Expand Up @@ -301,6 +305,14 @@ def archival_object(index)
mt(object.uri, "#{desc_path}/did/unitid[@type='aspace_uri']")
end

it "does not map {archival_object}.uri to {desc_path}/did/unitid[@type='aspace_uri'] if include_uris is false" do
expect(@doc_include_uris_false).not_to have_node(desc_path + "/did/unitid[@type='aspace_uri']")
end

it "does map {archival_object}.uri to {desc_path}/did/unitid[@type='aspace_uri'] if include_uris is missing" do
expect(@doc_include_uris_missing).to have_node(desc_path + "/did/unitid[@type='aspace_uri']")
end

it "maps {archival_object}.lang_materials['language_and_script'] to {desc_path}/did/langmaterial/language" do

language = object.lang_materials[0]['language_and_script']['language']
Expand Down Expand Up @@ -1319,7 +1331,7 @@ def description_content(obj)
def get_xml_doc(include_unpublished = false)
as_test_user("admin") do
DB.open(true) do
doc_for_unpublished_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@unpublished_resource_jsonmodel.id}.xml?include_unpublished=#{include_unpublished}&include_daos=true", true)
doc_for_unpublished_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@unpublished_resource_jsonmodel.id}.xml?include_unpublished=#{include_unpublished}&include_daos=true&include_uris=true", true)

doc_nsless_for_unpublished_resource = Nokogiri::XML::Document.parse(doc_for_unpublished_resource)
doc_nsless_for_unpublished_resource.remove_namespaces!
Expand Down Expand Up @@ -1454,7 +1466,7 @@ def get_xml_doc(include_unpublished = false)
def get_xml_doc
as_test_user("admin") do
DB.open(true) do
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource_jsonmodel.id}.xml?include_unpublished=true&include_daos=true", true)
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource_jsonmodel.id}.xml?include_unpublished=true&include_daos=true&include_uris=true", true)

doc_nsless_for_resource = Nokogiri::XML::Document.parse(doc_for_resource)
doc_nsless_for_resource.remove_namespaces!
Expand Down Expand Up @@ -1533,7 +1545,7 @@ def get_xml_doc
def get_xml_doc
as_test_user("admin") do
DB.open(true) do
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true", true)
doc_for_resource = get_xml("/repositories/#{$repo_id}/resource_descriptions/#{@resource.id}.xml?include_unpublished=true&include_daos=true&include_uris=true", true)

doc_nsless_for_resource = Nokogiri::XML::Document.parse(doc_for_resource)
doc_nsless_for_resource.remove_namespaces!
Expand Down
57 changes: 54 additions & 3 deletions backend/spec/exporter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
require 'spec_helper'

describe "ASpaceExport" do

describe "::get_serializer_for" do

let(:ead_model) do
obj = create(:json_resource)
obj.repository = { 'ref' => '/repositories/1' }
Expand All @@ -23,7 +21,60 @@
serializer = ASpaceExport.get_serializer_for(ead_model, opts)
expect(serializer).to be_a(EAD3Serializer)
end

end

describe "EADModel include_uris?" do
let(:ead_model) do
obj = create(:json_resource)
obj.repository = { 'ref' => '/repositories/1' }
tree = {'children' => []}
EADModel.new(obj, tree, parameters)
end

context 'when the include_uris parameter is not provided' do
let(:parameters) do
{}
end

it "defaults include_uris to true" do
expect(ead_model.include_uris?).to eq true
end
end

context 'when the provided include_uris is nil' do
let(:parameters) do
{
include_uris: nil
}
end

it "defaults include_uris to true" do
expect(ead_model.include_uris?).to eq true
end
end

context 'when the provided include_uris is false' do
let(:parameters) do
{
include_uris: false
}
end

it "sets include_uris to false" do
expect(ead_model.include_uris?).to eq false
end
end

context 'when the provided include_uris is true' do
let(:parameters) do
{
include_uris: true
}
end

it "sets include_uris to true" do
expect(ead_model.include_uris?).to eq true
end
end
end
end