# 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/system.py
# def get_ip_address():
#     """Get the ip address of the remote host.
# 
#     :returns: Ip address of the remote host.
#     :rtype: str
#     """
#     host_ip = sudo(
#         "ifconfig eth0 | grep 'inet addr:'| "
#         "cut -d: -f2 | awk '{print $1}'")
#     return host_ip


import os
from fabric.api import fastprint, task, sudo, run, cd, env, put
from fabtools.files import exists
from fabtools import require
from .common import setup_env
from .utilities import replace_tokens
from .system import get_ip_address
"""
Tools for deployment of tilestream.
===================================

.. note:: Usually you should run tilemill on your local host and prepare your
    mbtiles, then use tilestream (https://github.com/mapbox/tilestream) to
    host the resulting mbtiles output.

.. seealso:: :file:`tilemill.py`

"""



@task
def setup_tilestream():
    """Set up tile stream - see https://github.com/mapbox/tilestream.

    This one deserves a little explanation:

    Tilestream is a nodejs application. Node seems to be pretty unparticular
    about maintaining api compatibility between releases so if you grab one
    from e.g. apt, chances are it won't work with tilestream.

    To address this, we use the nodeenv virtualisation environment (somewhat
    equivalent to using python virtualenv) to ensure that we have the
    expected version of tilestream. e.g.::

        nodeenv env --node=0.8.15
    """

# 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/system.py
# def get_ip_address():
#     """Get the ip address of the remote host.
# 
#     :returns: Ip address of the remote host.
#     :rtype: str
#     """
#     host_ip = sudo(
#         "ifconfig eth0 | grep 'inet addr:'| "
#         "cut -d: -f2 | awk '{print $1}'")
#     return host_ip


# Path: fabgis/tilestream.py
import os
from fabric.api import fastprint, task, sudo, run, cd, env, put
from fabtools.files import exists
from fabtools import require
from .common import setup_env
from .utilities import replace_tokens
from .system import get_ip_address

"""
Tools for deployment of tilestream.
===================================

.. note:: Usually you should run tilemill on your local host and prepare your
    mbtiles, then use tilestream (https://github.com/mapbox/tilestream) to
    host the resulting mbtiles output.

.. seealso:: :file:`tilemill.py`

"""



@task
def setup_tilestream():
    """Set up tile stream - see https://github.com/mapbox/tilestream.

    This one deserves a little explanation:

    Tilestream is a nodejs application. Node seems to be pretty unparticular
    about maintaining api compatibility between releases so if you grab one
    from e.g. apt, chances are it won't work with tilestream.

    To address this, we use the nodeenv virtualisation environment (somewhat
    equivalent to using python virtualenv) to ensure that we have the
    expected version of tilestream. e.g.::

        nodeenv env --node=0.8.15
    """

    setup_env()