def startpeerfacilitysync(self, request): """ Initiate a SYNC (PULL + PUSH) of a specific facility from another device. """ job_data = validate_and_prepare_peer_sync_job( request, extra_metadata=prepare_sync_task(request, type="SYNCPEER/FULL") ) job_id = facility_queue.enqueue(call_command, "sync", **job_data) resp = _job_to_response(facility_queue.fetch_job(job_id)) return Response(resp)
def startdataportalsync(self, request): """ Initiate a PUSH sync with Kolibri Data Portal. """ job_data = validate_prepare_sync_job( request, extra_metadata=prepare_sync_task(request, type="SYNCDATAPORTAL") ) job_id = facility_queue.enqueue(call_command, "sync", **job_data) resp = _job_to_response(facility_queue.fetch_job(job_id)) return Response(resp)
def startdeletefacility(self, request): """ Initiate a task to delete a facility """ try: facility_id = request.data.get("facility") if not facility_id: raise KeyError() except KeyError: raise ParseError( dict(code="INVALID_FACILITY", message="Missing `facility` parameter") ) if not Facility.objects.filter(id=facility_id).exists(): raise ValidationError( dict(code="INVALID_FACILITY", message="Facility doesn't exist") ) if not Facility.objects.exclude(id=facility_id).exists(): raise ValidationError( dict( code="SOLE_FACILITY", message="Cannot delete the sole facility on the device", ) ) if request.user.is_facility_user and request.user.facility_id == facility_id: raise ValidationError( dict(code="FACILITY_MEMBER", message="User is member of facility") ) facility_name = Facility.objects.get(id=facility_id).name job_id = facility_queue.enqueue( call_command, "deletefacility", facility=facility_id, track_progress=True, noninteractive=True, cancellable=False, extra_metadata=dict( facility=facility_id, facility_name=facility_name, started_by=request.user.pk, started_by_username=request.user.username, type="DELETEFACILITY", ), ) resp = _job_to_response(facility_queue.fetch_job(job_id)) return Response(resp)
def startpeerfacilityimport(self, request): """ Initiate a PULL of a specific facility from another device. """ job_data = validate_and_prepare_peer_sync_job( request, no_push=True, no_provision=True, extra_metadata=prepare_sync_task(request, type="SYNCPEER/PULL"), ) job_id = facility_queue.enqueue(call_command, "sync", **job_data) resp = _job_to_response(facility_queue.fetch_job(job_id)) return Response(resp)