|
|
@ -9,6 +9,8 @@ from StringIO import StringIO |
|
|
from logging import DEBUG, ERROR, INFO, WARN, getLogger |
|
|
from logging import DEBUG, ERROR, INFO, WARN, getLogger |
|
|
from sys import stdout |
|
|
from sys import stdout |
|
|
|
|
|
|
|
|
|
|
|
from six import text_type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UnsafePlan(Exception): |
|
|
class UnsafePlan(Exception): |
|
|
pass |
|
|
pass |
|
|
@ -147,11 +149,11 @@ class PlanLogger(_PlanOutput): |
|
|
|
|
|
|
|
|
def _value_stringifier(record, sep): |
|
|
def _value_stringifier(record, sep): |
|
|
try: |
|
|
try: |
|
|
values = [unicode(v) for v in record.values] |
|
|
|
|
|
|
|
|
values = [text_type(v) for v in record.values] |
|
|
except AttributeError: |
|
|
except AttributeError: |
|
|
values = [record.value] |
|
|
values = [record.value] |
|
|
for code, gv in sorted(getattr(record, 'geo', {}).items()): |
|
|
for code, gv in sorted(getattr(record, 'geo', {}).items()): |
|
|
vs = ', '.join([unicode(v) for v in gv.values]) |
|
|
|
|
|
|
|
|
vs = ', '.join([text_type(v) for v in gv.values]) |
|
|
values.append('{}: {}'.format(code, vs)) |
|
|
values.append('{}: {}'.format(code, vs)) |
|
|
return sep.join(values) |
|
|
return sep.join(values) |
|
|
|
|
|
|
|
|
@ -193,7 +195,7 @@ class PlanMarkdown(_PlanOutput): |
|
|
fh.write(' | ') |
|
|
fh.write(' | ') |
|
|
# TTL |
|
|
# TTL |
|
|
if existing: |
|
|
if existing: |
|
|
fh.write(unicode(existing.ttl)) |
|
|
|
|
|
|
|
|
fh.write(text_type(existing.ttl)) |
|
|
fh.write(' | ') |
|
|
fh.write(' | ') |
|
|
fh.write(_value_stringifier(existing, '; ')) |
|
|
fh.write(_value_stringifier(existing, '; ')) |
|
|
fh.write(' | |\n') |
|
|
fh.write(' | |\n') |
|
|
@ -201,7 +203,7 @@ class PlanMarkdown(_PlanOutput): |
|
|
fh.write('| | | | ') |
|
|
fh.write('| | | | ') |
|
|
|
|
|
|
|
|
if new: |
|
|
if new: |
|
|
fh.write(unicode(new.ttl)) |
|
|
|
|
|
|
|
|
fh.write(text_type(new.ttl)) |
|
|
fh.write(' | ') |
|
|
fh.write(' | ') |
|
|
fh.write(_value_stringifier(new, '; ')) |
|
|
fh.write(_value_stringifier(new, '; ')) |
|
|
fh.write(' | ') |
|
|
fh.write(' | ') |
|
|
@ -210,7 +212,7 @@ class PlanMarkdown(_PlanOutput): |
|
|
fh.write(' |\n') |
|
|
fh.write(' |\n') |
|
|
|
|
|
|
|
|
fh.write('\nSummary: ') |
|
|
fh.write('\nSummary: ') |
|
|
fh.write(unicode(plan)) |
|
|
|
|
|
|
|
|
fh.write(text_type(plan)) |
|
|
fh.write('\n\n') |
|
|
fh.write('\n\n') |
|
|
else: |
|
|
else: |
|
|
fh.write('## No changes were planned\n') |
|
|
fh.write('## No changes were planned\n') |
|
|
@ -261,7 +263,7 @@ class PlanHtml(_PlanOutput): |
|
|
# TTL |
|
|
# TTL |
|
|
if existing: |
|
|
if existing: |
|
|
fh.write(' <td>') |
|
|
fh.write(' <td>') |
|
|
fh.write(unicode(existing.ttl)) |
|
|
|
|
|
|
|
|
fh.write(text_type(existing.ttl)) |
|
|
fh.write('</td>\n <td>') |
|
|
fh.write('</td>\n <td>') |
|
|
fh.write(_value_stringifier(existing, '<br/>')) |
|
|
fh.write(_value_stringifier(existing, '<br/>')) |
|
|
fh.write('</td>\n <td></td>\n </tr>\n') |
|
|
fh.write('</td>\n <td></td>\n </tr>\n') |
|
|
@ -270,7 +272,7 @@ class PlanHtml(_PlanOutput): |
|
|
|
|
|
|
|
|
if new: |
|
|
if new: |
|
|
fh.write(' <td>') |
|
|
fh.write(' <td>') |
|
|
fh.write(unicode(new.ttl)) |
|
|
|
|
|
|
|
|
fh.write(text_type(new.ttl)) |
|
|
fh.write('</td>\n <td>') |
|
|
fh.write('</td>\n <td>') |
|
|
fh.write(_value_stringifier(new, '<br/>')) |
|
|
fh.write(_value_stringifier(new, '<br/>')) |
|
|
fh.write('</td>\n <td>') |
|
|
fh.write('</td>\n <td>') |
|
|
@ -279,7 +281,7 @@ class PlanHtml(_PlanOutput): |
|
|
fh.write('</td>\n </tr>\n') |
|
|
fh.write('</td>\n </tr>\n') |
|
|
|
|
|
|
|
|
fh.write(' <tr>\n <td colspan=6>Summary: ') |
|
|
fh.write(' <tr>\n <td colspan=6>Summary: ') |
|
|
fh.write(unicode(plan)) |
|
|
|
|
|
|
|
|
fh.write(text_type(plan)) |
|
|
fh.write('</td>\n </tr>\n</table>\n') |
|
|
fh.write('</td>\n </tr>\n</table>\n') |
|
|
else: |
|
|
else: |
|
|
fh.write('<b>No changes were planned</b>') |
|
|
fh.write('<b>No changes were planned</b>') |