Você não cria nenhum espaçamento no seu código Python, sua saída é exatamente o que seu código Python cria.
Para obter o espaçamento desejado, você pode, por exemplo, substituir
html5template=doctype+html_start+header_start+meta_data+header_end+body+html_end
com
indent=' '
html5template='\n'.join((doctype,
html_start,
indent + header_start,
indent + indent + meta_data,
indent + header_end,
indent + body,
html_end
))