api/validate: Update type hints.
BUG=None
TEST=CQ
Change-Id: Ibbf289ff701ba5382cb8d37f9f8f7bb63201520a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2645333
Tested-by: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/validate.py b/api/validate.py
index 7bb7b23..7db6033 100644
--- a/api/validate.py
+++ b/api/validate.py
@@ -16,25 +16,27 @@
import functools
import os
import sys
+from typing import Callable, Iterable, List, Optional, Union
from google.protobuf import message as protobuf_message
from chromite.lib import cros_build_lib
from chromite.lib import cros_logging as logging
-
assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
-def _value(field, message):
+def _value(
+ field: str, message: protobuf_message.Message
+) -> Union[bool, int, str, None, List, protobuf_message.Message]:
"""Helper function to fetch the value of the field.
Args:
- field (str): The field name. Can be nested via . separation.
- message (Message): The protobuf message it is being fetched from.
+ field: The field name. Can be nested via . separation.
+ message: The protobuf message it is being fetched from.
Returns:
- str|None|int|list|Message|bool - The value of the field.
+ The value of the field.
"""
if not field:
return message
@@ -54,7 +56,7 @@
# pylint: disable=docstring-misnamed-args
-def exists(*fields):
+def exists(*fields: str):
"""Validate that the paths in |fields| exist.
Args:
@@ -81,12 +83,12 @@
return decorator
-def is_in(field, values):
+def is_in(field: str, values: Iterable):
"""Validate |field| is an element of |values|.
Args:
- field (str): The field being checked. May be . separated nested fields.
- values (list): The possible values field may take.
+ field: The field being checked. May be . separated nested fields.
+ values: The possible values field may take.
"""
assert field
assert values
@@ -108,15 +110,18 @@
return decorator
-def each_in(field, subfield, values, optional=False):
+def each_in(field: str,
+ subfield: Optional[str],
+ values: Iterable,
+ optional: bool = False):
"""Validate each |subfield| of the repeated |field| is in |values|.
Args:
- field (str): The field being checked. May be . separated nested fields.
- subfield (str|None): The field in the repeated |field| to validate, or None
+ field: The field being checked. May be . separated nested fields.
+ subfield: The field in the repeated |field| to validate, or None
when |field| is not a repeated message, e.g. enum, scalars.
- values (list): The possible values field may take.
- optional (bool): Also allow the field to be empty when True.
+ values: The possible values field may take.
+ optional: Also allow the field to be empty when True.
"""
assert field
assert values
@@ -144,11 +149,11 @@
# pylint: disable=docstring-misnamed-args
-def require(*fields):
+def require(*fields: str):
"""Verify |fields| have all been set.
Args:
- fields (str): The fields being checked. May be . separated nested fields.
+ fields: The fields being checked. May be . separated nested fields.
"""
assert fields
@@ -171,11 +176,11 @@
# pylint: disable=docstring-misnamed-args
-def require_any(*fields):
+def require_any(*fields: str):
"""Verify at least one of |fields| have been set.
Args:
- fields (str): The fields being checked. May be . separated nested fields.
+ fields: The fields being checked. May be . separated nested fields.
"""
assert fields
@@ -199,7 +204,9 @@
return decorator
-def require_each(field, subfields, allow_empty=True):
+def require_each(field: str,
+ subfields: Iterable[str],
+ allow_empty: bool = True):
"""Verify |field| each have all of the |subfields| set.
When |allow_empty| is True, |field| may be empty, and |subfields| are only
@@ -207,10 +214,10 @@
also have at least one entry.
Args:
- field (str): The repeated field being checked. May be . separated nested
+ field: The repeated field being checked. May be . separated nested
fields.
- subfields (list[str]): The fields of the repeated message to validate.
- allow_empty (bool): Also require at least one entry in the repeated field.
+ subfields: The fields of the repeated message to validate.
+ allow_empty: Also require at least one entry in the repeated field.
"""
assert field
assert subfields
@@ -237,7 +244,7 @@
return decorator
-def validation_complete(func):
+def validation_complete(func: Callable):
"""Automatically skip the endpoint when called after all other validators.
This decorator MUST be applied after all other validate decorators.