bulkrax 1.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/controllers/bulkrax/exporters_controller.rb +12 -4
  4. data/app/controllers/bulkrax/importers_controller.rb +23 -17
  5. data/app/factories/bulkrax/object_factory.rb +84 -63
  6. data/app/jobs/bulkrax/create_relationships_job.rb +156 -0
  7. data/app/jobs/bulkrax/delete_work_job.rb +6 -2
  8. data/app/jobs/bulkrax/export_work_job.rb +3 -1
  9. data/app/jobs/bulkrax/exporter_job.rb +1 -0
  10. data/app/jobs/bulkrax/{import_work_collection_job.rb → import_collection_job.rb} +4 -2
  11. data/app/jobs/bulkrax/import_file_set_job.rb +69 -0
  12. data/app/jobs/bulkrax/import_work_job.rb +2 -0
  13. data/app/jobs/bulkrax/importer_job.rb +18 -1
  14. data/app/matchers/bulkrax/application_matcher.rb +5 -5
  15. data/app/models/bulkrax/csv_collection_entry.rb +8 -6
  16. data/app/models/bulkrax/csv_entry.rb +132 -65
  17. data/app/models/bulkrax/csv_file_set_entry.rb +26 -0
  18. data/app/models/bulkrax/entry.rb +19 -8
  19. data/app/models/bulkrax/exporter.rb +12 -5
  20. data/app/models/bulkrax/importer.rb +24 -5
  21. data/app/models/bulkrax/oai_entry.rb +5 -1
  22. data/app/models/bulkrax/rdf_entry.rb +16 -7
  23. data/app/models/bulkrax/xml_entry.rb +4 -0
  24. data/app/models/concerns/bulkrax/dynamic_record_lookup.rb +39 -0
  25. data/app/models/concerns/bulkrax/export_behavior.rb +2 -2
  26. data/app/models/concerns/bulkrax/has_matchers.rb +44 -13
  27. data/app/models/concerns/bulkrax/import_behavior.rb +40 -5
  28. data/app/models/concerns/bulkrax/importer_exporter_behavior.rb +23 -2
  29. data/app/models/concerns/bulkrax/status_info.rb +4 -4
  30. data/app/parsers/bulkrax/application_parser.rb +67 -84
  31. data/app/parsers/bulkrax/bagit_parser.rb +13 -4
  32. data/app/parsers/bulkrax/csv_parser.rb +170 -64
  33. data/app/parsers/bulkrax/oai_dc_parser.rb +6 -3
  34. data/app/parsers/bulkrax/xml_parser.rb +5 -0
  35. data/app/views/bulkrax/exporters/_form.html.erb +1 -1
  36. data/app/views/bulkrax/exporters/show.html.erb +2 -1
  37. data/app/views/bulkrax/importers/index.html.erb +17 -17
  38. data/app/views/bulkrax/importers/show.html.erb +52 -6
  39. data/config/locales/bulkrax.en.yml +1 -0
  40. data/db/migrate/20190731114016_change_importer_and_exporter_to_polymorphic.rb +5 -1
  41. data/db/migrate/20211004170708_change_bulkrax_statuses_error_message_column_type_to_text.rb +5 -0
  42. data/db/migrate/20211203195233_rename_children_counters_to_relationships.rb +6 -0
  43. data/db/migrate/20211220195027_add_file_set_counters_to_importer_runs.rb +7 -0
  44. data/db/migrate/20220118001339_add_import_attempts_to_entries.rb +5 -0
  45. data/db/migrate/20220119213325_add_work_counters_to_importer_runs.rb +6 -0
  46. data/lib/bulkrax/engine.rb +1 -1
  47. data/lib/bulkrax/version.rb +1 -1
  48. data/lib/bulkrax.rb +9 -17
  49. data/lib/generators/bulkrax/templates/bin/importer +17 -11
  50. data/lib/generators/bulkrax/templates/config/bulkrax_api.yml +3 -1
  51. data/lib/generators/bulkrax/templates/config/initializers/bulkrax.rb +7 -12
  52. metadata +22 -10
  53. data/app/jobs/bulkrax/child_relationships_job.rb +0 -128
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bulkrax
4
+ module DynamicRecordLookup
5
+ # Search entries, collections, and every available work type for a record that
6
+ # has the provided identifier.
7
+ #
8
+ # @param identifier [String] Work/Collection ID or Bulkrax::Entry source_identifier
9
+ # @return [Work, Collection, nil] Work or Collection if found, otherwise nil
10
+ def find_record(identifier)
11
+ record = Entry.find_by(identifier: identifier)
12
+ record ||= ::Collection.where(id: identifier).first # rubocop:disable Rails/FindBy
13
+ if record.blank?
14
+ available_work_types.each do |work_type|
15
+ record ||= work_type.where(id: identifier).first # rubocop:disable Rails/FindBy
16
+ end
17
+ end
18
+
19
+ record.is_a?(Entry) ? record.factory.find : record
20
+ end
21
+
22
+ # Check if the record is a Work
23
+ def curation_concern?(record)
24
+ available_work_types.include?(record.class)
25
+ end
26
+
27
+ private
28
+
29
+ # @return [Array<Class>] list of work type classes
30
+ def available_work_types
31
+ # If running in a Hyku app, do not include disabled work types
32
+ @available_work_types ||= if defined?(::Hyku)
33
+ ::Site.instance.available_works.map(&:constantize)
34
+ else
35
+ ::Hyrax.config.curation_concerns
36
+ end
37
+ end
38
+ end
39
+ end
@@ -40,13 +40,13 @@ module Bulkrax
40
40
  end
