Pular para o conteúdo principal

Validar duas vezes

O MazeGenerator, a classe do mazegen que gera o labirinto, já confere várias regras quando é criado. O MazeConfig confere as mesmas regras de novo, antes de criar o gerador. Esta página explica por que essa repetição existe, mostra o fim do create e reúne todas as mensagens de erro que ele pode dar.

As duas mensagens para o mesmo erro​

O MazeGenerator (parte 9) confere, quando é criado, o tamanho, as coordenadas, a entrada diferente da saída, o espaço para o Pac-Man e o "42". Conferir de novo no MazeConfig parece repetição, mas as mensagens são diferentes. O gerador, com a entrada em cima do "42" (na raiz do projeto):

.venv/bin/python -c '
from mazegen import MazeError, MazeGenerator

try:
MazeGenerator(20, 15, entry=(6, 5))
except MazeError as error:
print(error)
'
entry (6, 5) lies on the "42" pattern

O MazeConfig, com o mesmo erro (ENTRY=6,5 no dicionário), dá esta mensagem; o Experimente da próxima página a mostra saindo de verdade:

ENTRY=6,5 lies on the "42" pattern

O gerador é uma biblioteca: fala dos parâmetros dele, como entry, em minúsculas. Quem escreveu o arquivo de configuração nunca viu esse parâmetro; viu a linha ENTRY=6,5. Conferindo antes de criar o gerador, a mensagem cita a chave como está no arquivo, com o valor escrito do mesmo jeito (6,5, e não (6, 5)).

A validação do gerador continua lá, porque outro programa pode usar o mazegen sem arquivo de configuração nenhum. No A-Maze-ing ela nunca dispara: o MazeConfig barra antes.

O objeto pronto​

return cls(width, height, entry, exit, output_file, perfect, seed)

Chegando aqui, todas as regras passaram. cls(...) chama o construtor do MazeConfig com os valores já convertidos.

Chaves que não são obrigatórias nem SEED nunca são lidas pelo create, e por isso são ignoradas sem código nenhum: um dicionário com "COLOR": "red" a mais dá o mesmo MazeConfig que sem ela. O enunciado permite acrescentar chaves; ignorar as desconhecidas é escolha do projeto.

Todas as mensagens​

RegraMensagem
1missing mandatory key(s): WIDTH, HEIGHT
2WIDTH must be an integer, got 'abc'
2WIDTH has more than 18 digits
2ENTRY must be 'x,y' with integers, got '0;0'
2OUTPUT_FILE must not be empty
2PERFECT must be True or False, got 'yes'
2SEED must be an integer, got '4.2'
3WIDTH must be between 1 and 100, got 0
4ENTRY=20,0 is outside the maze (x in 0..19, y in 0..14)
5ENTRY and EXIT must differ
6PERFECT=False needs (WIDTH - 1) x (HEIGHT - 1) >= 2 for a Pac-Man board, got 1x10
7ENTRY=6,5 lies on the "42" pattern

Nenhuma cita o nome do arquivo: o MazeConfig não sabe de onde vieram os textos. Quem acrescenta config.txt: na frente é o repositório, no fim desta parte.