|
2 | 2 | from typing import Any, Callable, Dict, List, Optional, Type |
3 | 3 |
|
4 | 4 | from PIL import Image, ImageDraw |
5 | | -from pydantic import BaseModel, Extra, ValidationError |
| 5 | + |
| 6 | +try: |
| 7 | + # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2 |
| 8 | + from pydantic.v1 import BaseModel, Extra, ValidationError |
| 9 | +except ImportError: |
| 10 | + from pydantic import BaseModel, Extra, ValidationError |
6 | 11 |
|
7 | 12 | # From scaleapi/server/src/lib/select/api/types.ts |
8 | 13 | # These classes specify how user models must pass output to Launch + Nucleus. |
9 | 14 |
|
10 | 15 |
|
11 | | -class PointModel(BaseModel, extra=Extra.forbid): |
| 16 | +class PointModel(BaseModel): |
12 | 17 | x: float |
13 | 18 | y: float |
14 | 19 |
|
| 20 | + class Config: |
| 21 | + extra = Extra.forbid |
| 22 | + |
15 | 23 |
|
16 | | -class BoxGeometryModel(BaseModel, extra=Extra.forbid): |
| 24 | +class BoxGeometryModel(BaseModel): |
17 | 25 | x: float |
18 | 26 | y: float |
19 | 27 | width: float |
20 | 28 | height: float |
21 | 29 |
|
| 30 | + class Config: |
| 31 | + extra = Extra.forbid |
| 32 | + |
22 | 33 |
|
23 | | -class BoxAnnotationModel(BaseModel, extra=Extra.forbid): |
| 34 | +class BoxAnnotationModel(BaseModel): |
24 | 35 | geometry: BoxGeometryModel |
25 | 36 | type: str |
26 | 37 | label: Optional[str] = None |
27 | 38 | confidence: Optional[float] = None |
28 | 39 | classPdf: Optional[Dict[str, float]] = None |
29 | 40 | metadata: Optional[Dict[str, Any]] = None |
30 | 41 |
|
| 42 | + class Config: |
| 43 | + extra = Extra.forbid |
31 | 44 |
|
32 | | -class NoneGeometryModel(BaseModel, extra=Extra.forbid): |
33 | | - pass |
34 | 45 |
|
| 46 | +class NoneGeometryModel(BaseModel): |
| 47 | + class Config: |
| 48 | + extra = Extra.forbid |
35 | 49 |
|
36 | | -class CategoryAnnotationModel(BaseModel, extra=Extra.forbid): |
| 50 | + |
| 51 | +class CategoryAnnotationModel(BaseModel): |
37 | 52 | geometry: NoneGeometryModel |
38 | 53 | type: str |
39 | 54 | label: Optional[str] = None |
40 | 55 | confidence: Optional[float] = None |
41 | 56 | classPdf: Optional[Dict[str, float]] = None |
42 | 57 | metadata: Optional[Dict[str, Any]] = None |
43 | 58 |
|
| 59 | + class Config: |
| 60 | + extra = Extra.forbid |
| 61 | + |
44 | 62 |
|
45 | | -class LineGeometryModel(BaseModel, extra=Extra.forbid): |
| 63 | +class LineGeometryModel(BaseModel): |
46 | 64 | vertices: List[PointModel] |
47 | 65 |
|
| 66 | + class Config: |
| 67 | + extra = Extra.forbid |
48 | 68 |
|
49 | | -class LineAnnotationModel(BaseModel, extra=Extra.forbid): |
| 69 | + |
| 70 | +class LineAnnotationModel(BaseModel): |
50 | 71 | geometry: LineGeometryModel |
51 | 72 | type: str |
52 | 73 | label: Optional[str] = None |
53 | 74 | confidence: Optional[float] = None |
54 | 75 | classPdf: Optional[Dict[str, float]] = None |
55 | 76 | metadata: Optional[Dict[str, Any]] = None |
56 | 77 |
|
| 78 | + class Config: |
| 79 | + extra = Extra.forbid |
| 80 | + |
57 | 81 |
|
58 | | -class PolygonGeometryModel(BaseModel, extra=Extra.forbid): |
| 82 | +class PolygonGeometryModel(BaseModel): |
59 | 83 | vertices: List[PointModel] |
60 | 84 |
|
| 85 | + class Config: |
| 86 | + extra = Extra.forbid |
61 | 87 |
|
62 | | -class PolygonAnnotationModel(BaseModel, extra=Extra.forbid): |
| 88 | + |
| 89 | +class PolygonAnnotationModel(BaseModel): |
63 | 90 | geometry: PolygonGeometryModel |
64 | 91 | type: str |
65 | 92 | label: Optional[str] = None |
66 | 93 | confidence: Optional[float] = None |
67 | 94 | classPdf: Optional[Dict[str, float]] = None |
68 | 95 | metadata: Optional[Dict[str, Any]] = None |
69 | 96 |
|
| 97 | + class Config: |
| 98 | + extra = Extra.forbid |
| 99 | + |
70 | 100 |
|
71 | 101 | def verify_output( |
72 | 102 | annotation_list: List[Dict[str, Any]], |
|
0 commit comments