def validate_job_labels()

in src/python/tensorflow_cloud/core/gcp.py [0:0]


def validate_job_labels(job_labels):
    """Validates job labels conform guidelines.

    Ref. [resource labels](
    https://cloud.google.com/ai-platform/training/docs/resource-labels)

    Args:
        job_labels: String job label to validate.
    Raises:
        ValueError if the given job label is not conformant.
    """

    if not job_labels:
        print(
            "No labels provided for the training job."
            "Please consider creating labels to help "
            "with retrieval of job information. "
            "Please see https://cloud.google.com/ai-"
            "platform/training/docs/resource-labels "
            "for more information."
        )

    if len(job_labels) > 64:
        raise ValueError(
            "Invalid job labels: too many labels."
            "Expecting at most 64 labels."
            "Received {}.".format(len(job_labels))
        )

    for k in job_labels:
        v = job_labels[k]
        if not k or not k[0].islower():
            raise ValueError(
                "Invalid job labels:"
                "Label key must start with lowercase letters."
                "Received {}.".format(k)
            )
        if not v or not v[0].islower():
            raise ValueError(
                "Invalid job labels:"
                "Label value must start with lowercase letters."
                "Received {}.".format(v)
            )

        if len(k) > 63:
            raise ValueError(
                "Invalid job labels:"
                "Label key is too long."
                "Expecting at most 63 characters."
                "Received {}.".format(k)
            )
        if len(v) > 63:
            raise ValueError(
                "Invalid job labels:"
                "Label value is too long for key {}."
                "Expecting at most 63 characters."
                "Received {}.".format(k, v)
            )

        if not re.match(r"^[a-z0-9_-]+$", k):
            raise ValueError(
                "Invalid job labels:"
                "Label key can only contain lowercase letters,"
                "numeric characters, underscores and dashes."
                "Received: {}.".format(k)
            )

        if not re.match(r"^[a-z0-9_-]+$", v):
            raise ValueError(
                "Invalid job labels:"
                "Label value can only contain lowercase letters,"
                "numeric characters, underscores and dashes."
                "Received: {}.".format(v)
            )