Skip to content

Commit 4030977

Browse files
authored
Merge pull request #9 from hydroshare/rasters
Rasters
2 parents 2c93b72 + 7643373 commit 4030977

2 files changed

Lines changed: 32 additions & 32 deletions

File tree

hs_data_services/hs_data_services_sync/management/commands/copy_res_files_from_hydroshare.py renamed to hs_data_services/hs_data_services_sync/management/commands/update_data_services.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
class Command(BaseCommand):
7-
help = "Copy resource files from HydroShare to geoserver storage"
7+
help = "Update data services for a resource or all public resources"
88

99
def add_arguments(self, parser):
1010
parser.add_argument('resource_ids', nargs='*', type=str)
@@ -13,20 +13,17 @@ def handle(self, *args, **options):
1313
resource_ids = options['resource_ids']
1414
if len(resource_ids) > 0:
1515
for resource_id in resource_ids:
16-
print(f"Copying files from resource: {resource_id}")
17-
result = self.copy_files(resource_id)
16+
print(f"Updating services for resource: {resource_id}")
17+
result = tasks.update_data_services_task(resource_id)
1818
print(result)
1919
else:
2020
resources = get_list_of_public_geo_resources()
2121
num_resources = len(resources)
22-
print(f"Copying files from {num_resources} resources")
22+
print(f"Updating resources for {num_resources} resources")
2323
counter = 1
2424
for res_id in resources:
25-
print(f"{counter}/{num_resources} - Copying files from resource: {res_id}")
26-
result = self.copy_files(res_id)
25+
print(f"{counter}/{num_resources} - Updating services for resource: {res_id}")
26+
result = tasks.update_data_services_task(res_id)
2727
print(result)
2828
counter += 1
29-
print("Done copying files")
30-
31-
def copy_files(self, resource_id):
32-
return tasks.update_data_services_task.delay(resource_id)
29+
print("Done updating data services")

hs_data_services/hs_data_services_sync/utilities.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,16 @@ def update_data_services(resource_id):
3232

3333
for db in database_list['geoserver']['unregister']:
3434
unregister_geoserver_db(resource_id, db)
35-
remove_copied_file_from_geoserver(resource_id, db)
3635

3736
for db in database_list['geoserver']['register']:
3837
# copy geoserver files from HS to GeoServer
39-
file_transfer_info = copy_file_to_geoserver(resource_id, db)
38+
file_transfer_info = copy_files_to_geoserver(resource_id, db)
4039
if file_transfer_info['success'] is False:
4140
response['message'] = file_transfer_info['message']
4241
return response
4342
db_info = register_geoserver_db(resource_id, db)
4443
if db_info['success'] is False:
45-
logging.error("Error registering GeoServer layer. Unregistering...")
4644
unregister_geoserver_db(resource_id, db)
47-
# TODO: ideally we "inform" HS that the registration failed
48-
# This is called from an async task, so we can't return a meaningful response to HS
49-
logging.info("Removing copied files from GeoServer...")
50-
remove_copied_file_from_geoserver(resource_id, db)
5145

5246
geoserver_list = get_geoserver_list(resource_id)
5347

@@ -68,12 +62,12 @@ def update_data_services(resource_id):
6862
return response
6963

7064

71-
7265
def get_database_list(res_id):
7366
"""
7467
Gets a list of HydroShare databases on which web services can be published.
7568
"""
7669

