mirror of
https://github.com/akuker/RASCSI.git
synced 2024-10-27 18:26:18 +00:00
Introduce utility method to look up drive props by drive name. (#888)
* Introduce utility method to look up drive props by drive name. * Make /drive/create endpoint fetch file ending from properties data structure; update tests
This commit is contained in:
parent
52ebb3a2ae
commit
90ace5fd53
@ -28,13 +28,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td style="text-align:left">
|
<td style="text-align:left">
|
||||||
<form action="/drive/create" method="post">
|
<form action="/drive/create" method="post">
|
||||||
<input type="hidden" name="vendor" value="{{ hd.vendor }}">
|
<input type="hidden" name="drive_name" value="{{ hd.name }}">
|
||||||
<input type="hidden" name="product" value="{{ hd.product }}">
|
|
||||||
<input type="hidden" name="revision" value="{{ hd.revision }}">
|
|
||||||
<input type="hidden" name="blocks" value="{{ hd.blocks }}">
|
|
||||||
<input type="hidden" name="block_size" value="{{ hd.block_size }}">
|
|
||||||
{{ _("Size:") }} <input type="number" name="size" min="512" max="274877906944" step="512" value="{{ hd.size }}">{{ _("B") }}
|
{{ _("Size:") }} <input type="number" name="size" min="512" max="274877906944" step="512" value="{{ hd.size }}">{{ _("B") }}
|
||||||
<input type="hidden" name="file_type" value="{{ hd.file_type }}">
|
|
||||||
<label for="file_name">{{ _("Save as:") }}</label>
|
<label for="file_name">{{ _("Save as:") }}</label>
|
||||||
<input type="text" name="file_name" value="{{ hd.secure_name }}" required />.{{ hd.file_type }}
|
<input type="text" name="file_name" value="{{ hd.secure_name }}" required />.{{ hd.file_type }}
|
||||||
<input type="submit" value="{{ _("Create") }}" />
|
<input type="submit" value="{{ _("Create") }}" />
|
||||||
@ -72,10 +67,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td style="text-align:left">
|
<td style="text-align:left">
|
||||||
<form action="/drive/cdrom" method="post">
|
<form action="/drive/cdrom" method="post">
|
||||||
<input type="hidden" name="vendor" value="{{ cd.vendor }}">
|
<input type="hidden" name="drive_name" value="{{ cd.name }}">
|
||||||
<input type="hidden" name="product" value="{{ cd.product }}">
|
|
||||||
<input type="hidden" name="revision" value="{{ cd.revision }}">
|
|
||||||
<input type="hidden" name="block_size" value="{{ cd.block_size }}">
|
|
||||||
<label for="file_name">{{ _("Create for:") }}</label>
|
<label for="file_name">{{ _("Create for:") }}</label>
|
||||||
<select type="select" name="file_name">
|
<select type="select" name="file_name">
|
||||||
{% for file in files|sort(attribute='name') %}
|
{% for file in files|sort(attribute='name') %}
|
||||||
@ -118,13 +110,8 @@
|
|||||||
</td>
|
</td>
|
||||||
<td style="text-align:left">
|
<td style="text-align:left">
|
||||||
<form action="/drive/create" method="post">
|
<form action="/drive/create" method="post">
|
||||||
<input type="hidden" name="vendor" value="{{ rm.vendor }}">
|
<input type="hidden" name="drive_name" value="{{ rm.name }}">
|
||||||
<input type="hidden" name="product" value="{{ rm.product }}">
|
|
||||||
<input type="hidden" name="revision" value="{{ rm.revision }}">
|
|
||||||
<input type="hidden" name="blocks" value="{{ rm.blocks }}">
|
|
||||||
<input type="hidden" name="block_size" value="{{ rm.block_size }}">
|
|
||||||
{{ _("Size:") }} <input type="number" name="size" min="512" max="274877906944" step="512" value="{{ rm.size }}">{{ _("B") }}
|
{{ _("Size:") }} <input type="number" name="size" min="512" max="274877906944" step="512" value="{{ rm.size }}">{{ _("B") }}
|
||||||
<input type="hidden" name="file_type" value="{{ rm.file_type }}">
|
|
||||||
<label for="file_name">{{ _("Save as:") }}</label>
|
<label for="file_name">{{ _("Save as:") }}</label>
|
||||||
<input type="text" name="file_name" value="{{ rm.secure_name }}" required />.{{ rm.file_type }}
|
<input type="text" name="file_name" value="{{ rm.secure_name }}" required />.{{ rm.file_type }}
|
||||||
<input type="submit" value="{{ _("Create") }}" />
|
<input type="submit" value="{{ _("Create") }}" />
|
||||||
|
@ -52,6 +52,7 @@ from web_utils import (
|
|||||||
get_device_name,
|
get_device_name,
|
||||||
map_image_file_descriptions,
|
map_image_file_descriptions,
|
||||||
format_drive_properties,
|
format_drive_properties,
|
||||||
|
get_properties_by_drive_name,
|
||||||
auth_active,
|
auth_active,
|
||||||
is_bridge_configured,
|
is_bridge_configured,
|
||||||
upload_with_dropzonejs,
|
upload_with_dropzonejs,
|
||||||
@ -358,28 +359,23 @@ def drive_create():
|
|||||||
"""
|
"""
|
||||||
Creates the image and properties file pair
|
Creates the image and properties file pair
|
||||||
"""
|
"""
|
||||||
vendor = request.form.get("vendor")
|
drive_name = request.form.get("drive_name")
|
||||||
product = request.form.get("product")
|
|
||||||
revision = request.form.get("revision")
|
|
||||||
block_size = request.form.get("block_size")
|
|
||||||
size = request.form.get("size")
|
size = request.form.get("size")
|
||||||
file_type = request.form.get("file_type")
|
|
||||||
file_name = request.form.get("file_name")
|
file_name = request.form.get("file_name")
|
||||||
full_file_name = file_name + "." + file_type
|
|
||||||
|
properties = get_properties_by_drive_name(
|
||||||
|
APP.config["RASCSI_DRIVE_PROPERTIES"],
|
||||||
|
drive_name
|
||||||
|
)
|
||||||
|
|
||||||
# Creating the image file
|
# Creating the image file
|
||||||
process = file_cmd.create_new_image(file_name, file_type, size)
|
process = file_cmd.create_new_image(file_name, properties["file_type"], size)
|
||||||
if not process["status"]:
|
if not process["status"]:
|
||||||
return response(error=True, message=process["msg"])
|
return response(error=True, message=process["msg"])
|
||||||
|
|
||||||
# Creating the drive properties file
|
# Creating the drive properties file
|
||||||
prop_file_name = f"{file_name}.{file_type}.{PROPERTIES_SUFFIX}"
|
full_file_name = f"{file_name}.{properties['file_type']}"
|
||||||
properties = {
|
prop_file_name = f"{full_file_name}.{PROPERTIES_SUFFIX}"
|
||||||
"vendor": vendor,
|
|
||||||
"product": product,
|
|
||||||
"revision": revision,
|
|
||||||
"block_size": block_size,
|
|
||||||
}
|
|
||||||
process = file_cmd.write_drive_properties(prop_file_name, properties)
|
process = file_cmd.write_drive_properties(prop_file_name, properties)
|
||||||
process = ReturnCodeMapper.add_msg(process)
|
process = ReturnCodeMapper.add_msg(process)
|
||||||
if not process["status"]:
|
if not process["status"]:
|
||||||
@ -394,20 +390,15 @@ def drive_cdrom():
|
|||||||
"""
|
"""
|
||||||
Creates a properties file for a CD-ROM image
|
Creates a properties file for a CD-ROM image
|
||||||
"""
|
"""
|
||||||
vendor = request.form.get("vendor")
|
drive_name = request.form.get("drive_name")
|
||||||
product = request.form.get("product")
|
|
||||||
revision = request.form.get("revision")
|
|
||||||
block_size = request.form.get("block_size")
|
|
||||||
file_name = request.form.get("file_name")
|
file_name = request.form.get("file_name")
|
||||||
|
|
||||||
# Creating the drive properties file
|
# Creating the drive properties file
|
||||||
file_name = f"{file_name}.{PROPERTIES_SUFFIX}"
|
file_name = f"{file_name}.{PROPERTIES_SUFFIX}"
|
||||||
properties = {
|
properties = get_properties_by_drive_name(
|
||||||
"vendor": vendor,
|
APP.config["RASCSI_DRIVE_PROPERTIES"],
|
||||||
"product": product,
|
drive_name
|
||||||
"revision": revision,
|
)
|
||||||
"block_size": block_size,
|
|
||||||
}
|
|
||||||
process = file_cmd.write_drive_properties(file_name, properties)
|
process = file_cmd.write_drive_properties(file_name, properties)
|
||||||
process = ReturnCodeMapper.add_msg(process)
|
process = ReturnCodeMapper.add_msg(process)
|
||||||
if process["status"]:
|
if process["status"]:
|
||||||
@ -946,17 +937,10 @@ def create_file():
|
|||||||
|
|
||||||
# Creating the drive properties file, if one is chosen
|
# Creating the drive properties file, if one is chosen
|
||||||
if drive_name:
|
if drive_name:
|
||||||
drive_props = None
|
properties = get_properties_by_drive_name(
|
||||||
for drive in APP.config["RASCSI_DRIVE_PROPERTIES"]:
|
APP.config["RASCSI_DRIVE_PROPERTIES"],
|
||||||
if drive["name"] == drive_name:
|
drive_name
|
||||||
drive_props = drive
|
)
|
||||||
break
|
|
||||||
properties = {
|
|
||||||
"vendor": drive_props["vendor"],
|
|
||||||
"product": drive_props["product"],
|
|
||||||
"revision": drive_props["revision"],
|
|
||||||
"block_size": drive_props["block_size"],
|
|
||||||
}
|
|
||||||
prop_file_name = f"{full_file_name}.{PROPERTIES_SUFFIX}"
|
prop_file_name = f"{full_file_name}.{PROPERTIES_SUFFIX}"
|
||||||
process = file_cmd.write_drive_properties(prop_file_name, properties)
|
process = file_cmd.write_drive_properties(prop_file_name, properties)
|
||||||
process = ReturnCodeMapper.add_msg(process)
|
process = ReturnCodeMapper.add_msg(process)
|
||||||
|
@ -156,6 +156,12 @@ def format_drive_properties(drive_properties):
|
|||||||
FORMAT_FILTER = "{:,.2f}"
|
FORMAT_FILTER = "{:,.2f}"
|
||||||
|
|
||||||
for device in drive_properties:
|
for device in drive_properties:
|
||||||
|
# Add fallback device names, since other code relies on this data for display
|
||||||
|
if not device["name"]:
|
||||||
|
if device["product"]:
|
||||||
|
device["name"] = device["product"]
|
||||||
|
else:
|
||||||
|
device["name"] = "Unknown Device"
|
||||||
if device["device_type"] == "SCHD":
|
if device["device_type"] == "SCHD":
|
||||||
device["secure_name"] = secure_filename(device["name"])
|
device["secure_name"] = secure_filename(device["name"])
|
||||||
device["size_mb"] = FORMAT_FILTER.format(device["size"] / 1024 / 1024)
|
device["size_mb"] = FORMAT_FILTER.format(device["size"] / 1024 / 1024)
|
||||||
@ -179,6 +185,40 @@ def format_drive_properties(drive_properties):
|
|||||||
"mo_conf": mo_conf,
|
"mo_conf": mo_conf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_properties_by_drive_name(drives, drive_name):
|
||||||
|
"""
|
||||||
|
Takes (list) of (dict) drives, and (str) drive_name
|
||||||
|
Returns (dict) with the collection of drive properties that matches drive_name
|
||||||
|
"""
|
||||||
|
drives.sort(key=lambda item: item.get("name"))
|
||||||
|
|
||||||
|
drive_props = None
|
||||||
|
prev_drive = {"name": ""}
|
||||||
|
for drive in drives:
|
||||||
|
# TODO: Make this check into an integration test
|
||||||
|
if "name" not in drive:
|
||||||
|
logging.warning(
|
||||||
|
"Device without a name exists in the drive properties database. This is a bug."
|
||||||
|
)
|
||||||
|
break
|
||||||
|
# TODO: Make this check into an integration test
|
||||||
|
if drive["name"] == prev_drive["name"]:
|
||||||
|
logging.warning(
|
||||||
|
"Device with duplicate name \"%s\" in drive properties database. This is a bug.",
|
||||||
|
drive["name"],
|
||||||
|
)
|
||||||
|
prev_drive = drive
|
||||||
|
if drive["name"] == drive_name:
|
||||||
|
drive_props = drive
|
||||||
|
|
||||||
|
return {
|
||||||
|
"file_type": drive_props["file_type"],
|
||||||
|
"vendor": drive_props["vendor"],
|
||||||
|
"product": drive_props["product"],
|
||||||
|
"revision": drive_props["revision"],
|
||||||
|
"block_size": drive_props["block_size"],
|
||||||
|
}
|
||||||
|
|
||||||
def auth_active(group):
|
def auth_active(group):
|
||||||
"""
|
"""
|
||||||
Inspects if the group defined in (str) group exists on the system.
|
Inspects if the group defined in (str) group exists on the system.
|
||||||
|
@ -52,10 +52,7 @@ def test_create_cdrom_properties_file(http_client):
|
|||||||
response = http_client.post(
|
response = http_client.post(
|
||||||
"/drive/cdrom",
|
"/drive/cdrom",
|
||||||
data={
|
data={
|
||||||
"vendor": "TEST_AAA",
|
"drive_name": "Sony CDU-8012",
|
||||||
"product": "TEST_BBB",
|
|
||||||
"revision": "1.0A",
|
|
||||||
"block_size": 2048,
|
|
||||||
"file_name": file_name,
|
"file_name": file_name,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -77,12 +74,8 @@ def test_create_image_with_properties_file(http_client, delete_file):
|
|||||||
response = http_client.post(
|
response = http_client.post(
|
||||||
"/drive/create",
|
"/drive/create",
|
||||||
data={
|
data={
|
||||||
"vendor": "TEST_AAA",
|
"drive_name": "Miniscribe M8425",
|
||||||
"product": "TEST_BBB",
|
|
||||||
"revision": "1.0A",
|
|
||||||
"block_size": 512,
|
|
||||||
"size": FILE_SIZE_1_MIB,
|
"size": FILE_SIZE_1_MIB,
|
||||||
"file_type": "hds",
|
|
||||||
"file_name": file_prefix,
|
"file_name": file_prefix,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user