Skip to content

Commit 93534c6

Browse files
SamuelHassinerenovate[bot]RomuDeuxfois
authored
[client] Implement output contracts and findings (#86)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Romuald Lemesle <[email protected]>
1 parent cf03377 commit 93534c6

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

pyobas/contracts/contract_builder.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
from typing import List
22

3-
from pyobas.contracts.contract_config import ContractElement
3+
from pyobas.contracts.contract_config import ContractElement, ContractOutputElement
44

55

66
class ContractBuilder:
77
fields: List[ContractElement]
8+
outputs: List[ContractOutputElement]
89

910
def __init__(self):
1011
self.fields = []
12+
self.outputs = []
1113

1214
def add_fields(self, fields: List[ContractElement]):
1315
self.fields = self.fields + fields
1416
return self
1517

18+
def add_outputs(self, outputs: List[ContractOutputElement]):
19+
self.outputs = self.outputs + outputs
20+
return self
21+
1622
def mandatory(self, element: ContractElement):
1723
element.mandatory = True
1824
self.fields.append(element)
@@ -31,5 +37,8 @@ def mandatory_group(self, elements: List[ContractElement]):
3137
self.fields.append(element)
3238
return self
3339

34-
def build(self) -> List[ContractElement]:
40+
def build_fields(self) -> List[ContractElement]:
3541
return self.fields
42+
43+
def build_outputs(self) -> List[ContractOutputElement]:
44+
return self.outputs

pyobas/contracts/contract_config.py

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class SupportedLanguage(str, Enum):
1414
en: str = "en"
1515

1616

17-
class ContractType(str, Enum):
17+
class ContractFieldType(str, Enum):
1818
Text: str = "text"
1919
Number: str = "number"
2020
Tuple: str = "tuple"
@@ -32,6 +32,14 @@ class ContractType(str, Enum):
3232
Payload: str = "payload"
3333

3434

35+
class ContractOutputType(str, Enum):
36+
Text: str = "text"
37+
Number: str = "number"
38+
Port: str = "port"
39+
IPv4: str = "ipv4"
40+
IPv6: str = "ipv6"
41+
42+
3543
class ExpectationType(str, Enum):
3644
text: str = "TEXT"
3745
document: str = "DOCUMENT"
@@ -53,7 +61,7 @@ class Expectation:
5361
@dataclass
5462
class LinkedFieldModel:
5563
key: str
56-
type: ContractType
64+
type: ContractFieldType
5765

5866

5967
@dataclass
@@ -82,6 +90,14 @@ class ContractCardinalityElement(ContractElement, ABC):
8290
defaultValue: List[str] = field(default_factory=list)
8391

8492

93+
@dataclass
94+
class ContractOutputElement(ABC):
95+
type: str
96+
field: str
97+
labels: List[str]
98+
isMultiple: bool
99+
100+
85101
@dataclass
86102
class ContractConfig:
87103
type: str
@@ -96,6 +112,7 @@ class Contract:
96112
contract_id: str
97113
label: dict[SupportedLanguage, str]
98114
fields: List[ContractElement]
115+
outputs: List[ContractOutputElement]
99116
config: ContractConfig
100117
manual: bool
101118
variables: List[ContractVariable] = field(
@@ -121,7 +138,7 @@ def add_variable(self, var: ContractVariable):
121138
class ContractTeam(ContractCardinalityElement):
122139
@property
123140
def get_type(self) -> str:
124-
return ContractType.Team.value
141+
return ContractFieldType.Team.value
125142

126143

127144
@dataclass
@@ -131,7 +148,7 @@ class ContractText(ContractCardinalityElement):
131148

132149
@property
133150
def get_type(self) -> str:
134-
return ContractType.Text.value
151+
return ContractFieldType.Text.value
135152

136153

137154
def prepare_contracts(contracts):
@@ -161,7 +178,7 @@ def __post_init__(self):
161178

162179
@property
163180
def get_type(self) -> str:
164-
return ContractType.Tuple.value
181+
return ContractFieldType.Tuple.value
165182

166183

167184
@dataclass
@@ -172,7 +189,7 @@ class ContractTextArea(ContractCardinalityElement):
172189

173190
@property
174191
def get_type(self) -> str:
175-
return ContractType.Textarea.value
192+
return ContractFieldType.Textarea.value
176193

177194

178195
@dataclass
@@ -182,15 +199,15 @@ class ContractCheckbox(ContractElement):
182199

183200
@property
184201
def get_type(self) -> str:
185-
return ContractType.Checkbox.value
202+
return ContractFieldType.Checkbox.value
186203

187204

188205
@dataclass
189206
class ContractAttachment(ContractCardinalityElement):
190207

191208
@property
192209
def get_type(self) -> str:
193-
return ContractType.Attachment.value
210+
return ContractFieldType.Attachment.value
194211

195212

196213
@dataclass
@@ -200,7 +217,7 @@ class ContractExpectations(ContractCardinalityElement):
200217

201218
@property
202219
def get_type(self) -> str:
203-
return ContractType.Expectation.value
220+
return ContractFieldType.Expectation.value
204221

205222

206223
@dataclass
@@ -210,28 +227,28 @@ class ContractSelect(ContractCardinalityElement):
210227

211228
@property
212229
def get_type(self) -> str:
213-
return ContractType.Select.value
230+
return ContractFieldType.Select.value
214231

215232

216233
@dataclass
217234
class ContractAsset(ContractCardinalityElement):
218235

219236
@property
220237
def get_type(self) -> str:
221-
return ContractType.Asset.value
238+
return ContractFieldType.Asset.value
222239

223240

224241
@dataclass
225242
class ContractAssetGroup(ContractCardinalityElement):
226243

227244
@property
228245
def get_type(self) -> str:
229-
return ContractType.AssetGroup.value
246+
return ContractFieldType.AssetGroup.value
230247

231248

232249
@dataclass
233250
class ContractPayload(ContractCardinalityElement):
234251

235252
@property
236253
def get_type(self) -> str:
237-
return ContractType.Payload.value
254+
return ContractFieldType.Payload.value

test-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
black==24.10.0
1+
black==25.1.0
22
isort>=5.10
33
build>=0.7
44
isort>=5.10

0 commit comments

Comments
 (0)