def switch(request, project_id): """Switch session parameters to project with project_id""" if project_id is None: raise ValueError(_("Missing 'project_id'")) next_url = reverse("main") # _build_next_url(request) try: keystone = Keystone(request) except exceptions.AuthorizationFailure: msg = _("Unable to retrieve Keystone data") messages.add_message(request, messages.ERROR, msg) log.error(f"{request.user}: {msg}") return HttpResponseRedirect(next_url) try: project = keystone.project_get(project_id) except Exception as err: messages.add_message(request, messages.ERROR, _("Can't find this project")) log.exception("{}{}".format(_("Exception:").encode("UTF-8"), err)) return HttpResponseRedirect(next_url) save_current_project(request.user.id, project.id) set_current_project(request, project) log.info("User [{}] switched to project [{}]".format(request.user, project_id)) messages.add_message(request, messages.INFO, _("Project selected: {}".format(project.name))) return HttpResponseRedirect(next_url)
def swift_cloud_project_status(request): project_id = request.GET.get('project_id') if not project_id: raise Http404 try: keystone = Keystone(request) project = keystone.project_get(project_id) except Exception as err: log.exception(f"Keystone error: {err}") return render(request, "vault/swift_cloud/project_status.html", { "project": None, "error": "Keystone Error" }) sct_client = SCTClient(settings.SWIFT_CLOUD_TOOLS_URL, settings.SWIFT_CLOUD_TOOLS_API_KEY) status = "" data = {} try: response = sct_client.transfer_get(project_id) if response.ok: data = response.json() else: status = _("Couldn't get migration data") except Exception as err: log.exception(f"Swift Cloud Tools Error: {err}") if response.status_code == 404: status = _("Migration not initialized yet") if response.status_code < 300: status = _("Waiting in migration queue") if data.get("initial_date") and not data.get("final_date"): status = _("Migrating...") if data.get("final_date"): status = _("Migration Completed") http_conn, storage_url = get_conn_and_storage_url(request, project_id) auth_token = request.session.get('auth_token') head_account = {} try: head_account = client.head_account(storage_url, auth_token, http_conn=http_conn) except Exception as err: log.exception(f'Exception: {err}') if head_account.get("x-account-meta-cloud-remove"): status = _("Marked for removal") return render( request, "vault/swift_cloud/project_status.html", { "project": project, "status": status, "metadata": json.dumps(head_account), "migration_data": json.dumps(data) })