#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 typing import Dict
|
||||
|
||||
from primaite.simulator.file_system.file_system_file_type import FileSystemFileType
|
||||
from primaite.simulator.file_system.file_system_item_abc import FileSystemItemABC
|
||||
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 FileSystemItem
|
||||
|
||||
|
||||
class FileSystemFile(FileSystemItemABC):
|
||||
class FileSystemFile(FileSystemItem):
|
||||
"""Class that represents a file in the simulation."""
|
||||
|
||||
file_type: FileSystemFileType = None
|
||||
@@ -24,23 +24,19 @@ class FileSystemFile(FileSystemItemABC):
|
||||
:param item_size: The size of the FileSystemItem
|
||||
:type item_size: Optional[float]
|
||||
"""
|
||||
super().__init__(**kwargs)
|
||||
|
||||
# set random file type if none provided
|
||||
if kwargs.get("item_name") is None:
|
||||
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
|
||||
if kwargs.get("file_type") is None:
|
||||
kwargs["file_type"] = choice(list(FileSystemFileType))
|
||||
|
||||
self.item_name = kwargs.get("item_name")
|
||||
self.item_size = kwargs.get("item_size")
|
||||
self.file_type = kwargs.get("file_type")
|
||||
# set random file size if none provided
|
||||
if kwargs.get("item_size") is None:
|
||||
kwargs["item_size"] = float(randint(1, file_type_sizes_KB[kwargs["file_type"]]))
|
||||
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def get_file_name(self) -> str:
|
||||
"""Returns the name of the file."""
|
||||
|
||||
@@ -2,12 +2,123 @@ from enum import Enum
|
||||
|
||||
|
||||
class FileSystemFileType(str, Enum):
|
||||
"""Enum used to determine the FileSystemFile type."""
|
||||
"""An enumeration of common file types."""
|
||||
|
||||
CSV = ("CSV",)
|
||||
DOC = ("DOC",)
|
||||
EXE = ("EXE",)
|
||||
PDF = ("PDF",)
|
||||
TXT = ("TXT",)
|
||||
XML = ("XML",)
|
||||
ZIP = "ZIP"
|
||||
UNKNOWN = 0
|
||||
"Unknown file type."
|
||||
|
||||
# Text formats
|
||||
TXT = 1
|
||||
"Plain text file."
|
||||
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 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."""
|
||||
|
||||
files: List[FileSystemFile] = []
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
from abc import ABC
|
||||
from typing import Dict
|
||||
|
||||
from primaite.simulator.core import SimComponent
|
||||
|
||||
|
||||
class FileSystemItemABC(SimComponent, ABC):
|
||||
class FileSystemItem(SimComponent):
|
||||
"""Abstract base class for FileSystemItems used in the file system simulation."""
|
||||
|
||||
item_size: float = 0
|
||||
@@ -11,3 +11,7 @@ class FileSystemItemABC(SimComponent, ABC):
|
||||
|
||||
item_name: str
|
||||
"""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)
|
||||
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_size() is 10
|
||||
assert file_system.get_folders()[0].get_files()[0].get_file_size() == 10
|
||||
|
||||
|
||||
def test_create_file():
|
||||
@@ -92,6 +92,6 @@ def test_serialisation():
|
||||
assert len(file_system.get_folders()[0].get_files()) is 1
|
||||
|
||||
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
|
||||
|
||||
@@ -11,13 +11,13 @@ def test_file_type():
|
||||
def test_get_file_size():
|
||||
"""Tests that the file size is being returned properly."""
|
||||
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():
|
||||
"""Test to check that the object serialisation works correctly."""
|
||||
file = FileSystemFile(item_name="test", item_size=1.5, file_type=FileSystemFileType.DOC)
|
||||
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
|
||||
|
||||
@@ -10,11 +10,11 @@ def test_adding_removing_file():
|
||||
file = FileSystemFile(item_name="test_file", item_size=10, file_type=FileSystemFileType.DOC)
|
||||
|
||||
folder.add_file(file)
|
||||
assert folder.get_folder_size() is 10
|
||||
assert folder.get_folder_size() == 10
|
||||
assert len(folder.get_files()) is 1
|
||||
|
||||
folder.remove_file(file)
|
||||
assert folder.get_folder_size() is 0
|
||||
assert folder.get_folder_size() == 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(file2)
|
||||
assert folder.get_folder_size() is 20
|
||||
assert folder.get_folder_size() == 20
|
||||
assert len(folder.get_files()) is 2
|
||||
|
||||
assert folder.get_file(file_id=file.uuid) is file
|
||||
@@ -54,6 +54,6 @@ def test_serialisation():
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user