41
41
  end
42
42
 
43
- # Append the file_set id to ensure a unique filename
43
+ # Prepend the file_set id to ensure a unique filename
44
44
  def filename(file_set)
45
45
  return if file_set.original_file.blank?
46
46
  fn = file_set.original_file.file_name.first
47
47
  mime = Mime::Type.lookup(file_set.original_file.mime_type)
48
48
  ext_mime = MIME::Types.of(file_set.original_file.file_name).first
49
- if fn.include?(file_set.id)
49
+ if fn.include?(file_set.id) || importerexporter.metadata_only?
50
50
  return fn if mime.to_s == ext_mime.to_s
51
51
  return "#{fn}.#{mime.to_sym}"
52
52
  else
@@ -43,7 +43,6 @@ module Bulkrax
43
43
 
44
44
  value = if matcher
45
45
  result = matcher.result(self, node_content)
46
- next unless result
47
46
  matched_metadata(multiple, name, result, object_multiple)
48
47
  elsif multiple
49
48
  Rails.logger.info("Bulkrax Column automatically matched #{node_name}, #{node_content}")
@@ -53,12 +52,20 @@ module Bulkrax
53
52
  single_metadata(node_content)
54
53
  end
55
54
 
56
- set_parsed_data(object_multiple, object_name, name, index, value) if value
55
+ object_name.present? ? set_parsed_object_data(object_multiple, object_name, name, index, value) : set_parsed_data(name, value)
57
56
  end
58
57
  end
59
58
 
60
- def set_parsed_data(object_multiple, object_name, name, index, value)
59
+ def set_parsed_data(name, value)
60
+ return parsed_metadata[name] = value unless multiple?(name)
61
+
62
+ parsed_metadata[name] ||= []
63
+ parsed_metadata[name] += Array.wrap(value).flatten
64
+ end
65
+
66
+ def set_parsed_object_data(object_multiple, object_name, name, index, value)
61
67
  if object_multiple
68
+ index ||= 0
62
69
  parsed_metadata[object_name][index] ||= {}
63
70
  parsed_metadata[object_name][index][name] ||= []
64
71
  if value.is_a?(Array)
@@ -66,20 +73,13 @@ module Bulkrax
66
73
  else
67
74
  parsed_metadata[object_name][index][name] = value
68
75
  end
69
- elsif object_name
76
+ else
70
77
  parsed_metadata[object_name][name] ||= []
71
78
  if value.is_a?(Array)
72
79
  parsed_metadata[object_name][name] += value
73
80
  else
74
81
  parsed_metadata[object_name][name] = value
75
82
  end
76
- else
77
- parsed_metadata[name] ||= []
78
- if value.is_a?(Array)
79
- parsed_metadata[name] += value
80
- else
81
- parsed_metadata[name] = value
82
- end
83
83
  end
84
84
  end
85
85
 
@@ -124,12 +124,43 @@ module Bulkrax
124
124
  field = field.gsub('_attributes', '')
125
125
 
126
126
  return false if excluded?(field)
127
- return true if ['collections', 'file', 'remote_files', 'model', 'delete'].include?(field)
127
+ return true if supported_bulkrax_fields.include?(field)
128
128
  return factory_class.method_defined?(field) && factory_class.properties[field].present?
