Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

clone_items throws "IndexError: list index out of range" when there are nested repeats in the featureservice #1773

Open
nojha-g opened this issue Mar 13, 2024 · 0 comments
Assignees
Labels

Comments

@nojha-g
Copy link

nojha-g commented Mar 13, 2024

Describe the bug
A clear and concise description of what the bug is.
When I use the code to clone items for feature service and if it has nested repeats I get the error and fails to clone.

To Reproduce
I have a feature service with following
FeatureLayer (id=0)
Table 1(id=1) --> related to layer 0
Table 2(id=2) --> related to Table 1

Steps to reproduce the behavior:

copydata = True
item_id_test ='a8a819c2efab4c8ab3aaed5bfbe74b14'
print(datetime.now().strftime("%Y/%m/%d, %H:%M:%S"))
source = GIS(source_enterprise_url, source_username, source_password,  use_gen_token=True)
target = GIS(target_arcgisonline_url, target_username, target_password,  use_gen_token=True)
#print("s",source)
#print("t",target)
it = source.content.get(item_id_test)
target_user=target_username
foldername='0_Migration_Test_Folder'
cloned_items = target.content.clone_items(items=[it], folder=foldername, owner=target_user, copy_data=copydata,use_org_basemap=True)#,item_mapping=map_service_item_mapping)

error:

{
	"name": "_ItemCreateException",
	"message": "('Failed to create Feature Service SERVICENAME: list index out of range', <Item title:\"TITLE\" type:Feature Layer Collection owner:TARGETUSER>)",
	"stack": "---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in clone(self)
   3924                         ]
-> 3925                     self._add_features(
   3926                         new_layers,

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in _add_features(self, layers, relationships, layer_field_mapping, spatial_reference)
   2786             object_id_field = layers[layer_id].properties[\"objectIdField\"]
-> 2787             object_id_mapping[layer_id] = {
   2788                 layer_features[i][\"attributes\"][object_id_field]: add_results[i][

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in <dictcomp>(.0)
   2787             object_id_mapping[layer_id] = {
-> 2788                 layer_features[i][\"attributes\"][object_id_field]: add_results[i][
   2789                     \"objectId\"

IndexError: list index out of range

During handling of the above exception, another exception occurred:

_ItemCreateException                      Traceback (most recent call last)
~\\AppData\\Local\\Temp\\ipykernel_29612\\2784937216.py in <cell line: 16>()
     14 target_user=\"targetuser\"
     15 foldername='0_Migration_Test_Folder'
---> 16 cloned_items = target.content.clone_items(items=[it], folder=foldername, owner=target_user, copy_global_ids=True,copy_data=copydata,use_org_basemap=True)#,item_mapping=map_service_item_mapping)
     17 
     18 

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\gis\\__init__.py in clone_items(self, items, folder, item_extent, use_org_basemap, copy_data, copy_global_ids, search_existing_items, item_mapping, group_mapping, owner, preserve_item_id, **kwargs)
   8560             wab_code_attach=kwargs.pop(\"copy_code_attachment\", True),
   8561         )
-> 8562         return deep_cloner.clone()
   8563 
   8564     def bulk_update(

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in clone(self)
   1320         else:
   1321             with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
-> 1322                 results = executor.submit(self._clone, executor).result()
   1323                 return results
   1324 

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\concurrent\\futures\\_base.py in result(self, timeout)
    444                     raise CancelledError()
    445                 elif self._state == FINISHED:
--> 446                     return self.__get_result()
    447                 else:
    448                     raise TimeoutError()

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\concurrent\\futures\\_base.py in __get_result(self)
    389         if self._exception:
    390             try:
--> 391                 raise self._exception
    392             finally:
    393                 # Break a reference cycle with the exception in self._exception

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\concurrent\\futures\\thread.py in run(self)
     56 
     57         try:
---> 58             result = self.fn(*self.args, **self.kwargs)
     59         except BaseException as exc:
     60             self.future.set_exception(exc)

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in _clone(self, excecutor)
   1294                         if item:
   1295                             item.delete()
-> 1296                     raise ex
   1297 
   1298             level += 1

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\concurrent\\futures\\thread.py in run(self)
     56 
     57         try:
---> 58             result = self.fn(*self.args, **self.kwargs)
     59         except BaseException as exc:
     60             self.future.set_exception(exc)

c:\\Program Files\\ArcGIS\\Pro\\bin\\Python\\envs\\arcgispro-py3\\lib\\site-packages\\arcgis\\_impl\\common\\_clone.py in clone(self)
   3994             return new_item
   3995         except Exception as ex:
-> 3996             raise _ItemCreateException(
   3997                 \"Failed to create {0} {1}: {2}\".format(
   3998                     original_item[\"type\"], original_item[\"title\"], str(ex)

_ItemCreateException: ('Failed to create Feature Service SERVICENAME: list index out of range', <Item title:\"TITLE\" type:Feature Layer Collection owner:TARGETUSER>)"
}

Platform (please complete the following information):

  • OS: [Windows 10, ArcGIS Pro 3.2]
  • Browser [Visual Studio Code]
  • Python API Version '2.2.0.1'

Additional context
Cloning contents from ArcGIS Enterprise to ArcGIS Online
Also I would like to mention that if the process takes longer than 60 min, it will fail with invalid token error. I tried several ways to see if the expiry time of token to be longer, but I am not able to do so. When using rest API, I am able to have longer expiring token but not with the Python API using "arcgis.gis".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants