Skip to content

Commit 3e2e3e3

Browse files
author
jchadwick-buf
authored
Implement predefined field constraints (#189)
This depends on bufbuild/protovalidate#246.
1 parent 4c035d0 commit 3e2e3e3

35 files changed

+2379
-870
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ ADD_LICENSE_HEADER := $(BIN)/license-header \
1616
--license-type apache \
1717
--copyright-holder "Buf Technologies, Inc." \
1818
--year-range "2023"
19-
PROTOVALIDATE_VERSION ?= v0.7.1
19+
PROTOVALIDATE_VERSION ?= v0.8.1
2020

2121
.PHONY: help
2222
help: ## Describe useful make targets

gen/buf/validate/conformance/cases/bool_pb2.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
4040

4141

42-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)buf/validate/conformance/cases/bool.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1c\n\x08\x42oolNone\x12\x10\n\x03val\x18\x01 \x01(\x08R\x03val\"*\n\rBoolConstTrue\x12\x19\n\x03val\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x01R\x03val\"+\n\x0e\x42oolConstFalse\x12\x19\n\x03val\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x00R\x03valb\x06proto3')
42+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)buf/validate/conformance/cases/bool.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1c\n\x08\x42oolNone\x12\x10\n\x03val\x18\x01 \x01(\x08R\x03val\"*\n\rBoolConstTrue\x12\x19\n\x03val\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x01R\x03val\"+\n\x0e\x42oolConstFalse\x12\x19\n\x03val\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x08\x00R\x03val\"(\n\x0b\x42oolExample\x12\x19\n\x03val\x18\x01 \x01(\x08\x42\x07\xbaH\x04j\x02\x10\x01R\x03valb\x06proto3')
4343

4444
_globals = globals()
4545
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -50,10 +50,14 @@
5050
_globals['_BOOLCONSTTRUE'].fields_by_name['val']._serialized_options = b'\272H\004j\002\010\001'
5151
_globals['_BOOLCONSTFALSE'].fields_by_name['val']._loaded_options = None
5252
_globals['_BOOLCONSTFALSE'].fields_by_name['val']._serialized_options = b'\272H\004j\002\010\000'
53+
_globals['_BOOLEXAMPLE'].fields_by_name['val']._loaded_options = None
54+
_globals['_BOOLEXAMPLE'].fields_by_name['val']._serialized_options = b'\272H\004j\002\020\001'
5355
_globals['_BOOLNONE']._serialized_start=106
5456
_globals['_BOOLNONE']._serialized_end=134
5557
_globals['_BOOLCONSTTRUE']._serialized_start=136
5658
_globals['_BOOLCONSTTRUE']._serialized_end=178
5759
_globals['_BOOLCONSTFALSE']._serialized_start=180
5860
_globals['_BOOLCONSTFALSE']._serialized_end=223
61+
_globals['_BOOLEXAMPLE']._serialized_start=225
62+
_globals['_BOOLEXAMPLE']._serialized_end=265
5963
# @@protoc_insertion_point(module_scope)

gen/buf/validate/conformance/cases/bool_pb2.pyi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,9 @@ class BoolConstFalse(_message.Message):
3636
VAL_FIELD_NUMBER: _ClassVar[int]
3737
val: bool
3838
def __init__(self, val: bool = ...) -> None: ...
39+
40+
class BoolExample(_message.Message):
41+
__slots__ = ("val",)
42+
VAL_FIELD_NUMBER: _ClassVar[int]
43+
val: bool
44+
def __init__(self, val: bool = ...) -> None: ...

gen/buf/validate/conformance/cases/bytes_pb2.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2
4040

4141

42-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*buf/validate/conformance/cases/bytes.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1d\n\tBytesNone\x12\x10\n\x03val\x18\x01 \x01(\x0cR\x03val\"*\n\nBytesConst\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05\n\x03\x66ooR\x03val\",\n\x07\x42ytesIn\x12!\n\x03val\x18\x01 \x01(\x0c\x42\x0f\xbaH\x0cz\nB\x03\x62\x61rB\x03\x62\x61zR\x03val\"1\n\nBytesNotIn\x12#\n\x03val\x18\x01 \x01(\x0c\x42\x11\xbaH\x0ez\x0cJ\x04\x66izzJ\x04\x62uzzR\x03val\"%\n\x08\x42ytesLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02h\x03R\x03val\"(\n\x0b\x42ytesMinLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x10\x03R\x03val\"(\n\x0b\x42ytesMaxLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x18\x05R\x03val\"-\n\x0e\x42ytesMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x03\x18\x05R\x03val\"2\n\x13\x42ytesEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x05\x18\x05R\x03val\"7\n\x0c\x42ytesPattern\x12\'\n\x03val\x18\x01 \x01(\x0c\x42\x15\xbaH\x12z\x10\"\x0e^[\\x00-\\x7F]+$R\x03val\")\n\x0b\x42ytesPrefix\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03*\x01\x99R\x03val\"-\n\rBytesContains\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05:\x03\x62\x61rR\x03val\",\n\x0b\x42ytesSuffix\x12\x1d\n\x03val\x18\x01 \x01(\x0c\x42\x0b\xbaH\x08z\x06\x32\x04\x62uzzR\x03val\"$\n\x07\x42ytesIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x01R\x03val\"&\n\tBytesIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x01R\x03val\"&\n\tBytesIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x01R\x03val\"/\n\x0f\x42ytesIPv6Ignore\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x02`\x01\xd0\x01\x01R\x03valb\x06proto3')
42+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*buf/validate/conformance/cases/bytes.proto\x12\x1e\x62uf.validate.conformance.cases\x1a\x1b\x62uf/validate/validate.proto\"\x1d\n\tBytesNone\x12\x10\n\x03val\x18\x01 \x01(\x0cR\x03val\"*\n\nBytesConst\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05\n\x03\x66ooR\x03val\",\n\x07\x42ytesIn\x12!\n\x03val\x18\x01 \x01(\x0c\x42\x0f\xbaH\x0cz\nB\x03\x62\x61rB\x03\x62\x61zR\x03val\"1\n\nBytesNotIn\x12#\n\x03val\x18\x01 \x01(\x0c\x42\x11\xbaH\x0ez\x0cJ\x04\x66izzJ\x04\x62uzzR\x03val\"%\n\x08\x42ytesLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02h\x03R\x03val\"(\n\x0b\x42ytesMinLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x10\x03R\x03val\"(\n\x0b\x42ytesMaxLen\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02\x18\x05R\x03val\"-\n\x0e\x42ytesMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x03\x18\x05R\x03val\"2\n\x13\x42ytesEqualMinMaxLen\x12\x1b\n\x03val\x18\x01 \x01(\x0c\x42\t\xbaH\x06z\x04\x10\x05\x18\x05R\x03val\"7\n\x0c\x42ytesPattern\x12\'\n\x03val\x18\x01 \x01(\x0c\x42\x15\xbaH\x12z\x10\"\x0e^[\\x00-\\x7F]+$R\x03val\")\n\x0b\x42ytesPrefix\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03*\x01\x99R\x03val\"-\n\rBytesContains\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x05:\x03\x62\x61rR\x03val\",\n\x0b\x42ytesSuffix\x12\x1d\n\x03val\x18\x01 \x01(\x0c\x42\x0b\xbaH\x08z\x06\x32\x04\x62uzzR\x03val\"$\n\x07\x42ytesIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x01R\x03val\"\'\n\nBytesNotIP\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02P\x00R\x03val\"&\n\tBytesIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x01R\x03val\")\n\x0c\x42ytesNotIPv4\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02X\x00R\x03val\"&\n\tBytesIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x01R\x03val\")\n\x0c\x42ytesNotIPv6\x12\x19\n\x03val\x18\x01 \x01(\x0c\x42\x07\xbaH\x04z\x02`\x00R\x03val\"/\n\x0f\x42ytesIPv6Ignore\x12\x1c\n\x03val\x18\x01 \x01(\x0c\x42\n\xbaH\x07z\x02`\x01\xd0\x01\x01R\x03val\"*\n\x0c\x42ytesExample\x12\x1a\n\x03val\x18\x01 \x01(\x0c\x42\x08\xbaH\x05z\x03r\x01\x99R\x03valb\x06proto3')
4343

4444
_globals = globals()
4545
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -72,12 +72,20 @@
7272
_globals['_BYTESSUFFIX'].fields_by_name['val']._serialized_options = b'\272H\010z\0062\004buzz'
7373
_globals['_BYTESIP'].fields_by_name['val']._loaded_options = None
7474
_globals['_BYTESIP'].fields_by_name['val']._serialized_options = b'\272H\004z\002P\001'
75+
_globals['_BYTESNOTIP'].fields_by_name['val']._loaded_options = None
76+
_globals['_BYTESNOTIP'].fields_by_name['val']._serialized_options = b'\272H\004z\002P\000'
7577
_globals['_BYTESIPV4'].fields_by_name['val']._loaded_options = None
7678
_globals['_BYTESIPV4'].fields_by_name['val']._serialized_options = b'\272H\004z\002X\001'
79+
_globals['_BYTESNOTIPV4'].fields_by_name['val']._loaded_options = None
80+
_globals['_BYTESNOTIPV4'].fields_by_name['val']._serialized_options = b'\272H\004z\002X\000'
7781
_globals['_BYTESIPV6'].fields_by_name['val']._loaded_options = None
7882
_globals['_BYTESIPV6'].fields_by_name['val']._serialized_options = b'\272H\004z\002`\001'
83+
_globals['_BYTESNOTIPV6'].fields_by_name['val']._loaded_options = None
84+
_globals['_BYTESNOTIPV6'].fields_by_name['val']._serialized_options = b'\272H\004z\002`\000'
7985
_globals['_BYTESIPV6IGNORE'].fields_by_name['val']._loaded_options = None
8086
_globals['_BYTESIPV6IGNORE'].fields_by_name['val']._serialized_options = b'\272H\007z\002`\001\320\001\001'
87+
_globals['_BYTESEXAMPLE'].fields_by_name['val']._loaded_options = None
88+
_globals['_BYTESEXAMPLE'].fields_by_name['val']._serialized_options = b'\272H\005z\003r\001\231'
8189
_globals['_BYTESNONE']._serialized_start=107
8290
_globals['_BYTESNONE']._serialized_end=136
8391
_globals['_BYTESCONST']._serialized_start=138
@@ -106,10 +114,18 @@
106114
_globals['_BYTESSUFFIX']._serialized_end=692
107115
_globals['_BYTESIP']._serialized_start=694
108116
_globals['_BYTESIP']._serialized_end=730
109-
_globals['_BYTESIPV4']._serialized_start=732
110-
_globals['_BYTESIPV4']._serialized_end=770
111-
_globals['_BYTESIPV6']._serialized_start=772
112-
_globals['_BYTESIPV6']._serialized_end=810
113-
_globals['_BYTESIPV6IGNORE']._serialized_start=812
114-
_globals['_BYTESIPV6IGNORE']._serialized_end=859
117+
_globals['_BYTESNOTIP']._serialized_start=732
118+
_globals['_BYTESNOTIP']._serialized_end=771
119+
_globals['_BYTESIPV4']._serialized_start=773
120+
_globals['_BYTESIPV4']._serialized_end=811
121+
_globals['_BYTESNOTIPV4']._serialized_start=813
122+
_globals['_BYTESNOTIPV4']._serialized_end=854
123+
_globals['_BYTESIPV6']._serialized_start=856
124+
_globals['_BYTESIPV6']._serialized_end=894
125+
_globals['_BYTESNOTIPV6']._serialized_start=896
126+
_globals['_BYTESNOTIPV6']._serialized_end=937
127+
_globals['_BYTESIPV6IGNORE']._serialized_start=939
128+
_globals['_BYTESIPV6IGNORE']._serialized_end=986
129+
_globals['_BYTESEXAMPLE']._serialized_start=988
130+
_globals['_BYTESEXAMPLE']._serialized_end=1030
115131
# @@protoc_insertion_point(module_scope)

gen/buf/validate/conformance/cases/bytes_pb2.pyi

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,44 @@ class BytesIP(_message.Message):
103103
val: bytes
104104
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
105105

106+
class BytesNotIP(_message.Message):
107+
__slots__ = ("val",)
108+
VAL_FIELD_NUMBER: _ClassVar[int]
109+
val: bytes
110+
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
111+
106112
class BytesIPv4(_message.Message):
107113
__slots__ = ("val",)
108114
VAL_FIELD_NUMBER: _ClassVar[int]
109115
val: bytes
110116
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
111117

118+
class BytesNotIPv4(_message.Message):
119+
__slots__ = ("val",)
120+
VAL_FIELD_NUMBER: _ClassVar[int]
121+
val: bytes
122+
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
123+
112124
class BytesIPv6(_message.Message):
113125
__slots__ = ("val",)
114126
VAL_FIELD_NUMBER: _ClassVar[int]
115127
val: bytes
116128
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
117129

130+
class BytesNotIPv6(_message.Message):
131+
__slots__ = ("val",)
132+
VAL_FIELD_NUMBER: _ClassVar[int]
133+
val: bytes
134+
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
135+
118136
class BytesIPv6Ignore(_message.Message):
119137
__slots__ = ("val",)
120138
VAL_FIELD_NUMBER: _ClassVar[int]
121139
val: bytes
122140
def __init__(self, val: _Optional[bytes] = ...) -> None: ...
141+
142+
class BytesExample(_message.Message):
143+
__slots__ = ("val",)
144+
VAL_FIELD_NUMBER: _ClassVar[int]
145+
val: bytes
146+
def __init__(self, val: _Optional[bytes] = ...) -> None: ...

0 commit comments

Comments
 (0)