def validate_password_policy(password):
    """
    Password should contain
        - at least 1 uppercase character (A-Z)
        - at least 1 lowercase character (a-z)
        - at least 1 digit (0-9)
        - at least 1 special character (punctuation)
    """
    # app.logger.info("Validating password policy")

    msg = "At least 1 uppercase character"
    if not any(c.isupper() for c in password):
        return False, msg

    msg = "At least 1 lowercase character"
    if not any(c.islower() for c in password):
        return False, msg

    msg = "At least 1 digit"
    if not any(c.isdigit() for c in password):
        return False, msg

    msg = "At least 1 special character (punctuation)"
    special_chars = "!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
    if not any(c in special_chars for c in password):
        return False, msg

    msg = "valid"

    # app.logger.info("Password policy validated [{}]".format(msg))
    return True, msg