Created
March 6, 2012 17:07
-
-
Save schmidsi/1987536 to your computer and use it in GitHub Desktop.
Fabric Tools to Clone Django Projects
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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