You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@senssoft.apache.org by ar...@apache.org on 2016/12/16 17:11:06 UTC

[48/58] [abbrv] [partial] incubator-senssoft-tap git commit: Fixed .gitignore file

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/config_schema_v2.0.json
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/config_schema_v2.0.json b/env2/lib/python2.7/site-packages/compose/config/config_schema_v2.0.json
deleted file mode 100644
index e84d131..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/config_schema_v2.0.json
+++ /dev/null
@@ -1,318 +0,0 @@
-{
-  "$schema": "http://json-schema.org/draft-04/schema#",
-  "id": "config_schema_v2.0.json",
-  "type": "object",
-
-  "properties": {
-    "version": {
-      "type": "string"
-    },
-
-    "services": {
-      "id": "#/properties/services",
-      "type": "object",
-      "patternProperties": {
-        "^[a-zA-Z0-9._-]+$": {
-          "$ref": "#/definitions/service"
-        }
-      },
-      "additionalProperties": false
-    },
-
-    "networks": {
-      "id": "#/properties/networks",
-      "type": "object",
-      "patternProperties": {
-        "^[a-zA-Z0-9._-]+$": {
-          "$ref": "#/definitions/network"
-        }
-      }
-    },
-
-    "volumes": {
-      "id": "#/properties/volumes",
-      "type": "object",
-      "patternProperties": {
-        "^[a-zA-Z0-9._-]+$": {
-          "$ref": "#/definitions/volume"
-        }
-      },
-      "additionalProperties": false
-    }
-  },
-
-  "additionalProperties": false,
-
-  "definitions": {
-
-    "service": {
-      "id": "#/definitions/service",
-      "type": "object",
-
-      "properties": {
-        "build": {
-          "oneOf": [
-            {"type": "string"},
-            {
-              "type": "object",
-              "properties": {
-                "context": {"type": "string"},
-                "dockerfile": {"type": "string"},
-                "args": {"$ref": "#/definitions/list_or_dict"}
-              },
-              "additionalProperties": false
-            }
-          ]
-        },
-        "cap_add": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "cap_drop": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "cgroup_parent": {"type": "string"},
-        "command": {
-          "oneOf": [
-            {"type": "string"},
-            {"type": "array", "items": {"type": "string"}}
-          ]
-        },
-        "container_name": {"type": "string"},
-        "cpu_shares": {"type": ["number", "string"]},
-        "cpu_quota": {"type": ["number", "string"]},
-        "cpuset": {"type": "string"},
-        "depends_on": {"$ref": "#/definitions/list_of_strings"},
-        "devices": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "dns": {"$ref": "#/definitions/string_or_list"},
-        "dns_search": {"$ref": "#/definitions/string_or_list"},
-        "domainname": {"type": "string"},
-        "entrypoint": {
-          "oneOf": [
-            {"type": "string"},
-            {"type": "array", "items": {"type": "string"}}
-          ]
-        },
-        "env_file": {"$ref": "#/definitions/string_or_list"},
-        "environment": {"$ref": "#/definitions/list_or_dict"},
-
-        "expose": {
-          "type": "array",
-          "items": {
-            "type": ["string", "number"],
-            "format": "expose"
-          },
-          "uniqueItems": true
-        },
-
-        "extends": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "object",
-
-              "properties": {
-                "service": {"type": "string"},
-                "file": {"type": "string"}
-              },
-              "required": ["service"],
-              "additionalProperties": false
-            }
-          ]
-        },
-
-        "external_links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "extra_hosts": {"$ref": "#/definitions/list_or_dict"},
-        "hostname": {"type": "string"},
-        "image": {"type": "string"},
-        "ipc": {"type": "string"},
-        "labels": {"$ref": "#/definitions/list_or_dict"},
-        "links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-
-        "logging": {
-            "type": "object",
-
-            "properties": {
-                "driver": {"type": "string"},
-                "options": {"type": "object"}
-            },
-            "additionalProperties": false
-        },
-
-        "mac_address": {"type": "string"},
-        "mem_limit": {"type": ["number", "string"]},
-        "memswap_limit": {"type": ["number", "string"]},
-        "network_mode": {"type": "string"},
-
-        "networks": {
-          "oneOf": [
-            {"$ref": "#/definitions/list_of_strings"},
-            {
-              "type": "object",
-              "patternProperties": {
-                "^[a-zA-Z0-9._-]+$": {
-                  "oneOf": [
-                    {
-                      "type": "object",
-                      "properties": {
-                        "aliases": {"$ref": "#/definitions/list_of_strings"},
-                        "ipv4_address": {"type": "string"},
-                        "ipv6_address": {"type": "string"}
-                      },
-                      "additionalProperties": false
-                    },
-                    {"type": "null"}
-                  ]
-                }
-              },
-              "additionalProperties": false
-            }
-          ]
-        },
-        "pid": {"type": ["string", "null"]},
-
-        "ports": {
-          "type": "array",
-          "items": {
-            "type": ["string", "number"],
-            "format": "ports"
-          },
-          "uniqueItems": true
-        },
-
-        "privileged": {"type": "boolean"},
-        "read_only": {"type": "boolean"},
-        "restart": {"type": "string"},
-        "security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "shm_size": {"type": ["number", "string"]},
-        "stdin_open": {"type": "boolean"},
-        "stop_signal": {"type": "string"},
-        "tmpfs": {"$ref": "#/definitions/string_or_list"},
-        "tty": {"type": "boolean"},
-        "ulimits": {
-          "type": "object",
-          "patternProperties": {
-            "^[a-z]+$": {
-              "oneOf": [
-                {"type": "integer"},
-                {
-                  "type":"object",
-                  "properties": {
-                    "hard": {"type": "integer"},
-                    "soft": {"type": "integer"}
-                  },
-                  "required": ["soft", "hard"],
-                  "additionalProperties": false
-                }
-              ]
-            }
-          }
-        },
-        "user": {"type": "string"},
-        "volumes": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "volume_driver": {"type": "string"},
-        "volumes_from": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
-        "working_dir": {"type": "string"}
-      },
-
-      "dependencies": {
-        "memswap_limit": ["mem_limit"]
-      },
-      "additionalProperties": false
-    },
-
-    "network": {
-      "id": "#/definitions/network",
-      "type": "object",
-      "properties": {
-        "driver": {"type": "string"},
-        "driver_opts": {
-          "type": "object",
-          "patternProperties": {
-            "^.+$": {"type": ["string", "number"]}
-          }
-        },
-        "ipam": {
-            "type": "object",
-            "properties": {
-                "driver": {"type": "string"},
-                "config": {
-                    "type": "array"
-                }
-            },
-            "additionalProperties": false
-        },
-        "external": {
-          "type": ["boolean", "object"],
-          "properties": {
-            "name": {"type": "string"}
-          },
-          "additionalProperties": false
-        }
-      },
-      "additionalProperties": false
-    },
-
-    "volume": {
-      "id": "#/definitions/volume",
-      "type": ["object", "null"],
-      "properties": {
-        "driver": {"type": "string"},
-        "driver_opts": {
-          "type": "object",
-          "patternProperties": {
-            "^.+$": {"type": ["string", "number"]}
-          }
-        },
-        "external": {
-          "type": ["boolean", "object"],
-          "properties": {
-            "name": {"type": "string"}
-          }
-        },
-        "additionalProperties": false
-      },
-      "additionalProperties": false
-    },
-
-    "string_or_list": {
-      "oneOf": [
-        {"type": "string"},
-        {"$ref": "#/definitions/list_of_strings"}
-      ]
-    },
-
-    "list_of_strings": {
-      "type": "array",
-      "items": {"type": "string"},
-      "uniqueItems": true
-    },
-
-    "list_or_dict": {
-      "oneOf": [
-        {
-          "type": "object",
-          "patternProperties": {
-            ".+": {
-              "type": ["string", "number", "null"]
-            }
-          },
-          "additionalProperties": false
-        },
-        {"type": "array", "items": {"type": "string"}, "uniqueItems": true}
-      ]
-    },
-
-    "constraints": {
-      "service": {
-        "id": "#/definitions/constraints/service",
-        "anyOf": [
-          {"required": ["build"]},
-          {"required": ["image"]}
-        ],
-        "properties": {
-          "build": {
-            "required": ["context"]
-          }
-        }
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/environment.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/environment.py b/env2/lib/python2.7/site-packages/compose/config/environment.py
deleted file mode 100644
index 5d6b5af..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/environment.py
+++ /dev/null
@@ -1,107 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import codecs
-import logging
-import os
-
-import six
-
-from ..const import IS_WINDOWS_PLATFORM
-from .errors import ConfigurationError
-
-log = logging.getLogger(__name__)
-
-
-def split_env(env):
-    if isinstance(env, six.binary_type):
-        env = env.decode('utf-8', 'replace')
-    if '=' in env:
-        return env.split('=', 1)
-    else:
-        return env, None
-
-
-def env_vars_from_file(filename):
-    """
-    Read in a line delimited file of environment variables.
-    """
-    if not os.path.exists(filename):
-        raise ConfigurationError("Couldn't find env file: %s" % filename)
-    elif not os.path.isfile(filename):
-        raise ConfigurationError("%s is not a file." % (filename))
-    env = {}
-    for line in codecs.open(filename, 'r', 'utf-8'):
-        line = line.strip()
-        if line and not line.startswith('#'):
-            k, v = split_env(line)
-            env[k] = v
-    return env
-
-
-class Environment(dict):
-    def __init__(self, *args, **kwargs):
-        super(Environment, self).__init__(*args, **kwargs)
-        self.missing_keys = []
-
-    @classmethod
-    def from_env_file(cls, base_dir):
-        def _initialize():
-            result = cls()
-            if base_dir is None:
-                return result
-            env_file_path = os.path.join(base_dir, '.env')
-            try:
-                return cls(env_vars_from_file(env_file_path))
-            except ConfigurationError:
-                pass
-            return result
-        instance = _initialize()
-        instance.update(os.environ)
-        return instance
-
-    @classmethod
-    def from_command_line(cls, parsed_env_opts):
-        result = cls()
-        for k, v in parsed_env_opts.items():
-            # Values from the command line take priority, unless they're unset
-            # in which case they take the value from the system's environment
-            if v is None and k in os.environ:
-                result[k] = os.environ[k]
-            else:
-                result[k] = v
-        return result
-
-    def __getitem__(self, key):
-        try:
-            return super(Environment, self).__getitem__(key)
-        except KeyError:
-            if IS_WINDOWS_PLATFORM:
-                try:
-                    return super(Environment, self).__getitem__(key.upper())
-                except KeyError:
-                    pass
-            if key not in self.missing_keys:
-                log.warn(
-                    "The {} variable is not set. Defaulting to a blank string."
-                    .format(key)
-                )
-                self.missing_keys.append(key)
-
-            return ""
-
-    def __contains__(self, key):
-        result = super(Environment, self).__contains__(key)
-        if IS_WINDOWS_PLATFORM:
-            return (
-                result or super(Environment, self).__contains__(key.upper())
-            )
-        return result
-
-    def get(self, key, *args, **kwargs):
-        if IS_WINDOWS_PLATFORM:
-            return super(Environment, self).get(
-                key,
-                super(Environment, self).get(key.upper(), *args, **kwargs)
-            )
-        return super(Environment, self).get(key, *args, **kwargs)

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/errors.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/errors.py b/env2/lib/python2.7/site-packages/compose/config/errors.py
deleted file mode 100644
index d14cbbd..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/errors.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-
-VERSION_EXPLANATION = (
-    'You might be seeing this error because you\'re using the wrong Compose '
-    'file version. Either specify a version of "2" (or "2.0") and place your '
-    'service definitions under the `services` key, or omit the `version` key '
-    'and place your service definitions at the root of the file to use '
-    'version 1.\nFor more on the Compose file format versions, see '
-    'https://docs.docker.com/compose/compose-file/')
-
-
-class ConfigurationError(Exception):
-    def __init__(self, msg):
-        self.msg = msg
-
-    def __str__(self):
-        return self.msg
-
-
-class DependencyError(ConfigurationError):
-    pass
-
-
-class CircularReference(ConfigurationError):
-    def __init__(self, trail):
-        self.trail = trail
-
-    @property
-    def msg(self):
-        lines = [
-            "{} in {}".format(service_name, filename)
-            for (filename, service_name) in self.trail
-        ]
-        return "Circular reference:\n  {}".format("\n  extends ".join(lines))
-
-
-class ComposeFileNotFound(ConfigurationError):
-    def __init__(self, supported_filenames):
-        super(ComposeFileNotFound, self).__init__("""
-        Can't find a suitable configuration file in this directory or any
-        parent. Are you in the right directory?
-
-        Supported filenames: %s
-        """ % ", ".join(supported_filenames))

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/interpolation.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/interpolation.py b/env2/lib/python2.7/site-packages/compose/config/interpolation.py
deleted file mode 100644
index 63020d9..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/interpolation.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import logging
-from string import Template
-
-import six
-
-from .errors import ConfigurationError
-log = logging.getLogger(__name__)
-
-
-def interpolate_environment_variables(config, section, environment):
-
-    def process_item(name, config_dict):
-        return dict(
-            (key, interpolate_value(name, key, val, section, environment))
-            for key, val in (config_dict or {}).items()
-        )
-
-    return dict(
-        (name, process_item(name, config_dict or {}))
-        for name, config_dict in config.items()
-    )
-
-
-def interpolate_value(name, config_key, value, section, mapping):
-    try:
-        return recursive_interpolate(value, mapping)
-    except InvalidInterpolation as e:
-        raise ConfigurationError(
-            'Invalid interpolation format for "{config_key}" option '
-            'in {section} "{name}": "{string}"'.format(
-                config_key=config_key,
-                name=name,
-                section=section,
-                string=e.string))
-
-
-def recursive_interpolate(obj, mapping):
-    if isinstance(obj, six.string_types):
-        return interpolate(obj, mapping)
-    elif isinstance(obj, dict):
-        return dict(
-            (key, recursive_interpolate(val, mapping))
-            for (key, val) in obj.items()
-        )
-    elif isinstance(obj, list):
-        return [recursive_interpolate(val, mapping) for val in obj]
-    else:
-        return obj
-
-
-def interpolate(string, mapping):
-    try:
-        return Template(string).substitute(mapping)
-    except ValueError:
-        raise InvalidInterpolation(string)
-
-
-class InvalidInterpolation(Exception):
-    def __init__(self, string):
-        self.string = string

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/serialize.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/serialize.py b/env2/lib/python2.7/site-packages/compose/config/serialize.py
deleted file mode 100644
index b788a55..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/serialize.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import six
-import yaml
-
-from compose.config import types
-from compose.config.config import V1
-from compose.config.config import V2_0
-
-
-def serialize_config_type(dumper, data):
-    representer = dumper.represent_str if six.PY3 else dumper.represent_unicode
-    return representer(data.repr())
-
-
-yaml.SafeDumper.add_representer(types.VolumeFromSpec, serialize_config_type)
-yaml.SafeDumper.add_representer(types.VolumeSpec, serialize_config_type)
-
-
-def denormalize_config(config):
-    denormalized_services = [
-        denormalize_service_dict(service_dict, config.version)
-        for service_dict in config.services
-    ]
-    services = {
-        service_dict.pop('name'): service_dict
-        for service_dict in denormalized_services
-    }
-    networks = config.networks.copy()
-    for net_name, net_conf in networks.items():
-        if 'external_name' in net_conf:
-            del net_conf['external_name']
-
-    return {
-        'version': V2_0,
-        'services': services,
-        'networks': networks,
-        'volumes': config.volumes,
-    }
-
-
-def serialize_config(config):
-    return yaml.safe_dump(
-        denormalize_config(config),
-        default_flow_style=False,
-        indent=2,
-        width=80)
-
-
-def denormalize_service_dict(service_dict, version):
-    service_dict = service_dict.copy()
-
-    if 'restart' in service_dict:
-        service_dict['restart'] = types.serialize_restart_spec(service_dict['restart'])
-
-    if version == V1 and 'network_mode' not in service_dict:
-        service_dict['network_mode'] = 'bridge'
-
-    return service_dict

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/sort_services.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/sort_services.py b/env2/lib/python2.7/site-packages/compose/config/sort_services.py
deleted file mode 100644
index 20ac446..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/sort_services.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-from compose.config.errors import DependencyError
-
-
-def get_service_name_from_network_mode(network_mode):
-    return get_source_name_from_network_mode(network_mode, 'service')
-
-
-def get_container_name_from_network_mode(network_mode):
-    return get_source_name_from_network_mode(network_mode, 'container')
-
-
-def get_source_name_from_network_mode(network_mode, source_type):
-    if not network_mode:
-        return
-
-    if not network_mode.startswith(source_type+':'):
-        return
-
-    _, net_name = network_mode.split(':', 1)
-    return net_name
-
-
-def get_service_names(links):
-    return [link.split(':')[0] for link in links]
-
-
-def get_service_names_from_volumes_from(volumes_from):
-    return [volume_from.source for volume_from in volumes_from]
-
-
-def get_service_dependents(service_dict, services):
-    name = service_dict['name']
-    return [
-        service for service in services
-        if (name in get_service_names(service.get('links', [])) or
-            name in get_service_names_from_volumes_from(service.get('volumes_from', [])) or
-            name == get_service_name_from_network_mode(service.get('network_mode')) or
-            name in service.get('depends_on', []))
-    ]
-
-
-def sort_service_dicts(services):
-    # Topological sort (Cormen/Tarjan algorithm).
-    unmarked = services[:]
-    temporary_marked = set()
-    sorted_services = []
-
-    def visit(n):
-        if n['name'] in temporary_marked:
-            if n['name'] in get_service_names(n.get('links', [])):
-                raise DependencyError('A service can not link to itself: %s' % n['name'])
-            if n['name'] in n.get('volumes_from', []):
-                raise DependencyError('A service can not mount itself as volume: %s' % n['name'])
-            if n['name'] in n.get('depends_on', []):
-                raise DependencyError('A service can not depend on itself: %s' % n['name'])
-            raise DependencyError('Circular dependency between %s' % ' and '.join(temporary_marked))
-
-        if n in unmarked:
-            temporary_marked.add(n['name'])
-            for m in get_service_dependents(n, services):
-                visit(m)
-            temporary_marked.remove(n['name'])
-            unmarked.remove(n)
-            sorted_services.insert(0, n)
-
-    while unmarked:
-        visit(unmarked[-1])
-
-    return sorted_services

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/types.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/types.py b/env2/lib/python2.7/site-packages/compose/config/types.py
deleted file mode 100644
index e6a3dea..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/types.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-Types for objects parsed from the configuration.
-"""
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import os
-from collections import namedtuple
-
-import six
-
-from compose.config.config import V1
-from compose.config.errors import ConfigurationError
-from compose.const import IS_WINDOWS_PLATFORM
-
-
-class VolumeFromSpec(namedtuple('_VolumeFromSpec', 'source mode type')):
-
-    # TODO: drop service_names arg when v1 is removed
-    @classmethod
-    def parse(cls, volume_from_config, service_names, version):
-        func = cls.parse_v1 if version == V1 else cls.parse_v2
-        return func(service_names, volume_from_config)
-
-    @classmethod
-    def parse_v1(cls, service_names, volume_from_config):
-        parts = volume_from_config.split(':')
-        if len(parts) > 2:
-            raise ConfigurationError(
-                "volume_from {} has incorrect format, should be "
-                "service[:mode]".format(volume_from_config))
-
-        if len(parts) == 1:
-            source = parts[0]
-            mode = 'rw'
-        else:
-            source, mode = parts
-
-        type = 'service' if source in service_names else 'container'
-        return cls(source, mode, type)
-
-    @classmethod
-    def parse_v2(cls, service_names, volume_from_config):
-        parts = volume_from_config.split(':')
-        if len(parts) > 3:
-            raise ConfigurationError(
-                "volume_from {} has incorrect format, should be one of "
-                "'<service name>[:<mode>]' or "
-                "'container:<container name>[:<mode>]'".format(volume_from_config))
-
-        if len(parts) == 1:
-            source = parts[0]
-            return cls(source, 'rw', 'service')
-
-        if len(parts) == 2:
-            if parts[0] == 'container':
-                type, source = parts
-                return cls(source, 'rw', type)
-
-            source, mode = parts
-            return cls(source, mode, 'service')
-
-        if len(parts) == 3:
-            type, source, mode = parts
-            if type not in ('service', 'container'):
-                raise ConfigurationError(
-                    "Unknown volumes_from type '{}' in '{}'".format(
-                        type,
-                        volume_from_config))
-
-        return cls(source, mode, type)
-
-    def repr(self):
-        return '{v.type}:{v.source}:{v.mode}'.format(v=self)
-
-
-def parse_restart_spec(restart_config):
-    if not restart_config:
-        return None
-    parts = restart_config.split(':')
-    if len(parts) > 2:
-        raise ConfigurationError(
-            "Restart %s has incorrect format, should be "
-            "mode[:max_retry]" % restart_config)
-    if len(parts) == 2:
-        name, max_retry_count = parts
-    else:
-        name, = parts
-        max_retry_count = 0
-
-    return {'Name': name, 'MaximumRetryCount': int(max_retry_count)}
-
-
-def serialize_restart_spec(restart_spec):
-    parts = [restart_spec['Name']]
-    if restart_spec['MaximumRetryCount']:
-        parts.append(six.text_type(restart_spec['MaximumRetryCount']))
-    return ':'.join(parts)
-
-
-def parse_extra_hosts(extra_hosts_config):
-    if not extra_hosts_config:
-        return {}
-
-    if isinstance(extra_hosts_config, dict):
-        return dict(extra_hosts_config)
-
-    if isinstance(extra_hosts_config, list):
-        extra_hosts_dict = {}
-        for extra_hosts_line in extra_hosts_config:
-            # TODO: validate string contains ':' ?
-            host, ip = extra_hosts_line.split(':', 1)
-            extra_hosts_dict[host.strip()] = ip.strip()
-        return extra_hosts_dict
-
-
-def normalize_paths_for_engine(external_path, internal_path):
-    """Windows paths, c:\my\path\shiny, need to be changed to be compatible with
-    the Engine. Volume paths are expected to be linux style /c/my/path/shiny/
-    """
-    if not IS_WINDOWS_PLATFORM:
-        return external_path, internal_path
-
-    if external_path:
-        drive, tail = os.path.splitdrive(external_path)
-
-        if drive:
-            external_path = '/' + drive.lower().rstrip(':') + tail
-
-        external_path = external_path.replace('\\', '/')
-
-    return external_path, internal_path.replace('\\', '/')
-
-
-class VolumeSpec(namedtuple('_VolumeSpec', 'external internal mode')):
-
-    @classmethod
-    def parse(cls, volume_config):
-        """Parse a volume_config path and split it into external:internal[:mode]
-        parts to be returned as a valid VolumeSpec.
-        """
-        if IS_WINDOWS_PLATFORM:
-            # relative paths in windows expand to include the drive, eg C:\
-            # so we join the first 2 parts back together to count as one
-            drive, tail = os.path.splitdrive(volume_config)
-            parts = tail.split(":")
-
-            if drive:
-                parts[0] = drive + parts[0]
-        else:
-            parts = volume_config.split(':')
-
-        if len(parts) > 3:
-            raise ConfigurationError(
-                "Volume %s has incorrect format, should be "
-                "external:internal[:mode]" % volume_config)
-
-        if len(parts) == 1:
-            external, internal = normalize_paths_for_engine(
-                None,
-                os.path.normpath(parts[0]))
-        else:
-            external, internal = normalize_paths_for_engine(
-                os.path.normpath(parts[0]),
-                os.path.normpath(parts[1]))
-
-        mode = 'rw'
-        if len(parts) == 3:
-            mode = parts[2]
-
-        return cls(external, internal, mode)
-
-    def repr(self):
-        external = self.external + ':' if self.external else ''
-        return '{ext}{v.internal}:{v.mode}'.format(ext=external, v=self)
-
-    @property
-    def is_named_volume(self):
-        return self.external and not self.external.startswith(('.', '/', '~'))
-
-
-class ServiceLink(namedtuple('_ServiceLink', 'target alias')):
-
-    @classmethod
-    def parse(cls, link_spec):
-        target, _, alias = link_spec.partition(':')
-        if not alias:
-            alias = target
-        return cls(target, alias)
-
-    def repr(self):
-        if self.target == self.alias:
-            return self.target
-        return '{s.target}:{s.alias}'.format(s=self)
-
-    @property
-    def merge_field(self):
-        return self.alias

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/config/validation.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/config/validation.py b/env2/lib/python2.7/site-packages/compose/config/validation.py
deleted file mode 100644
index 7452e98..0000000
--- a/env2/lib/python2.7/site-packages/compose/config/validation.py
+++ /dev/null
@@ -1,421 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import json
-import logging
-import os
-import re
-import sys
-
-import six
-from docker.utils.ports import split_port
-from jsonschema import Draft4Validator
-from jsonschema import FormatChecker
-from jsonschema import RefResolver
-from jsonschema import ValidationError
-
-from ..const import COMPOSEFILE_V1 as V1
-from .errors import ConfigurationError
-from .errors import VERSION_EXPLANATION
-from .sort_services import get_service_name_from_network_mode
-
-
-log = logging.getLogger(__name__)
-
-
-DOCKER_CONFIG_HINTS = {
-    'cpu_share': 'cpu_shares',
-    'add_host': 'extra_hosts',
-    'hosts': 'extra_hosts',
-    'extra_host': 'extra_hosts',
-    'device': 'devices',
-    'link': 'links',
-    'memory_swap': 'memswap_limit',
-    'port': 'ports',
-    'privilege': 'privileged',
-    'priviliged': 'privileged',
-    'privilige': 'privileged',
-    'volume': 'volumes',
-    'workdir': 'working_dir',
-}
-
-
-VALID_NAME_CHARS = '[a-zA-Z0-9\._\-]'
-VALID_EXPOSE_FORMAT = r'^\d+(\-\d+)?(\/[a-zA-Z]+)?$'
-
-
-@FormatChecker.cls_checks(format="ports", raises=ValidationError)
-def format_ports(instance):
-    try:
-        split_port(instance)
-    except ValueError as e:
-        raise ValidationError(six.text_type(e))
-    return True
-
-
-@FormatChecker.cls_checks(format="expose", raises=ValidationError)
-def format_expose(instance):
-    if isinstance(instance, six.string_types):
-        if not re.match(VALID_EXPOSE_FORMAT, instance):
-            raise ValidationError(
-                "should be of the format 'PORT[/PROTOCOL]'")
-
-    return True
-
-
-def match_named_volumes(service_dict, project_volumes):
-    service_volumes = service_dict.get('volumes', [])
-    for volume_spec in service_volumes:
-        if volume_spec.is_named_volume and volume_spec.external not in project_volumes:
-            raise ConfigurationError(
-                'Named volume "{0}" is used in service "{1}" but no'
-                ' declaration was found in the volumes section.'.format(
-                    volume_spec.repr(), service_dict.get('name')
-                )
-            )
-
-
-def python_type_to_yaml_type(type_):
-    type_name = type(type_).__name__
-    return {
-        'dict': 'mapping',
-        'list': 'array',
-        'int': 'number',
-        'float': 'number',
-        'bool': 'boolean',
-        'unicode': 'string',
-        'str': 'string',
-        'bytes': 'string',
-    }.get(type_name, type_name)
-
-
-def validate_config_section(filename, config, section):
-    """Validate the structure of a configuration section. This must be done
-    before interpolation so it's separate from schema validation.
-    """
-    if not isinstance(config, dict):
-        raise ConfigurationError(
-            "In file '{filename}', {section} must be a mapping, not "
-            "{type}.".format(
-                filename=filename,
-                section=section,
-                type=anglicize_json_type(python_type_to_yaml_type(config))))
-
-    for key, value in config.items():
-        if not isinstance(key, six.string_types):
-            raise ConfigurationError(
-                "In file '{filename}', the {section} name {name} must be a "
-                "quoted string, i.e. '{name}'.".format(
-                    filename=filename,
-                    section=section,
-                    name=key))
-
-        if not isinstance(value, (dict, type(None))):
-            raise ConfigurationError(
-                "In file '{filename}', {section} '{name}' must be a mapping not "
-                "{type}.".format(
-                    filename=filename,
-                    section=section,
-                    name=key,
-                    type=anglicize_json_type(python_type_to_yaml_type(value))))
-
-
-def validate_top_level_object(config_file):
-    if not isinstance(config_file.config, dict):
-        raise ConfigurationError(
-            "Top level object in '{}' needs to be an object not '{}'.".format(
-                config_file.filename,
-                type(config_file.config)))
-
-
-def validate_ulimits(service_config):
-    ulimit_config = service_config.config.get('ulimits', {})
-    for limit_name, soft_hard_values in six.iteritems(ulimit_config):
-        if isinstance(soft_hard_values, dict):
-            if not soft_hard_values['soft'] <= soft_hard_values['hard']:
-                raise ConfigurationError(
-                    "Service '{s.name}' has invalid ulimit '{ulimit}'. "
-                    "'soft' value can not be greater than 'hard' value ".format(
-                        s=service_config,
-                        ulimit=ulimit_config))
-
-
-def validate_extends_file_path(service_name, extends_options, filename):
-    """
-    The service to be extended must either be defined in the config key 'file',
-    or within 'filename'.
-    """
-    error_prefix = "Invalid 'extends' configuration for %s:" % service_name
-
-    if 'file' not in extends_options and filename is None:
-        raise ConfigurationError(
-            "%s you need to specify a 'file', e.g. 'file: something.yml'" % error_prefix
-        )
-
-
-def validate_network_mode(service_config, service_names):
-    network_mode = service_config.config.get('network_mode')
-    if not network_mode:
-        return
-
-    if 'networks' in service_config.config:
-        raise ConfigurationError("'network_mode' and 'networks' cannot be combined")
-
-    dependency = get_service_name_from_network_mode(network_mode)
-    if not dependency:
-        return
-
-    if dependency not in service_names:
-        raise ConfigurationError(
-            "Service '{s.name}' uses the network stack of service '{dep}' which "
-            "is undefined.".format(s=service_config, dep=dependency))
-
-
-def validate_links(service_config, service_names):
-    for link in service_config.config.get('links', []):
-        if link.split(':')[0] not in service_names:
-            raise ConfigurationError(
-                "Service '{s.name}' has a link to service '{link}' which is "
-                "undefined.".format(s=service_config, link=link))
-
-
-def validate_depends_on(service_config, service_names):
-    for dependency in service_config.config.get('depends_on', []):
-        if dependency not in service_names:
-            raise ConfigurationError(
-                "Service '{s.name}' depends on service '{dep}' which is "
-                "undefined.".format(s=service_config, dep=dependency))
-
-
-def get_unsupported_config_msg(path, error_key):
-    msg = "Unsupported config option for {}: '{}'".format(path_string(path), error_key)
-    if error_key in DOCKER_CONFIG_HINTS:
-        msg += " (did you mean '{}'?)".format(DOCKER_CONFIG_HINTS[error_key])
-    return msg
-
-
-def anglicize_json_type(json_type):
-    if json_type.startswith(('a', 'e', 'i', 'o', 'u')):
-        return 'an ' + json_type
-    return 'a ' + json_type
-
-
-def is_service_dict_schema(schema_id):
-    return schema_id in ('config_schema_v1.json',  '#/properties/services')
-
-
-def handle_error_for_schema_with_id(error, path):
-    schema_id = error.schema['id']
-
-    if is_service_dict_schema(schema_id) and error.validator == 'additionalProperties':
-        return "Invalid service name '{}' - only {} characters are allowed".format(
-            # The service_name is the key to the json object
-            list(error.instance)[0],
-            VALID_NAME_CHARS)
-
-    if error.validator == 'additionalProperties':
-        if schema_id == '#/definitions/service':
-            invalid_config_key = parse_key_from_error_msg(error)
-            return get_unsupported_config_msg(path, invalid_config_key)
-
-        if not error.path:
-            return '{}\n\n{}'.format(error.message, VERSION_EXPLANATION)
-
-
-def handle_generic_error(error, path):
-    msg_format = None
-    error_msg = error.message
-
-    if error.validator == 'oneOf':
-        msg_format = "{path} {msg}"
-        config_key, error_msg = _parse_oneof_validator(error)
-        if config_key:
-            path.append(config_key)
-
-    elif error.validator == 'type':
-        msg_format = "{path} contains an invalid type, it should be {msg}"
-        error_msg = _parse_valid_types_from_validator(error.validator_value)
-
-    elif error.validator == 'required':
-        error_msg = ", ".join(error.validator_value)
-        msg_format = "{path} is invalid, {msg} is required."
-
-    elif error.validator == 'dependencies':
-        config_key = list(error.validator_value.keys())[0]
-        required_keys = ",".join(error.validator_value[config_key])
-
-        msg_format = "{path} is invalid: {msg}"
-        path.append(config_key)
-        error_msg = "when defining '{}' you must set '{}' as well".format(
-            config_key,
-            required_keys)
-
-    elif error.cause:
-        error_msg = six.text_type(error.cause)
-        msg_format = "{path} is invalid: {msg}"
-
-    elif error.path:
-        msg_format = "{path} value {msg}"
-
-    if msg_format:
-        return msg_format.format(path=path_string(path), msg=error_msg)
-
-    return error.message
-
-
-def parse_key_from_error_msg(error):
-    return error.message.split("'")[1]
-
-
-def path_string(path):
-    return ".".join(c for c in path if isinstance(c, six.string_types))
-
-
-def _parse_valid_types_from_validator(validator):
-    """A validator value can be either an array of valid types or a string of
-    a valid type. Parse the valid types and prefix with the correct article.
-    """
-    if not isinstance(validator, list):
-        return anglicize_json_type(validator)
-
-    if len(validator) == 1:
-        return anglicize_json_type(validator[0])
-
-    return "{}, or {}".format(
-        ", ".join([anglicize_json_type(validator[0])] + validator[1:-1]),
-        anglicize_json_type(validator[-1]))
-
-
-def _parse_oneof_validator(error):
-    """oneOf has multiple schemas, so we need to reason about which schema, sub
-    schema or constraint the validation is failing on.
-    Inspecting the context value of a ValidationError gives us information about
-    which sub schema failed and which kind of error it is.
-    """
-    types = []
-    for context in error.context:
-
-        if context.validator == 'oneOf':
-            _, error_msg = _parse_oneof_validator(context)
-            return path_string(context.path), error_msg
-
-        if context.validator == 'required':
-            return (None, context.message)
-
-        if context.validator == 'additionalProperties':
-            invalid_config_key = parse_key_from_error_msg(context)
-            return (None, "contains unsupported option: '{}'".format(invalid_config_key))
-
-        if context.path:
-            return (
-                path_string(context.path),
-                "contains {}, which is an invalid type, it should be {}".format(
-                    json.dumps(context.instance),
-                    _parse_valid_types_from_validator(context.validator_value)),
-            )
-
-        if context.validator == 'uniqueItems':
-            return (
-                None,
-                "contains non unique items, please remove duplicates from {}".format(
-                    context.instance),
-            )
-
-        if context.validator == 'type':
-            types.append(context.validator_value)
-
-    valid_types = _parse_valid_types_from_validator(types)
-    return (None, "contains an invalid type, it should be {}".format(valid_types))
-
-
-def process_service_constraint_errors(error, service_name, version):
-    if version == V1:
-        if 'image' in error.instance and 'build' in error.instance:
-            return (
-                "Service {} has both an image and build path specified. "
-                "A service can either be built to image or use an existing "
-                "image, not both.".format(service_name))
-
-        if 'image' in error.instance and 'dockerfile' in error.instance:
-            return (
-                "Service {} has both an image and alternate Dockerfile. "
-                "A service can either be built to image or use an existing "
-                "image, not both.".format(service_name))
-
-    if 'image' not in error.instance and 'build' not in error.instance:
-        return (
-            "Service {} has neither an image nor a build context specified. "
-            "At least one must be provided.".format(service_name))
-
-
-def process_config_schema_errors(error):
-    path = list(error.path)
-
-    if 'id' in error.schema:
-        error_msg = handle_error_for_schema_with_id(error, path)
-        if error_msg:
-            return error_msg
-
-    return handle_generic_error(error, path)
-
-
-def validate_against_config_schema(config_file):
-    schema = load_jsonschema(config_file.version)
-    format_checker = FormatChecker(["ports", "expose"])
-    validator = Draft4Validator(
-        schema,
-        resolver=RefResolver(get_resolver_path(), schema),
-        format_checker=format_checker)
-    handle_errors(
-        validator.iter_errors(config_file.config),
-        process_config_schema_errors,
-        config_file.filename)
-
-
-def validate_service_constraints(config, service_name, version):
-    def handler(errors):
-        return process_service_constraint_errors(errors, service_name, version)
-
-    schema = load_jsonschema(version)
-    validator = Draft4Validator(schema['definitions']['constraints']['service'])
-    handle_errors(validator.iter_errors(config), handler, None)
-
-
-def get_schema_path():
-    return os.path.dirname(os.path.abspath(__file__))
-
-
-def load_jsonschema(version):
-    filename = os.path.join(
-        get_schema_path(),
-        "config_schema_v{0}.json".format(version))
-
-    with open(filename, "r") as fh:
-        return json.load(fh)
-
-
-def get_resolver_path():
-    schema_path = get_schema_path()
-    if sys.platform == "win32":
-        scheme = "///"
-        # TODO: why is this necessary?
-        schema_path = schema_path.replace('\\', '/')
-    else:
-        scheme = "//"
-    return "file:{}{}/".format(scheme, schema_path)
-
-
-def handle_errors(errors, format_error_func, filename):
-    """jsonschema returns an error tree full of information to explain what has
-    gone wrong. Process each error and pull out relevant information and re-write
-    helpful error messages that are relevant.
-    """
-    errors = list(sorted(errors, key=str))
-    if not errors:
-        return
-
-    error_msg = '\n'.join(format_error_func(error) for error in errors)
-    raise ConfigurationError(
-        "The Compose file{file_msg} is invalid because:\n{error_msg}".format(
-            file_msg=" '{}'".format(filename) if filename else "",
-            error_msg=error_msg))

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/const.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/const.py b/env2/lib/python2.7/site-packages/compose/const.py
deleted file mode 100644
index b930e0b..0000000
--- a/env2/lib/python2.7/site-packages/compose/const.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import sys
-
-DEFAULT_TIMEOUT = 10
-HTTP_TIMEOUT = 60
-IMAGE_EVENTS = ['delete', 'import', 'pull', 'push', 'tag', 'untag']
-IS_WINDOWS_PLATFORM = (sys.platform == "win32")
-LABEL_CONTAINER_NUMBER = 'com.docker.compose.container-number'
-LABEL_ONE_OFF = 'com.docker.compose.oneoff'
-LABEL_PROJECT = 'com.docker.compose.project'
-LABEL_SERVICE = 'com.docker.compose.service'
-LABEL_VERSION = 'com.docker.compose.version'
-LABEL_CONFIG_HASH = 'com.docker.compose.config-hash'
-
-COMPOSEFILE_V1 = '1'
-COMPOSEFILE_V2_0 = '2.0'
-
-API_VERSIONS = {
-    COMPOSEFILE_V1: '1.21',
-    COMPOSEFILE_V2_0: '1.22',
-}
-
-API_VERSION_TO_ENGINE_VERSION = {
-    API_VERSIONS[COMPOSEFILE_V1]: '1.9.0',
-    API_VERSIONS[COMPOSEFILE_V2_0]: '1.10.0'
-}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/container.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/container.py b/env2/lib/python2.7/site-packages/compose/container.py
deleted file mode 100644
index 2c16863..0000000
--- a/env2/lib/python2.7/site-packages/compose/container.py
+++ /dev/null
@@ -1,272 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-from functools import reduce
-
-import six
-
-from .const import LABEL_CONTAINER_NUMBER
-from .const import LABEL_PROJECT
-from .const import LABEL_SERVICE
-
-
-class Container(object):
-    """
-    Represents a Docker container, constructed from the output of
-    GET /containers/:id:/json.
-    """
-    def __init__(self, client, dictionary, has_been_inspected=False):
-        self.client = client
-        self.dictionary = dictionary
-        self.has_been_inspected = has_been_inspected
-        self.log_stream = None
-
-    @classmethod
-    def from_ps(cls, client, dictionary, **kwargs):
-        """
-        Construct a container object from the output of GET /containers/json.
-        """
-        name = get_container_name(dictionary)
-        if name is None:
-            return None
-
-        new_dictionary = {
-            'Id': dictionary['Id'],
-            'Image': dictionary['Image'],
-            'Name': '/' + name,
-        }
-        return cls(client, new_dictionary, **kwargs)
-
-    @classmethod
-    def from_id(cls, client, id):
-        return cls(client, client.inspect_container(id), has_been_inspected=True)
-
-    @classmethod
-    def create(cls, client, **options):
-        response = client.create_container(**options)
-        return cls.from_id(client, response['Id'])
-
-    @property
-    def id(self):
-        return self.dictionary['Id']
-
-    @property
-    def image(self):
-        return self.dictionary['Image']
-
-    @property
-    def image_config(self):
-        return self.client.inspect_image(self.image)
-
-    @property
-    def short_id(self):
-        return self.id[:12]
-
-    @property
-    def name(self):
-        return self.dictionary['Name'][1:]
-
-    @property
-    def service(self):
-        return self.labels.get(LABEL_SERVICE)
-
-    @property
-    def name_without_project(self):
-        project = self.labels.get(LABEL_PROJECT)
-
-        if self.name.startswith('{0}_{1}'.format(project, self.service)):
-            return '{0}_{1}'.format(self.service, self.number)
-        else:
-            return self.name
-
-    @property
-    def number(self):
-        number = self.labels.get(LABEL_CONTAINER_NUMBER)
-        if not number:
-            raise ValueError("Container {0} does not have a {1} label".format(
-                self.short_id, LABEL_CONTAINER_NUMBER))
-        return int(number)
-
-    @property
-    def ports(self):
-        self.inspect_if_not_inspected()
-        return self.get('NetworkSettings.Ports') or {}
-
-    @property
-    def human_readable_ports(self):
-        def format_port(private, public):
-            if not public:
-                return private
-            return '{HostIp}:{HostPort}->{private}'.format(
-                private=private, **public[0])
-
-        return ', '.join(format_port(*item)
-                         for item in sorted(six.iteritems(self.ports)))
-
-    @property
-    def labels(self):
-        return self.get('Config.Labels') or {}
-
-    @property
-    def stop_signal(self):
-        return self.get('Config.StopSignal')
-
-    @property
-    def log_config(self):
-        return self.get('HostConfig.LogConfig') or None
-
-    @property
-    def human_readable_state(self):
-        if self.is_paused:
-            return 'Paused'
-        if self.is_restarting:
-            return 'Restarting'
-        if self.is_running:
-            return 'Ghost' if self.get('State.Ghost') else 'Up'
-        else:
-            return 'Exit %s' % self.get('State.ExitCode')
-
-    @property
-    def human_readable_command(self):
-        entrypoint = self.get('Config.Entrypoint') or []
-        cmd = self.get('Config.Cmd') or []
-        return ' '.join(entrypoint + cmd)
-
-    @property
-    def environment(self):
-        def parse_env(var):
-            if '=' in var:
-                return var.split("=", 1)
-            return var, None
-        return dict(parse_env(var) for var in self.get('Config.Env') or [])
-
-    @property
-    def exit_code(self):
-        return self.get('State.ExitCode')
-
-    @property
-    def is_running(self):
-        return self.get('State.Running')
-
-    @property
-    def is_restarting(self):
-        return self.get('State.Restarting')
-
-    @property
-    def is_paused(self):
-        return self.get('State.Paused')
-
-    @property
-    def log_driver(self):
-        return self.get('HostConfig.LogConfig.Type')
-
-    @property
-    def has_api_logs(self):
-        log_type = self.log_driver
-        return not log_type or log_type != 'none'
-
-    def attach_log_stream(self):
-        """A log stream can only be attached if the container uses a json-file
-        log driver.
-        """
-        if self.has_api_logs:
-            self.log_stream = self.attach(stdout=True, stderr=True, stream=True)
-
-    def get(self, key):
-        """Return a value from the container or None if the value is not set.
-
-        :param key: a string using dotted notation for nested dictionary
-                    lookups
-        """
-        self.inspect_if_not_inspected()
-
-        def get_value(dictionary, key):
-            return (dictionary or {}).get(key)
-
-        return reduce(get_value, key.split('.'), self.dictionary)
-
-    def get_local_port(self, port, protocol='tcp'):
-        port = self.ports.get("%s/%s" % (port, protocol))
-        return "{HostIp}:{HostPort}".format(**port[0]) if port else None
-
-    def get_mount(self, mount_dest):
-        for mount in self.get('Mounts'):
-            if mount['Destination'] == mount_dest:
-                return mount
-        return None
-
-    def start(self, **options):
-        return self.client.start(self.id, **options)
-
-    def stop(self, **options):
-        return self.client.stop(self.id, **options)
-
-    def pause(self, **options):
-        return self.client.pause(self.id, **options)
-
-    def unpause(self, **options):
-        return self.client.unpause(self.id, **options)
-
-    def kill(self, **options):
-        return self.client.kill(self.id, **options)
-
-    def restart(self, **options):
-        return self.client.restart(self.id, **options)
-
-    def remove(self, **options):
-        return self.client.remove_container(self.id, **options)
-
-    def create_exec(self, command, **options):
-        return self.client.exec_create(self.id, command, **options)
-
-    def start_exec(self, exec_id, **options):
-        return self.client.exec_start(exec_id, **options)
-
-    def rename_to_tmp_name(self):
-        """Rename the container to a hopefully unique temporary container name
-        by prepending the short id.
-        """
-        self.client.rename(
-            self.id,
-            '%s_%s' % (self.short_id, self.name)
-        )
-
-    def inspect_if_not_inspected(self):
-        if not self.has_been_inspected:
-            self.inspect()
-
-    def wait(self):
-        return self.client.wait(self.id)
-
-    def logs(self, *args, **kwargs):
-        return self.client.logs(self.id, *args, **kwargs)
-
-    def inspect(self):
-        self.dictionary = self.client.inspect_container(self.id)
-        self.has_been_inspected = True
-        return self.dictionary
-
-    def attach(self, *args, **kwargs):
-        return self.client.attach(self.id, *args, **kwargs)
-
-    def __repr__(self):
-        return '<Container: %s (%s)>' % (self.name, self.id[:6])
-
-    def __eq__(self, other):
-        if type(self) != type(other):
-            return False
-        return self.id == other.id
-
-    def __hash__(self):
-        return self.id.__hash__()
-
-
-def get_container_name(container):
-    if not container.get('Name') and not container.get('Names'):
-        return None
-    # inspect
-    if 'Name' in container:
-        return container['Name']
-    # ps
-    shortest_name = min(container['Names'], key=lambda n: len(n.split('/')))
-    return shortest_name.split('/')[-1]

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/errors.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/errors.py b/env2/lib/python2.7/site-packages/compose/errors.py
deleted file mode 100644
index 9f68760..0000000
--- a/env2/lib/python2.7/site-packages/compose/errors.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-
-class OperationFailedError(Exception):
-    def __init__(self, reason):
-        self.msg = reason

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/network.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/network.py b/env2/lib/python2.7/site-packages/compose/network.py
deleted file mode 100644
index affba7c..0000000
--- a/env2/lib/python2.7/site-packages/compose/network.py
+++ /dev/null
@@ -1,190 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import logging
-
-from docker.errors import NotFound
-from docker.utils import create_ipam_config
-from docker.utils import create_ipam_pool
-
-from .config import ConfigurationError
-
-
-log = logging.getLogger(__name__)
-
-
-class Network(object):
-    def __init__(self, client, project, name, driver=None, driver_opts=None,
-                 ipam=None, external_name=None):
-        self.client = client
-        self.project = project
-        self.name = name
-        self.driver = driver
-        self.driver_opts = driver_opts
-        self.ipam = create_ipam_config_from_dict(ipam)
-        self.external_name = external_name
-
-    def ensure(self):
-        if self.external_name:
-            try:
-                self.inspect()
-                log.debug(
-                    'Network {0} declared as external. No new '
-                    'network will be created.'.format(self.name)
-                )
-            except NotFound:
-                raise ConfigurationError(
-                    'Network {name} declared as external, but could'
-                    ' not be found. Please create the network manually'
-                    ' using `{command} {name}` and try again.'.format(
-                        name=self.external_name,
-                        command='docker network create'
-                    )
-                )
-            return
-
-        try:
-            data = self.inspect()
-            if self.driver and data['Driver'] != self.driver:
-                raise ConfigurationError(
-                    'Network "{}" needs to be recreated - driver has changed'
-                    .format(self.full_name))
-            if data['Options'] != (self.driver_opts or {}):
-                raise ConfigurationError(
-                    'Network "{}" needs to be recreated - options have changed'
-                    .format(self.full_name))
-        except NotFound:
-            driver_name = 'the default driver'
-            if self.driver:
-                driver_name = 'driver "{}"'.format(self.driver)
-
-            log.info(
-                'Creating network "{}" with {}'
-                .format(self.full_name, driver_name)
-            )
-
-            self.client.create_network(
-                name=self.full_name,
-                driver=self.driver,
-                options=self.driver_opts,
-                ipam=self.ipam,
-            )
-
-    def remove(self):
-        if self.external_name:
-            log.info("Network %s is external, skipping", self.full_name)
-            return
-
-        log.info("Removing network {}".format(self.full_name))
-        self.client.remove_network(self.full_name)
-
-    def inspect(self):
-        return self.client.inspect_network(self.full_name)
-
-    @property
-    def full_name(self):
-        if self.external_name:
-            return self.external_name
-        return '{0}_{1}'.format(self.project, self.name)
-
-
-def create_ipam_config_from_dict(ipam_dict):
-    if not ipam_dict:
-        return None
-
-    return create_ipam_config(
-        driver=ipam_dict.get('driver'),
-        pool_configs=[
-            create_ipam_pool(
-                subnet=config.get('subnet'),
-                iprange=config.get('ip_range'),
-                gateway=config.get('gateway'),
-                aux_addresses=config.get('aux_addresses'),
-            )
-            for config in ipam_dict.get('config', [])
-        ],
-    )
-
-
-def build_networks(name, config_data, client):
-    network_config = config_data.networks or {}
-    networks = {
-        network_name: Network(
-            client=client, project=name, name=network_name,
-            driver=data.get('driver'),
-            driver_opts=data.get('driver_opts'),
-            ipam=data.get('ipam'),
-            external_name=data.get('external_name'),
-        )
-        for network_name, data in network_config.items()
-    }
-
-    if 'default' not in networks:
-        networks['default'] = Network(client, name, 'default')
-
-    return networks
-
-
-class ProjectNetworks(object):
-
-    def __init__(self, networks, use_networking):
-        self.networks = networks or {}
-        self.use_networking = use_networking
-
-    @classmethod
-    def from_services(cls, services, networks, use_networking):
-        service_networks = {
-            network: networks.get(network)
-            for service in services
-            for network in get_network_names_for_service(service)
-        }
-        unused = set(networks) - set(service_networks) - {'default'}
-        if unused:
-            log.warn(
-                "Some networks were defined but are not used by any service: "
-                "{}".format(", ".join(unused)))
-        return cls(service_networks, use_networking)
-
-    def remove(self):
-        if not self.use_networking:
-            return
-        for network in self.networks.values():
-            try:
-                network.remove()
-            except NotFound:
-                log.warn("Network %s not found.", network.full_name)
-
-    def initialize(self):
-        if not self.use_networking:
-            return
-
-        for network in self.networks.values():
-            network.ensure()
-
-
-def get_network_defs_for_service(service_dict):
-    if 'network_mode' in service_dict:
-        return {}
-    networks = service_dict.get('networks', {'default': None})
-    return dict(
-        (net, (config or {}))
-        for net, config in networks.items()
-    )
-
-
-def get_network_names_for_service(service_dict):
-    return get_network_defs_for_service(service_dict).keys()
-
-
-def get_networks(service_dict, network_definitions):
-    networks = {}
-    for name, netdef in get_network_defs_for_service(service_dict).items():
-        network = network_definitions.get(name)
-        if network:
-            networks[network.full_name] = netdef
-        else:
-            raise ConfigurationError(
-                'Service "{}" uses an undefined network "{}"'
-                .format(service_dict['name'], name))
-
-    return networks

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/parallel.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/parallel.py b/env2/lib/python2.7/site-packages/compose/parallel.py
deleted file mode 100644
index 7ac66b3..0000000
--- a/env2/lib/python2.7/site-packages/compose/parallel.py
+++ /dev/null
@@ -1,254 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import logging
-import operator
-import sys
-from threading import Thread
-
-from docker.errors import APIError
-from six.moves import _thread as thread
-from six.moves.queue import Empty
-from six.moves.queue import Queue
-
-from compose.cli.signals import ShutdownException
-from compose.errors import OperationFailedError
-from compose.utils import get_output_stream
-
-
-log = logging.getLogger(__name__)
-
-STOP = object()
-
-
-def parallel_execute(objects, func, get_name, msg, get_deps=None):
-    """Runs func on objects in parallel while ensuring that func is
-    ran on object only after it is ran on all its dependencies.
-
-    get_deps called on object must return a collection with its dependencies.
-    get_name called on object must return its name.
-    """
-    objects = list(objects)
-    stream = get_output_stream(sys.stderr)
-
-    writer = ParallelStreamWriter(stream, msg)
-    for obj in objects:
-        writer.initialize(get_name(obj))
-
-    events = parallel_execute_iter(objects, func, get_deps)
-
-    errors = {}
-    results = []
-    error_to_reraise = None
-
-    for obj, result, exception in events:
-        if exception is None:
-            writer.write(get_name(obj), 'done')
-            results.append(result)
-        elif isinstance(exception, APIError):
-            errors[get_name(obj)] = exception.explanation
-            writer.write(get_name(obj), 'error')
-        elif isinstance(exception, OperationFailedError):
-            errors[get_name(obj)] = exception.msg
-            writer.write(get_name(obj), 'error')
-        elif isinstance(exception, UpstreamError):
-            writer.write(get_name(obj), 'error')
-        else:
-            errors[get_name(obj)] = exception
-            error_to_reraise = exception
-
-    for obj_name, error in errors.items():
-        stream.write("\nERROR: for {}  {}\n".format(obj_name, error))
-
-    if error_to_reraise:
-        raise error_to_reraise
-
-    return results, errors
-
-
-def _no_deps(x):
-    return []
-
-
-class State(object):
-    """
-    Holds the state of a partially-complete parallel operation.
-
-    state.started:   objects being processed
-    state.finished:  objects which have been processed
-    state.failed:    objects which either failed or whose dependencies failed
-    """
-    def __init__(self, objects):
-        self.objects = objects
-
-        self.started = set()
-        self.finished = set()
-        self.failed = set()
-
-    def is_done(self):
-        return len(self.finished) + len(self.failed) >= len(self.objects)
-
-    def pending(self):
-        return set(self.objects) - self.started - self.finished - self.failed
-
-
-def parallel_execute_iter(objects, func, get_deps):
-    """
-    Runs func on objects in parallel while ensuring that func is
-    ran on object only after it is ran on all its dependencies.
-
-    Returns an iterator of tuples which look like:
-
-    # if func returned normally when run on object
-    (object, result, None)
-
-    # if func raised an exception when run on object
-    (object, None, exception)
-
-    # if func raised an exception when run on one of object's dependencies
-    (object, None, UpstreamError())
-    """
-    if get_deps is None:
-        get_deps = _no_deps
-
-    results = Queue()
-    state = State(objects)
-
-    while True:
-        feed_queue(objects, func, get_deps, results, state)
-
-        try:
-            event = results.get(timeout=0.1)
-        except Empty:
-            continue
-        # See https://github.com/docker/compose/issues/189
-        except thread.error:
-            raise ShutdownException()
-
-        if event is STOP:
-            break
-
-        obj, _, exception = event
-        if exception is None:
-            log.debug('Finished processing: {}'.format(obj))
-            state.finished.add(obj)
-        else:
-            log.debug('Failed: {}'.format(obj))
-            state.failed.add(obj)
-
-        yield event
-
-
-def producer(obj, func, results):
-    """
-    The entry point for a producer thread which runs func on a single object.
-    Places a tuple on the results queue once func has either returned or raised.
-    """
-    try:
-        result = func(obj)
-        results.put((obj, result, None))
-    except Exception as e:
-        results.put((obj, None, e))
-
-
-def feed_queue(objects, func, get_deps, results, state):
-    """
-    Starts producer threads for any objects which are ready to be processed
-    (i.e. they have no dependencies which haven't been successfully processed).
-
-    Shortcuts any objects whose dependencies have failed and places an
-    (object, None, UpstreamError()) tuple on the results queue.
-    """
-    pending = state.pending()
-    log.debug('Pending: {}'.format(pending))
-
-    for obj in pending:
-        deps = get_deps(obj)
-
-        if any(dep in state.failed for dep in deps):
-            log.debug('{} has upstream errors - not processing'.format(obj))
-            results.put((obj, None, UpstreamError()))
-            state.failed.add(obj)
-        elif all(
-            dep not in objects or dep in state.finished
-            for dep in deps
-        ):
-            log.debug('Starting producer thread for {}'.format(obj))
-            t = Thread(target=producer, args=(obj, func, results))
-            t.daemon = True
-            t.start()
-            state.started.add(obj)
-
-    if state.is_done():
-        results.put(STOP)
-
-
-class UpstreamError(Exception):
-    pass
-
-
-class ParallelStreamWriter(object):
-    """Write out messages for operations happening in parallel.
-
-    Each operation has it's own line, and ANSI code characters are used
-    to jump to the correct line, and write over the line.
-    """
-
-    def __init__(self, stream, msg):
-        self.stream = stream
-        self.msg = msg
-        self.lines = []
-
-    def initialize(self, obj_index):
-        if self.msg is None:
-            return
-        self.lines.append(obj_index)
-        self.stream.write("{} {} ... \r\n".format(self.msg, obj_index))
-        self.stream.flush()
-
-    def write(self, obj_index, status):
-        if self.msg is None:
-            return
-        position = self.lines.index(obj_index)
-        diff = len(self.lines) - position
-        # move up
-        self.stream.write("%c[%dA" % (27, diff))
-        # erase
-        self.stream.write("%c[2K\r" % 27)
-        self.stream.write("{} {} ... {}\r".format(self.msg, obj_index, status))
-        # move back down
-        self.stream.write("%c[%dB" % (27, diff))
-        self.stream.flush()
-
-
-def parallel_operation(containers, operation, options, message):
-    parallel_execute(
-        containers,
-        operator.methodcaller(operation, **options),
-        operator.attrgetter('name'),
-        message)
-
-
-def parallel_remove(containers, options):
-    stopped_containers = [c for c in containers if not c.is_running]
-    parallel_operation(stopped_containers, 'remove', options, 'Removing')
-
-
-def parallel_start(containers, options):
-    parallel_operation(containers, 'start', options, 'Starting')
-
-
-def parallel_pause(containers, options):
-    parallel_operation(containers, 'pause', options, 'Pausing')
-
-
-def parallel_unpause(containers, options):
-    parallel_operation(containers, 'unpause', options, 'Unpausing')
-
-
-def parallel_kill(containers, options):
-    parallel_operation(containers, 'kill', options, 'Killing')
-
-
-def parallel_restart(containers, options):
-    parallel_operation(containers, 'restart', options, 'Restarting')

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/6a81d1e7/env2/lib/python2.7/site-packages/compose/progress_stream.py
----------------------------------------------------------------------
diff --git a/env2/lib/python2.7/site-packages/compose/progress_stream.py b/env2/lib/python2.7/site-packages/compose/progress_stream.py
deleted file mode 100644
index a0f5601..0000000
--- a/env2/lib/python2.7/site-packages/compose/progress_stream.py
+++ /dev/null
@@ -1,112 +0,0 @@
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-from compose import utils
-
-
-class StreamOutputError(Exception):
-    pass
-
-
-def stream_output(output, stream):
-    is_terminal = hasattr(stream, 'isatty') and stream.isatty()
-    stream = utils.get_output_stream(stream)
-    all_events = []
-    lines = {}
-    diff = 0
-
-    for event in utils.json_stream(output):
-        all_events.append(event)
-        is_progress_event = 'progress' in event or 'progressDetail' in event
-
-        if not is_progress_event:
-            print_output_event(event, stream, is_terminal)
-            stream.flush()
-            continue
-
-        if not is_terminal:
-            continue
-
-        # if it's a progress event and we have a terminal, then display the progress bars
-        image_id = event.get('id')
-        if not image_id:
-            continue
-
-        if image_id in lines:
-            diff = len(lines) - lines[image_id]
-        else:
-            lines[image_id] = len(lines)
-            stream.write("\n")
-            diff = 0
-
-        # move cursor up `diff` rows
-        stream.write("%c[%dA" % (27, diff))
-
-        print_output_event(event, stream, is_terminal)
-
-        if 'id' in event:
-            # move cursor back down
-            stream.write("%c[%dB" % (27, diff))
-
-        stream.flush()
-
-    return all_events
-
-
-def print_output_event(event, stream, is_terminal):
-    if 'errorDetail' in event:
-        raise StreamOutputError(event['errorDetail']['message'])
-
-    terminator = ''
-
-    if is_terminal and 'stream' not in event:
-        # erase current line
-        stream.write("%c[2K\r" % 27)
-        terminator = "\r"
-    elif 'progressDetail' in event:
-        return
-
-    if 'time' in event:
-        stream.write("[%s] " % event['time'])
-
-    if 'id' in event:
-        stream.write("%s: " % event['id'])
-
-    if 'from' in event:
-        stream.write("(from %s) " % event['from'])
-
-    status = event.get('status', '')
-
-    if 'progress' in event:
-        stream.write("%s %s%s" % (status, event['progress'], terminator))
-    elif 'progressDetail' in event:
-        detail = event['progressDetail']
-        total = detail.get('total')
-        if 'current' in detail and total:
-            percentage = float(detail['current']) / float(total) * 100
-            stream.write('%s (%.1f%%)%s' % (status, percentage, terminator))
-        else:
-            stream.write('%s%s' % (status, terminator))
-    elif 'stream' in event:
-        stream.write("%s%s" % (event['stream'], terminator))
-    else:
-        stream.write("%s%s\n" % (status, terminator))
-
-
-def get_digest_from_pull(events):
-    for event in events:
-        status = event.get('status')
-        if not status or 'Digest' not in status:
-            continue
-
-        _, digest = status.split(':', 1)
-        return digest.strip()
-    return None
-
-
-def get_digest_from_push(events):
-    for event in events:
-        digest = event.get('aux', {}).get('Digest')
-        if digest:
-            return digest
-    return None