129
129
  end
130
130
 
131
+ def supported_bulkrax_fields
132
+ ActiveSupport::Deprecation.warn(
133
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
134
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
135
+ )
136
+ @supported_bulkrax_fields ||=
137
+ %W[
138
+ id
139
+ file
140
+ remote_files
141
+ model
142
+ delete
143
+ #{parser.collection_field_mapping}
144
+ #{related_parents_parsed_mapping}
145
+ #{related_children_parsed_mapping}
146
+ ]
147
+ end
148
+
131
149
  def multiple?(field)
132
- return true if field == 'file' || field == 'remote_files' || field == 'collections'
150
+ ActiveSupport::Deprecation.warn(
151
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
152
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
153
+ )
154
+ @multiple_bulkrax_fields ||=
155
+ %W[
156
+ file
157
+ remote_files
158
+ #{parser.collection_field_mapping}
159
+ #{related_parents_parsed_mapping}
160
+ #{related_children_parsed_mapping}
161
+ ]
162
+
163
+ return true if @multiple_bulkrax_fields.include?(field)
133
164
  return false if field == 'model'
134
165
 
135
166
  field_supported?(field) && factory_class&.properties&.[](field)&.[]('multiple')
@@ -11,6 +11,8 @@ module Bulkrax
11
11
  unless self.importerexporter.validate_only
12
12
  raise CollectionsCreatedError unless collections_created?
13
13
  @item = factory.run!
14
+ parent_jobs if self.parsed_metadata[related_parents_parsed_mapping].present?
15
+ child_jobs if self.parsed_metadata[related_children_parsed_mapping].present?
14
16
  end
15
17
  rescue RSolr::Error::Http, CollectionsCreatedError => e
16
18
  raise e
@@ -22,7 +24,23 @@ module Bulkrax
22
24
  return @item
23
25
  end
24
26
 
25
- def find_or_create_collection_ids
27
+ def parent_jobs
28
+ self.parsed_metadata[related_parents_parsed_mapping].each do |parent_identifier|
29
+ next if parent_identifier.blank?
30
+
31
+ CreateRelationshipsJob.perform_later(entry_identifier: self.identifier, parent_identifier: parent_identifier, importer_run: self.last_run)
32
+ end
33
+ end
34
+
35
+ def child_jobs
36
+ self.parsed_metadata[related_children_parsed_mapping].each do |child_identifier|
37
+ next if child_identifier.blank?
38
+
39
+ CreateRelationshipsJob.perform_later(entry_identifier: self.identifier, child_identifier: child_identifier, importer_run: self.last_run)
40
+ end
41
+ end
42
+
43
+ def find_collection_ids
26
44
  self.collection_ids
27
45
  end
28
46
 
@@ -57,15 +75,28 @@ module Bulkrax
57
75
  end
58
76
 
59
77
  def add_collections
60
- return if find_or_create_collection_ids.blank?
61
- self.parsed_metadata['collections'] = []
62
- self.parsed_metadata['collections'] += find_or_create_collection_ids.map { |c| { id: c } }
78
+ return if find_collection_ids.blank?
79
+
80
+ ActiveSupport::Deprecation.warn(
81
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
82
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
83
+ )
84
+ self.parsed_metadata['member_of_collections_attributes'] = {}
85
+ find_collection_ids.each_with_index do |c, i|
86
+ self.parsed_metadata['member_of_collections_attributes'][i.to_s] = { id: c }
87
+ end
63
88
  end
64
89
 
65
90
  def factory
