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.gdb
After 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