summaryrefslogtreecommitdiff
path: root/isort/format.py
diff options
context:
space:
mode:
Diffstat (limited to 'isort/format.py')
-rw-r--r--isort/format.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/isort/format.py b/isort/format.py
index 0c76a143..9aa81bea 100644
--- a/isort/format.py
+++ b/isort/format.py
@@ -1,3 +1,9 @@
+import os
+import sys
+from datetime import datetime
+from difflib import unified_diff
+
+
def format_simplified(import_line: str) -> str:
import_line = import_line.strip()
if import_line.startswith("from "):
@@ -19,3 +25,28 @@ def format_natural(import_line: str) -> str:
return "from {0} import {1}".format(".".join(parts), end)
return import_line
+
+
+def show_unified_diff(*, file_input: str, file_output: str, file_path: str) -> None:
+ unified_diff_lines = unified_diff(
+ file_input.splitlines(keepends=True),
+ file_output.splitlines(keepends=True),
+ fromfile=file_path + ':before',
+ tofile=file_path + ':after',
+ fromfiledate=str(datetime.fromtimestamp(os.path.getmtime(file_path))
+ if file_path else datetime.now()),
+ tofiledate=str(datetime.now())
+ )
+ for line in unified_diff_lines:
+ sys.stdout.write(line)
+
+
+def ask_whether_to_apply_changes_to_file(file_path: str) -> bool:
+ answer = None
+ while answer not in ('yes', 'y', 'no', 'n', 'quit', 'q'):
+ answer = input("Apply suggested changes to '{0}' [y/n/q]? ".format(file_path)).lower()
+ if answer in ('no', 'n'):
+ return False
+ if answer in ('quit', 'q'):
+ sys.exit(1)
+ return True