| #!/usr/bin/env python | |
| import os | |
| import sys | |
| from _jb_utils import FileChangesTracker, jb_escape_output | |
| from fix_getpass import fixGetpass | |
| from pycharm_run_utils import adjust_django_sys_path | |
| try: | |
| from runpy import run_module | |
| except ImportError: | |
| from runpy_compat import run_module | |
| adjust_django_sys_path() | |
| base_path = sys.argv.pop() | |
| manage_file = os.getenv('PYCHARM_DJANGO_MANAGE_MODULE') | |
| track_files_pattern = os.environ.get('PYCHARM_TRACK_FILES_PATTERN', None) | |
| if not manage_file: | |
| manage_file = 'manage' | |
| class _PseudoTTY(object): | |
| """ | |
| Wraps stdin to return "true" for isatty() to fool | |
| """ | |
| def __init__(self, underlying): | |
| self.__underlying = underlying | |
| def __getattr__(self, name): | |
| return getattr(self.__underlying, name) | |
| def isatty(self): | |
| return True | |
| if __name__ == "__main__": | |
| fixGetpass() | |
| command = sys.argv[1] | |
| if command in ["syncdb", "createsuperuser"]: # List of commands that need stdin to be cheated | |
| sys.stdin = _PseudoTTY(sys.stdin) | |
| def run_command(): | |
| run_module(manage_file, None, '__main__', True) | |
| if track_files_pattern: | |
| print("Tracking file by folder pattern: ", track_files_pattern) | |
| file_changes_tracker = FileChangesTracker(os.getcwd(), track_files_pattern.split(":")) | |
| run_command() | |
| # Report files affected/created by commands. This info is used on Java side. | |
| changed_files = list(file_changes_tracker.get_changed_files()) | |
| if changed_files: | |
| print("\n" + jb_escape_output(",".join(changed_files))) | |
| else: | |
| print("File tracking disabled") | |
| run_command() |