diff --git a/src/nsls2api/api/v1/jobs_api.py b/src/nsls2api/api/v1/jobs_api.py index 0a6961c..d387cd1 100644 --- a/src/nsls2api/api/v1/jobs_api.py +++ b/src/nsls2api/api/v1/jobs_api.py @@ -54,9 +54,12 @@ async def sync_dataadmins(request: Request) -> BackgroundJob: dependencies=[Depends(get_current_user)], include_in_schema=SYNC_ROUTES_IN_SCHEMA, tags=["sync"], + deprecated=True ) -async def sync_proposal(request: Request, proposal_id: str) -> BackgroundJob: - sync_params = JobSyncParameters(proposal_id=proposal_id) +async def sync_proposal( + request: Request, proposal_id: str, facility: FacilityName = FacilityName.nsls2 +) -> BackgroundJob: + sync_params = JobSyncParameters(proposal_id=proposal_id, facility=facility) job = await background_service.create_background_job( JobActions.synchronize_proposal, sync_parameters=sync_params, @@ -64,6 +67,22 @@ async def sync_proposal(request: Request, proposal_id: str) -> BackgroundJob: return job +@router.get( + "/sync/facility/{facility}/proposal/{proposal_id}", + dependencies=[Depends(get_current_user)], + include_in_schema=SYNC_ROUTES_IN_SCHEMA, + tags=["sync"], +) +async def sync_facility_proposal( + request: Request, facility: FacilityName, proposal_id: str +) -> BackgroundJob: + sync_params = JobSyncParameters(proposal_id=proposal_id, facility=facility) + job = await background_service.create_background_job( + JobActions.synchronize_proposal, + sync_parameters=sync_params, + ) + return job + @router.get( "/sync/proposal/types/{facility}", include_in_schema=SYNC_ROUTES_IN_SCHEMA, diff --git a/src/nsls2api/services/background_service.py b/src/nsls2api/services/background_service.py index bb2f8b8..75a6e77 100644 --- a/src/nsls2api/services/background_service.py +++ b/src/nsls2api/services/background_service.py @@ -123,10 +123,10 @@ async def worker_function(): ) case JobActions.synchronize_proposal: logger.info( - f"Processing job {job.id} to synchronize proposal {job.sync_parameters.proposal_id} (from {job.sync_parameters.sync_source})." + f"Processing job {job.id} to synchronize proposal {job.sync_parameters.proposal_id} for the {job.sync_parameters.facility} facility (from {job.sync_parameters.sync_source})." ) await sync_service.worker_synchronize_proposal_from_pass( - job.sync_parameters.proposal_id + job.sync_parameters.proposal_id, job.sync_parameters.facility ) case JobActions.synchronize_proposals_for_cycle: logger.info( diff --git a/src/nsls2api/services/sync_service.py b/src/nsls2api/services/sync_service.py index 02a5448..ebcb286 100644 --- a/src/nsls2api/services/sync_service.py +++ b/src/nsls2api/services/sync_service.py @@ -202,20 +202,20 @@ async def worker_synchronize_proposal_types_from_pass( ) -async def synchronize_proposal_from_pass(proposal_id: str) -> None: +async def synchronize_proposal_from_pass(proposal_id: str, facility_name: FacilityName = FacilityName.nsls2) -> None: beamline_list = [] user_list = [] saf_list = [] try: - pass_proposal: PassProposal = await pass_service.get_proposal(proposal_id) + pass_proposal: PassProposal = await pass_service.get_proposal(proposal_id, facility_name) except pass_service.PassException as error: error_message = f"Error retrieving proposal {proposal_id} from PASS" logger.exception(error_message) raise Exception(error_message) from error # Get the SAFs for this proposal - pass_saf_list: list[PassSaf] = await pass_service.get_saf_from_proposal(proposal_id) + pass_saf_list: list[PassSaf] = await pass_service.get_saf_from_proposal(proposal_id, facility_name) for saf in pass_saf_list: saf_beamline_list = [] for resource in saf.Resources: @@ -351,10 +351,10 @@ async def update_proposals_with_cycle( logger.warning(error) -async def worker_synchronize_proposal_from_pass(proposal_id: str) -> None: +async def worker_synchronize_proposal_from_pass(proposal_id: str, facility: FacilityName = FacilityName.nsls2) -> None: start_time = datetime.datetime.now() - await synchronize_proposal_from_pass(proposal_id) + await synchronize_proposal_from_pass(proposal_id, facility) time_taken = datetime.datetime.now() - start_time logger.info( @@ -378,7 +378,7 @@ async def worker_synchronize_proposals_for_cycle_from_pass( for proposal_id in proposals: logger.info(f"Synchronizing proposal {proposal_id}.") - await synchronize_proposal_from_pass(proposal_id) + await synchronize_proposal_from_pass(proposal_id, facility_name) commissioning_proposals: list[ PassProposal @@ -390,7 +390,7 @@ async def worker_synchronize_proposals_for_cycle_from_pass( ) for proposal in commissioning_proposals: logger.info(f"Synchronizing commissioning proposal {proposal.Proposal_ID}.") - await synchronize_proposal_from_pass(str(proposal.Proposal_ID)) + await synchronize_proposal_from_pass(str(proposal.Proposal_ID), facility_name) # Now update the cycle information for each proposal await update_proposals_with_cycle(cycle, facility_name=facility_name)