fmartingr
/
shelfzilla
Archived
1
0
Fork 0
This repository has been archived on 2021-06-29. You can view files and clone it, but cannot push or open issues or pull requests.
shelfzilla/fabfile.py

164 lines
3.4 KiB
Python

from __future__ import with_statement, print_function
from os.path import dirname, abspath, join
from os.path import exists as os_exists
from os import getcwd
from fabric.api import *
from fabric.context_managers import settings, cd
from fabric.contrib.files import exists
from fabric.colors import yellow, red, white, green
from fabric.operations import local
#
# GLOBALS
#
env.LOCAL_PATH = dirname(abspath(__file__))
if not env.hosts:
env.hosts = ['localhost']
# Doctor checkups
DOCTOR = {
'apps': ['virtualenv', 'python', 'npm', 'grunt', 'bower']
}
#
# CONTEXT MANAGERS
#
def virtualenv():
"""
Activates virtualenv first
"""
return prefix('source .virtualenv/bin/activate')
#
# TASKS
#
@task
def setup_environment():
"""
Prepares environment for the application
"""
execute(setup_virtualenv)
execute(setup_tools)
execute(setup_database)
@task
def setup_virtualenv():
"""
Creates or updates a virtualenv
"""
print(yellow('Create virtualenv'))
local('virtualenv .virtualenv')
with virtualenv():
print(yellow('Installing requirements'))
local('pip install -r config/local/requirements.txt')
@task
def setup_tools():
# Setup frontend tools
print(yellow('Installing npm dependencies'))
local('npm install')
@task
def setup_database():
"""
Create or update the database
"""
with virtualenv():
print(yellow('SyncDB'))
local('python manage.py syncdb')
# print(yellow('Migrate'))
# local('python manage.py migrate')
@task
def doctor():
print(yellow('Checking for software:'))
for app in DOCTOR['apps']:
print(white('{}'.format(app)), end=': ')
check = local('which {}'.format(app), quiet=True)
if check.succeeded:
print(green('present'))
else:
print(red('not present'))
#
# LOCAL ONLY
#
@task
@hosts(['localhost'])
def runserver():
"""
Executes local development server
"""
with virtualenv():
local('python manage.py runserver_plus 0.0.0.0:8000')
@task
def clean_pyc():
local('find . -name "*.pyc" -exec rm -rf {} \;')
@task
@hosts(['localhost'])
def rungrunt():
"""
Executes grunt
"""
local('grunt --force')
@task
@hosts(['localhost'])
def makemessages():
"""
Executes django-admin makemessages where needed
"""
with virtualenv():
local('cd shelfzilla && django-admin.py makemessages -l es')
#
# BACKUPS
#
@task
def clean_backups(BCK_BASE_PATH='/backups/sql', DAYS='30'):
"""
This function clean old backups from backup base path
"""
print(white("\tCleaning oldest backups..."))
with settings(hide('warnings', 'running', 'stdout', 'stderr')):
local('find %s -mtime +%s -exec rm -rf {} \;' % (BCK_BASE_PATH, DAYS))
@task
def backup():
"""
This function makes a PostgreSQL Backup and put it in backup base path
"""
import time
BCK_BASE_PATH = '/backups/sql'
DATABASE = "shelfzilla"
print(white("\n\tMaking backup of [%s] database" % DATABASE))
with settings(hide('running')):
if not os_exists(BCK_BASE_PATH + '/' + time.strftime("%d_%m_%Y")):
local('mkdir -p %s' % BCK_BASE_PATH + '/' + time.strftime("%d_%m_%Y"))
with lcd(BCK_BASE_PATH + '/' + time.strftime("%d_%m_%Y")):
local('pg_dump %s | gzip > %s.gz' %
(DATABASE, "shelfzilla_" + time.strftime("%H:%M_%d_%m_%Y")) )
clean_backups()