Fix ArcGIS import when there are no features

pull/16322/head
Alberto Miedes Garcés 3 years ago
parent 97131ae158
commit 60a0eea935

@ -42,6 +42,7 @@ Development
- Fix search in _Filter by Column Value_ analysis [#16310](https://github.com/CartoDB/cartodb/pull/16310)
- Use Google Maps provider if the base layer is Google [#16314](https://github.com/CartoDB/cartodb/pull/16314)
- Allow importing datasets with exhausted map quota [#16320](https://github.com/CartoDB/cartodb/pull/16320)
- Fix empty ArcGIS imports [#16322](https://github.com/CartoDB/cartodb/pull/16322)
4.45.0 (2021-04-14)
-------------------

@ -125,7 +125,15 @@ class DataImport < Sequel::Model
log.append("Running on server #{server} with PID: #{Process.pid}")
begin
success = !!dispatch
self.state = STATE_UPLOADING
success = if table_copy.present? || from_query.present?
from_table
elsif service_name == 'connector'
!!execute_importer(*new_importer_with_connector)
else
!!execute_importer(*new_importer)
end
rescue TokenExpiredOrInvalidError => ex
success = false
begin
@ -345,18 +353,6 @@ class DataImport < Sequel::Model
end
end
def dispatch
self.state = STATE_UPLOADING
return from_table if table_copy.present? || from_query.present?
if service_name == 'connector'
importer, runner, datasource_provider, manual_fields = new_importer_with_connector
else
importer, runner, datasource_provider, manual_fields = new_importer
end
execute_importer importer, runner, datasource_provider, manual_fields
end
def running_import_ids
Resque::Worker.all.map do |worker|
next unless worker.job['queue'] == 'imports'

@ -123,6 +123,14 @@ module CartoDB
end
end
def build_empty_initial_stream
{
geometryType: @metadata[:geometry_type],
fields: @metadata[:fields],
features: []
}.to_json
end
# Initial stream, to be used for container creation (table usually)
# @param id string
# @return String
@ -132,6 +140,8 @@ module CartoDB
@ids = get_ids_list(@url)
return build_empty_initial_stream if @ids.empty?
@ids_total = @ids.length
first_item = get_by_ids(@url, [@ids.slice!(0)], @metadata[:fields])
@ -391,8 +401,6 @@ module CartoDB
raise ResponseError.new("Missing data: #{exception.to_s} #{request_url} #{exception.backtrace}")
end
raise ResponseError.new("Empty ids list #{request_url}") if data.length == 0
data
end

@ -258,9 +258,13 @@ describe Url::ArcGIS do
expect {
arcgis.send(:get_ids_list, id)
}.to raise_error ResponseError
end
it 'does not break when importing an empty feature list' do
arcgis = Url::ArcGIS.get_new(@user)
id = arcgis.send(:sanitize_id, @url)
# 'objectIds' empty
Typhoeus::Expectation.clear
Typhoeus.stub(/\/arcgis\/rest\//) do
body = File.read(File.join(File.dirname(__FILE__), "../fixtures/arcgis_ids_list.json"))
@ -273,10 +277,7 @@ describe Url::ArcGIS do
)
end
expect {
arcgis.send(:get_ids_list, id)
}.to raise_error ResponseError
arcgis.send(:get_ids_list, id)
end
it 'tests the get_ids_list() private method' do

@ -29,7 +29,7 @@ def create_import(user, file_name, name=nil)
end
@data_import.data_source = file_name
@data_import.send :dispatch
@data_import.run_import!
@data_import
end

@ -193,7 +193,7 @@ module CartoDB
end
data_import.data_source = file_name
data_import.send :dispatch
data_import.run_import!
data_import
end

Loading…
Cancel
Save