#1714: FileSystemItem is no longer an abstract base class + Added enums and enum sizes + stream lined FileSystemFile init
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
from random import choice, randint
|
from random import choice, randint
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from primaite.simulator.file_system.file_system_file_type import FileSystemFileType
|
from primaite.simulator.file_system.file_system_file_type import file_type_sizes_KB, FileSystemFileType
|
||||||
from primaite.simulator.file_system.file_system_item_abc import FileSystemItemABC
|
from primaite.simulator.file_system.file_system_item_abc import FileSystemItem
|
||||||
|
|
||||||
|
|
||||||
class FileSystemFile(FileSystemItemABC):
|
class FileSystemFile(FileSystemItem):
|
||||||
"""Class that represents a file in the simulation."""
|
"""Class that represents a file in the simulation."""
|
||||||
|
|
||||||
file_type: FileSystemFileType = None
|
file_type: FileSystemFileType = None
|
||||||
@@ -24,23 +24,19 @@ class FileSystemFile(FileSystemItemABC):
|
|||||||
:param item_size: The size of the FileSystemItem
|
:param item_size: The size of the FileSystemItem
|
||||||
:type item_size: Optional[float]
|
:type item_size: Optional[float]
|
||||||
"""
|
"""
|
||||||
super().__init__(**kwargs)
|
|
||||||
|
|
||||||
# set random file type if none provided
|
# set random file type if none provided
|
||||||
if kwargs.get("item_name") is None:
|
if kwargs.get("item_name") is None:
|
||||||
raise Exception("File name not provided.")
|
raise Exception("File name not provided.")
|
||||||
|
|
||||||
# set random file size if non provided
|
|
||||||
if kwargs.get("item_size") is None:
|
|
||||||
kwargs["item_size"] = float(randint(1, 1000))
|
|
||||||
|
|
||||||
# set random file type if none provided
|
# set random file type if none provided
|
||||||
if kwargs.get("file_type") is None:
|
if kwargs.get("file_type") is None:
|
||||||
kwargs["file_type"] = choice(list(FileSystemFileType))
|
kwargs["file_type"] = choice(list(FileSystemFileType))
|
||||||
|
|
||||||
self.item_name = kwargs.get("item_name")
|
# set random file size if none provided
|
||||||
self.item_size = kwargs.get("item_size")
|
if kwargs.get("item_size") is None:
|
||||||
self.file_type = kwargs.get("file_type")
|
kwargs["item_size"] = float(randint(1, file_type_sizes_KB[kwargs["file_type"]]))
|
||||||
|
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
def get_file_name(self) -> str:
|
def get_file_name(self) -> str:
|
||||||
"""Returns the name of the file."""
|
"""Returns the name of the file."""
|
||||||
|
|||||||
@@ -2,12 +2,123 @@ from enum import Enum
|
|||||||
|
|
||||||
|
|
||||||
class FileSystemFileType(str, Enum):
|
class FileSystemFileType(str, Enum):
|
||||||
"""Enum used to determine the FileSystemFile type."""
|
"""An enumeration of common file types."""
|
||||||
|
|
||||||
CSV = ("CSV",)
|
UNKNOWN = 0
|
||||||
DOC = ("DOC",)
|
"Unknown file type."
|
||||||
EXE = ("EXE",)
|
|
||||||
PDF = ("PDF",)
|
# Text formats
|
||||||
TXT = ("TXT",)
|
TXT = 1
|
||||||
XML = ("XML",)
|
"Plain text file."
|
||||||
ZIP = "ZIP"
|
DOC = 2
|
||||||
|
"Microsoft Word document (.doc)"
|
||||||
|
DOCX = 3
|
||||||
|
"Microsoft Word document (.docx)"
|
||||||
|
PDF = 4
|
||||||
|
"Portable Document Format."
|
||||||
|
HTML = 5
|
||||||
|
"HyperText Markup Language file."
|
||||||
|
XML = 6
|
||||||
|
"Extensible Markup Language file."
|
||||||
|
CSV = 7
|
||||||
|
"Comma-Separated Values file."
|
||||||
|
|
||||||
|
# Spreadsheet formats
|
||||||
|
XLS = 8
|
||||||
|
"Microsoft Excel file (.xls)"
|
||||||
|
XLSX = 9
|
||||||
|
"Microsoft Excel file (.xlsx)"
|
||||||
|
|
||||||
|
# Image formats
|
||||||
|
JPEG = 10
|
||||||
|
"JPEG image file."
|
||||||
|
PNG = 11
|
||||||
|
"PNG image file."
|
||||||
|
GIF = 12
|
||||||
|
"GIF image file."
|
||||||
|
BMP = 13
|
||||||
|
"Bitmap image file."
|
||||||
|
|
||||||
|
# Audio formats
|
||||||
|
MP3 = 14
|
||||||
|
"MP3 audio file."
|
||||||
|
WAV = 15
|
||||||
|
"WAV audio file."
|
||||||
|
|
||||||
|
# Video formats
|
||||||
|
MP4 = 16
|
||||||
|
"MP4 video file."
|
||||||
|
AVI = 17
|
||||||
|
"AVI video file."
|
||||||
|
MKV = 18
|
||||||
|
"MKV video file."
|
||||||
|
FLV = 19
|
||||||
|
"FLV video file."
|
||||||
|
|
||||||
|
# Presentation formats
|
||||||
|
PPT = 20
|
||||||
|
"Microsoft PowerPoint file (.ppt)"
|
||||||
|
PPTX = 21
|
||||||
|
"Microsoft PowerPoint file (.pptx)"
|
||||||
|
|
||||||
|
# Web formats
|
||||||
|
JS = 22
|
||||||
|
"JavaScript file."
|
||||||
|
CSS = 23
|
||||||
|
"Cascading Style Sheets file."
|
||||||
|
|
||||||
|
# Programming languages
|
||||||
|
PY = 24
|
||||||
|
"Python script file."
|
||||||
|
C = 25
|
||||||
|
"C source code file."
|
||||||
|
CPP = 26
|
||||||
|
"C++ source code file."
|
||||||
|
JAVA = 27
|
||||||
|
"Java source code file."
|
||||||
|
|
||||||
|
# Compressed file types
|
||||||
|
RAR = 28
|
||||||
|
"RAR archive file."
|
||||||
|
ZIP = 29
|
||||||
|
"ZIP archive file."
|
||||||
|
TAR = 30
|
||||||
|
"TAR archive file."
|
||||||
|
GZ = 31
|
||||||
|
"Gzip compressed file."
|
||||||
|
|
||||||
|
|
||||||
|
file_type_sizes_KB = {
|
||||||
|
FileSystemFileType.UNKNOWN: 0,
|
||||||
|
FileSystemFileType.TXT: 4,
|
||||||
|
FileSystemFileType.DOC: 50,
|
||||||
|
FileSystemFileType.DOCX: 30,
|
||||||
|
FileSystemFileType.PDF: 100,
|
||||||
|
FileSystemFileType.HTML: 15,
|
||||||
|
FileSystemFileType.XML: 10,
|
||||||
|
FileSystemFileType.CSV: 15,
|
||||||
|
FileSystemFileType.XLS: 100,
|
||||||
|
FileSystemFileType.XLSX: 25,
|
||||||
|
FileSystemFileType.JPEG: 100,
|
||||||
|
FileSystemFileType.PNG: 40,
|
||||||
|
FileSystemFileType.GIF: 30,
|
||||||
|
FileSystemFileType.BMP: 300,
|
||||||
|
FileSystemFileType.MP3: 5000,
|
||||||
|
FileSystemFileType.WAV: 25000,
|
||||||
|
FileSystemFileType.MP4: 25000,
|
||||||
|
FileSystemFileType.AVI: 50000,
|
||||||
|
FileSystemFileType.MKV: 50000,
|
||||||
|
FileSystemFileType.FLV: 15000,
|
||||||
|
FileSystemFileType.PPT: 200,
|
||||||
|
FileSystemFileType.PPTX: 100,
|
||||||
|
FileSystemFileType.JS: 10,
|
||||||
|
FileSystemFileType.CSS: 5,
|
||||||
|
FileSystemFileType.PY: 5,
|
||||||
|
FileSystemFileType.C: 5,
|
||||||
|
FileSystemFileType.CPP: 10,
|
||||||
|
FileSystemFileType.JAVA: 10,
|
||||||
|
FileSystemFileType.RAR: 1000,
|
||||||
|
FileSystemFileType.ZIP: 1000,
|
||||||
|
FileSystemFileType.TAR: 1000,
|
||||||
|
FileSystemFileType.GZ: 800,
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
from primaite.simulator.file_system.file_system_file import FileSystemFile
|
from primaite.simulator.file_system.file_system_file import FileSystemFile
|
||||||
from primaite.simulator.file_system.file_system_item_abc import FileSystemItemABC
|
from primaite.simulator.file_system.file_system_item_abc import FileSystemItem
|
||||||
|
|
||||||
|
|
||||||
class FileSystemFolder(FileSystemItemABC):
|
class FileSystemFolder(FileSystemItem):
|
||||||
"""Simulation FileSystemFolder."""
|
"""Simulation FileSystemFolder."""
|
||||||
|
|
||||||
files: List[FileSystemFile] = []
|
files: List[FileSystemFile] = []
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
from abc import ABC
|
from typing import Dict
|
||||||
|
|
||||||
from primaite.simulator.core import SimComponent
|
from primaite.simulator.core import SimComponent
|
||||||
|
|
||||||
|
|
||||||
class FileSystemItemABC(SimComponent, ABC):
|
class FileSystemItem(SimComponent):
|
||||||
"""Abstract base class for FileSystemItems used in the file system simulation."""
|
"""Abstract base class for FileSystemItems used in the file system simulation."""
|
||||||
|
|
||||||
item_size: float = 0
|
item_size: float = 0
|
||||||
@@ -11,3 +11,7 @@ class FileSystemItemABC(SimComponent, ABC):
|
|||||||
|
|
||||||
item_name: str
|
item_name: str
|
||||||
"""The name of the file system item."""
|
"""The name of the file system item."""
|
||||||
|
|
||||||
|
def describe_state(self) -> Dict:
|
||||||
|
"""Returns the state of the FileSystemItem."""
|
||||||
|
pass
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ def test_create_folder_and_file():
|
|||||||
file_system.create_file(file_name="test_file", file_size=10, folder_uuid=folder.uuid)
|
file_system.create_file(file_name="test_file", file_size=10, folder_uuid=folder.uuid)
|
||||||
assert len(file_system.get_folders()[0].get_files()) is 1
|
assert len(file_system.get_folders()[0].get_files()) is 1
|
||||||
assert file_system.get_folders()[0].get_files()[0].get_file_name() is "test_file"
|
assert file_system.get_folders()[0].get_files()[0].get_file_name() is "test_file"
|
||||||
assert file_system.get_folders()[0].get_files()[0].get_file_size() is 10
|
assert file_system.get_folders()[0].get_files()[0].get_file_size() == 10
|
||||||
|
|
||||||
|
|
||||||
def test_create_file():
|
def test_create_file():
|
||||||
@@ -92,6 +92,6 @@ def test_serialisation():
|
|||||||
assert len(file_system.get_folders()[0].get_files()) is 1
|
assert len(file_system.get_folders()[0].get_files()) is 1
|
||||||
|
|
||||||
serialised_file_sys = file_system.model_dump_json()
|
serialised_file_sys = file_system.model_dump_json()
|
||||||
deserialised_file_sys = FileSystem().model_validate_json(serialised_file_sys)
|
deserialised_file_sys = FileSystem.model_validate_json(serialised_file_sys)
|
||||||
|
|
||||||
assert file_system == deserialised_file_sys
|
assert file_system == deserialised_file_sys
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ def test_file_type():
|
|||||||
def test_get_file_size():
|
def test_get_file_size():
|
||||||
"""Tests that the file size is being returned properly."""
|
"""Tests that the file size is being returned properly."""
|
||||||
file = FileSystemFile(item_name="test", item_size=1.5)
|
file = FileSystemFile(item_name="test", item_size=1.5)
|
||||||
assert file.get_file_size() is 1.5
|
assert file.get_file_size() == 1.5
|
||||||
|
|
||||||
|
|
||||||
def test_serialisation():
|
def test_serialisation():
|
||||||
"""Test to check that the object serialisation works correctly."""
|
"""Test to check that the object serialisation works correctly."""
|
||||||
file = FileSystemFile(item_name="test", item_size=1.5, file_type=FileSystemFileType.DOC)
|
file = FileSystemFile(item_name="test", item_size=1.5, file_type=FileSystemFileType.DOC)
|
||||||
serialised_file = file.model_dump_json()
|
serialised_file = file.model_dump_json()
|
||||||
deserialised_file = FileSystemFile(item_name="test").model_validate_json(serialised_file)
|
deserialised_file = FileSystemFile.model_validate_json(serialised_file)
|
||||||
|
|
||||||
assert file == deserialised_file
|
assert file == deserialised_file
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ def test_adding_removing_file():
|
|||||||
file = FileSystemFile(item_name="test_file", item_size=10, file_type=FileSystemFileType.DOC)
|
file = FileSystemFile(item_name="test_file", item_size=10, file_type=FileSystemFileType.DOC)
|
||||||
|
|
||||||
folder.add_file(file)
|
folder.add_file(file)
|
||||||
assert folder.get_folder_size() is 10
|
assert folder.get_folder_size() == 10
|
||||||
assert len(folder.get_files()) is 1
|
assert len(folder.get_files()) is 1
|
||||||
|
|
||||||
folder.remove_file(file)
|
folder.remove_file(file)
|
||||||
assert folder.get_folder_size() is 0
|
assert folder.get_folder_size() == 0
|
||||||
assert len(folder.get_files()) is 0
|
assert len(folder.get_files()) is 0
|
||||||
|
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ def test_get_file_by_id():
|
|||||||
|
|
||||||
folder.add_file(file)
|
folder.add_file(file)
|
||||||
folder.add_file(file2)
|
folder.add_file(file2)
|
||||||
assert folder.get_folder_size() is 20
|
assert folder.get_folder_size() == 20
|
||||||
assert len(folder.get_files()) is 2
|
assert len(folder.get_files()) is 2
|
||||||
|
|
||||||
assert folder.get_file(file_id=file.uuid) is file
|
assert folder.get_file(file_id=file.uuid) is file
|
||||||
@@ -54,6 +54,6 @@ def test_serialisation():
|
|||||||
|
|
||||||
serialised_folder = folder.model_dump_json()
|
serialised_folder = folder.model_dump_json()
|
||||||
|
|
||||||
deserialised_folder = FileSystemFolder(item_name="test").model_validate_json(serialised_folder)
|
deserialised_folder = FileSystemFolder.model_validate_json(serialised_folder)
|
||||||
|
|
||||||
assert folder == deserialised_folder
|
assert folder == deserialised_folder
|
||||||
|
|||||||
Reference in New Issue
Block a user