Skip to content

Instantly share code, notes, and snippets.

@schmidsi
Created March 6, 2012 17:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save schmidsi/1987536 to your computer and use it in GitHub Desktop.
Save schmidsi/1987536 to your computer and use it in GitHub Desktop.
Fabric Tools to Clone Django Projects
import os
from fabric.api import *
from urlparse import urlparse
@task
def clone(uri, local_name=None):
"""
usage: fab clone:host:/path/to/project
note, there is no trailing slash
"""
parsed = urlparse(uri)
remote_host = parsed.scheme
remote_path = parsed.path
name = os.path.basename(remote_path)
local_name = local_name or name
env.host_string = remote_host
local('git clone %s %s' % (uri, local_name))
with lcd(local_name):
# setup git
local('git submodule update --init') # --recursive
local('git config remote.origin.push refs/heads/master:refs/heads/%s' % env.local_user)
# create local db
get(os.path.join(remote_path, 'secrets.py') , 'secrets.py')
execfile('%s/secrets.py' % local_name)
remote_db = locals()['DATABASES']['default']
dbinit_local = open('%s/dbinit_local.sql' % local_name, 'w')
dbinit_local.writelines("""
CREATE DATABASE %(NAME)s DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER %(USER)s@localhost IDENTIFIED BY '%(USER)s';
GRANT ALL PRIVILEGES ON %(NAME)s.* TO %(USER)s@localhost;
""" % remote_db)
dbinit_local.close()
local('mysql -u root < dbinit_local.sql')
# remove sensitive information from secrets.py (the original values are still in locals())
secrets_data = open('%s/secrets.py' % local_name).read()
local_secrets = open('%s/secrets.py' % local_name, 'w')
new_secrets = secrets_data.replace(remote_db['PASSWORD'], remote_db['USER']
).replace(locals()['SECRET_KEY'], remote_db['NAME']
).replace(remote_db['HOST'], 'localhost')
local_secrets.write(new_secrets)
local_secrets.close()
local('fab update_all')
@task
def remove(folder):
"""
usage: fab remove:localfolder
"""
execfile('%s/secrets.py' % folder)
dbdict = locals()['DATABASES']['default']
local('rm -rf %s' % folder)
local('mysql -u root -e "DROP DATABASE %(NAME)s; DROP USER %(USER)s@localhost"' % dbdict)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment