Initial commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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 => e
|
||||
CartoDB.notify_exception(e)
|
||||
0
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user