Issue with ArcGIS API for Python Append Function in AGOL Notebooks Beta

1080
1
05-29-2020 04:17 PM
Labels (1)
by Anonymous User
Not applicable

Hi all,

Wondering if anybody else had this issue: when using the append function from the python API, I receive an "Object reference not set to an instance of an object" error. The weird part is I've gotten the code to work previously after getting the error, then today went I went in to make some adjustments, it stopped working all the sudden. The previous reason I was getting the error had to do with the field names not matching, but that has since been corrected (since I'm appending from a shapefile, I had to account for truncated field names). While troubleshooting, I used the exact same code from within the python window in ArcGIS Pro and it appeared to work, which makes me think something else is going on here.

Here is the code in question:

# get public lease feature layer
public_leases = gis.content.get('item id string')

# get specific sublayer from public lease feature layer
public_lease_layer = public_leases.layers[0]

# get source lease data 
source_leases = gis.content.get('item id string')

# get source lease layer 
source_leases_layer = source_leases.layers[0]

# Query for only Active, Pending Leases as a spatial data frame
source_leases_query = source_leases_layer.query(where="RecordStatus = 'Active' Or RecordStatus = 'Pending'").sdf

# Publish the spatial data frame as a feature layer, will also publish a shapefile
temp_layer = source_leases_query.spatial.to_featurelayer('temp_lease_feature_layer')

# Export temporary layer to shapefile
temp = temp_layer.export('temp_lease_shapefile','Shapefile')

# append public lease layer with records from temp shapefile (SLC Properties) using upsert
public_lease_layer.append(
    item_id=temp.id,
    upload_format='shapefile',
    upsert=True,
    update_geometry=True,
    use_globalids=True,
    field_mappings=[
        {
            'name': 'RecordStatus',
            'source' : 'RecordStat'},
        {
            'name': 'LeaseNum',
            'source' : 'LeaseNum'},
        {
            'name': 'GeneralLocation',
            'source' : 'GeneralLoc'},
        {
            'name': 'LeaseorPermit',
            'source' : 'LeaseorPer'},
        {
            'name': 'TypeofLease',
            'source' : 'TypeofLeas'},
        {
            'name': 'LeaseStartDate',
            'source' : 'LeaseStart'},
        {
            'name': 'LeaseExpirationDate',
            'source' : 'LeaseExpir'},
        {
            'name': 'SLCApprovalDate',
            'source' : 'SLCApprova'},
        {
            'name': 'MinuteItem',
            'source' : 'MinuteItem'},
        {
            'name': 'Improvements',
            'source' : 'Improvemen'},
        {
            'name': 'Latitude',
            'source' : 'Latitude'},
        {
            'name': 'Longitude',
            'source' : 'Longitude'}])‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

And here is the error I get:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-13-93b5922cf27b> in <module>
     43         {
     44             'name': 'Longitude',
---> 45             'source' : 'Longitude'}])

/opt/conda/lib/python3.6/site-packages/arcgis/features/layer.py in append(self, item_id, upload_format, source_table_name, field_mappings, edits, source_info, upsert, skip_updates, use_globalids, update_geometry, append_fields, rollback, skip_inserts, upsert_matching_field)
   1456             sres = self._con.get(path=surl, params={'f' : 'json'})
   1457             while sres['status'].lower() != "completed":
-> 1458                 sres = self._con.get(path=surl, params={'f' : 'json'})
   1459                 if sres['status'].lower() in "failed":
   1460                     break

/opt/conda/lib/python3.6/site-packages/arcgis/_impl/connection.py in get(self, path, params, ssl, compress, try_json, is_retry, use_ordered_dict, out_folder, file_name, force_bytes, add_token, token)
    900                                     return self.get(path=path, params=params, ssl=True, compress=compress, try_json=try_json, is_retry=True)
    901 
--> 902                             self._handle_json_error(resp_json['error'], errorcode)
    903                             return None
    904                 except AttributeError:

/opt/conda/lib/python3.6/site-packages/arcgis/_impl/connection.py in _handle_json_error(self, error, errorcode)
   1201 
   1202         errormessage = errormessage + "\n(Error Code: " + str(errorcode) +")"
-> 1203         raise RuntimeError(errormessage)
   1204 
   1205 class _StrictURLopener(request.FancyURLopener):

RuntimeError: Object reference not set to an instance of an object.
(Error Code: 400)

Thoughts? am I missing something?

1 Reply
by Anonymous User
Not applicable

This is insane. I have been dealing with the same thing for hours with the same error. My code is very similar to yours and I have it working perfectly on desktop with a file geodatabase from a dataframe query. Does it like the exact same code on an AGOL notebook? Of course not.

In addition, I can't even get it to append from a feature layer collection anywhere. The documentation says it is an option, but I have never seen anyone do it before. You didn't by any chance get this figured out in the last year?

0 Kudos