summaryrefslogtreecommitdiffstats
path: root/askbot/deployment/path_utils.py
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-10-20 16:23:38 -0300
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-10-20 16:23:38 -0300
commit1ff1bf97acd3e9ccb4ffe529095ba75b3399e4fd (patch)
treed1ec29df3715680d3e6bfb70ce5330c458589600 /askbot/deployment/path_utils.py
parent93928e09df2be2cd51cb4e14df4205e52b4e01fc (diff)
downloadaskbot-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.py87
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
+