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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41f67b2f02e5495a78e4bd57457c6e8c4fc47b2d17579a5844ee57d950bd8cae
4
- data.tar.gz: 119b59420890b6838dd26540a6209b32c04cd5e8e328510db88539d26c90715e
3
+ metadata.gz: a60889c5673952113a76b07c00b17b6ac5f99a4a2a3ac1099b3e2cb58ac04fd7
4
+ data.tar.gz: f7e2488b18b09092e90ef1fb3dad38e460d75bdfb355942065be98e28e743008
5
5
  SHA512:
6
- metadata.gz: 68913835f6fbdca1773f446b3894278eefbb122feec5e327f9a44ca30aad2540f5791ac0379d2def5467509889000ad7ae95f4093309ad08e48dd3509d2550cb
7
- data.tar.gz: 5a6dff8e04c77f3c0822509fe429331116e8a81d6cb4691a0bad89224acf189279862228fcde72f2d6e908e393642952bf6b7d712caa0fd4d4c719cfa434c3eb
6
+ metadata.gz: df3fc8ea76aae33515e73202d16a73ddbd86a3ae3c7a73245ec303c7599751b8c8e9961c1deee5971339cebd5bb9cd6ece60a962bebc6747c55244002a212326
7
+ data.tar.gz: cc1f2e6360da271a4203c5a6ccc6c67c793f7c5f5ce13b671ad79532c47a9044e76db9131af18090885b06b17aec9960a828db7bb2417a1d82a9afc6df90c6ba
@@ -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 --\m"
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"
@@ -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
- git.load_metadata return_headers: return_headers
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 (stage == 'running')
279
+ return (['running','finishing'].include?(stage))
279
280
  end
280
281
 
281
282
  def complete?
@@ -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 schema.get_field(fieldname)
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
- str[0].downcase + str[1..-1]
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).each do |row,row_num|
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 == "id/row" && obj_id.is_a?(Integer))
201
- obj_id = obj_id.to_i
202
- # This is a row number reference. It should be an integer in the range of possible row numbers.
203
- unless obj_id.present? && (obj_id > 0) && (obj_id <= metadata.count)
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 == "id" || ref_id == "hyrax id" || (ref_id == "id/row" && (obj_id.is_a? Integer))
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
@@ -1,3 +1,3 @@
1
1
  module BulkOps
2
- VERSION = "0.1.17"
2
+ VERSION = "0.1.18"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulk_ops
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.17
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ned Henry, UCSC Library Digital Initiatives