mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
format python code with black
This commit is contained in:
parent
ea409ca863
commit
217e106c8b
55 changed files with 2510 additions and 1454 deletions
|
|
@ -5,9 +5,15 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
|
||||
class AddStgPool(forms.Form):
|
||||
name = forms.CharField(error_messages={'required': _('No pool name has been entered')}, max_length=20)
|
||||
name = forms.CharField(
|
||||
error_messages={"required": _("No pool name has been entered")}, max_length=20
|
||||
)
|
||||
stg_type = forms.CharField(max_length=10)
|
||||
target = forms.CharField(error_messages={'required': _('No path has been entered')}, max_length=100, required=False)
|
||||
target = forms.CharField(
|
||||
error_messages={"required": _("No path has been entered")},
|
||||
max_length=100,
|
||||
required=False,
|
||||
)
|
||||
source = forms.CharField(max_length=100, required=False)
|
||||
ceph_user = forms.CharField(required=False)
|
||||
ceph_host = forms.CharField(required=False)
|
||||
|
|
@ -17,49 +23,62 @@ class AddStgPool(forms.Form):
|
|||
source_format = forms.CharField(required=False)
|
||||
|
||||
def clean_name(self):
|
||||
name = self.cleaned_data['name']
|
||||
have_symbol = re.match('^[a-zA-Z0-9._-]+$', name)
|
||||
name = self.cleaned_data["name"]
|
||||
have_symbol = re.match("^[a-zA-Z0-9._-]+$", name)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The pool name must not contain any special characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The pool name must not contain any special characters")
|
||||
)
|
||||
elif len(name) > 20:
|
||||
raise forms.ValidationError(_('The pool name must not exceed 20 characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The pool name must not exceed 20 characters")
|
||||
)
|
||||
return name
|
||||
|
||||
def clean_target(self):
|
||||
storage_type = self.cleaned_data['stg_type']
|
||||
target = self.cleaned_data['target']
|
||||
have_symbol = re.match('^[a-zA-Z0-9/]+$', target)
|
||||
if storage_type == 'dir' or storage_type == 'netfs':
|
||||
storage_type = self.cleaned_data["stg_type"]
|
||||
target = self.cleaned_data["target"]
|
||||
have_symbol = re.match("^[a-zA-Z0-9/]+$", target)
|
||||
if storage_type == "dir" or storage_type == "netfs":
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The target must not contain any special characters'))
|
||||
if storage_type == 'dir' or storage_type == 'netfs':
|
||||
raise forms.ValidationError(
|
||||
_("The target must not contain any special characters")
|
||||
)
|
||||
if storage_type == "dir" or storage_type == "netfs":
|
||||
if not target:
|
||||
raise forms.ValidationError(_('No path has been entered'))
|
||||
raise forms.ValidationError(_("No path has been entered"))
|
||||
return target
|
||||
|
||||
def clean_source(self):
|
||||
storage_type = self.cleaned_data['stg_type']
|
||||
source = self.cleaned_data['source']
|
||||
have_symbol = re.match('^[a-zA-Z0-9\/]+$', source)
|
||||
if storage_type == 'logical' or storage_type == 'netfs':
|
||||
storage_type = self.cleaned_data["stg_type"]
|
||||
source = self.cleaned_data["source"]
|
||||
have_symbol = re.match("^[a-zA-Z0-9\/]+$", source)
|
||||
if storage_type == "logical" or storage_type == "netfs":
|
||||
if not source:
|
||||
raise forms.ValidationError(_('No device or path has been entered'))
|
||||
raise forms.ValidationError(_("No device or path has been entered"))
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The disk source must not contain any special characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The disk source must not contain any special characters")
|
||||
)
|
||||
return source
|
||||
|
||||
|
||||
class CreateVolumeForm(forms.Form):
|
||||
name = forms.CharField(max_length=120)
|
||||
format = forms.ChoiceField(required=True, choices=(('qcow2', 'qcow2 (recommended)'), ('qcow', 'qcow'), ('raw', 'raw')))
|
||||
format = forms.ChoiceField(
|
||||
required=True,
|
||||
choices=(("qcow2", "qcow2 (recommended)"), ("qcow", "qcow"), ("raw", "raw")),
|
||||
)
|
||||
size = forms.IntegerField()
|
||||
meta_prealloc = forms.BooleanField(required=False)
|
||||
|
||||
def clean_name(self):
|
||||
name = self.cleaned_data['name']
|
||||
have_symbol = re.match('^[a-zA-Z0-9._-]+$', name)
|
||||
name = self.cleaned_data["name"]
|
||||
have_symbol = re.match("^[a-zA-Z0-9._-]+$", name)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The image name must not contain any special characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The image name must not contain any special characters")
|
||||
)
|
||||
return name
|
||||
|
||||
|
||||
|
|
@ -67,14 +86,21 @@ class CloneImage(forms.Form):
|
|||
name = forms.CharField(max_length=120)
|
||||
image = forms.CharField(max_length=120)
|
||||
convert = forms.BooleanField(required=False)
|
||||
format = forms.ChoiceField(required=False, choices=(('qcow2', 'qcow2 (recommended)'), ('qcow', 'qcow'), ('raw', 'raw')))
|
||||
format = forms.ChoiceField(
|
||||
required=False,
|
||||
choices=(("qcow2", "qcow2 (recommended)"), ("qcow", "qcow"), ("raw", "raw")),
|
||||
)
|
||||
meta_prealloc = forms.BooleanField(required=False)
|
||||
|
||||
def clean_name(self):
|
||||
name = self.cleaned_data['name']
|
||||
have_symbol = re.match('^[a-zA-Z0-9._-]+$', name)
|
||||
name = self.cleaned_data["name"]
|
||||
have_symbol = re.match("^[a-zA-Z0-9._-]+$", name)
|
||||
if not have_symbol:
|
||||
raise forms.ValidationError(_('The image name must not contain any special characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The image name must not contain any special characters")
|
||||
)
|
||||
elif len(name) > 120:
|
||||
raise forms.ValidationError(_('The image name must not exceed 120 characters'))
|
||||
raise forms.ValidationError(
|
||||
_("The image name must not exceed 120 characters")
|
||||
)
|
||||
return name
|
||||
|
|
|
|||
|
|
@ -3,45 +3,55 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
# Create your models here.
|
||||
class Storages(models.Model):
|
||||
name = models.CharField(_('name'), max_length=20, error_messages={'required': _('No pool name has been entered')})
|
||||
status = models.IntegerField(_('status'))
|
||||
type = models.CharField(_('type'), max_length=100)
|
||||
size = models.IntegerField(_('size'))
|
||||
volumes = models.IntegerField(_('volumes'))
|
||||
name = models.CharField(
|
||||
_("name"),
|
||||
max_length=20,
|
||||
error_messages={"required": _("No pool name has been entered")},
|
||||
)
|
||||
status = models.IntegerField(_("status"))
|
||||
type = models.CharField(_("type"), max_length=100)
|
||||
size = models.IntegerField(_("size"))
|
||||
volumes = models.IntegerField(_("volumes"))
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.name}'
|
||||
return f"{self.name}"
|
||||
|
||||
|
||||
class Volume(models.Model):
|
||||
name = models.CharField(_('name'), max_length=128)
|
||||
type = models.CharField(_('format'), max_length=12, choices=(('qcow2', 'qcow2 (recommended)'), ('qcow', 'qcow'), ('raw', 'raw')))
|
||||
allocation = models.IntegerField(_('allocation'))
|
||||
size = models.IntegerField(_('size'))
|
||||
name = models.CharField(_("name"), max_length=128)
|
||||
type = models.CharField(
|
||||
_("format"),
|
||||
max_length=12,
|
||||
choices=(("qcow2", "qcow2 (recommended)"), ("qcow", "qcow"), ("raw", "raw")),
|
||||
)
|
||||
allocation = models.IntegerField(_("allocation"))
|
||||
size = models.IntegerField(_("size"))
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
verbose_name_plural = "Volumes"
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.name}'
|
||||
return f"{self.name}"
|
||||
|
||||
|
||||
class Storage(models.Model):
|
||||
state = models.IntegerField(_('state'))
|
||||
size = models.IntegerField(_('size'))
|
||||
free = models.IntegerField(_('free'))
|
||||
status = models.CharField(_('status'), max_length=128)
|
||||
path = models.CharField(_('path'), max_length=128)
|
||||
type = models.CharField(_('type'), max_length=128)
|
||||
autostart = models.BooleanField(_('autostart'))
|
||||
volumes = models.ForeignKey(Volume, related_name="storage_volumes", on_delete=models.DO_NOTHING)
|
||||
state = models.IntegerField(_("state"))
|
||||
size = models.IntegerField(_("size"))
|
||||
free = models.IntegerField(_("free"))
|
||||
status = models.CharField(_("status"), max_length=128)
|
||||
path = models.CharField(_("path"), max_length=128)
|
||||
type = models.CharField(_("type"), max_length=128)
|
||||
autostart = models.BooleanField(_("autostart"))
|
||||
volumes = models.ForeignKey(
|
||||
Volume, related_name="storage_volumes", on_delete=models.DO_NOTHING
|
||||
)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.path}'
|
||||
return f"{self.path}"
|
||||
|
|
|
|||
|
|
@ -27,7 +27,12 @@ def storages(request, compute_id):
|
|||
errors = False
|
||||
|
||||
try:
|
||||
conn = wvmStorages(compute.hostname, compute.login, compute.password, compute.type)
|
||||
conn = wvmStorages(
|
||||
compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type
|
||||
)
|
||||
storages = conn.get_storages_info()
|
||||
secrets = conn.get_secrets()
|
||||
|
||||
|
|
@ -45,7 +50,11 @@ def storages(request, compute_id):
|
|||
msg = _("You need create secret for pool")
|
||||
messages.error(request, msg)
|
||||
errors = True
|
||||
if not data["ceph_pool"] and not data["ceph_host"] and not data["ceph_user"]:
|
||||
if (
|
||||
not data["ceph_pool"]
|
||||
and not data["ceph_host"]
|
||||
and not data["ceph_user"]
|
||||
):
|
||||
msg = _("You need input all fields for creating ceph pool")
|
||||
messages.error(request, msg)
|
||||
errors = True
|
||||
|
|
@ -69,8 +78,15 @@ def storages(request, compute_id):
|
|||
data["target"],
|
||||
)
|
||||
else:
|
||||
conn.create_storage(data["stg_type"], data["name"], data["source"], data["target"])
|
||||
return HttpResponseRedirect(reverse("storage", args=[compute_id, data["name"]]))
|
||||
conn.create_storage(
|
||||
data["stg_type"],
|
||||
data["name"],
|
||||
data["source"],
|
||||
data["target"],
|
||||
)
|
||||
return HttpResponseRedirect(
|
||||
reverse("storage", args=[compute_id, data["name"]])
|
||||
)
|
||||
else:
|
||||
for msg_err in form.errors.values():
|
||||
messages.error(request, msg_err.as_text())
|
||||
|
|
@ -94,19 +110,26 @@ def storage(request, compute_id, pool):
|
|||
target = os.path.normpath(os.path.join(path, str(f_name)))
|
||||
if not target.startswith(path):
|
||||
raise Exception(_("Security Issues with file uploading"))
|
||||
|
||||
|
||||
try:
|
||||
with open(target, "wb+") as f:
|
||||
for chunk in f_name.chunks():
|
||||
f.write(chunk)
|
||||
except FileNotFoundError:
|
||||
messages.error(request, _("File not found. Check the path variable and filename"))
|
||||
messages.error(
|
||||
request, _("File not found. Check the path variable and filename")
|
||||
)
|
||||
|
||||
compute = get_object_or_404(Compute, pk=compute_id)
|
||||
meta_prealloc = False
|
||||
form = CreateVolumeForm()
|
||||
|
||||
conn = wvmStorage(compute.hostname, compute.login, compute.password, compute.type, pool)
|
||||
conn = wvmStorage(
|
||||
compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type, pool
|
||||
)
|
||||
|
||||
storages = conn.get_storages()
|
||||
state = conn.is_active()
|
||||
|
|
@ -147,7 +170,9 @@ def storage(request, compute_id, pool):
|
|||
volname = request.POST.get("volname", "")
|
||||
vol = conn.get_volume(volname)
|
||||
vol.delete(0)
|
||||
messages.success(request, _("Volume: %(vol)s is deleted.") % {"vol": volname})
|
||||
messages.success(
|
||||
request, _("Volume: %(vol)s is deleted.") % {"vol": volname}
|
||||
)
|
||||
return redirect(reverse("storage", args=[compute.id, pool]))
|
||||
# return HttpResponseRedirect(request.get_full_path())
|
||||
if "iso_upload" in request.POST:
|
||||
|
|
@ -156,7 +181,10 @@ def storage(request, compute_id, pool):
|
|||
messages.error(request, error_msg)
|
||||
else:
|
||||
handle_uploaded_file(path, request.FILES["file"])
|
||||
messages.success(request, _("ISO: %(file)s is uploaded.") % {"file": request.FILES["file"]})
|
||||
messages.success(
|
||||
request,
|
||||
_("ISO: %(file)s is uploaded.") % {"file": request.FILES["file"]},
|
||||
)
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
if "cln_volume" in request.POST:
|
||||
form = CloneImage(request.POST)
|
||||
|
|
@ -174,10 +202,13 @@ def storage(request, compute_id, pool):
|
|||
else:
|
||||
format = None
|
||||
try:
|
||||
name = conn.clone_volume(data["image"], data["name"], format, meta_prealloc)
|
||||
name = conn.clone_volume(
|
||||
data["image"], data["name"], format, meta_prealloc
|
||||
)
|
||||
messages.success(
|
||||
request,
|
||||
_("%(image)s image cloned as %(name)s successfully") % {"image": data["image"], "name": name},
|
||||
_("%(image)s image cloned as %(name)s successfully")
|
||||
% {"image": data["image"], "name": name},
|
||||
)
|
||||
return HttpResponseRedirect(request.get_full_path())
|
||||
except libvirtError as lib_err:
|
||||
|
|
@ -202,7 +233,13 @@ def create_volume(request, compute_id, pool):
|
|||
compute = get_object_or_404(Compute, pk=compute_id)
|
||||
meta_prealloc = False
|
||||
|
||||
conn = wvmStorage(compute.hostname, compute.login, compute.password, compute.type, pool)
|
||||
conn = wvmStorage(
|
||||
compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type,
|
||||
pool
|
||||
)
|
||||
|
||||
storages = conn.get_storages()
|
||||
|
||||
|
|
@ -223,7 +260,9 @@ def create_volume(request, compute_id, pool):
|
|||
disk_owner_uid,
|
||||
disk_owner_gid,
|
||||
)
|
||||
messages.success(request, _("Image file %(name)s is created successfully") % {"name": name})
|
||||
messages.success(
|
||||
request, _("Image file %(name)s is created successfully") % {"name": name}
|
||||
)
|
||||
else:
|
||||
for msg_err in form.errors.values():
|
||||
messages.error(request, msg_err.as_text())
|
||||
|
|
@ -241,7 +280,13 @@ def get_volumes(request, compute_id, pool):
|
|||
data = {}
|
||||
compute = get_object_or_404(Compute, pk=compute_id)
|
||||
try:
|
||||
conn = wvmStorage(compute.hostname, compute.login, compute.password, compute.type, pool)
|
||||
conn = wvmStorage(
|
||||
compute.hostname,
|
||||
compute.login,
|
||||
compute.password,
|
||||
compute.type,
|
||||
pool
|
||||
)
|
||||
conn.refresh()
|
||||
data["vols"] = sorted(conn.get_volumes())
|
||||
except libvirtError:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue