I am going over this ESRI training: https://learn.arcgis.com/en/projects/update-real-time-data-with-python/ , I get stuck on step 17 in the "Create stand-alone script" section. There is a similar post available online (https://community.esri.com/t5/python-questions/the-workspace-work-gdb-does-not-exist-failed-to/m-p/1... ), but I couldn't figure out an answer since I am fairly new to python scripting.
Any help would be appreciated, thank you.
Here is my code:
import sys, arcpy, os, tempfile, json
from urllib import request
def feedRoutine (url, workGDB):
    # workGDB and default workspace
    print("Creating workGDB...")
    arcpy.env.workspace =  workGDB
    arcpy.management.CreateFileGDB(os.path.dirname(workGDB) , os.path.basename(workGDB))
    
# Download and split json file
    print("Downloading data...")
    temp_dir = tempfile.mkdtemp()
    filename = os.path.join(temp_dir, 'latest_data.json')
    response = request.urlretrieve(url, filename)
    with open(filename) as json_file:
        data_raw = json.load(json_file)
        data_stations = dict(type=data_raw['type'], features=[])
        data_areas = dict(type=data_raw['type'], features=[])
    for feat in data_raw['features']:
        if feat['geometry']['type'] == 'Point':
            data_stations['features'].append(feat)
        else:
            data_areas['features'].append(feat)
    # Filenames of temp json files
    stations_json_path = os.path.join(temp_dir, 'points.json')
    areas_json_path = os.path.join(temp_dir, 'polygons.json')
    # Save dictionaries into json files
    with open(stations_json_path, 'w') as point_json_file:
        json.dump(data_stations, point_json_file, indent=4)
    with open(areas_json_path, 'w') as poly_json_file:
        json.dump(data_areas, poly_json_file, indent=4)
    # Convert json files to features
    print("Creating feature classes...")
    arcpy.conversion.JSONToFeatures(stations_json_path, 'alert_stations') 
    arcpy.conversion.JSONToFeatures(areas_json_path, 'alert_areas')
    # Add 'alert_level ' field
    arcpy.management.AddField('alert_stations', 'alert_level', 'SHORT', field_alias='Alert Level')
    arcpy.management.AddField('alert_areas', 'alert_level', 'SHORT', field_alias='Alert Level')
    # Calculate 'alert_level ' field
    arcpy.management.CalculateField('alert_stations', 'alert_level', "int(!alert!)")
    arcpy.management.CalculateField('alert_areas', 'alert_level', "int(!alert!)")
    # Deployment Logic
    print("Deploying...")
    deployLogic()
    # Return
    print("Done!")
    return True
def deployLogic():
    pass
    
if __name__ == "__main__":
        [url, workGDB] = sys.argv[1:]
        feedRoutine (url, workGDB)This is the error code:
(arcgispro-py3-user) C:\training>python coral_reef_exercise.py https://coralreefwatch.noaa.gov/product/vs/vs_polygons.json C:\Temp\Work.gdb
Creating workGDB...
Downloading data...
Creating feature classes...
Traceback (most recent call last):
  File "coral_reef_exercise.py", line 56, in <module>
    feedRoutine (url, workGDB)
  File "coral_reef_exercise.py", line 34, in feedRoutine
    arcpy.conversion.JSONToFeatures(stations_json_path, 'alert_stations')
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\conversion.py", line 576, in JSONToFeatures
    raise e
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\conversion.py", line 573, in JSONToFeatures
    retval = convertArcObjectToPythonObject(gp.JSONToFeatures_conversion(*gp_fixargs((in_json_file, out_features, geometry_type), True)))
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\geoprocessing\_base.py", line 512, in <lambda>
    return lambda *args: val(*gp_fixargs(args, True))
