0
respostas

[Sugestão] Mão na massa: classe música

import os
import logging
from datetime import datetime

# --- Configuração básica do Logging ---
logging.basicConfig(
    level=logging.INFO,
    format='%(levelname)s: %(message)s'
)


# --- Bloco de Definições Reutilizáveis ---

def criar_pasta_modelo():
    '''
    Verifica se a pasta 'modelo' já existe e a cria se necessário.
    '''
    nome_da_pasta = 'modelo'
    try:
        if not os.path.exists(nome_da_pasta):
            os.makedirs(nome_da_pasta)
            logging.info(f"A pasta '{nome_da_pasta}' foi criada com sucesso!")
        else:
            logging.info(f"A pasta '{nome_da_pasta}' já existe, nenhuma ação foi necessária.")
    except OSError as e:
        logging.error(f"Não foi possível criar a pasta '{nome_da_pasta}'. Erro: {e}")


class Musica:
    '''
    Classe para armazenar informações detalhadas sobre uma música e seu artista.
    '''
    def __init__(self, nome_musica, estilo, ano_lancamento, nome_artista, nacionalidade, estilos_musicais_artista, duracao):
        ano_atual = datetime.now().year
        if not (isinstance(ano_lancamento, int) and len(str(ano_lancamento)) == 4 and ano_lancamento <= ano_atual):
            raise ValueError(f'Ano de lançamento inválido: {ano_lancamento}.')

        self.nome_musica = str(nome_musica)
        self.estilo = str(estilo)
        self.ano_lancamento = ano_lancamento
        self.artista = {
            'nome': str(nome_artista),
            'nacionalidade': str(nacionalidade),
            'estilos': str(estilos_musicais_artista)
        }
        self.duracao = str(duracao)

    def __str__(self):
        info_musica = f'Música: {self.nome_musica}\n  - Estilo: {self.estilo}\n  - Ano: {self.ano_lancamento}\n  - Duração: {self.duracao}\n'
        info_artista = f'Artista: {self.artista['nome']}\n  - Nacionalidade: {self.artista['nacionalidade']}\n  - Gêneros do Artista: {self.artista['estilos']}'
        return f'--- Detalhes da Faixa ---\n{info_musica}{info_artista}\n--------------------------'


# --- Bloco de Execução Principal (Apenas para teste) ---

if __name__ == '__main__':
    # Este código abaixo só roda quando você executa este arquivo diretamente.
    # Ele não será executado se você importar a classe Musica em outro projeto.

    print("--- Realizando teste de execução do módulo ---")
    
    # 1. Garante que a pasta exista
    criar_pasta_modelo()

    # 2. Tenta criar um objeto Musica válido
    try:
        minha_musica = Musica(
            nome_musica='Bohemian Rhapsody',
            estilo='Rock',
            ano_lancamento=1975,
            nome_artista='Queen',
            nacionalidade='Britânica',
            estilos_musicais_artista='Rock, Glam Rock, Hard Rock',
            duracao='5:55'
        )
        logging.info('Objeto Musica criado com sucesso.')
        logging.info(f'\n{minha_musica}')

    except ValueError as e:
        logging.error(f'Falha ao criar o objeto Musica: {e}')
    
    print("\n--- Fim do teste ---")