1313import pandas as pd
1414from django .conf import settings
1515
16+ from computing .utils import save_layer_info_to_db , update_layer_sync_status
1617from utilities .pipelines import AdminScope , CSAdminSource , StandardRequest , load_config
1718from utilities .pipelines .admin import (
1819 ADMIN_COLUMN_DESCRIPTIONS ,
2829 stable_hash ,
2930 utc_now_text ,
3031)
31- from utilities .pipelines .publish import publish_gpkg_layer , register_layer
32+ from utilities .pipelines .publish import publish_gpkg_layer
3233from utilities .pipelines .schema import (
3334 STATUS_MATCHED ,
3435 STATUS_NO_DATA ,
@@ -597,29 +598,6 @@ def run_antyodaya_pipeline(
597598 geoserver = asdict (geoserver_result )
598599 geoserver ["ok" ] = True
599600 geoserver ["status" ] = "published"
600- if request .publish .register_layers :
601- result ["layer_registration" ] = register_layer (
602- dataset_name = output_config .get ("dataset_name" , "Antyodaya 2020" ),
603- layer_name = result_name ,
604- scope = request .scope ,
605- workspace = geoserver_workspace ,
606- geoserver_url = geoserver .get ("wfs_url" ),
607- algorithm = ALGORITHM ,
608- algorithm_version = ALGORITHM_VERSION ,
609- misc = {
610- "source_csv" : config ["sources" ]["csv" ],
611- "gpkg_path" : result .get ("gpkg_path" ),
612- "links_path" : result .get ("links_path" ),
613- "output_dir" : bundle .path .as_posix (),
614- "geoserver_layer_name" : result_name ,
615- "geoserver_url" : geoserver .get ("wfs_url" ),
616- "rows" : result .get ("rows" ),
617- "matched_rows" : result .get ("matched_rows" ),
618- "join_coverage" : result .get ("join_coverage" ),
619- },
620- overwrite = request .publish .overwrite ,
621- )
622- result ["layer_id" ] = (result ["layer_registration" ] or {}).get ("layer_id" )
623601 except Exception as exc :
624602 geoserver = {
625603 "ok" : False ,
@@ -631,6 +609,42 @@ def run_antyodaya_pipeline(
631609 }
632610 timings ["publish_geoserver_seconds" ] = round (time .perf_counter () - t0 , 3 )
633611 result ["geoserver" ] = geoserver
612+ if request .publish .register_layers and geoserver and geoserver .get ("ok" ):
613+ state = request .scope .state_name
614+ district = request .scope .district_name
615+ block = request .scope .tehsil_name
616+ if not (state and district and block ):
617+ raise ValueError (
618+ "Layer registration requires state, district, and tehsil names."
619+ )
620+ dataset_name = output_config .get ("dataset_name" , "Antyodaya 2020" )
621+ layer_id = save_layer_info_to_db (
622+ state = state ,
623+ district = district ,
624+ block = block ,
625+ layer_name = result_name ,
626+ asset_id = "not applicable: local compute GeoServer layer" ,
627+ dataset_name = dataset_name ,
628+ algorithm = ALGORITHM ,
629+ algorithm_version = ALGORITHM_VERSION ,
630+ misc = {"is_generated_locally" : True },
631+ is_override = request .publish .overwrite ,
632+ )
633+ if layer_id is None :
634+ raise RuntimeError (f"Database registration failed for layer { result_name !r} ." )
635+ if update_layer_sync_status (
636+ layer_id = layer_id , sync_to_geoserver = True
637+ ) is None :
638+ raise RuntimeError (
639+ f"GeoServer sync status update failed for layer ID { layer_id } ."
640+ )
641+ result ["layer_id" ] = layer_id
642+ result ["layer_registration" ] = {
643+ "ok" : True ,
644+ "status" : "registered" ,
645+ "dataset" : dataset_name ,
646+ "layer_id" : layer_id ,
647+ }
634648 if outputs .readme :
635649 result ["readme_path" ] = bundle .write_readme (
636650 _readme_lines (
0 commit comments