bulk_ops 0.1.17 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
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