Skip to content

Commit

Permalink
Merge pull request #3228 from archivesspace/ANW-1843-reimplemenation
Browse files Browse the repository at this point in the history
ANW-1843 Exclude URIs from EAD export
  • Loading branch information
donaldjosephsmith committed Jun 5, 2024
2 parents afcf8d2 + e3ba915 commit 0185b89
Show file tree
Hide file tree
Showing 20 changed files with 584 additions and 23 deletions.
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

0 comments on commit 0185b89

Please sign in to comment.