# Path: fabgis/common.py
# def setup_env():
#     """Things to do regardless of whether command is local or remote.
# 
#     Todo - many of these env.fg settings should be module specific...
# 
#     """
#     if env.fg is not None:
#         fastprint('Environment already set!\n')
#         return
# 
#     fastprint('Setting environment!\n')
#     env.fg = fdict()
#     with hide('output'):
#         env.fg.user = run('whoami')
#         # Workaround for
#         env.fg.hostname = run('hostname')
#         # this which fails in docker - see
#         # https://github.com/dotcloud/docker/issues/1301
#         #env.fg.hostname = fabtools.system.get_hostname()
#         env.fg.home = os.path.join('/home/', env.fg.user)
#         env.fg.workspace = os.path.join(env.fg.home, 'dev')
#         env.fg.inasafe_git_url = 'git://github.com/AIFDR/inasafe.git'
#         env.fg.qgis_git_url = 'git://github.com/qgis/QGIS.git'
#         env.fg.kandan_git_url = 'git://github.com/kandanapp/kandan.git'
#         env.fg.gdal_svn_url = 'https://svn.osgeo.org/gdal/trunk/gdal'
#         env.fg.inasafe_checkout_alias = 'inasafe-fabric'
#         env.fg.qgis_checkout_alias = 'qgis-fabric'
#         env.fg.inasafe_code_path = os.path.join(
#             env.fg.workspace, env.fg.inasafe_checkout_alias)
#         env.fg.qgis_code_path = os.path.join(
#             env.fg.workspace, env.fg.qgis_checkout_alias)
# 
# Path: fabgis/utilities.py
# def replace_tokens(conf_file, tokens):
#     """Deprecated: prepare a template config file by replacing its tokens.
# 
#     :param conf_file: Either a full path to a conf file name or just the
#         file name. In the latter case, it assumes the file is then in the
#         current working directory. It the file name ends in '.templ',
#         a copy will be made and the takens replaced in the copy. Otherwise
#         the original file will be manipulated.
#     :type conf_file: str
# 
#     :param tokens: A dictionary of key-values that should be replaced
#         in the conf file.
#     :type tokens: dic
# 
#     :returns: Path to the replaced file.
#     :rtype: str
# 
#     Example tokens::
# 
#         my_tokens = {
#             'SERVERNAME': env.doc_site_name,  # Web Url e.g. foo.com
#             'WEBMASTER': 'werner@linfiniti.com',  # email of web master
#             'DOCUMENTROOT': webdir,  # Content root .e.g. /var/www
#             'SITENAME': sitename,  # Choosen name of jenkins 'root'
#         }
# 
#     .. deprecated:: You should use fabric.contrib.files.upload_template rather.
#     """
# 
#     if '.templ' == conf_file[-6:]:
#         templ_file = conf_file
#         conf_file = conf_file.replace('.templ', '')
#         sudo(
#             'cp %(templ_file)s %(conf_file)s' % {
#             'templ_file': templ_file,
#             'conf_file': conf_file})
# 
#     base_path, file_name = os.path.split(conf_file)
#     if base_path is not '':
#         # The file is not in the current working dir.
#         with cd(base_path):
#             for key, value in tokens.iteritems():
#                 sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                     key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     else:
#         # filename only, not full path - assumes the current working dir is
#         # the same as where the conf file is located
#         for key, value in tokens.iteritems():
#             sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                 key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     return conf_file
# 
# Path: fabgis/utilities.py
# def append_if_not_present(filename, text, use_sudo=False):
#     """Append to a file if an equivalent line is not already there.
#     :param filename: Name of file to append to.
#     :type filename: str
# 
#     :param text: Text to append.
#     :type text: str
# 
#     :param use_sudo: Run the command as sudo
#     :type use_sudo: bool
#     """
#     if not contains(filename, text):
#         append(filename, text, use_sudo=use_sudo)


