bulk_ops 0.1.17 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/bulk_ops/error.rb +1 -1
- data/lib/bulk_ops/operation.rb +4 -3
- data/lib/bulk_ops/parser.rb +7 -12
- data/lib/bulk_ops/verification.rb +13 -13
- data/lib/bulk_ops/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a60889c5673952113a76b07c00b17b6ac5f99a4a2a3ac1099b3e2cb58ac04fd7
|
4
|
+
data.tar.gz: f7e2488b18b09092e90ef1fb3dad38e460d75bdfb355942065be98e28e743008
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df3fc8ea76aae33515e73202d16a73ddbd86a3ae3c7a73245ec303c7599751b8c8e9961c1deee5971339cebd5bb9cd6ece60a962bebc6747c55244002a212326
|
7
|
+
data.tar.gz: cc1f2e6360da271a4203c5a6ccc6c67c793f7c5f5ce13b671ad79532c47a9044e76db9131af18090885b06b17aec9960a828db7bb2417a1d82a9afc6df90c6ba
|
data/lib/bulk_ops/error.rb
CHANGED
@@ -118,7 +118,7 @@ class BulkOps::Error
|
|
118
118
|
end
|
119
119
|
|
120
120
|
when :bad_object_reference
|
121
|
-
message = "\n-- Error: bad object reference --\
|
121
|
+
message = "\n-- Error: bad object reference --\n"
|
122
122
|
message += "We enountered #{errors.count} problems resolving object references.\n"
|
123
123
|
if errors.count < max_error
|
124
124
|
message += "The row numbers with problems were:\n"
|
data/lib/bulk_ops/operation.rb
CHANGED
@@ -97,7 +97,7 @@ module BulkOps
|
|
97
97
|
# make sure the work proxies we just created are loaded in memory
|
98
98
|
reload
|
99
99
|
#loop through the work proxies to create a job for each work
|
100
|
-
@metadata.each_with_index do |values,row_number|
|
100
|
+
@metadata.dup.each_with_index do |values,row_number|
|
101
101
|
proxy = work_proxies.find_by(row_number: row_number)
|
102
102
|
proxy.update(message: "interpreted at #{DateTime.now.strftime("%d/%m/%Y %H:%M")} " + proxy.message)
|
103
103
|
data = BulkOps::Parser.new(proxy, @metadata).interpret_data(raw_row: values)
|
@@ -240,7 +240,8 @@ module BulkOps
|
|
240
240
|
end
|
241
241
|
|
242
242
|
def get_spreadsheet return_headers: false
|
243
|
-
|
243
|
+
branch = ((running? || complete?) ? "master" : nil)
|
244
|
+
git.load_metadata return_headers: return_headers, branch: branch
|
244
245
|
end
|
245
246
|
|
246
247
|
def spreadsheet_count
|
@@ -275,7 +276,7 @@ module BulkOps
|
|
275
276
|
end
|
276
277
|
|
277
278
|
def running?
|
278
|
-
return (
|
279
|
+
return (['running','finishing'].include?(stage))
|
279
280
|
end
|
280
281
|
|
281
282
|
def complete?
|
data/lib/bulk_ops/parser.rb
CHANGED
@@ -9,9 +9,9 @@ class BulkOps::Parser
|
|
9
9
|
return false unless metadata[row_number].present?
|
10
10
|
# If there are any valid fields other than relationship or file fields, it is a work
|
11
11
|
metadata[row_number].each do |field, value|
|
12
|
-
next if is_file_field?(field)
|
13
|
-
next if ["parent", "order"].include(normalize_relationship_field_name(field))
|
14
|
-
next if ["title","label"].include(field.downcase.strip)
|
12
|
+
next if BulkOps::Verification.is_file_field?(field)
|
13
|
+
next if ["parent", "order"].include?(normalize_relationship_field_name(field))
|
14
|
+
next if ["title","label"].include?(field.downcase.strip)
|
15
15
|
return false
|
16
16
|
end
|
17
17
|
return true
|
@@ -173,7 +173,7 @@ class BulkOps::Parser
|
|
173
173
|
next if field == value
|
174
174
|
|
175
175
|
# Check if this is a file field, and whether we are removing or adding a file
|
176
|
-
next unless (action = is_file_field?(field))
|
176
|
+
next unless (action = BulkOps::Verification.is_file_field?(field))
|
177
177
|
|
178
178
|
# Move on if this field is the name of another property (e.g. masterFilename)
|
179
179
|
next if find_field_name(field)
|
@@ -203,7 +203,7 @@ class BulkOps::Parser
|
|
203
203
|
child_row.each do |field,value|
|
204
204
|
next if value.blank?
|
205
205
|
title = value if ["title","label"].include?(field.downcase.strip)
|
206
|
-
if is_file_field?(field)
|
206
|
+
if BulkOps::Verification.is_file_field?(field)
|
207
207
|
operation.get_file_paths(value).each do |filepath|
|
208
208
|
uploaded_file = Hyrax::UploadedFile.create(file: File.open(filepath), user: operation.user)
|
209
209
|
end
|
@@ -269,7 +269,7 @@ class BulkOps::Parser
|
|
269
269
|
relationship_type = field
|
270
270
|
end
|
271
271
|
|
272
|
-
relationship_type = normalize_relationship_field_name(relationship_type)
|
272
|
+
relationship_type = self.class.normalize_relationship_field_name(relationship_type)
|
273
273
|
case relationship_type
|
274
274
|
when "order"
|
275
275
|
# If the field specifies the object's order among siblings
|
@@ -312,7 +312,7 @@ class BulkOps::Parser
|
|
312
312
|
@raw_row = row
|
313
313
|
end
|
314
314
|
|
315
|
-
def normalize_relationship_field_name field
|
315
|
+
def self.normalize_relationship_field_name field
|
316
316
|
normfield = field.downcase.parameterize.gsub(/[_\s-]/,'')
|
317
317
|
BulkOps::RELATIONSHIP_FIELDS.find{|rel_field| normfield == rel_field }
|
318
318
|
end
|
@@ -459,11 +459,6 @@ class BulkOps::Parser
|
|
459
459
|
BulkOps::DeleteFileSetJob.perform_later(fileset_id, operation.user.email )
|
460
460
|
end
|
461
461
|
|
462
|
-
|
463
|
-
def is_file_field? field
|
464
|
-
operation.is_file_field? field
|
465
|
-
end
|
466
|
-
|
467
462
|
def record_exists? id
|
468
463
|
operation.record_exists? id
|
469
464
|
end
|
@@ -31,9 +31,9 @@ module BulkOps
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
def is_file_field?(fieldname)
|
34
|
+
def self.is_file_field?(fieldname)
|
35
35
|
return false if fieldname.blank?
|
36
|
-
return false if
|
36
|
+
return false if ScoobySnacks::METADATA_SCHEMA.get_field(fieldname)
|
37
37
|
field_parts = fieldname.underscore.humanize.downcase.gsub(/[-_]/,' ').split(" ")
|
38
38
|
return false unless field_parts.any?{ |field_type| BulkOps::FILE_FIELDS.include?(field_type) }
|
39
39
|
return "remove" if field_parts.any?{ |field_type| ['remove','delete'].include?(field_type) }
|
@@ -46,7 +46,7 @@ module BulkOps
|
|
46
46
|
name.gsub!(/[_\s-]?[lL]abel$/,'')
|
47
47
|
name.gsub!(/^[rR]emove[_\s-]?/,'')
|
48
48
|
name.gsub!(/^[dD]elete[_\s-]?/,'')
|
49
|
-
possible_fields = (Work.attribute_names + schema.all_field_names).uniq
|
49
|
+
possible_fields = ((Work.attribute_names || []) + schema.all_field_names).uniq
|
50
50
|
matching_fields = possible_fields.select{|pfield| pfield.gsub(/[_\s-]/,'').parameterize == name.gsub(/[_\s-]/,'').parameterize }
|
51
51
|
return false if matching_fields.blank?
|
52
52
|
# raise Exception "Ambiguous metadata fields!" if matching_fields.uniq.count > 1
|
@@ -72,7 +72,7 @@ module BulkOps
|
|
72
72
|
def verify_files
|
73
73
|
file_errors = []
|
74
74
|
get_spreadsheet.each_with_index do |row, row_num|
|
75
|
-
file_fields = row.select { |field, value| is_file_field?(field) }
|
75
|
+
file_fields = row.select { |field, value| BulkOps::Verification.is_file_field?(field) }
|
76
76
|
file_fields.each do |column_name, filestring|
|
77
77
|
next if filestring.blank? or column_name == filestring
|
78
78
|
get_file_paths(filestring).each do |filepath|
|
@@ -103,7 +103,8 @@ module BulkOps
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def downcase_first_letter(str)
|
106
|
-
|
106
|
+
return nil unless str.present?
|
107
|
+
(str[0].downcase || "") + str[1..-1]
|
107
108
|
end
|
108
109
|
|
109
110
|
# Make sure the headers in the spreadsheet are matching to properties
|
@@ -188,7 +189,7 @@ module BulkOps
|
|
188
189
|
def verify_internal_references
|
189
190
|
# TODO
|
190
191
|
# This is sketchy. Redo it.
|
191
|
-
(metadata = get_spreadsheet).
|
192
|
+
(metadata = get_spreadsheet).each_with_index do |row,row_num|
|
192
193
|
ref_id = get_ref_id(row)
|
193
194
|
BulkOps::RELATIONSHIP_COLUMNS.each do |relationship|
|
194
195
|
next unless (obj_id = row[relationship])
|
@@ -197,16 +198,15 @@ module BulkOps
|
|
197
198
|
obj_id = split[1]
|
198
199
|
end
|
199
200
|
|
200
|
-
if ref_id == "row" || (ref_id
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
@verification_errors << BulkOps::Error.new({type: :bad_object_reference, object_id: obj_id, row_number: row_num + ROW_OFFSET})
|
201
|
+
if ref_id == "row" || (ref_id.include?("row") && obj_id.is_a?(Integer))
|
202
|
+
# This is a row number reference. It should be an integer or a string including "prev"
|
203
|
+
unless obj_id.present? && ((obj_id =~ /\A[-+]?[0-9]+\z/) or (obj_id.strip.downcase.include?("prev") ))
|
204
|
+
@verification_errors << BulkOps::Error.new({type: :bad_object_reference, object_id: obj_id, row_number: row_num + BulkOps::ROW_OFFSET})
|
205
205
|
end
|
206
|
-
elsif ref_id
|
206
|
+
elsif ref_id.include?("id")
|
207
207
|
# This is a hydra id reference. It should correspond to an object already in the repo
|
208
208
|
unless record_exists?(obj_id)
|
209
|
-
@verification_errors << BulkOps::Error.new({type: :bad_object_reference, object_id: obj_id, row_number: row_num+ROW_OFFSET})
|
209
|
+
@verification_errors << BulkOps::Error.new({type: :bad_object_reference, object_id: obj_id, row_number: row_num + BulkOps:: ROW_OFFSET})
|
210
210
|
end
|
211
211
|
end
|
212
212
|
end
|
data/lib/bulk_ops/version.rb
CHANGED