| 305 | |
| 306 | |
| 307 | class TypedField(object): |
| 308 | def __init__(self, typed_field=None): |
| 309 | if typed_field is None: |
| 310 | typed_field = {} |
| 311 | self.type = sanitize_str_field_value(typed_field.get('type')).strip() |
| 312 | self.label = sanitize_str_field_value(typed_field.get('label')).strip() |
| 313 | value = typed_field.get('value') |
| 314 | if not isinstance(value, list): |
| 315 | if isinstance(value, (str, int, bool)): |
| 316 | value = [value] |
| 317 | elif isinstance(value, collections.abc.Iterable): |
| 318 | value = [x for x in value] |
| 319 | else: |
| 320 | value = [] |
| 321 | self.value = value |
| 322 | self.required = sanitize_bool_field_value(typed_field.get('required')) |
| 323 | |
| 324 | @classmethod |
| 325 | def new_field(cls, field_type, field_value, field_label=None): |
| 326 | # type: (str, Any, Optional[str]) -> 'TypedField' |
| 327 | f_type = sanitize_str_field_value(field_type) or 'text' |
| 328 | # TODO check field value |
| 329 | if not isinstance(field_value, list): |
| 330 | if field_value is not None: |
| 331 | field_value = [field_value] |
| 332 | else: |
| 333 | field_value = [] |
| 334 | tf = TypedField() |
| 335 | tf.type = f_type |
| 336 | tf.value = field_value |
| 337 | tf.label = sanitize_str_field_value(field_label) |
| 338 | return tf |
| 339 | |
| 340 | def get_default_value(self, value_type=None): # type: (Optional[Type]) -> any |
| 341 | value = None |
| 342 | if isinstance(self.value, list): |
| 343 | if len(self.value) > 0: |
| 344 | value = self.value[0] |
| 345 | else: |
| 346 | value = self.value |
| 347 | if isinstance(value_type, type): |
| 348 | if not isinstance(value, value_type): |
| 349 | return |
| 350 | return value |
| 351 | |
| 352 | def get_field_name(self): |
| 353 | return f'({self.type}).{self.label}' if self.type and self.label else \ |
| 354 | f'({self.type})' if self.type else \ |
| 355 | f'{self.label}' |
| 356 | |
| 357 | @staticmethod |
| 358 | def export_host_field(value): # type: (dict) -> Optional[str] |
| 359 | if isinstance(value, dict): |
| 360 | host = value.get('hostName') or '' |
| 361 | port = value.get('port') or '' |
| 362 | if host or port: |
| 363 | if port: |
| 364 | host += ':' + str(port) |
no outgoing calls
no test coverage detected