diff --git a/accounts/utils.py b/accounts/utils.py index d089ecd..af944ee 100644 --- a/accounts/utils.py +++ b/accounts/utils.py @@ -35,11 +35,11 @@ def validate_ssh_key(key): return False # unpack the contents of data, from data[:4] , property of ssh key . try: - str_len = struct.unpack('>I', data[:4])[0] + str_len = struct.unpack(">I", data[:4])[0] except struct.error: return False # data[4:str_len] must have string which matches with the typeofkey, another ssh key property. - if data[4:4 + str_len] == typeofkey: + if data[4 : 4 + str_len] == typeofkey: return True else: return False @@ -47,15 +47,15 @@ def validate_ssh_key(key): def send_email_with_otp(user, device): send_mail( - _('OTP QR Code'), - _('Please view HTML version of this message.'), + _("OTP QR Code"), + _("Please view HTML version of this message."), None, [user.email], html_message=render_to_string( - 'accounts/email/otp.html', + "accounts/email/otp.html", { - 'totp_url': device.config_url, - 'user': user, + "totp_url": device.config_url, + "user": user, }, ), fail_silently=False, diff --git a/accounts/views.py b/accounts/views.py index fa207bf..8ca3ba7 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -23,40 +23,52 @@ def profile(request): if profile_form.is_valid(): profile_form.save() - messages.success(request, _('Profile updated')) - return redirect('accounts:profile') + messages.success(request, _("Profile updated")) + return redirect("accounts:profile") - return render(request, "profile.html", { - 'publickeys': publickeys, - 'profile_form': profile_form, - 'ssh_key_form': ssh_key_form, - }) + return render( + request, + "profile.html", + { + "publickeys": publickeys, + "profile_form": profile_form, + "ssh_key_form": ssh_key_form, + }, + ) def ssh_key_create(request): key_form = UserSSHKeyForm(request.POST or None, user=request.user) if key_form.is_valid(): key_form.save() - messages.success(request, _('SSH key added')) - return redirect('accounts:profile') + messages.success(request, _("SSH key added")) + return redirect("accounts:profile") - return render(request, 'common/form.html', { - 'form': key_form, - 'title': _('Add SSH key'), - }) + return render( + request, + "common/form.html", + { + "form": key_form, + "title": _("Add SSH key"), + }, + ) def ssh_key_delete(request, pk): ssh_key = get_object_or_404(UserSSHKey, pk=pk, user=request.user) - if request.method == 'POST': + if request.method == "POST": ssh_key.delete() - messages.success(request, _('SSH key deleted')) - return redirect('accounts:profile') + messages.success(request, _("SSH key deleted")) + return redirect("accounts:profile") - return render(request, 'common/confirm_delete.html', { - 'object': ssh_key, - 'title': _('Delete SSH key'), - }) + return render( + request, + "common/confirm_delete.html", + { + "object": ssh_key, + "title": _("Delete SSH key"), + }, + ) @superuser_only @@ -67,13 +79,16 @@ def account(request, user_id): publickeys = UserSSHKey.objects.filter(user_id=user_id) return render( - request, "account.html", { - 'user': user, - 'user_insts': user_insts, - 'instances': instances, - 'publickeys': publickeys, - 'otp_enabled': settings.OTP_ENABLED, - }) + request, + "account.html", + { + "user": user, + "user_insts": user_insts, + "instances": instances, + "publickeys": publickeys, + "otp_enabled": settings.OTP_ENABLED, + }, + ) @permission_required("accounts.change_password", raise_exception=True) @@ -118,7 +133,7 @@ def user_instance_update(request, pk): return render( request, - 'common/form.html', + "common/form.html", { "form": form, "title": _("Update User Instance"), @@ -150,29 +165,33 @@ def email_otp(request): if form.is_valid(): UserModel = get_user_model() try: - user = UserModel.objects.get(email=form.cleaned_data['email']) + user = UserModel.objects.get(email=form.cleaned_data["email"]) except UserModel.DoesNotExist: pass else: device = get_user_totp_device(user) send_email_with_otp(user, device) - messages.success(request, _('OTP Sent to %s') % form.cleaned_data['email']) - return redirect('accounts:login') + messages.success(request, _("OTP Sent to %(email)s") % {"email": form.cleaned_data["email"]}) + return redirect("accounts:login") - return render(request, 'accounts/email_otp_form.html', { - 'form': form, - 'title': _('Email OTP'), - }) + return render( + request, + "accounts/email_otp_form.html", + { + "form": form, + "title": _("Email OTP"), + }, + ) @superuser_only def admin_email_otp(request, user_id): user = get_object_or_404(get_user_model(), pk=user_id) device = get_user_totp_device(user) - if user.email != '': + if user.email != "": send_email_with_otp(user, device) - messages.success(request, _('OTP QR code was emailed to user %s') % user) + messages.success(request, _("OTP QR code was emailed to user %(user)s") % {"user": user}) else: - messages.error(request, _('User email not set, failed to send QR code')) - return redirect('accounts:account', user.id) + messages.error(request, _("User email not set, failed to send QR code")) + return redirect("accounts:account", user.id) diff --git a/admin/views.py b/admin/views.py index b441d85..c920890 100644 --- a/admin/views.py +++ b/admin/views.py @@ -50,7 +50,7 @@ def group_update(request, pk): form = forms.GroupForm(request.POST or None, instance=group) if form.is_valid(): form.save() - return redirect('admin:group_list') + return redirect("admin:group_list") return render( request, @@ -107,11 +107,7 @@ def user_create(request): return render( request, "admin/user_form.html", - { - "user_form": user_form, - "attributes_form": attributes_form, - "title": _("Create User") - }, + {"user_form": user_form, "attributes_form": attributes_form, "title": _("Create User")}, ) @@ -124,29 +120,25 @@ def user_update(request, pk): if user_form.is_valid() and attributes_form.is_valid(): user_form.save() attributes_form.save() - next = request.GET.get('next') + next = request.GET.get("next") return redirect(next or "admin:user_list") return render( request, "admin/user_form.html", - { - "user_form": user_form, - "attributes_form": attributes_form, - "title": _("Update User") - }, + {"user_form": user_form, "attributes_form": attributes_form, "title": _("Update User")}, ) @superuser_only def user_update_password(request, pk): user = get_object_or_404(User, pk=pk) - if request.method == 'POST': + if request.method == "POST": form = AdminPasswordChangeForm(user, request.POST) if form.is_valid(): user = form.save() update_session_auth_hash(request, user) # Important! - messages.success(request, _("User password changed: {}".format(user.username))) + messages.success(request, _("Password changed for %(user)s") % {"user": user.username}) return redirect("admin:user_list") else: messages.error(request, _("Wrong Data Provided")) diff --git a/appsettings/views.py b/appsettings/views.py index 5d9a19c..5446c9a 100644 --- a/appsettings/views.py +++ b/appsettings/views.py @@ -29,13 +29,13 @@ def appsettings(request): # Bootstrap settings related with filesystems, because of that they are excluded from other settings appsettings = AppSettings.objects.exclude(description__startswith="Bootstrap").order_by("name") - if request.method == 'POST': - if 'SASS_DIR' in request.POST: + if request.method == "POST": + if "SASS_DIR" in request.POST: try: sass_dir.value = request.POST.get("SASS_DIR", "") sass_dir.save() - msg = _(f"SASS directory path is changed. Now: {sass_dir.value}") + msg = _("SASS directory path is changed. Now: %(dir)s") % {"dir": sass_dir.value} messages.success(request, msg) except Exception as err: msg = err @@ -44,7 +44,7 @@ def appsettings(request): addlogmsg(request.user.username, "", msg) return HttpResponseRedirect(request.get_full_path()) - if 'BOOTSTRAP_THEME' in request.POST: + if "BOOTSTRAP_THEME" in request.POST: theme = request.POST.get("BOOTSTRAP_THEME", "") scss_var = f"@import '{sass_dir.value}/wvc-theme/{theme}/variables';" scss_bootswatch = f"@import '{sass_dir.value}/wvc-theme/{theme}/bootswatch';" @@ -54,15 +54,17 @@ def appsettings(request): with open(sass_dir.value + "/wvc-main.scss", "w") as main: main.write(scss_var + "\n" + scss_boot + "\n" + scss_bootswatch + "\n") - css_compressed = sass.compile(string=scss_var + "\n" + scss_boot + "\n" + scss_bootswatch, - output_style='compressed') + css_compressed = sass.compile( + string=scss_var + "\n" + scss_boot + "\n" + scss_bootswatch, + output_style="compressed", + ) with open("static/css/" + main_css, "w") as css: css.write(css_compressed) bootstrap_theme.value = theme bootstrap_theme.save() - msg = _(f"Theme changed. Now: {theme}") + msg = _("Theme is changed. Now: %(theme)s") % {"theme": theme} messages.success(request, msg) except Exception as err: msg = err @@ -77,7 +79,7 @@ def appsettings(request): setting.value = request.POST.get(setting.key, "") setting.save() - msg = _(f"{setting.name} is changed. Now: {setting.value}") + msg = _("%(setting)s is changed. Now: %(value)s") % {"setting": setting.name, "value": setting.value} messages.success(request, msg) except Exception as err: msg = err @@ -86,4 +88,4 @@ def appsettings(request): addlogmsg(request.user.username, "", msg) return HttpResponseRedirect(request.get_full_path()) - return render(request, 'appsettings.html', locals()) + return render(request, "appsettings.html", locals()) diff --git a/computes/views.py b/computes/views.py index 38514ff..a3ce691 100644 --- a/computes/views.py +++ b/computes/views.py @@ -9,10 +9,17 @@ from libvirt import libvirtError from accounts.models import UserInstance from admin.decorators import superuser_only -from computes.forms import (SocketComputeForm, SshComputeForm, TcpComputeForm, TlsComputeForm) +from computes.forms import SocketComputeForm, SshComputeForm, TcpComputeForm, TlsComputeForm from computes.models import Compute from instances.models import Instance -from vrtManager.connection import (CONN_SOCKET, CONN_SSH, CONN_TCP, CONN_TLS, connection_manager, wvmConnect) +from vrtManager.connection import ( + CONN_SOCKET, + CONN_SSH, + CONN_TCP, + CONN_TLS, + connection_manager, + wvmConnect, +) from vrtManager.hostdetails import wvmHostDetails from . import utils @@ -25,15 +32,17 @@ def computes(request): :return: """ - computes = Compute.objects.filter().order_by('name') + computes = Compute.objects.filter().order_by("name") - return render(request, 'computes/list.html', {'computes': computes}) + return render(request, "computes/list.html", {"computes": computes}) @superuser_only def overview(request, compute_id): compute = get_object_or_404(Compute, pk=compute_id) - status = 'true' if connection_manager.host_is_up(compute.type, compute.hostname) is True else 'false' + status = ( + "true" if connection_manager.host_is_up(compute.type, compute.hostname) is True else "false" + ) conn = wvmHostDetails( compute.hostname, @@ -49,7 +58,7 @@ def overview(request, compute_id): lib_version = conn.get_lib_version() conn.close() - return render(request, 'overview.html', locals()) + return render(request, "overview.html", locals()) @superuser_only @@ -57,9 +66,9 @@ def instances(request, compute_id): compute = get_object_or_404(Compute, pk=compute_id) utils.refresh_instance_database(compute) - instances = Instance.objects.filter(compute=compute).prefetch_related('userinstance_set') + instances = Instance.objects.filter(compute=compute).prefetch_related("userinstance_set") - return render(request, 'computes/instances.html', {'compute': compute, 'instances': instances}) + return render(request, "computes/instances.html", {"compute": compute, "instances": instances}) @superuser_only @@ -67,9 +76,9 @@ def compute_create(request, FormClass): form = FormClass(request.POST or None) if form.is_valid(): form.save() - return redirect(reverse('computes')) + return redirect(reverse("computes")) - return render(request, 'computes/form.html', {'form': form}) + return render(request, "computes/form.html", {"form": form}) @superuser_only @@ -88,22 +97,22 @@ def compute_update(request, compute_id): form = FormClass(request.POST or None, instance=compute) if form.is_valid(): form.save() - return redirect(reverse('computes')) + return redirect(reverse("computes")) - return render(request, 'computes/form.html', {'form': form}) + return render(request, "computes/form.html", {"form": form}) @superuser_only def compute_delete(request, compute_id): compute = get_object_or_404(Compute, pk=compute_id) - if request.method == 'POST': + if request.method == "POST": compute.delete() - return redirect('computes') + return redirect("computes") return render( request, - 'common/confirm_delete.html', - {'object': compute}, + "common/confirm_delete.html", + {"object": compute}, ) @@ -126,17 +135,19 @@ def compute_graph(request, compute_id): mem_usage = conn.get_memory_usage() conn.close() except libvirtError: - cpu_usage = {'usage': 0} - mem_usage = {'usage': 0} + cpu_usage = {"usage": 0} + mem_usage = {"usage": 0} current_time = 0 - data = json.dumps({ - 'cpudata': cpu_usage['usage'], - 'memdata': mem_usage, - 'timeline': current_time, - }) + data = json.dumps( + { + "cpudata": cpu_usage["usage"], + "memdata": mem_usage, + "timeline": current_time, + } + ) response = HttpResponse() - response['Content-Type'] = "text/javascript" + response["Content-Type"] = "text/javascript" response.write(data) return response @@ -163,14 +174,14 @@ def get_compute_disk_buses(request, compute_id, arch, machine, disk): disk_device_types = conn.get_disk_device_types(arch, machine) if disk in disk_device_types: - if disk == 'disk': - data['bus'] = sorted(disk_device_types) - elif disk == 'cdrom': - data['bus'] = ['ide', 'sata', 'scsi'] - elif disk == 'floppy': - data['bus'] = ['fdc'] - elif disk == 'lun': - data['bus'] = ['scsi'] + if disk == "disk": + data["bus"] = sorted(disk_device_types) + elif disk == "cdrom": + data["bus"] = ["ide", "sata", "scsi"] + elif disk == "floppy": + data["bus"] = ["fdc"] + elif disk == "lun": + data["bus"] = ["scsi"] except libvirtError: pass @@ -193,7 +204,7 @@ def get_compute_machine_types(request, compute_id, arch): compute.password, compute.type, ) - data['machines'] = conn.get_machine_types(arch) + data["machines"] = conn.get_machine_types(arch) except libvirtError: pass @@ -217,7 +228,7 @@ def get_compute_video_models(request, compute_id, arch, machine): compute.password, compute.type, ) - data['videos'] = conn.get_video_models(arch, machine) + data["videos"] = conn.get_video_models(arch, machine) except libvirtError: pass @@ -241,8 +252,8 @@ def get_dom_capabilities(request, compute_id, arch, machine): compute.password, compute.type, ) - data['videos'] = conn.get_disk_device_types(arch, machine) - data['bus'] = conn.get_disk_device_types(arch, machine) + data["videos"] = conn.get_disk_device_types(arch, machine) + data["bus"] = conn.get_disk_device_types(arch, machine) except libvirtError: pass diff --git a/console/views.py b/console/views.py index f5ac707..d12df26 100644 --- a/console/views.py +++ b/console/views.py @@ -61,7 +61,7 @@ def console(request): if console_type is None: console_error = "Fail to get console. Please check the console configuration of your VM." else: - console_error = f"Console type: {console_type} no support" + console_error = "Console type '%(type)s' has not support" % {"type": console_type} response = render(request, "console-vnc-lite.html", locals()) response.set_cookie("token", token) diff --git a/datasource/views.py b/datasource/views.py index b389122..519f625 100644 --- a/datasource/views.py +++ b/datasource/views.py @@ -8,7 +8,7 @@ from computes.models import Compute from vrtManager.instance import wvmInstance -OS_VERSIONS = ['latest', ''] +OS_VERSIONS = ["latest", ""] OS_UUID = "iid-dswebvirtcloud" @@ -17,7 +17,7 @@ def os_index(request): :param request: :return: """ - response = '\n'.join(OS_VERSIONS) + response = "\n".join(OS_VERSIONS) return HttpResponse(response) @@ -28,13 +28,13 @@ def os_metadata_json(request, version): :return: """ - if version == 'latest': + if version == "latest": ip = get_client_ip(request) hostname = get_hostname_by_ip(ip) - response = {'uuid': OS_UUID, 'hostname': hostname} + response = {"uuid": OS_UUID, "hostname": hostname} return HttpResponse(json.dumps(response)) else: - err = f"Invalid version: {version}" + err = "Invalid version: %(version)s" % {"version": version} raise Http404(err) @@ -44,10 +44,10 @@ def os_userdata(request, version): :param version: :return: """ - if version == 'latest': + if version == "latest": ip = get_client_ip(request) hostname = get_hostname_by_ip(ip) - vname = hostname.split('.')[0] + vname = hostname.split(".")[0] instance_keys = [] userinstances = UserInstance.objects.filter(instance__name=vname) @@ -57,9 +57,9 @@ def os_userdata(request, version): for k in keys: instance_keys.append(k.keypublic) - return render(request, 'user_data', locals()) + return render(request, "user_data", locals()) else: - err = f"Invalid version: {version}" + err = "Invalid version: %(version)s" % {"version": version} raise Http404(err) @@ -68,11 +68,11 @@ def get_client_ip(request): :param request: :return: """ - x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR") if x_forwarded_for: - ip = x_forwarded_for.split(',')[-1].strip() + ip = x_forwarded_for.split(",")[-1].strip() else: - ip = request.META.get('REMOTE_ADDR') + ip = request.META.get("REMOTE_ADDR") return ip @@ -97,16 +97,12 @@ def get_vdi_url(request, compute_id, vname): compute = get_object_or_404(Compute, pk=compute_id) try: - conn = wvmInstance(compute.hostname, - compute.login, - compute.password, - compute.type, - vname) + conn = wvmInstance(compute.hostname, compute.login, compute.password, compute.type, vname) fqdn = get_hostname_by_ip(compute.hostname) url = f"{conn.get_console_type()}://{fqdn}:{conn.get_console_port()}" response = url return HttpResponse(response) except libvirtError: - err = f"Error getting VDI URL for {vname}" + err = "Error getting VDI URL for %(name)s" % {"name": vname} raise Http404(err) diff --git a/instances/templates/instances/snapshots_tab.html b/instances/templates/instances/snapshots_tab.html index f920f76..46f6049 100644 --- a/instances/templates/instances/snapshots_tab.html +++ b/instances/templates/instances/snapshots_tab.html @@ -19,7 +19,7 @@
{% trans "This may take more than an hour, depending on how much content is on your droplet and how large the disk is." %}
+{% trans "This may take more than an hour, depending on how much content is on your instance and how large the disk is." %}