<%!
def column_width(column, table):
    return max(map(lambda row: len(row[column]), table)) if table else 0    
%>\
$TTL 600
@   IN  SOA        ${hostname}. admin.${hostname}. (
        2021111709 ;Serial
        3600       ;Refresh
        200        ;Retry
        1209600    ;Expire
        900        ;Negative response caching TTL
)

% for record in sorted(records, key=lambda r: (tuple(reversed(r['name'].split('.'))), r['type'], r['value'])):
(${(record['name'] or '@').rjust(column_width('name', records))}) \
IN \
${record['type'].ljust(column_width('type', records))} \
    % if record['type'] == 'TXT':
(${' '.join('"'+record['value'][i:i+255]+'"' for i in range(0, len(record['value']), 255))})
    % else:
${record['value']}
    % endif
% endfor