jlane9/selenium_data_attributes

View on GitHub
fabfile.py

Summary

Maintainability
A
0 mins
Test Coverage
"""fabfile

.. codeauthor:: John Lane <jlane@fanthreesixty.com>
"""

from contextlib import contextmanager as _contextmanager
import os
from fabric.api import local, prefix, task
from fabric.context_managers import lcd

BASE_DIR = os.path.dirname(os.path.abspath(__file__))


@_contextmanager
def virtualenv(bin_folder):
    """Activate virtual environment

    :param basestring bin_folder: Location of virtualenv /bin folder
    :return:
    """

    with prefix('source {}/bin/activate'.format(bin_folder)):
        yield


def get_virtual_env():
    """Return location of virtual environment

    :return:
    """

    for root, dir_names, file_names in os.walk(BASE_DIR):
        if all([i in dir_names for i in ['bin', 'include', 'lib']]):
            return os.path.join(BASE_DIR, root)


def get_os():
    """Return System platform

    :return:
    """

    return local('python -c "import platform; print platform.system()"', capture=True)


@task()
def update_requirements():
    """Update project python requirements

    :return:
    """

    virtual_env = get_virtual_env()

    if virtual_env:
        with virtualenv(virtual_env):
            with lcd(BASE_DIR):
                local('pip install -r requirements.txt')
                print 'Requirements installed'

    else:
        print 'Virtual environment needs to be installed first'
        print 'Please run `fab install_virtualenv` first'


def run_setup(command):
    """Run setup.py file

    :return:
    """

    virtual_env = get_virtual_env()

    if virtual_env:
        with virtualenv(virtual_env):
            with lcd(BASE_DIR):
                local('python setup.py {}'.format(str(command)))

    else:
        print 'Virtual environment needs to be installed first'
        print 'Please run `fab install_virtualenv` first'


@task()
def install():
    """Install project

    :return:
    """

    run_setup('install')


@task()
def develop():
    """Install project (develop mode)

    :return:
    """

    run_setup('develop')


@task()
def install_virtualenv():
    """Install python virtual environment

    :return:
    """

    virtual_env = get_virtual_env()

    if not virtual_env:
        with lcd(BASE_DIR):
            local('virtualenv -p /usr/bin/python2.7 venv')

        print "Virtual environment installed..."
        print "Usage: source {}/venv/bin/activate".format(BASE_DIR)

    else:
        print "Virtual environment already installed..."
        print "Usage: source {}/bin/activate".format(virtual_env)


@task()
def publish(version=None):
    """Publish project to PyPi

    :param basestring version: Version number
    :return:
    """

    if isinstance(version, str):

        with lcd(BASE_DIR):

            local("sed -i '' -E -- \"s/__version__ = '.*'/__version__ = '{}'/g\" sda/__init__.py".format(version))
            local('git add sda/__init__.py')
            local('git commit -m "PyPi release {}"'.format(version))
            local('git tag {0} -m "PyPi release {0}"'.format(version))
            local('git push --tags origin master')
            release = local('python setup.py sdist bdist_wheel upload -r "https://pypi.python.org/pypi"', capture=True)

            if '200' not in release:
                print "{} release failed...".format(version)

            else:
                print "{} released...".format(version)

    else:
        print 'Please include a version'