From 1dd1f091ecc46f544a00f47873d1b10bfc7c3b82 Mon Sep 17 00:00:00 2001 From: Axy Date: Mon, 12 Jan 2026 16:22:08 +0100 Subject: [PATCH] Implement Data Archivist exercises ex0-ex4 --- ex0/ft_ancient_text.py | 25 +++++++++++++++ ex1/ft_archive_creation.py | 28 +++++++++++++++++ ex2/ft_stream_management.py | 20 ++++++++++++ ex3/ft_vault_security.py | 29 +++++++++++++++++ ex4/ft_crisis_response.py | 62 +++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 ++ 6 files changed, 166 insertions(+) create mode 100644 ex0/ft_ancient_text.py create mode 100644 ex1/ft_archive_creation.py create mode 100644 ex2/ft_stream_management.py create mode 100644 ex3/ft_vault_security.py create mode 100644 ex4/ft_crisis_response.py create mode 100644 pyproject.toml diff --git a/ex0/ft_ancient_text.py b/ex0/ft_ancient_text.py new file mode 100644 index 0000000..c924fb9 --- /dev/null +++ b/ex0/ft_ancient_text.py @@ -0,0 +1,25 @@ +import os + + +def main(): + filename = "ancient_fragment.txt" + print("=== CYBER ARCHIVES - DATA RECOVERY SYSTEM ===") + print(f"Accessing Storage Vault: {filename}") + + if not os.path.exists(filename): + print("ERROR: Storage vault not found. Run data generator first.") + return + + try: + print("Connection established...") + print("RECOVERED DATA:") + with open(filename, "r") as f: + content = f.read().strip() + print(content) + print("Data recovery complete. Storage unit disconnected.") + except Exception as e: + print(f"Error accessing vault: {e}") + + +if __name__ == "__main__": + main() diff --git a/ex1/ft_archive_creation.py b/ex1/ft_archive_creation.py new file mode 100644 index 0000000..3e9e1be --- /dev/null +++ b/ex1/ft_archive_creation.py @@ -0,0 +1,28 @@ +def main(): + filename = "new_discovery.txt" + print("=== CYBER ARCHIVES - PRESERVATION SYSTEM ===") + print(f"Initializing new storage unit: {filename}") + + try: + print("Storage unit created successfully...") + print("Inscribing preservation data...") + + with open(filename, "w") as f: + entries = [ + "[ENTRY 001] New quantum algorithm discovered", + "[ENTRY 002] Efficiency increased by 347%", + "[ENTRY 003] Archived by Data Archivist trainee", + ] + for entry in entries: + f.write(entry + "\n") + print(entry) + + print("Data inscription complete. Storage unit sealed.") + print(f"Archive '{filename}' ready for long-term preservation.") + + except Exception as e: + print(f"Error: {e}") + + +if __name__ == "__main__": + main() diff --git a/ex2/ft_stream_management.py b/ex2/ft_stream_management.py new file mode 100644 index 0000000..3f4b039 --- /dev/null +++ b/ex2/ft_stream_management.py @@ -0,0 +1,20 @@ +import sys + + +def main(): + print("=== CYBER ARCHIVES - COMMUNICATION SYSTEM ===") + + arch_id = input("Input Stream active. Enter archivist ID: ") + status = input("Input Stream active. Enter status report: ") + + sys.stdout.write(f"[STANDARD] Archive status from {arch_id}: {status}\n") + sys.stderr.write( + "[ALERT] System diagnostic: Communication channels verified\n" + ) + sys.stdout.write("[STANDARD] Data transmission complete\n") + + print("Three-channel communication test successful.") + + +if __name__ == "__main__": + main() diff --git a/ex3/ft_vault_security.py b/ex3/ft_vault_security.py new file mode 100644 index 0000000..008ede9 --- /dev/null +++ b/ex3/ft_vault_security.py @@ -0,0 +1,29 @@ +def main(): + print("=== CYBER ARCHIVES - VAULT SECURITY SYSTEM ===") + print("Initiating secure vault access...") + print("Vault connection established with failsafe protocols") + + # Secure Extraction (Read) + print("SECURE EXTRACTION:") + try: + with open("classified_data.txt", "r") as f: + print(f.read().strip()) + except FileNotFoundError: + print("Error: classified_data.txt not found") + + # Secure Preservation (Write) + print("SECURE PRESERVATION:") + try: + with open("security_protocols.txt", "w") as f: + data = "[CLASSIFIED] New security protocols archived" + f.write(data) + print(data) + except Exception as e: + print(f"Error writing to vault: {e}") + + print("Vault automatically sealed upon completion") + print("All vault operations completed with maximum security.") + + +if __name__ == "__main__": + main() diff --git a/ex4/ft_crisis_response.py b/ex4/ft_crisis_response.py new file mode 100644 index 0000000..9bb19bb --- /dev/null +++ b/ex4/ft_crisis_response.py @@ -0,0 +1,62 @@ +import os + + +def crisis_handler(filename): + # Setup for permission error test + if filename == "classified_vault.txt": + try: + with open(filename, "w") as f: + f.write("TOP SECRET") + os.chmod(filename, 0o000) # Make unreadable + except OSError as e: + print(f"Setup error for {filename}: {e}") + + # Determine log prefix + if filename == "standard_archive.txt": + print(f"ROUTINE ACCESS: Attempting access to '{filename}'...") + else: + print(f"CRISIS ALERT: Attempting access to '{filename}'...") + + try: + with open(filename, "r") as f: + content = f.read().strip() + print( + f'SUCCESS: Archive recovered - "{content}"' + ) # Note: escaped quote here is intentional + print("STATUS: Normal operations resumed") + except FileNotFoundError: + print("RESPONSE: Archive not found in storage matrix") + print("STATUS: Crisis handled, system stable") + except PermissionError: + print("RESPONSE: Security protocols deny access") + print("STATUS: Crisis handled, security maintained") + except Exception as e: + print(f"RESPONSE: Unexpected error: {e}") + print("STATUS: Crisis handled") + finally: + # Cleanup for permission error test + if filename == "classified_vault.txt" and os.path.exists(filename): + try: + os.chmod(filename, 0o666) # Restore permissions + os.remove(filename) + except OSError: + pass + + +def main(): + print("=== CYBER ARCHIVES - CRISIS RESPONSE SYSTEM ===") + + test_files = [ + "lost_archive.txt", + "classified_vault.txt", + "standard_archive.txt", + ] + + for filename in test_files: + crisis_handler(filename) + + print("All crisis scenarios handled successfully. Archives secure.") + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a8f43fe --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.black] +line-length = 79 -- 2.52.0