import os
from fabric.contrib.files import exists
from fabtools import require
from fabric.api import run, cd, env, task, sudo, put
from .common import setup_env
from .utilities import replace_tokens
from .utilities import append_if_not_present
    Unfortunately we can't run this as part of initial setup due to the
    control-c issue that prevents us from halting the initial dropboxd
    command needed to set up the dropbox synced account.

    So for example you need to do::

        fab vagrant setup_dropbox

    Then once your account is linked, press Ctrl-c - which will also
    terminate the above fabric job. Then run::

        fab vagrant setup_dropbox_daemon

    """
    setup_env()
    with cd('/etc/init.d/'):
        if not exists('dropbox'):
            local_dir = os.path.dirname(__file__)
            local_file = os.path.abspath(os.path.join(
                local_dir,
                '..',
                'fabgis_resources',
                'server_config',
                'dropbox',
                'dropbox.templ'))
            put(local_file,
                '/etc/init.d/dropbox',
                use_sudo=True)

        my_tokens = {'USER': env.fg.user, }

# Path: fabgis/common.py
# def setup_env():
#     """Things to do regardless of whether command is local or remote.
# 
#     Todo - many of these env.fg settings should be module specific...
# 
#     """
#     if env.fg is not None:
#         fastprint('Environment already set!\n')
#         return
# 
#     fastprint('Setting environment!\n')
#     env.fg = fdict()
#     with hide('output'):
#         env.fg.user = run('whoami')
#         # Workaround for
#         env.fg.hostname = run('hostname')
#         # this which fails in docker - see
#         # https://github.com/dotcloud/docker/issues/1301
#         #env.fg.hostname = fabtools.system.get_hostname()
#         env.fg.home = os.path.join('/home/', env.fg.user)
#         env.fg.workspace = os.path.join(env.fg.home, 'dev')
#         env.fg.inasafe_git_url = 'git://github.com/AIFDR/inasafe.git'
#         env.fg.qgis_git_url = 'git://github.com/qgis/QGIS.git'
#         env.fg.kandan_git_url = 'git://github.com/kandanapp/kandan.git'
#         env.fg.gdal_svn_url = 'https://svn.osgeo.org/gdal/trunk/gdal'
#         env.fg.inasafe_checkout_alias = 'inasafe-fabric'
#         env.fg.qgis_checkout_alias = 'qgis-fabric'
#         env.fg.inasafe_code_path = os.path.join(
#             env.fg.workspace, env.fg.inasafe_checkout_alias)
#         env.fg.qgis_code_path = os.path.join(
#             env.fg.workspace, env.fg.qgis_checkout_alias)
# 
# Path: fabgis/utilities.py
# def replace_tokens(conf_file, tokens):
#     """Deprecated: prepare a template config file by replacing its tokens.
# 
#     :param conf_file: Either a full path to a conf file name or just the
#         file name. In the latter case, it assumes the file is then in the
#         current working directory. It the file name ends in '.templ',
#         a copy will be made and the takens replaced in the copy. Otherwise
#         the original file will be manipulated.
#     :type conf_file: str
# 
#     :param tokens: A dictionary of key-values that should be replaced
#         in the conf file.
#     :type tokens: dic
# 
#     :returns: Path to the replaced file.
#     :rtype: str
# 
#     Example tokens::
# 
#         my_tokens = {
#             'SERVERNAME': env.doc_site_name,  # Web Url e.g. foo.com
#             'WEBMASTER': 'werner@linfiniti.com',  # email of web master
#             'DOCUMENTROOT': webdir,  # Content root .e.g. /var/www
#             'SITENAME': sitename,  # Choosen name of jenkins 'root'
#         }
# 
#     .. deprecated:: You should use fabric.contrib.files.upload_template rather.
#     """
# 
#     if '.templ' == conf_file[-6:]:
#         templ_file = conf_file
#         conf_file = conf_file.replace('.templ', '')
#         sudo(
#             'cp %(templ_file)s %(conf_file)s' % {
#             'templ_file': templ_file,
#             'conf_file': conf_file})
# 
#     base_path, file_name = os.path.split(conf_file)
#     if base_path is not '':
#         # The file is not in the current working dir.
#         with cd(base_path):
#             for key, value in tokens.iteritems():
#                 sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                     key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     else:
#         # filename only, not full path - assumes the current working dir is
#         # the same as where the conf file is located
#         for key, value in tokens.iteritems():
#             sudo('sed -i.bak -r -e "s/\[%s\]/%s/g" %s' % (
#                 key, value, file_name))
#             sudo('rm %s.bak' % file_name)
#     return conf_file
# 
# Path: fabgis/utilities.py
# def append_if_not_present(filename, text, use_sudo=False):
#     """Append to a file if an equivalent line is not already there.
#     :param filename: Name of file to append to.
#     :type filename: str
# 
#     :param text: Text to append.
#     :type text: str
# 
#     :param use_sudo: Run the command as sudo
#     :type use_sudo: bool
#     """
#     if not contains(filename, text):
#         append(filename, text, use_sudo=use_sudo)


# Path: fabgis/dropbox.py
import os
from fabric.contrib.files import exists
from fabtools import require
from fabric.api import run, cd, env, task, sudo, put
from .common import setup_env
from .utilities import replace_tokens
from .utilities import append_if_not_present

    Unfortunately we can't run this as part of initial setup due to the
    control-c issue that prevents us from halting the initial dropboxd
    command needed to set up the dropbox synced account.

    So for example you need to do::

        fab vagrant setup_dropbox

    Then once your account is linked, press Ctrl-c - which will also
    terminate the above fabric job. Then run::

        fab vagrant setup_dropbox_daemon

    """
    setup_env()
    with cd('/etc/init.d/'):
        if not exists('dropbox'):
            local_dir = os.path.dirname(__file__)
            local_file = os.path.abspath(os.path.join(
                local_dir,
                '..',
                'fabgis_resources',
                'server_config',
                'dropbox',
                'dropbox.templ'))
            put(local_file,
                '/etc/init.d/dropbox',
                use_sudo=True)

        my_tokens = {'USER': env.fg.user, }

        replace_tokens('/etc/init.d/dropbox', my_tokens)