42
42
# Source ids can have anything but a space or a colon. Those must be replaced with another character (like a dash).
43
43
SOURCE_ID_RE = re .compile (r"^[^\s\:]+$" )
44
44
45
+ # Max length for long text fields storing notes
46
+ NOTE_MAX_LENGTH = 2046
47
+
48
+ # Max length for normal string value fields
49
+ VALUE_MAX_LENGTH = 256
50
+
51
+ # Max length for short enum identifier fields
52
+ ENUM_MAX_LENGTH = 64
53
+
54
+ # Max length for id string fields
55
+ ID_MAX_LENGTH = 128
56
+
45
57
46
58
class StringDatetime (datetime .datetime ):
47
59
@classmethod
@@ -211,9 +223,9 @@ class Address(BaseModel):
211
223
},
212
224
"""
213
225
214
- street1 : Optional [str ]
215
- street2 : Optional [str ]
216
- city : Optional [str ]
226
+ street1 : Optional [str ] = Field ( max_length = VALUE_MAX_LENGTH )
227
+ street2 : Optional [str ] = Field ( max_length = VALUE_MAX_LENGTH )
228
+ city : Optional [str ] = Field ( max_length = VALUE_MAX_LENGTH )
217
229
state : Optional [State ]
218
230
zip : Optional [str ] = Field (regex = ZIPCODE_RE .pattern )
219
231
@@ -245,7 +257,7 @@ class Contact(BaseModel):
245
257
phone : Optional [str ] = Field (regex = US_PHONE_RE .pattern )
246
258
website : Optional [HttpUrl ]
247
259
email : Optional [EmailStr ]
248
- other : Optional [str ]
260
+ other : Optional [str ] = Field ( max_length = NOTE_MAX_LENGTH )
249
261
250
262
@root_validator
251
263
@classmethod
@@ -362,8 +374,10 @@ class Organization(BaseModel):
362
374
"""
363
375
364
376
# Use VaccineProvider enum value if available overwise make your own.
365
- id : Union [VaccineProvider , str , None ] = Field (regex = ENUM_VALUE_RE .pattern )
366
- name : Optional [str ]
377
+ id : Union [VaccineProvider , str , None ] = Field (
378
+ regex = ENUM_VALUE_RE .pattern , max_length = ENUM_MAX_LENGTH
379
+ )
380
+ name : Optional [str ] = Field (max_length = VALUE_MAX_LENGTH )
367
381
368
382
369
383
class Link (BaseModel ):
@@ -377,9 +391,9 @@ class Link(BaseModel):
377
391
378
392
# Use LocationAuthority enum value if available, overwise make your own.
379
393
authority : Union [LocationAuthority , VaccineProvider , str , None ] = Field (
380
- regex = ENUM_VALUE_RE .pattern
394
+ regex = ENUM_VALUE_RE .pattern , max_length = ENUM_MAX_LENGTH
381
395
)
382
- id : Optional [str ]
396
+ id : Optional [str ] = Field ( regex = SOURCE_ID_RE . pattern , max_length = ID_MAX_LENGTH )
383
397
uri : Optional [AnyUrl ]
384
398
385
399
@@ -395,17 +409,17 @@ class Source(BaseModel):
395
409
}
396
410
"""
397
411
398
- source : str = Field (regex = ENUM_VALUE_RE .pattern )
399
- id : str = Field (regex = SOURCE_ID_RE .pattern )
412
+ source : str = Field (regex = ENUM_VALUE_RE .pattern , max_length = ENUM_MAX_LENGTH )
413
+ id : str = Field (regex = SOURCE_ID_RE .pattern , max_length = ID_MAX_LENGTH )
400
414
fetched_from_uri : Optional [AnyUrl ]
401
415
fetched_at : Optional [StringDatetime ]
402
416
published_at : Optional [StringDatetime ]
403
417
data : dict
404
418
405
419
406
420
class NormalizedLocation (BaseModel ):
407
- id : str = Field (regex = LOCATION_ID_RE .pattern )
408
- name : Optional [str ]
421
+ id : str = Field (regex = LOCATION_ID_RE .pattern , max_length = ID_MAX_LENGTH )
422
+ name : Optional [str ] = Field ( max_length = VALUE_MAX_LENGTH )
409
423
address : Optional [Address ]
410
424
location : Optional [LatLng ]
411
425
contact : Optional [List [Contact ]]
0 commit comments