from kubeflow.kubeflow.crud_backend import api

from . import status


def parse_pvc(pvc, notebooks):
    """
    pvc: client.V1PersistentVolumeClaim

    Process the PVC and format it as the UI expects it.
    """
    try:
        capacity = pvc.status.capacity["storage"]
    except Exception:
        capacity = pvc.spec.resources.requests["storage"]

    notebooks = get_notebooks_using_pvc(pvc.metadata.name, notebooks)
    parsed_pvc = {
        "name": pvc.metadata.name,
        "namespace": pvc.metadata.namespace,
        "status": status.pvc_status(pvc),
        "age": pvc.metadata.creation_timestamp,
        "capacity": capacity,
        "modes": pvc.spec.access_modes,
        "class": pvc.spec.storage_class_name,
        "notebooks": notebooks,
    }

    return parsed_pvc


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []

    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb["metadata"]["name"])

    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb["spec"]["template"]["spec"]["volumes"]:
        return []

    vols = nb["spec"]["template"]["spec"]["volumes"]
    for vol in vols:
        # Check if the volume is a pvc
        if not vol.get("persistentVolumeClaim"):
            continue
        pvcs.append(vol["persistentVolumeClaim"]["claimName"])

    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []

    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)

    return mounted_pods


def get_pod_pvcs(pod):
    """
    Return a list of PVC name that the given Pod
    is using. If it doesn't use any, then an empty list will
    be returned.
    """
    pvcs = []
    if not pod.spec.volumes:
        return []

    vols = pod.spec.volumes
    for vol in vols:
        # Check if the volume is a pvc
        if not vol.persistent_volume_claim:
            continue

        pvcs.append(vol.persistent_volume_claim.claim_name)

    return pvcs

7d6121b02f7ae2f3f2f4299574c2958b3b378894
<mask token>


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []
    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb['metadata']['name'])
    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb['spec']['template']['spec']['volumes']:
        return []
    vols = nb['spec']['template']['spec']['volumes']
    for vol in vols:
        if not vol.get('persistentVolumeClaim'):
            continue
        pvcs.append(vol['persistentVolumeClaim']['claimName'])
    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []
    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)
    return mounted_pods


<mask token>

<mask token>


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []
    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb['metadata']['name'])
    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb['spec']['template']['spec']['volumes']:
        return []
    vols = nb['spec']['template']['spec']['volumes']
    for vol in vols:
        if not vol.get('persistentVolumeClaim'):
            continue
        pvcs.append(vol['persistentVolumeClaim']['claimName'])
    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []
    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)
    return mounted_pods


def get_pod_pvcs(pod):
    """
    Return a list of PVC name that the given Pod
    is using. If it doesn't use any, then an empty list will
    be returned.
    """
    pvcs = []
    if not pod.spec.volumes:
        return []
    vols = pod.spec.volumes
    for vol in vols:
        if not vol.persistent_volume_claim:
            continue
        pvcs.append(vol.persistent_volume_claim.claim_name)
    return pvcs

<mask token>


def parse_pvc(pvc, notebooks):
    """
    pvc: client.V1PersistentVolumeClaim

    Process the PVC and format it as the UI expects it.
    """
    try:
        capacity = pvc.status.capacity['storage']
    except Exception:
        capacity = pvc.spec.resources.requests['storage']
    notebooks = get_notebooks_using_pvc(pvc.metadata.name, notebooks)
    parsed_pvc = {'name': pvc.metadata.name, 'namespace': pvc.metadata.
        namespace, 'status': status.pvc_status(pvc), 'age': pvc.metadata.
        creation_timestamp, 'capacity': capacity, 'modes': pvc.spec.
        access_modes, 'class': pvc.spec.storage_class_name, 'notebooks':
        notebooks}
    return parsed_pvc


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []
    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb['metadata']['name'])
    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb['spec']['template']['spec']['volumes']:
        return []
    vols = nb['spec']['template']['spec']['volumes']
    for vol in vols:
        if not vol.get('persistentVolumeClaim'):
            continue
        pvcs.append(vol['persistentVolumeClaim']['claimName'])
    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []
    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)
    return mounted_pods


def get_pod_pvcs(pod):
    """
    Return a list of PVC name that the given Pod
    is using. If it doesn't use any, then an empty list will
    be returned.
    """
    pvcs = []
    if not pod.spec.volumes:
        return []
    vols = pod.spec.volumes
    for vol in vols:
        if not vol.persistent_volume_claim:
            continue
        pvcs.append(vol.persistent_volume_claim.claim_name)
    return pvcs