arcgisscripting.ExecuteError: ERROR 999999: Something unexpected caused the tool to fail. Contact Esri Technical Support (http://esriurl.com/support) to Report a Bug, and refer to the error help for potential solutions or workarounds.
CreateFeatureClassName: The workspace  does not exist.
Failed to execute (JSONToFeatures).If you just ran that script, it will compile then run lines 55 and 56, hence, it needs values for this
sys.argv[1:] is the url and the workGDB since sys.argv[0] is the actual script that is running.
[url, workGDB] = sys.argv[1:]
feedRoutine (url, workGDB)
Then it runs the feedRoutine function with the values provided.
So in short you need a url and the full path to a workspace geodatabase pasted before the second line (comment out the line 55) to replacing those values before the feedRoutine is called
Dan thanks for replying,
I am using this python command on the Python Command Prompt to include that information:
python coral_reef_exercise.py https://coralreefwatch.noaa.gov/product/vs/vs_polygons.json C:\Temp\Work.gdbAfter using this my script runs fine but I run into that error.
I don't use that approach, preferring to just put the parameters on your line 55
if __name__ == "__main__":
        url, workGDB = "http:// ....", "c:/temp/your.gdb"
        feedRoutine(url, workGDB)Thanks again for helping out Dan! So I updated that part of my script and still got that Failed to execute (JSONToFeatures) error. Here is the updated script with those edits:
import sys, arcpy, os, tempfile, json
from urllib import request
def feedRoutine (url, workGDB):
    # workGDB and default workspace
    print("Creating workGDB...")
    arcpy.env.workspace =  workGDB
    arcpy.management.CreateFileGDB(os.path.dirname(workGDB) , os.path.basename(workGDB))
    
# Download and split json file
    print("Downloading data...")
    temp_dir = tempfile.mkdtemp()
    filename = os.path.join(temp_dir, 'latest_data.json')
    response = request.urlretrieve(url, filename)
    with open(filename) as json_file:
        data_raw = json.load(json_file)
        data_stations = dict(type=data_raw['type'], features=[])
        data_areas = dict(type=data_raw['type'], features=[])
    for feat in data_raw['features']:
        if feat['geometry']['type'] == 'Point':
            data_stations['features'].append(feat)
        else:
            data_areas['features'].append(feat)
    # Filenames of temp json files
    stations_json_path = os.path.join(temp_dir, 'points.json')
    areas_json_path = os.path.join(temp_dir, 'polygons.json')
    # Save dictionaries into json files
    with open(stations_json_path, 'w') as point_json_file:
        json.dump(data_stations, point_json_file, indent=4)
    with open(areas_json_path, 'w') as poly_json_file:
        json.dump(data_areas, poly_json_file, indent=4)
    # Convert json files to features
    print("Creating feature classes...")
    arcpy.conversion.JSONToFeatures(stations_json_path, 'alert_stations') 
    arcpy.conversion.JSONToFeatures(areas_json_path, 'alert_areas')
    # Add 'alert_level ' field
    arcpy.management.AddField('alert_stations', 'alert_level', 'SHORT', field_alias='Alert Level')
    arcpy.management.AddField('alert_areas', 'alert_level', 'SHORT', field_alias='Alert Level')
    # Calculate 'alert_level ' field
    arcpy.management.CalculateField('alert_stations', 'alert_level', "int(!alert!)")
    arcpy.management.CalculateField('alert_areas', 'alert_level', "int(!alert!)")
    # Deployment Logic
    print("Deploying...")
    deployLogic()
    # Return
    print("Done!")
    return True
def deployLogic():
    pass
    
if __name__ == "__main__":
        [url, workGDB] = "https://coralreefwatch.noaa.gov/product/vs/vs_polygons.json", "C:\Temp\work.gdb"
        feedRoutine (url, workGDB)Here is the Error:
(arcgispro-py3-user) C:\training>python coral_reef_exercise.py
Creating workGDB...
Downloading data...
Creating feature classes...
Traceback (most recent call last):
  File "coral_reef_exercise.py", line 56, in <module>
    feedRoutine (url, workGDB)
  File "coral_reef_exercise.py", line 34, in feedRoutine
    arcpy.conversion.JSONToFeatures(stations_json_path, 'alert_stations')
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\conversion.py", line 576, in JSONToFeatures
    raise e
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\conversion.py", line 573, in JSONToFeatures
    retval = convertArcObjectToPythonObject(gp.JSONToFeatures_conversion(*gp_fixargs((in_json_file, out_features, geometry_type), True)))
  File "C:\Program Files\ArcGIS\Pro\Resources\ArcPy\arcpy\geoprocessing\_base.py", line 512, in <lambda>
    return lambda *args: val(*gp_fixargs(args, True))
arcgisscripting.ExecuteError: ERROR 999999: Something unexpected caused the tool to fail. Contact Esri Technical Support (http://esriurl.com/support) to Report a Bug, and refer to the error help for potential solutions or workarounds.
CreateFeatureClassName: The workspace  does not exist.
Failed to execute (JSONToFeatures).
"C:\Temp\work.gdb"
If that exists, then I don't know. nothing pops out immediately but I avoid the web stuff. Someone else should have leapt in by now, but if not, you might want to contact tech support
Hi @ErikGarcia1 
I had to do one line modification to feedRoutine function:
def feedRoutine (url, workGDB) :
# workGDB and default workspace
print("Creating workGDB...")
arcpy.env.workspace = workGDB
arcpy.env.overwriteOutput = True #incase the gdb file is already created
arcpy.management.CreateFileGDB(os.path.dirname(workGDB) , os.path.basename(workGDB))
that's the run log
Creating workGDB...
Downloading data...
Creating feature classes...
Deploying...
Done!
Hope that helps
Ihab
Hello Ihab,
I tried your line modification, but I am still getting the same result. I am currently working with support for an answer and I will try to post it here if successful.
Thank you for the help,
Erik Garcia
Erik
