54 lines
1.5 KiB
Ruby
54 lines
1.5 KiB
Ruby
|
require_relative 'hires_geocoder'
|
||
|
require_relative 'hires_batch_geocoder'
|
||
|
require_relative 'geocoder_config'
|
||
|
|
||
|
|
||
|
module CartoDB
|
||
|
class HiresGeocoderFactory
|
||
|
|
||
|
BATCH_FILES_OVER = 1100 # Use Here Batch Geocoder API with tables over x rows
|
||
|
|
||
|
def self.get(input_csv_file, working_dir, log, geocoding_model, number_of_rows = 0)
|
||
|
geocoder_class = nil
|
||
|
if use_batch_process?(input_csv_file, geocoding_model, number_of_rows)
|
||
|
geocoder_class = HiresBatchGeocoder
|
||
|
else
|
||
|
geocoder_class = HiresGeocoder
|
||
|
end
|
||
|
|
||
|
geocoder_class.new(input_csv_file, working_dir, log, geocoding_model)
|
||
|
end
|
||
|
|
||
|
|
||
|
private
|
||
|
|
||
|
def self.use_batch_process?(input_csv_file, geocoding_model, number_of_rows)
|
||
|
# Due we could check this condition to create the geocoder class and we don't
|
||
|
# have finished yet the csv file generation, and could be nil, we have to check
|
||
|
# multiples conditions. It's sorted by priority
|
||
|
if force_batch? || geocoding_model.batched
|
||
|
true
|
||
|
elsif (not input_csv_file.nil?) && (input_rows(input_csv_file) > BATCH_FILES_OVER)
|
||
|
true
|
||
|
elsif (not number_of_rows.nil?) && (number_of_rows > BATCH_FILES_OVER)
|
||
|
true
|
||
|
else
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def self.force_batch?
|
||
|
GeocoderConfig.instance.get['force_batch'] || false
|
||
|
end
|
||
|
|
||
|
def self.input_rows(input_csv_file)
|
||
|
stdout, _stderr, _status = Open3.capture3('wc', '-l', input_csv_file)
|
||
|
stdout.to_i
|
||
|
rescue StandardError => e
|
||
|
CartoDB.notify_exception(e)
|
||
|
0
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|