# Path: k8s/client.py
# class NotFound(K8sClientException):
#     """The resource was not found, and the operation could not be completed"""
# 
# Path: k8s/models/common.py
# class ObjectMeta(Model):
#     annotations = Field(dict)
#     creationTimestamp = ReadOnlyField(datetime.datetime)
#     deletionGracePeriodSeconds = ReadOnlyField(int)
#     deletionTimestamp = ReadOnlyField(datetime.datetime)
#     finalizers = ListField(six.text_type)
#     generateName = Field(six.text_type)
#     generation = ReadOnlyField(int)
#     labels = Field(dict)
#     name = Field(six.text_type)
#     namespace = Field(six.text_type, "default")
#     ownerReferences = ListField(OwnerReference)
#     resourceVersion = ReadOnlyField(six.text_type)
#     selfLink = ReadOnlyField(six.text_type)
#     uid = ReadOnlyField(six.text_type)
# 
# Path: k8s/models/deployment.py
# class Deployment(Model):
#     class Meta:
#         list_url = "/apis/apps/v1/deployments"
#         url_template = "/apis/apps/v1/namespaces/{namespace}/deployments/{name}"
# 
#     metadata = Field(ObjectMeta)
#     spec = Field(DeploymentSpec)
#     status = Field(DeploymentStatus)
# 
# class DeploymentSpec(Model):
#     replicas = Field(int, 1)
#     selector = Field(LabelSelector)
#     template = Field(PodTemplateSpec)
#     strategy = Field(DeploymentStrategy)
#     minReadySeconds = Field(six.text_type, alt_type=int)
#     revisionHistoryLimit = Field(int)
#     paused = Field(six.text_type)
# 
# class LabelSelector(Model):
#     matchLabels = Field(dict)
# 
# class RollingUpdateDeployment(Model):
#     maxUnavailable = Field(int, alt_type=six.text_type)
#     maxSurge = Field(int, alt_type=six.text_type)
# 
# class DeploymentStrategy(Model):
#     type = Field(six.text_type, "RollingUpdate")
#     rollingUpdate = Field(RollingUpdateDeployment)
# 
# Path: k8s/models/pod.py
# class ContainerPort(Model):
# class ObjectFieldSelector(Model):
# class ResourceFieldSelector(Model):
# class ConfigMapKeySelector(Model):
# class SecretKeySelector(Model):
# class EnvVarSource(Model):
# class SecretEnvSource(Model):
# class ConfigMapEnvSource(Model):
# class EnvFromSource(Model):
# class EnvVar(Model):
# class ResourceRequirements(Model):
# class VolumeMount(Model):
# class HTTPHeader(Model):
# class HTTPGetAction(Model):
# class TCPSocketAction(Model):
# class ExecAction(Model):
# class Probe(Model):
# class Handler(Model):
# class Lifecycle(Model):
# class Container(Model):
# class SecretVolumeSource(Model):
# class KeyToPath(Model):
# class ConfigMapVolumeSource(Model):
# class EmptyDirVolumeSource(Model):
# class NFSVolumeSource(Model):
# class HostPathVolumeSource(Model):
# class GCEPersistentDiskVolumeSource(Model):
# class AWSElasticBlockStoreVolumeSource(Model):
# class Volume(Model):
# class PodSpec(Model):
# class PodTemplateSpec(Model):
# class Pod(Model):
#     class Meta:


import mock
import pytest
from six import u
from k8s.client import NotFound
from k8s.models.common import ObjectMeta
from k8s.models.deployment import Deployment, DeploymentSpec, LabelSelector, RollingUpdateDeployment, \
    DeploymentStrategy
from k8s.models.pod import ContainerPort, Container, LocalObjectReference, Probe, HTTPGetAction, TCPSocketAction, \
    PodTemplateSpec, PodSpec
        call_params = deployment.as_dict()
        post.return_value.json.return_value = call_params

        assert deployment._new
        deployment.save()
        assert not deployment._new

        pytest.helpers.assert_any_call(post, _uri(NAMESPACE), call_params)

    def test_updated_if_exists(self, get, put):
        mock_response = _create_mock_response()
        get.return_value = mock_response
        deployment = _create_default_deployment()

        from_api = Deployment.get_or_create(metadata=deployment.metadata, spec=deployment.spec)
        assert not from_api._new
        assert from_api.spec.replicas == 2
        call_params = from_api.as_dict()
        put.return_value.json.return_value = call_params

        from_api.save()
        pytest.helpers.assert_any_call(put, _uri(NAMESPACE, NAME), call_params)

    def test_delete(self, delete):
        Deployment.delete(NAME, namespace=NAMESPACE)
        pytest.helpers.assert_any_call(delete, _uri(NAMESPACE, NAME))


def _create_default_deployment():
    labels = {"test": "true"}

