mirror of
https://github.com/DavidGailleton/42-Piscine_Python.git
synced 2026-03-14 05:06:55 +01:00
161 lines
4.8 KiB
Python
161 lines
4.8 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Any
|
|
from typing_extensions import override
|
|
|
|
|
|
class DataProcessor(ABC):
|
|
@abstractmethod
|
|
def process(self, data: Any) -> str:
|
|
pass
|
|
|
|
@abstractmethod
|
|
def validate(self, data: Any) -> bool:
|
|
pass
|
|
|
|
def format_output(self, result: str) -> str:
|
|
return f"Processed output: {result}"
|
|
|
|
|
|
class NumericProcessor(DataProcessor):
|
|
def process(self, data: Any) -> str:
|
|
try:
|
|
return f"{data}"
|
|
except Exception as err:
|
|
print(err)
|
|
return "error"
|
|
|
|
def validate(self, data: Any) -> bool:
|
|
try:
|
|
for n in data:
|
|
if type(n).__name__ != "int":
|
|
return False
|
|
return True
|
|
except Exception:
|
|
return False
|
|
|
|
@override
|
|
def format_output(self, result: str) -> str:
|
|
try:
|
|
to_processed = result.split(", ")
|
|
res_int: list[int] = []
|
|
for n in to_processed:
|
|
n = n.replace("[", "").replace("]", "")
|
|
if n.isnumeric():
|
|
res_int = res_int + [int(n)]
|
|
avg = sum(res_int) / len(res_int)
|
|
return f"Processed {len(res_int)} numeric value,\
|
|
sum={sum(res_int)}, avg={avg:.2f}"
|
|
except Exception as err:
|
|
print(f"NumericProcessor / format_output: {err}")
|
|
return "error"
|
|
|
|
|
|
class TextProcessor(DataProcessor):
|
|
def process(self, data: Any) -> str:
|
|
return str(data)
|
|
|
|
def validate(self, data: Any) -> bool:
|
|
try:
|
|
for char in data:
|
|
if type(char).__name__ != "str":
|
|
return False
|
|
return True
|
|
except Exception:
|
|
return False
|
|
|
|
@override
|
|
def format_output(self, result: str) -> str:
|
|
return f"Processed text: {len(result)}\
|
|
characters, {len(result.split(' '))} words"
|
|
|
|
|
|
class LogProcessor(DataProcessor):
|
|
def process(self, data: Any) -> str:
|
|
try:
|
|
return f"{data[0]}: {data[1]}"
|
|
except Exception as err:
|
|
print(err)
|
|
return "error"
|
|
|
|
def validate(self, data: Any) -> bool:
|
|
try:
|
|
if len(data) == 2:
|
|
for n in data:
|
|
if type(n).__name__ != "str":
|
|
return False
|
|
return True
|
|
return False
|
|
except Exception:
|
|
return False
|
|
|
|
@override
|
|
def format_output(self, result: str) -> str:
|
|
try:
|
|
log_res = result.split(":")[0]
|
|
if log_res == "ERROR":
|
|
header = "[ALERT]"
|
|
elif log_res == "INFO":
|
|
header = "[INFO]"
|
|
elif log_res == "SUCCESS":
|
|
header = "[SUCCESS]"
|
|
else:
|
|
header = "[UNKNOWN]"
|
|
return (
|
|
f"{header} {result.split(':', 1)[0]}{result.split(':', 1)[1]}"
|
|
)
|
|
except Exception as err:
|
|
print(err)
|
|
return "error"
|
|
|
|
|
|
def class_tester() -> None:
|
|
print("=== CODE NEXUS - DATA PROCESSOR FOUNDATION ===\n")
|
|
print("Initializing Numeric Processor...")
|
|
data = [1, 2, 3, 4, 5]
|
|
processor = NumericProcessor()
|
|
res = processor.process(data)
|
|
is_valid = processor.validate(data)
|
|
formatted_output = processor.format_output(res)
|
|
print(f"processing data: {res}")
|
|
if is_valid:
|
|
print("Validation: Numeric data verified")
|
|
else:
|
|
print("Validation: Invalid numeric data")
|
|
print(f"Output: {formatted_output}")
|
|
print("\nInitializing Text Processor...")
|
|
data = "Hello Nexus World"
|
|
processor = TextProcessor()
|
|
res = processor.process(data)
|
|
is_valid = processor.validate(data)
|
|
formatted_output = processor.format_output(res)
|
|
print(f"processing data: {res}")
|
|
if is_valid:
|
|
print("Validation: Text data verified")
|
|
else:
|
|
print("Validation: Invalid text data")
|
|
print(f"Output: {formatted_output}")
|
|
print("\nInitializing Log Processor...")
|
|
data = ["ERROR", "Connection timeout"]
|
|
processor = LogProcessor()
|
|
res = processor.process(data)
|
|
is_valid = processor.validate(data)
|
|
formatted_output = processor.format_output(res)
|
|
print(f"processing data: {res}")
|
|
if is_valid:
|
|
print("Validation: Log data verified")
|
|
else:
|
|
print("Validation: Invalid log data")
|
|
print(f"Output: {formatted_output}")
|
|
print("\n=== Polymorphic Processing Demo ===\n")
|
|
print(f"Result 1:\
|
|
{NumericProcessor().format_output('[1, 2, 3]')}")
|
|
print(f"Result 2:\
|
|
{TextProcessor().format_output('Hello World !')}")
|
|
print(f"Result 3:\
|
|
{LogProcessor().format_output('INFO: level detected: System ready')}")
|
|
print("\nFoundation systems online. Nexus ready for advanced streams.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
class_tester()
|