from abc import ABC, abstractmethod
import time
class Document(ABC):
def __init__(self, title):
self.title = title
@abstractmethod
def generate_content(self):
"""Creates content"""
pass
@abstractmethod
def export(self):
"""Exports creates content"""
pass
class PlainTextDocument(Document):
def generate_content(self, text):
self.content = text
return self.content
def export(self):
doc = self.title
return f"{doc}.txt"
class HTMLDocument(Document):
def generate_content(self, text):
self.content = text
return self.content
def export(self):
doc = self.title
return f"{doc}.html"
class CSVDocument(Document):
def generate_content(self, text):
self.content = text
return self.content
def export(self):
doc = self.title
return f"{doc}.csv"
class DocumentCreator(ABC):
@abstractmethod
def create_document(self, title):
pass
def export_document(self, title, text):
"""
Fluxo padronizado:
* Criar o documento (via Factory Method)
* Gerar o conteúdo
* Exportar
"""
doc = self.create_document(title)
doc.generate_content(text)
return doc.export()
class PlainTextDocumentCreator(DocumentCreator):
def create_document(self, title):
return PlainTextDocument(title)
class HTMLDocumentCreator(DocumentCreator):
def create_document(self, title):
return HTMLDocument(title)
class CSVDocumentCreator(DocumentCreator):
def create_document(self, title):
return CSVDocument(title)
class FabricaDeArquivo:
@staticmethod
def criar_arquivo(tipo):
if tipo == "txt":
return PlainTextDocumentCreator()
elif tipo == "html":
return HTMLDocumentCreator()
elif tipo == "csv":
return CSVDocumentCreator()
else:
raise ValueError("Tipo de arquivo invalido.")
class ServicoCriarArquivo:
def __init__(self, tipo_arquivo):
self.arquivo = FabricaDeArquivo.criar_arquivo(tipo_arquivo)
def export(self, title, text):
return self.arquivo.export_document(title, text)
def coletar_arquivo():
tipo_arquivo = input("Digite o tipo de arquivo que deseja criar (txt, html ou csv): ").lower()
titulo_arquivo = input("Digite o titulo do arquivo: ")
conteudo_arquivo = input("Digite o conteudo do arquivo: ")
print("\n")
arquivo = ServicoCriarArquivo(tipo_arquivo)
print("Criando arquivo \n")
time.sleep(2)
print(arquivo.export(titulo_arquivo, conteudo_arquivo))
if __name__ == "__main__":
try:
coletar_arquivo()
except ValueError as e:
print(f"Error: {e}")
Essa foi a forma que usei prar solucionar o desafio, o que acham? Tem alguma coisa ai que consideram errado, ou que esta se repetindo e n~ao deveria?