# Path: k8s/client.py
# class NotFound(K8sClientException):
#     """The resource was not found, and the operation could not be completed"""
# 
# Path: k8s/models/common.py
# class ObjectMeta(Model):
#     annotations = Field(dict)
#     creationTimestamp = ReadOnlyField(datetime.datetime)
#     deletionGracePeriodSeconds = ReadOnlyField(int)
#     deletionTimestamp = ReadOnlyField(datetime.datetime)
#     finalizers = ListField(six.text_type)
#     generateName = Field(six.text_type)
#     generation = ReadOnlyField(int)
#     labels = Field(dict)
#     name = Field(six.text_type)
#     namespace = Field(six.text_type, "default")
#     ownerReferences = ListField(OwnerReference)
#     resourceVersion = ReadOnlyField(six.text_type)
#     selfLink = ReadOnlyField(six.text_type)
#     uid = ReadOnlyField(six.text_type)
# 
# Path: k8s/models/deployment.py
# class Deployment(Model):
#     class Meta:
#         list_url = "/apis/apps/v1/deployments"
#         url_template = "/apis/apps/v1/namespaces/{namespace}/deployments/{name}"
# 
#     metadata = Field(ObjectMeta)
#     spec = Field(DeploymentSpec)
#     status = Field(DeploymentStatus)
# 
# class DeploymentSpec(Model):
#     replicas = Field(int, 1)
#     selector = Field(LabelSelector)
#     template = Field(PodTemplateSpec)
#     strategy = Field(DeploymentStrategy)
#     minReadySeconds = Field(six.text_type, alt_type=int)
#     revisionHistoryLimit = Field(int)
#     paused = Field(six.text_type)
# 
# class LabelSelector(Model):
#     matchLabels = Field(dict)
# 
# class RollingUpdateDeployment(Model):
#     maxUnavailable = Field(int, alt_type=six.text_type)
#     maxSurge = Field(int, alt_type=six.text_type)
# 
# class DeploymentStrategy(Model):
#     type = Field(six.text_type, "RollingUpdate")
#     rollingUpdate = Field(RollingUpdateDeployment)
# 
# Path: k8s/models/pod.py
# class ContainerPort(Model):
# class ObjectFieldSelector(Model):
# class ResourceFieldSelector(Model):
# class ConfigMapKeySelector(Model):
# class SecretKeySelector(Model):
# class EnvVarSource(Model):
# class SecretEnvSource(Model):
# class ConfigMapEnvSource(Model):
# class EnvFromSource(Model):
# class EnvVar(Model):
# class ResourceRequirements(Model):
# class VolumeMount(Model):
# class HTTPHeader(Model):
# class HTTPGetAction(Model):
# class TCPSocketAction(Model):
# class ExecAction(Model):
# class Probe(Model):
# class Handler(Model):
# class Lifecycle(Model):
# class Container(Model):
# class SecretVolumeSource(Model):
# class KeyToPath(Model):
# class ConfigMapVolumeSource(Model):
# class EmptyDirVolumeSource(Model):
# class NFSVolumeSource(Model):
# class HostPathVolumeSource(Model):
# class GCEPersistentDiskVolumeSource(Model):
# class AWSElasticBlockStoreVolumeSource(Model):
# class Volume(Model):
# class PodSpec(Model):
# class PodTemplateSpec(Model):
# class Pod(Model):
#     class Meta:


# Path: tests/k8s/test_deployer.py
import mock
import pytest
from six import u
from k8s.client import NotFound
from k8s.models.common import ObjectMeta
from k8s.models.deployment import Deployment, DeploymentSpec, LabelSelector, RollingUpdateDeployment, \
    DeploymentStrategy
from k8s.models.pod import ContainerPort, Container, LocalObjectReference, Probe, HTTPGetAction, TCPSocketAction, \
    PodTemplateSpec, PodSpec

        call_params = deployment.as_dict()
        post.return_value.json.return_value = call_params

        assert deployment._new
        deployment.save()
        assert not deployment._new

        pytest.helpers.assert_any_call(post, _uri(NAMESPACE), call_params)

    def test_updated_if_exists(self, get, put):
        mock_response = _create_mock_response()
        get.return_value = mock_response
        deployment = _create_default_deployment()

        from_api = Deployment.get_or_create(metadata=deployment.metadata, spec=deployment.spec)
        assert not from_api._new
        assert from_api.spec.replicas == 2
        call_params = from_api.as_dict()
        put.return_value.json.return_value = call_params

        from_api.save()
        pytest.helpers.assert_any_call(put, _uri(NAMESPACE, NAME), call_params)

    def test_delete(self, delete):
        Deployment.delete(NAME, namespace=NAMESPACE)
        pytest.helpers.assert_any_call(delete, _uri(NAMESPACE, NAME))


def _create_default_deployment():
    labels = {"test": "true"}

    object_meta = ObjectMeta(name=NAME, namespace=NAMESPACE, labels=labels)