diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-10-20 16:23:38 -0300 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-10-20 16:23:38 -0300 |
commit | 1ff1bf97acd3e9ccb4ffe529095ba75b3399e4fd (patch) | |
tree | d1ec29df3715680d3e6bfb70ce5330c458589600 /askbot/deployment/path_utils.py | |
parent | 93928e09df2be2cd51cb4e14df4205e52b4e01fc (diff) | |
download | askbot-1ff1bf97acd3e9ccb4ffe529095ba75b3399e4fd.tar.gz askbot-1ff1bf97acd3e9ccb4ffe529095ba75b3399e4fd.tar.bz2 askbot-1ff1bf97acd3e9ccb4ffe529095ba75b3399e4fd.zip |
broken intermediate commit - refactoring the deployment function to make it more understandable
Diffstat (limited to 'askbot/deployment/path_utils.py')
-rw-r--r-- | askbot/deployment/path_utils.py | 87 |
1 files changed, 71 insertions, 16 deletions
diff --git a/askbot/deployment/path_utils.py b/askbot/deployment/path_utils.py index 676f8bf8..806fa80c 100644 --- a/askbot/deployment/path_utils.py +++ b/askbot/deployment/path_utils.py @@ -13,6 +13,7 @@ import shutil import imp from askbot.deployment.template_loader import SettingsTemplate + def split_at_break_point(directory): """splits directory path into two pieces first that exists and secon - that does not @@ -29,6 +30,17 @@ def split_at_break_point(directory): tail_bits.insert(0, tail) return head, os.path.join(*tail_bits) +def clean_directory(directory): + """Returns normalized absolute path to the directory + regardless of whether it exists or not + or None - if the path is a file""" + directory = os.path.normpath(directory) + directory = os.path.abspath(directory) + + if os.path.isfile(directory): + return None + return directory + def directory_is_writable(directory): """returns True if directory exists @@ -66,7 +78,8 @@ def has_existing_django_project(directory): """returns True is any of the .py files in a given directory imports anything from django """ - file_list = glob.glob(directory + '*.py') + directory = os.path.normpath(directory) + file_list = glob.glob(directory + os.path.sep + '*.py') for file_name in file_list: py_file = open(file_name) for line in py_file: @@ -124,10 +137,10 @@ def get_path_to_help_file(): """returns path to the main plain text help file""" return os.path.join(SOURCE_DIR, 'doc', 'INSTALL') -def deploy_into(directory, new_project = None, verbosity=1, context=None): +def deploy_into(directory, new_project = None, verbosity = 1, context = None): """will copy necessary files into the directory """ - assert(new_project is not None) + assert(isinstance(new_project, bool)) if new_project: copy_files = ('__init__.py', 'manage.py', 'urls.py') blank_files = ('__init__.py', 'manage.py') @@ -143,11 +156,11 @@ def deploy_into(directory, new_project = None, verbosity=1, context=None): #overwrite urls.py shutil.copy(src, directory) else: - if verbosity >=1: + if verbosity >= 1: print '* %s' % file_name, print "- you already have one, please add contents of %s" % src else: - if verbosity >=1: + if verbosity >= 1: print '* %s ' % file_name shutil.copy(src, directory) #copy log directory @@ -157,14 +170,14 @@ def deploy_into(directory, new_project = None, verbosity=1, context=None): touch(os.path.join(log_dir, 'askbot.log')) #creating settings file from template - if verbosity>=1: + if verbosity >= 1: print "Creating settings file" settings_contents = SettingsTemplate(context).render() settings_path = os.path.join(directory, 'settings.py') - if os.path.exists(settings_path) and new_project==False: - if verbosity>=1: + if os.path.exists(settings_path) and new_project == False: + if verbosity >= 1: print "* you already have a settings file please merge the contents" - else: + elif new_project == True: settings_file = open(settings_path, 'w+') settings_file.write(settings_contents) #Grab the file! @@ -174,10 +187,10 @@ def deploy_into(directory, new_project = None, verbosity=1, context=None): settings_file.write(local_settings) settings_file.close() - if verbosity>=1: + if verbosity >= 1: print "settings file created" - if verbosity >=1: + if verbosity >= 1: print '' app_dir = os.path.join(directory, 'askbot') @@ -188,21 +201,21 @@ def deploy_into(directory, new_project = None, verbosity=1, context=None): dst = os.path.join(app_dir, dir_name) if os.path.abspath(src) != os.path.abspath(dst): if dirs_copied == 0: - if verbosity >=1: + if verbosity >= 1: print 'copying directories: ', - if verbosity >=1: + if verbosity >= 1: print '* ' + dir_name if os.path.exists(dst): if os.path.isdir(dst): - if verbosity >=1: + if verbosity >= 1: print 'Directory %s not empty - skipped' % dst else: - if verbosity >=1: + if verbosity >= 1: print 'File %s already exists - skipped' % dst continue shutil.copytree(src, dst) dirs_copied += 1 - if verbosity >=1: + if verbosity >= 1: print '' def dir_name_acceptable(directory): @@ -213,3 +226,45 @@ def dir_name_acceptable(directory): return False except ImportError: return True + +def get_install_directory(force = False): + """returns a directory where a new django app/project + can be installed. + If ``force`` is ``True`` - will permit + using a directory with an existing django project. + """ + + where_to_deploy_msg = messages.WHERE_TO_DEPLOY_QUIT + directory = raw_input(where_to_deploy_msg + ' ') + directory = clean_directory(directory) + + if directory is None: + return None + + if can_create_path(directory) == False: + print messages.format_msg_dir_not_writable(directory) + return None + + if os.path.exists(directory): + if path_is_clean_for_django(directory): + if has_existing_django_project(directory): + if force == False: + print messages.CANNOT_OVERWRITE_EXISTING_DJANGO_PROJECT + return None + else: + print messages.format_msg_dir_unclean_django(directory) + return None + elif force == False: + message = messages.format_msg_create(directory) + should_create_new = console.choice_dialog( + message, + choices = ['yes','no'], + invalid_phrase = messages.INVALID_INPUT + ) + if should_create_new == 'no': + return None + + if not dir_name_acceptable(directory): + print messages.format_msg_bad_dir_name(directory) + return None + |