70+
logger.info(f"Getting database list for resource: {res_id}")
7771
db_list = {
7872
"access": None,
7973
"geoserver": {
@@ -174,12 +168,12 @@ def get_database_list(res_id):
174168
return db_list
175169

176170

177-
178171
def get_geoserver_list(res_id):
179172
"""
180173
Gets a list of data stores and coverages from a GeoServer workspace.
181174
"""
182175

176+
logger.info(f"Getting geoserver list for resource: {res_id}")
183177
layer_list = []
184178

185179
geoserver_namespace = settings.DATA_SERVICES.get("geoserver", {}).get('NAMESPACE')
@@ -288,11 +282,12 @@ def get_geoserver_data_dir():
288282
return geoserver_directory
289283

290284

291-
def copy_file_to_geoserver(res_id, db):
285+
def copy_files_to_geoserver(res_id, db):
292286
"""
293287
Copy Geospatial file from HydroShare to GeoServer.
294288
"""
295289

290+
logger.info(f"Copying files to GeoServer for resource: {res_id}")
296291
geoserver_directory = get_geoserver_data_dir()
297292

298293
layer_type = None
@@ -311,11 +306,11 @@ def copy_file_to_geoserver(res_id, db):
311306

312307
def get_and_write_file(file_url, file_path):
313308
try:
314-
logger.info(f"Copying file to GeoServer from: {file_url}")
309+
logger.info(f"Getting file from: {file_url}")
315310
response = requests.get(file_url)
316311
# create the directory if it doesn't exist
317312
dir_path = os.path.dirname(file_path) + "/"
318-
logger.info(f"Creating directory: {dir_path}")
313+
logger.info(f"Checking for directory: {dir_path}")
319314
os.makedirs(os.path.dirname(dir_path), exist_ok=True)
320315
with open(file_path, 'w+b') as f:
321316
logger.info(f"Writing file to GeoServer: {file_path}")
@@ -353,7 +348,7 @@ def get_and_write_file(file_url, file_path):
353348
return error_response
354349

355350

356-
def remove_copied_file_from_geoserver(res_id, db):
351+
def remove_copied_files_from_geoserver(res_id, db):
357352
"""
358353
Remove file from GeoServer.
359354
"""
@@ -378,10 +373,11 @@ def remove_copied_file_from_geoserver(res_id, db):
378373
file_path = os.path.join(geoserver_directory, db["hs_path"])
379374
logger.info(f"Removing file from GeoServer: {file_path}")
380375
os.remove(file_path)
381-
for file in db["associated_files"]:
382-
file_path = os.path.join(geoserver_directory, file)
383-
logger.info(f"Removing associated file from GeoServer: {file_path}")
384-
os.remove(file_path)
376+
if db.get("associated_files", None):
377+
for file in db["associated_files"]:
378+
file_path = os.path.join(geoserver_directory, file)
379+
logger.info(f"Removing associated file from GeoServer: {file_path}")
380+
os.remove(file_path)
385381
except Exception as e:
386382
message = f"Error removing files from geoserver: {e}"
387383
error_response["message"] = message
@@ -401,6 +397,7 @@ def remove_files_for_entire_resource(res_id):
401397
Remove all files from GeoServer for a resource.
402398
"""
403399

400+
logger.info(f"Removing all files for entire resource: {res_id}")
404401
geoserver_directory = get_geoserver_data_dir()
405402

406403
error_response = {
@@ -467,8 +464,8 @@ def register_geoserver_db(res_id, db):
467464
if json.loads(response.content.decode('utf-8'))[db["verification"]]["enabled"] is False:
468465
logging.error(f"Verification not enabled for layer: {db['layer_name']}")
469466
return error_response
470-
except:
471-
logging.error(f"Error checking verification for layer: {db['layer_name']}")
467+
except Exception as e:
468+
logging.error(f"Error checking verification for layer {db['layer_name']}: {e}")
472469
return error_response
473470

474471
bbox = json.loads(response.content)[db["verification"]]["nativeBoundingBox"]
@@ -477,7 +474,7 @@ def register_geoserver_db(res_id, db):
477474
response = requests.put(rest_url, headers=headers, auth=geoserver_auth, data=data)
478475

479476
if response.status_code != 200:
480-
logging.error(f"Error attempting to put layer data at {rest_url}")
477+
logging.error(f"Error attempting to put layer data at {rest_url}: {response}")
481478
return error_response
482479

483480
if db["layer_type"] == "GeographicRaster":
@@ -518,7 +515,7 @@ def register_geoserver_db(res_id, db):
518515
except Exception as e:
519516
pass
520517

521-
logger.info(f"Successfully registered GeoServer layer for resource: {res_id}")
518+
logger.info(f"Successfully registered GeoServer layer: {db}")
522519
add_string = ""
523520
if bbox.get("crs", None):
524521
add_string = f"&srs={bbox['crs']}"
@@ -530,7 +527,7 @@ def unregister_geoserver_db(res_id, db):
530527
Removes a GeoServer layer
531528
"""
532529

533-
logger.info(f"Unregistering GeoServer layer for resource: {res_id}")
530+
logger.info(f"Unregistering GeoServer layer: {db}")
534531
geoserver_namespace = settings.DATA_SERVICES.get("geoserver", {}).get('NAMESPACE')
535532
geoserver_url = settings.DATA_SERVICES.get("geoserver", {}).get('URL')
536533
geoserver_user = settings.DATA_SERVICES.get("geoserver", {}).get('USER')
@@ -556,7 +553,12 @@ def unregister_geoserver_db(res_id, db):
556553
else:
557554
response = None
558555

556+
remove_copied_files_from_geoserver(res_id, db)
557+
559558
logger.info(f"Successfully unregistered GeoServer layer for resource: {res_id}")
559+
560+
# TODO: ideally we "inform" HS that the registration failed
561+
# This is called from an async task, so we can't return a meaningful response to HS
560562
return response
561563

562564

@@ -604,6 +606,7 @@ def get_layer_style(max_value, min_value, ndv_value, layer_id):
604606

605607

606608
def get_list_of_public_geo_resources():
609+
logger.info("Getting list of public geospatial resources")
607610
hydroshare_url = "/".join(settings.HYDROSHARE_URL.split("/")[:-1])
608611
types = ["Geographic Feature (ESRI Shapefiles)", "Geographic Raster"]
609612
# replace spaces with + for the query string

0 commit comments

Comments
 (0)