Skip to content

Commit dbae3e4

Browse files
committed
account for case-insensitive volume names in import tasks
1 parent 1421495 commit dbae3e4

File tree

4 files changed

+108
-65
lines changed

4 files changed

+108
-65
lines changed

app/services/sync_service/assets.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def ensure_directory_structure(isilon_path)
9696
directories = all_directories[0...-1]
9797
return true if directories.empty?
9898

99-
volume = Volume.find_by(name: @parent_volume.name)
99+
volume = @parent_volume
100100

101101
(directories.size).downto(0) do |i|
102102
if directories.present?
@@ -140,17 +140,21 @@ def fallback_individual_saves(assets_to_create)
140140
end
141141

142142
def set_full_path(path)
143-
volume_segment = [ "/", @parent_volume.name ].join
144-
path.gsub(volume_segment, "")
143+
segments = path.to_s.split("/").reject(&:blank?)
144+
return "/" if segments.size <= 1
145+
146+
"/" + segments[1..].join("/")
145147
end
146148

147149
def check_volume(path)
148150
first_row = CSV.read(path, headers: true).first
149151
volume = first_row["Path"].split("/").compact_blank[0]
150152

151-
if Volume.exists?(name: volume)
152-
stdout_and_log("Volume #{volume} already exists.")
153-
Volume.find_by(name: volume)
153+
existing_volume = find_volume_case_insensitive(volume)
154+
155+
if existing_volume
156+
stdout_and_log("Volume #{existing_volume.name} already exists.")
157+
existing_volume
154158
else
155159
new_volume = Volume.create!(name: volume)
156160
begin
@@ -178,6 +182,10 @@ def get_asset_parent_id(path)
178182
find_or_create_folder_safely(@parent_volume.id, "/#{path}")
179183
end
180184

185+
def find_volume_case_insensitive(name)
186+
Volume.where("LOWER(name) = ?", name.to_s.downcase).first
187+
end
188+
181189
def find_or_create_folder_safely(volume_id, full_path)
182190
retry_count = 0
183191
max_retries = 3

app/services/sync_service/tiffs.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,18 @@ def self.call(volume_name: nil)
99
new(volume_name: volume_name).process
1010
end
1111

12+
ALLOWED_VOLUME_NAMES = %w[Deposit Media-Repository].freeze
13+
1214
def initialize(volume_name: nil)
1315
@volume_name = volume_name
1416
@log = Logger.new("log/isilon-post-processing.log")
1517
@stdout = Logger.new($stdout)
1618

1719
if @volume_name
18-
@parent_volume = Volume.find_by(name: @volume_name)
20+
validate_volume_name!(@volume_name)
21+
@parent_volume = find_volume_case_insensitive(@volume_name)
1922
raise ArgumentError, "Volume '#{@volume_name}' not found" unless @parent_volume
23+
@volume_name = @parent_volume.name
2024
else
2125
@parent_volume = nil # Will process all volumes
2226
end
@@ -238,5 +242,16 @@ def stdout_and_log(message, level: :info)
238242
@log.send(level, message)
239243
@stdout.send(level, message)
240244
end
245+
246+
def validate_volume_name!(name)
247+
return if ALLOWED_VOLUME_NAMES.any? { |allowed| allowed.casecmp?(name.to_s) }
248+
249+
allowed_display = ALLOWED_VOLUME_NAMES.join(", ")
250+
raise ArgumentError, "Volume '#{name}' is not supported. Use one of: #{allowed_display}"
251+
end
252+
253+
def find_volume_case_insensitive(name)
254+
Volume.where("LOWER(name) = ?", name.to_s.downcase).first
255+
end
241256
end
242257
end

lib/tasks/isilon_import.rake

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,28 @@ namespace :sync do
99

1010
desc "Process TIFF files for deduplication"
1111
task :tiffs, [ :volume_name ] => :environment do |_t, args|
12-
unless args[:volume_name]
12+
requested_volume = args[:volume_name].to_s
13+
14+
if requested_volume.blank?
1315
puts "Error: volume_name argument is required"
1416
puts "Usage: rake sync:tiffs[deposit] or rake sync:tiffs[media-repository]"
1517
exit 1
1618
end
1719

18-
valid_volumes = %w[deposit media-repository]
19-
unless valid_volumes.include?(args[:volume_name])
20+
valid_volumes = %w[Deposit Media-Repository]
21+
unless valid_volumes.map(&:downcase).include?(requested_volume.downcase)
2022
puts "Error: volume_name must be one of: #{valid_volumes.join(', ')}"
2123
exit 1
2224
end
2325

24-
volume = Volume.find_by(name: args[:volume_name])
26+
volume = Volume.where("LOWER(name) = ?", requested_volume.downcase).first
2527
unless volume
26-
puts "Error: Volume '#{args[:volume_name]}' not found in database"
28+
puts "Error: Volume '#{requested_volume}' not found in database"
2729
exit 1
2830
end
2931

3032
begin
31-
SyncService::Tiffs.call(volume_name: args[:volume_name])
33+
SyncService::Tiffs.call(volume_name: requested_volume)
3234
rescue => e
3335
puts "Error during TIFF processing: #{e.message}"
3436
puts e.backtrace.first(5).join("\n") if e.backtrace

0 commit comments

Comments
 (0)