from kubeflow.kubeflow.crud_backend import api
from . import status


def parse_pvc(pvc, notebooks):
    """
    pvc: client.V1PersistentVolumeClaim

    Process the PVC and format it as the UI expects it.
    """
    try:
        capacity = pvc.status.capacity['storage']
    except Exception:
        capacity = pvc.spec.resources.requests['storage']
    notebooks = get_notebooks_using_pvc(pvc.metadata.name, notebooks)
    parsed_pvc = {'name': pvc.metadata.name, 'namespace': pvc.metadata.
        namespace, 'status': status.pvc_status(pvc), 'age': pvc.metadata.
        creation_timestamp, 'capacity': capacity, 'modes': pvc.spec.
        access_modes, 'class': pvc.spec.storage_class_name, 'notebooks':
        notebooks}
    return parsed_pvc


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []
    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb['metadata']['name'])
    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb['spec']['template']['spec']['volumes']:
        return []
    vols = nb['spec']['template']['spec']['volumes']
    for vol in vols:
        if not vol.get('persistentVolumeClaim'):
            continue
        pvcs.append(vol['persistentVolumeClaim']['claimName'])
    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []
    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)
    return mounted_pods


def get_pod_pvcs(pod):
    """
    Return a list of PVC name that the given Pod
    is using. If it doesn't use any, then an empty list will
    be returned.
    """
    pvcs = []
    if not pod.spec.volumes:
        return []
    vols = pod.spec.volumes
    for vol in vols:
        if not vol.persistent_volume_claim:
            continue
        pvcs.append(vol.persistent_volume_claim.claim_name)
    return pvcs

from kubeflow.kubeflow.crud_backend import api

from . import status


def parse_pvc(pvc, notebooks):
    """
    pvc: client.V1PersistentVolumeClaim

    Process the PVC and format it as the UI expects it.
    """
    try:
        capacity = pvc.status.capacity["storage"]
    except Exception:
        capacity = pvc.spec.resources.requests["storage"]

    notebooks = get_notebooks_using_pvc(pvc.metadata.name, notebooks)
    parsed_pvc = {
        "name": pvc.metadata.name,
        "namespace": pvc.metadata.namespace,
        "status": status.pvc_status(pvc),
        "age": pvc.metadata.creation_timestamp,
        "capacity": capacity,
        "modes": pvc.spec.access_modes,
        "class": pvc.spec.storage_class_name,
        "notebooks": notebooks,
    }

    return parsed_pvc


def get_notebooks_using_pvc(pvc, notebooks):
    """Return a list of Notebooks that are using the given PVC."""
    mounted_notebooks = []

    for nb in notebooks:
        pvcs = get_notebook_pvcs(nb)
        if pvc in pvcs:
            mounted_notebooks.append(nb["metadata"]["name"])

    return mounted_notebooks


def get_notebook_pvcs(nb):
    """
    Return a list of PVC names that the given notebook is using.

    If it doesn't use any, then an empty list will be returned.
    """
    pvcs = []
    if not nb["spec"]["template"]["spec"]["volumes"]:
        return []

    vols = nb["spec"]["template"]["spec"]["volumes"]
    for vol in vols:
        # Check if the volume is a pvc
        if not vol.get("persistentVolumeClaim"):
            continue
        pvcs.append(vol["persistentVolumeClaim"]["claimName"])

    return pvcs


def get_pods_using_pvc(pvc, namespace):
    """
    Return a list of Pods that are using the given PVC
    """
    pods = api.list_pods(namespace)
    mounted_pods = []

    for pod in pods.items:
        pvcs = get_pod_pvcs(pod)
        if pvc in pvcs:
            mounted_pods.append(pod)

    return mounted_pods


def get_pod_pvcs(pod):
    """
    Return a list of PVC name that the given Pod
    is using. If it doesn't use any, then an empty list will
    be returned.
    """
    pvcs = []
    if not pod.spec.volumes:
        return []

    vols = pod.spec.volumes
    for vol in vols:
        # Check if the volume is a pvc
        if not vol.persistent_volume_claim:
            continue

        pvcs.append(vol.persistent_volume_claim.claim_name)

    return pvcs