91
+ ActiveSupport::Deprecation.warn(
92
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
93
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
94
+ )
66
95
  @factory ||= Bulkrax::ObjectFactory.new(attributes: self.parsed_metadata,
67
96
  source_identifier_value: identifier,
68
97
  work_identifier: parser.work_identifier,
98
+ collection_field_mapping: parser.collection_field_mapping,
99
+ related_parents_parsed_mapping: related_parents_parsed_mapping,
69
100
  replace_files: replace_files,
70
101
  user: user,
71
102
  klass: factory_class,
@@ -80,7 +111,11 @@ module Bulkrax
80
111
  else
81
112
  Bulkrax.default_work_type
82
113
  end
83
- fc.constantize
114
+
115
+ # return the name of the collection or work
116
+ fc.tr!(' ', '_')
117
+ fc.downcase! if fc.match?(/[-_]/)
118
+ fc.camelcase.constantize
84
119
  rescue NameError
85
120
  nil
86
121
  rescue
@@ -20,15 +20,36 @@ module Bulkrax
20
20
  (last_imported_at || Time.current) + frequency.to_seconds if schedulable? && last_imported_at.present?
21
21
  end
22
22
 
23
- def increment_counters(index, collection = false)
23
+ def increment_counters(index, collection: false, file_set: false)
24
24
  # Only set the totals if they were not set on initialization
25
25
  if collection
26
26
  current_run.total_collection_entries = index + 1 unless parser.collections_total.positive?
27
+ elsif file_set
28
+ current_run.total_file_set_entries = index + 1 unless parser.file_sets_total.positive?
27
29
  else
30
+ # TODO: differentiate between work and collection counts for exporters
28
31
  current_run.total_work_entries = index + 1 unless limit.to_i.positive? || parser.total.positive?
29
32
  end
30
- current_run.enqueued_records = index + 1
33
+ current_run.enqueued_records += 1
31
34
  current_run.save!
32
35
  end
36
+
37
+ def keys_without_numbers(keys)
38
+ keys.map { |key| key_without_numbers(key) }
39
+ end
40
+
41
+ def key_without_numbers(key)
42
+ key.gsub(/_\d+/, '').sub(/^\d+_/, '')
43
+ end
44
+
45
+ # Is this a file?
46
+ def file?
47
+ parser_fields&.[]('import_file_path') && File.file?(parser_fields['import_file_path'])
48
+ end
49
+
50
+ # Is this a zip file?
51
+ def zip?
52
+ parser_fields&.[]('import_file_path') && MIME::Types.type_for(parser_fields['import_file_path']).include?('application/zip')
53
+ end
33
54
  end
34
55
  end
@@ -33,13 +33,13 @@ module Bulkrax
33
33
  current_status&.created_at
34
34
  end
35
35
 
36
- def status_info(e = nil)
36
+ def status_info(e = nil, current_run = nil)
37
37
  if e.nil?
38
- self.statuses.create!(status_message: 'Complete', runnable: last_run)
38
+ self.statuses.create!(status_message: 'Complete', runnable: current_run || last_run)
39
39
  elsif e.is_a?(String)
40
- self.statuses.create!(status_message: e, runnable: last_run)
40
+ self.statuses.create!(status_message: e, runnable: current_run || last_run)
41
41
  else
42
- self.statuses.create!(status_message: 'Failed', runnable: last_run, error_class: e.class.to_s, error_message: e.message, error_backtrace: e.backtrace)
42
+ self.statuses.create!(status_message: 'Failed', runnable: current_run || last_run, error_class: e.class.to_s, error_message: e.message, error_backtrace: e.backtrace)
43
43
  end
44
44
  end
45
45
 
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bulkrax
4
- class ApplicationParser
5
- attr_accessor :importerexporter
4
+ class ApplicationParser # rubocop:disable Metrics/ClassLength
5
+ attr_accessor :importerexporter, :headers
6
6
  alias importer importerexporter
7
7
  alias exporter importerexporter
8
- delegate :only_updates, :limit, :current_run, :errors,
9
- :seen, :increment_counters, :parser_fields, :user,
10
- :exporter_export_path, :exporter_export_zip_path, :importer_unzip_path, :validate_only,
11
- :status, :status_info, :status_at,
12
- to: :importerexporter
8
+ delegate :only_updates, :limit, :current_run, :errors, :mapping,
9
+ :seen, :increment_counters, :parser_fields, :user, :keys_without_numbers,
10
+ :key_without_numbers, :status, :status_info, :status_at,
11
+ :exporter_export_path, :exporter_export_zip_path, :importer_unzip_path, :validate_only,
12
+ to: :importerexporter
13
13
 
14
14
  def self.parser_fields
15
15
  {}
@@ -25,6 +25,7 @@ module Bulkrax
25
25
 
26
26
  def initialize(importerexporter)
27
27
  @importerexporter = importerexporter
28
+ @headers = []
28
29
  end
29
30
 
30
31
  # @api
@@ -43,20 +44,54 @@ module Bulkrax
43
44
  end
44
45
 
45
46
  def source_identifier
46
- @source_identifier ||= identifier_hash.values.first&.[]("from")&.first&.to_sym || :source_identifier
47
+ @source_identifier ||= get_field_mapping_hash_for('source_identifier')&.values&.first&.[]('from')&.first&.to_sym || :source_identifier
47
48
  end
48
49
 
49
50
  def work_identifier
50
- @work_identifier ||= identifier_hash.keys.first&.to_sym || :source
51
+ @work_identifier ||= get_field_mapping_hash_for('source_identifier')&.keys&.first&.to_sym || :source
51
52
  end
52
53
 
53
- def identifier_hash
54
- @identifier_hash ||= importerexporter.mapping.select do |_, h|
55
- h.key?("source_identifier")
56
- end
57
- raise StandardError, "more than one source_identifier declared: #{@identifier_hash.keys.join(', ')}" if @identifier_hash.length > 1
54
+ def related_parents_raw_mapping
55
+ @related_parents_raw_mapping ||= get_field_mapping_hash_for('related_parents_field_mapping')&.values&.first&.[]('from')&.first
56
+ end
57
+
58
+ def related_parents_parsed_mapping
59
+ @related_parents_parsed_mapping ||= get_field_mapping_hash_for('related_parents_field_mapping')&.keys&.first
60
+ end
61
+
62
+ def related_children_raw_mapping
63
+ @related_children_raw_mapping ||= get_field_mapping_hash_for('related_children_field_mapping')&.values&.first&.[]('from')&.first
64
+ end
65
+
66
+ def related_children_parsed_mapping
67
+ @related_children_parsed_mapping ||= get_field_mapping_hash_for('related_children_field_mapping')&.keys&.first
68
+ end
69
+
70
+ def get_field_mapping_hash_for(key)
71
+ return instance_variable_get("@#{key}_hash") if instance_variable_get("@#{key}_hash").present?
72
+
73
+ instance_variable_set(
74
+ "@#{key}_hash",
75
+ importerexporter.mapping.with_indifferent_access.select { |_, h| h.key?(key) }
76
+ )
77
+ raise StandardError, "more than one #{key} declared: #{instance_variable_get("@#{key}_hash").keys.join(', ')}" if instance_variable_get("@#{key}_hash").length > 1
78
+
79
+ instance_variable_get("@#{key}_hash")
80
+ end
81
+
82
+ def collection_field_mapping
83
+ ActiveSupport::Deprecation.warn(
84
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
85
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
86
+ )
87
+ Bulkrax.collection_field_mapping[self.entry_class.to_s]&.to_sym || :collection
88
+ end
89
+
90
+ def model_field_mappings
91
+ model_mappings = Bulkrax.field_mappings[self.class.to_s]&.dig('model', :from) || []
92
+ model_mappings |= ['model']
58
93
 
59
- @identifier_hash
94
+ model_mappings
60
95
  end
61
96
 
62
97
  def perform_method
@@ -79,6 +114,10 @@ module Bulkrax
79
114
  raise StandardError, 'must be defined' if importer?
80
115
  end
81
116
 
117
+ def create_file_sets
118
+ raise StandardError, 'must be defined' if importer?
119
+ end
120
+
82
121
  # Optional, define if using browse everything for file upload
83
122
  def retrieve_cloud_files(files); end
84
123
 
@@ -91,76 +130,19 @@ module Bulkrax
91
130
  path
92
131
  end
93
132
 
133
+ # Base path for imported and exported files
134
+ def base_path(type = 'import')
135
+ ENV['HYKU_MULTITENANT'] ? File.join(Bulkrax.send("#{type}_path"), Site.instance.account.name) : Bulkrax.send("#{type}_path")
136
+ end
137
+
94
138
  # Path where we'll store the import metadata and files
95
139
  # this is used for uploaded and cloud files
96
140
  def path_for_import
97
- @path_for_import = File.join(Bulkrax.import_path, importerexporter.path_string)
141
+ @path_for_import = File.join(base_path, importerexporter.path_string)
98
142
  FileUtils.mkdir_p(@path_for_import) unless File.exist?(@path_for_import)
99
143
  @path_for_import
100
144
  end
101
145
 
102
- # Optional, only used by certain parsers
103
- # Other parsers should override with a custom or empty method
104
- # Will be skipped unless the #record is a Hash
105
- def create_parent_child_relationships
106
- parents.each do |key, value|
107
- parent = entry_class.where(
108
- identifier: key,
109
- importerexporter_id: importerexporter.id,
110
- importerexporter_type: 'Bulkrax::Importer'
111
- ).first
112
-
113
- # not finding the entries here indicates that the given identifiers are incorrect
114
- # in that case we should log that
115
- children = value.map do |child|
116
- entry_class.where(
117
- identifier: child,
118
- importerexporter_id: importerexporter.id,
119
- importerexporter_type: 'Bulkrax::Importer'
120
- ).first
121
- end.compact.uniq
122
-
123
- if parent.present? && (children.length != value.length)
124
- # Increment the failures for the number we couldn't find
125
- # Because all of our entries have been created by now, if we can't find them, the data is wrong
126
- Rails.logger.error("Expected #{value.length} children for parent entry #{parent.id}, found #{children.length}")
127
- break if children.empty?
128
- Rails.logger.warn("Adding #{children.length} children to parent entry #{parent.id} (expected #{value.length})")
129
- end
130
- parent_id = parent.id
131
- child_entry_ids = children.map(&:id)
132
- ChildRelationshipsJob.perform_later(parent_id, child_entry_ids, current_run.id)
133
- end
134
- rescue StandardError => e
135
- status_info(e)
136
- end
137
-
138
- def parents
139
- @parents ||= setup_parents
140
- end
141
-
142
- def setup_parents
143
- pts = []
144
- records.each do |record|
145
- r = if record.respond_to?(:to_h)
146
- record.to_h
147
- else
148
- record
149
- end
150
- next unless r.is_a?(Hash)
151
- children = if r[:children].is_a?(String)
152
- r[:children].split(/\s*[:;|]\s*/)
153
- else
154
- r[:children]
155
- end
156
- next if children.blank?
157
- pts << {
158
- r[source_identifier] => children
159
- }
160
- end
161
- pts.blank? ? pts : pts.inject(:merge)
162
- end
163
-
164
146
  def setup_export_file
165
147
  raise StandardError, 'must be defined' if exporter?
166
148
  end
@@ -256,6 +238,10 @@ module Bulkrax
256
238
  0
257
239
  end
258
240
 
241
+ def file_sets_total
242
+ 0
243
+ end
244
+
259
245
  def write
260
246
  write_files
261
247
  zip
@@ -288,12 +274,9 @@ module Bulkrax
288
274
  private
289
275
 
290
276
  def real_import_file_path
291
- if file? && zip?
292
- unzip(parser_fields['import_file_path'])
293
- return importer_unzip_path
294
- else
295
- parser_fields['import_file_path']
296
- end
277
+ return importer_unzip_path if file? && zip?
278
+
279
+ parser_fields['import_file_path']
297
280
  end
298
281
  end
299
282
  end
@@ -40,7 +40,7 @@ module Bulkrax
40
40
  raise StandardError, 'No metadata files were found' if path.blank?
41
41
  data = entry_class.read_data(path)
42
42
  data = entry_class.data_for_entry(data, source_identifier)
43
- data[:file] = bag.bag_files.join('|')
43
+ data[:file] = bag.bag_files.join('|') unless importerexporter.metadata_only?
44
44
  data
45
45
  end
46
46
  end
@@ -58,8 +58,8 @@ module Bulkrax
58
58
  collection_type_gid: Hyrax::CollectionType.find_or_create_default_collection_type.gid
59
59
  }
60
60
  new_entry = find_or_create_entry(collection_entry_class, collection, 'Bulkrax::Importer', metadata)
61
- ImportWorkCollectionJob.perform_now(new_entry.id, current_run.id)
62
- increment_counters(index, true)
61
+ ImportCollectionJob.perform_now(new_entry.id, current_run.id)
62
+ increment_counters(index, collection: true)
63
63
  end
64
64
  end
65
65
 
@@ -83,13 +83,22 @@ module Bulkrax
83
83
  end
84
84
 
85
85
  def collections
86
- records.map { |r| r[:collection].split(/\s*[;|]\s*/) if r[:collection].present? }.flatten.compact.uniq
86
+ ActiveSupport::Deprecation.warn(
87
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
88
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
89
+ )
90
+ records.map { |r| r[collection_field_mapping].split(/\s*[;|]\s*/) if r[collection_field_mapping].present? }.flatten.compact.uniq
87
91
  end
88
92
 
89
93
  def collections_total
90
94
  collections.size
91
95
  end
92
96
 
97
+ # TODO: change to differentiate between collection and work records when adding ability to import collection metadata
98
+ def works_total
99
+ total
100
+ end
101
+
93
102
  def total
94
103
  metadata_paths.count
95
104
  end