regula-facesdk-webclient 7.2.388.dev0__py3-none-any.whl → 8.1.433.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. regula/facesdk/webclient/__init__.py +5 -5
  2. regula/facesdk/webclient/ext/api/group_api.py +2 -27
  3. regula/facesdk/webclient/ext/api/match_api.py +3 -29
  4. regula/facesdk/webclient/ext/api/person_api.py +8 -34
  5. regula/facesdk/webclient/ext/api/sdk.py +5 -3
  6. regula/facesdk/webclient/ext/api/search_api.py +2 -6
  7. regula/facesdk/webclient/ext/models/detect_request.py +6 -5
  8. regula/facesdk/webclient/ext/models/match_image.py +3 -3
  9. regula/facesdk/webclient/ext/models/match_request.py +7 -5
  10. regula/facesdk/webclient/gen/__init__.py +349 -18
  11. regula/facesdk/webclient/gen/api/__init__.py +30 -3
  12. regula/facesdk/webclient/gen/api/group_api.py +1854 -799
  13. regula/facesdk/webclient/gen/api/healthcheck_api.py +475 -215
  14. regula/facesdk/webclient/gen/api/liveness20_api.py +565 -0
  15. regula/facesdk/webclient/gen/api/match_api.py +801 -355
  16. regula/facesdk/webclient/gen/api/person_api.py +2399 -1039
  17. regula/facesdk/webclient/gen/api/search_api.py +286 -130
  18. regula/facesdk/webclient/gen/api_client.py +577 -476
  19. regula/facesdk/webclient/gen/api_response.py +21 -0
  20. regula/facesdk/webclient/gen/configuration.py +231 -105
  21. regula/facesdk/webclient/gen/exceptions.py +82 -33
  22. regula/facesdk/webclient/gen/models/__init__.py +202 -95
  23. regula/facesdk/webclient/gen/models/add_image_to_person_request.py +96 -0
  24. regula/facesdk/webclient/gen/models/add_image_to_person_request_data.py +92 -0
  25. regula/facesdk/webclient/gen/models/add_image_to_person_request_image.py +92 -0
  26. regula/facesdk/webclient/gen/models/add_image_to_person_response.py +92 -0
  27. regula/facesdk/webclient/gen/models/attribute_config.py +83 -0
  28. regula/facesdk/webclient/gen/models/attributes_data.py +82 -0
  29. regula/facesdk/webclient/gen/models/crop.py +88 -0
  30. regula/facesdk/webclient/gen/models/detail_item.py +136 -0
  31. regula/facesdk/webclient/gen/models/detect_attributes_details.py +84 -0
  32. regula/facesdk/webclient/gen/models/detect_details_meta.py +86 -0
  33. regula/facesdk/webclient/gen/models/detect_meta_data.py +84 -0
  34. regula/facesdk/webclient/gen/models/detect_request.py +94 -0
  35. regula/facesdk/webclient/gen/models/detect_request_data.py +90 -0
  36. regula/facesdk/webclient/gen/models/detect_response.py +89 -0
  37. regula/facesdk/webclient/gen/models/detect_response_results.py +86 -0
  38. regula/facesdk/webclient/gen/models/detect_result.py +98 -0
  39. regula/facesdk/webclient/gen/models/detection.py +98 -0
  40. regula/facesdk/webclient/gen/models/detection_attributes.py +92 -0
  41. regula/facesdk/webclient/gen/models/detection_attributes_details_inner.py +132 -0
  42. regula/facesdk/webclient/gen/models/detection_face.py +90 -0
  43. regula/facesdk/webclient/gen/models/detection_quality.py +107 -0
  44. regula/facesdk/webclient/gen/models/device_info.py +111 -0
  45. regula/facesdk/webclient/gen/models/face_attribute.py +40 -0
  46. regula/facesdk/webclient/gen/models/face_image_quality_align_type.py +32 -0
  47. regula/facesdk/webclient/gen/models/face_image_quality_groups.py +35 -0
  48. regula/facesdk/webclient/gen/models/face_image_quality_groups_strings.py +35 -0
  49. regula/facesdk/webclient/gen/models/face_image_quality_status.py +30 -0
  50. regula/facesdk/webclient/gen/models/face_quality_config_name.py +75 -0
  51. regula/facesdk/webclient/gen/models/face_quality_scenarios.py +37 -0
  52. regula/facesdk/webclient/gen/models/face_sdk_result.py +83 -0
  53. regula/facesdk/webclient/gen/models/face_sdk_result_code.py +68 -0
  54. regula/facesdk/webclient/gen/models/faces_response.py +100 -0
  55. regula/facesdk/webclient/gen/models/faces_response_data.py +90 -0
  56. regula/facesdk/webclient/gen/models/filter_op.py +29 -0
  57. regula/facesdk/webclient/gen/models/filter_search_request.py +87 -0
  58. regula/facesdk/webclient/gen/models/group.py +89 -0
  59. regula/facesdk/webclient/gen/models/group_data.py +85 -0
  60. regula/facesdk/webclient/gen/models/group_page.py +94 -0
  61. regula/facesdk/webclient/gen/models/group_page_items.py +90 -0
  62. regula/facesdk/webclient/gen/models/group_response.py +84 -0
  63. regula/facesdk/webclient/gen/models/group_to_create.py +86 -0
  64. regula/facesdk/webclient/gen/models/image.py +96 -0
  65. regula/facesdk/webclient/gen/models/image_fields.py +100 -0
  66. regula/facesdk/webclient/gen/models/image_fields_image.py +92 -0
  67. regula/facesdk/webclient/gen/models/image_page.py +94 -0
  68. regula/facesdk/webclient/gen/models/image_page_items.py +90 -0
  69. regula/facesdk/webclient/gen/models/image_source.py +34 -0
  70. regula/facesdk/webclient/gen/models/liveness_type.py +29 -0
  71. regula/facesdk/webclient/gen/models/match_and_search_request.py +103 -0
  72. regula/facesdk/webclient/gen/models/match_and_search_request_images_item.py +87 -0
  73. regula/facesdk/webclient/gen/models/match_and_search_response.py +107 -0
  74. regula/facesdk/webclient/gen/models/match_and_search_response_data.py +104 -0
  75. regula/facesdk/webclient/gen/models/match_and_search_response_data_detections_item.py +95 -0
  76. regula/facesdk/webclient/gen/models/match_image.py +89 -0
  77. regula/facesdk/webclient/gen/models/match_image_detection.py +95 -0
  78. regula/facesdk/webclient/gen/models/match_image_result.py +97 -0
  79. regula/facesdk/webclient/gen/models/match_request.py +102 -0
  80. regula/facesdk/webclient/gen/models/match_request_data.py +98 -0
  81. regula/facesdk/webclient/gen/models/match_response.py +105 -0
  82. regula/facesdk/webclient/gen/models/match_response_data.py +102 -0
  83. regula/facesdk/webclient/gen/models/operation_log.py +88 -0
  84. regula/facesdk/webclient/gen/models/output_image_params.py +89 -0
  85. regula/facesdk/webclient/gen/models/page.py +84 -0
  86. regula/facesdk/webclient/gen/models/person.py +97 -0
  87. regula/facesdk/webclient/gen/models/person_data.py +87 -0
  88. regula/facesdk/webclient/gen/models/person_fields.py +91 -0
  89. regula/facesdk/webclient/gen/models/person_items.py +90 -0
  90. regula/facesdk/webclient/gen/models/person_to_update_fields.py +89 -0
  91. regula/facesdk/webclient/gen/models/person_with_images.py +107 -0
  92. regula/facesdk/webclient/gen/models/person_with_images_data.py +90 -0
  93. regula/facesdk/webclient/gen/models/persons_page.py +94 -0
  94. regula/facesdk/webclient/gen/models/process_param.py +103 -0
  95. regula/facesdk/webclient/gen/models/process_param_attributes.py +90 -0
  96. regula/facesdk/webclient/gen/models/quality_config.py +86 -0
  97. regula/facesdk/webclient/gen/models/quality_detail.py +94 -0
  98. regula/facesdk/webclient/gen/models/quality_details_groups.py +90 -0
  99. regula/facesdk/webclient/gen/models/quality_request.py +93 -0
  100. regula/facesdk/webclient/gen/models/recognize_image.py +100 -0
  101. regula/facesdk/webclient/gen/models/recognize_image_data.py +84 -0
  102. regula/facesdk/webclient/gen/models/resize_options.py +86 -0
  103. regula/facesdk/webclient/gen/models/search_bad_params.py +86 -0
  104. regula/facesdk/webclient/gen/models/search_detection.py +102 -0
  105. regula/facesdk/webclient/gen/models/search_parameters.py +95 -0
  106. regula/facesdk/webclient/gen/models/search_parameters_create_person.py +86 -0
  107. regula/facesdk/webclient/gen/models/search_person.py +113 -0
  108. regula/facesdk/webclient/gen/models/search_person_data.py +96 -0
  109. regula/facesdk/webclient/gen/models/search_request.py +119 -0
  110. regula/facesdk/webclient/gen/models/search_result.py +92 -0
  111. regula/facesdk/webclient/gen/models/transaction_info.py +99 -0
  112. regula/facesdk/webclient/gen/models/transaction_labels.py +84 -0
  113. regula/facesdk/webclient/gen/models/update_group.py +85 -0
  114. regula/facesdk/webclient/gen/py.typed +0 -0
  115. regula/facesdk/webclient/gen/rest.py +136 -232
  116. {regula_facesdk_webclient-7.2.388.dev0.dist-info → regula_facesdk_webclient-8.1.433.dev0.dist-info}/METADATA +7 -4
  117. regula_facesdk_webclient-8.1.433.dev0.dist-info/RECORD +125 -0
  118. {regula_facesdk_webclient-7.2.388.dev0.dist-info → regula_facesdk_webclient-8.1.433.dev0.dist-info}/WHEEL +1 -1
  119. regula/facesdk/webclient/gen/api/diagnostics_api.py +0 -162
  120. regula/facesdk/webclient/gen/api/liveness_2_0_api.py +0 -306
  121. regula/facesdk/webclient/gen/api/liveness_api.py +0 -424
  122. regula/facesdk/webclient/gen/apis/__init__.py +0 -22
  123. regula/facesdk/webclient/gen/model/__init__.py +0 -5
  124. regula/facesdk/webclient/gen/model/add_image_to_person_request.py +0 -261
  125. regula/facesdk/webclient/gen/model/add_image_to_person_request_image.py +0 -204
  126. regula/facesdk/webclient/gen/model/add_image_to_person_response.py +0 -262
  127. regula/facesdk/webclient/gen/model/attribute_config.py +0 -120
  128. regula/facesdk/webclient/gen/model/attribute_config_list.py +0 -92
  129. regula/facesdk/webclient/gen/model/crop.py +0 -180
  130. regula/facesdk/webclient/gen/model/detect_attributes_details.py +0 -150
  131. regula/facesdk/webclient/gen/model/detect_details_meta.py +0 -178
  132. regula/facesdk/webclient/gen/model/detect_request.py +0 -232
  133. regula/facesdk/webclient/gen/model/detect_request_attributes.py +0 -120
  134. regula/facesdk/webclient/gen/model/detect_response.py +0 -147
  135. regula/facesdk/webclient/gen/model/detect_response_all_of.py +0 -120
  136. regula/facesdk/webclient/gen/model/detect_result.py +0 -235
  137. regula/facesdk/webclient/gen/model/detection.py +0 -230
  138. regula/facesdk/webclient/gen/model/detection_attributes.py +0 -150
  139. regula/facesdk/webclient/gen/model/detection_face.py +0 -232
  140. regula/facesdk/webclient/gen/model/detection_quality.py +0 -234
  141. regula/facesdk/webclient/gen/model/device_info.py +0 -231
  142. regula/facesdk/webclient/gen/model/face_align_type_quality.py +0 -109
  143. regula/facesdk/webclient/gen/model/face_attribute.py +0 -133
  144. regula/facesdk/webclient/gen/model/face_image_quality_align_type.py +0 -109
  145. regula/facesdk/webclient/gen/model/face_image_quality_groups.py +0 -118
  146. regula/facesdk/webclient/gen/model/face_image_quality_groups_strings.py +0 -118
  147. regula/facesdk/webclient/gen/model/face_image_quality_status.py +0 -103
  148. regula/facesdk/webclient/gen/model/face_quality_config_name.py +0 -238
  149. regula/facesdk/webclient/gen/model/face_quality_scenarios.py +0 -124
  150. regula/facesdk/webclient/gen/model/face_quality_status.py +0 -103
  151. regula/facesdk/webclient/gen/model/face_rectangular.py +0 -92
  152. regula/facesdk/webclient/gen/model/face_sdk_result.py +0 -121
  153. regula/facesdk/webclient/gen/model/face_sdk_result_code.py +0 -217
  154. regula/facesdk/webclient/gen/model/faces_response.py +0 -258
  155. regula/facesdk/webclient/gen/model/faces_response_all_of.py +0 -148
  156. regula/facesdk/webclient/gen/model/filter_op.py +0 -100
  157. regula/facesdk/webclient/gen/model/filter_search_request.py +0 -176
  158. regula/facesdk/webclient/gen/model/group.py +0 -206
  159. regula/facesdk/webclient/gen/model/group_all_of.py +0 -150
  160. regula/facesdk/webclient/gen/model/group_page.py +0 -178
  161. regula/facesdk/webclient/gen/model/group_page_all_of.py +0 -122
  162. regula/facesdk/webclient/gen/model/group_response.py +0 -150
  163. regula/facesdk/webclient/gen/model/group_to_create.py +0 -180
  164. regula/facesdk/webclient/gen/model/image.py +0 -318
  165. regula/facesdk/webclient/gen/model/image_fields.py +0 -258
  166. regula/facesdk/webclient/gen/model/image_fields_image.py +0 -204
  167. regula/facesdk/webclient/gen/model/image_page.py +0 -176
  168. regula/facesdk/webclient/gen/model/image_page_all_of.py +0 -120
  169. regula/facesdk/webclient/gen/model/image_source.py +0 -115
  170. regula/facesdk/webclient/gen/model/liveness_transaction.py +0 -334
  171. regula/facesdk/webclient/gen/model/liveness_type.py +0 -100
  172. regula/facesdk/webclient/gen/model/match_and_search_request.py +0 -290
  173. regula/facesdk/webclient/gen/model/match_and_search_request_all_of.py +0 -234
  174. regula/facesdk/webclient/gen/model/match_and_search_request_all_of_images.py +0 -148
  175. regula/facesdk/webclient/gen/model/match_and_search_request_images.py +0 -176
  176. regula/facesdk/webclient/gen/model/match_and_search_response.py +0 -233
  177. regula/facesdk/webclient/gen/model/match_and_search_response_all_of.py +0 -206
  178. regula/facesdk/webclient/gen/model/match_and_search_response_all_of_detections.py +0 -176
  179. regula/facesdk/webclient/gen/model/match_image.py +0 -205
  180. regula/facesdk/webclient/gen/model/match_image_detection.py +0 -178
  181. regula/facesdk/webclient/gen/model/match_image_result.py +0 -316
  182. regula/facesdk/webclient/gen/model/match_request.py +0 -233
  183. regula/facesdk/webclient/gen/model/match_request_output_image_params.py +0 -148
  184. regula/facesdk/webclient/gen/model/match_request_output_image_params_crop.py +0 -212
  185. regula/facesdk/webclient/gen/model/match_response.py +0 -205
  186. regula/facesdk/webclient/gen/model/match_response_all_of.py +0 -178
  187. regula/facesdk/webclient/gen/model/operation_log.py +0 -206
  188. regula/facesdk/webclient/gen/model/output_image_params.py +0 -146
  189. regula/facesdk/webclient/gen/model/page.py +0 -150
  190. regula/facesdk/webclient/gen/model/person.py +0 -319
  191. regula/facesdk/webclient/gen/model/person_all_of.py +0 -206
  192. regula/facesdk/webclient/gen/model/person_created_response.py +0 -178
  193. regula/facesdk/webclient/gen/model/person_fields.py +0 -235
  194. regula/facesdk/webclient/gen/model/person_to_update_fields.py +0 -206
  195. regula/facesdk/webclient/gen/model/person_with_images.py +0 -347
  196. regula/facesdk/webclient/gen/model/person_with_images_all_of.py +0 -122
  197. regula/facesdk/webclient/gen/model/persons_page.py +0 -176
  198. regula/facesdk/webclient/gen/model/persons_page_all_of.py +0 -120
  199. regula/facesdk/webclient/gen/model/persons_request.py +0 -291
  200. regula/facesdk/webclient/gen/model/persons_request_all_of.py +0 -150
  201. regula/facesdk/webclient/gen/model/process_param.py +0 -226
  202. regula/facesdk/webclient/gen/model/process_param_attributes.py +0 -120
  203. regula/facesdk/webclient/gen/model/quality_config.py +0 -154
  204. regula/facesdk/webclient/gen/model/quality_config_list.py +0 -92
  205. regula/facesdk/webclient/gen/model/quality_detail.py +0 -234
  206. regula/facesdk/webclient/gen/model/quality_details_groups.py +0 -202
  207. regula/facesdk/webclient/gen/model/quality_request.py +0 -146
  208. regula/facesdk/webclient/gen/model/recognize_image.py +0 -374
  209. regula/facesdk/webclient/gen/model/recognize_image_all_of.py +0 -150
  210. regula/facesdk/webclient/gen/model/resize_options.py +0 -178
  211. regula/facesdk/webclient/gen/model/rgb.py +0 -92
  212. regula/facesdk/webclient/gen/model/search_bad_params.py +0 -172
  213. regula/facesdk/webclient/gen/model/search_detection.py +0 -398
  214. regula/facesdk/webclient/gen/model/search_parameters.py +0 -174
  215. regula/facesdk/webclient/gen/model/search_parameters_create_person.py +0 -177
  216. regula/facesdk/webclient/gen/model/search_person.py +0 -373
  217. regula/facesdk/webclient/gen/model/search_person_all_of.py +0 -148
  218. regula/facesdk/webclient/gen/model/search_request.py +0 -394
  219. regula/facesdk/webclient/gen/model/search_request_all_of.py +0 -150
  220. regula/facesdk/webclient/gen/model/search_result.py +0 -150
  221. regula/facesdk/webclient/gen/model/search_result_all_of.py +0 -122
  222. regula/facesdk/webclient/gen/model/transaction_config.py +0 -92
  223. regula/facesdk/webclient/gen/model/transaction_info.py +0 -344
  224. regula/facesdk/webclient/gen/model/update_group.py +0 -150
  225. regula/facesdk/webclient/gen/model_utils.py +0 -2037
  226. regula_facesdk_webclient-7.2.388.dev0.dist-info/RECORD +0 -138
  227. {regula_facesdk_webclient-7.2.388.dev0.dist-info → regula_facesdk_webclient-8.1.433.dev0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,84 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Generated by: https://openapi-generator.tech
5
+ """
6
+
7
+ from __future__ import annotations
8
+ import pprint
9
+ import re # noqa: F401
10
+ import json
11
+
12
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
13
+ from typing import Any, ClassVar, Dict, List, Optional
14
+ from typing import Optional, Set
15
+ from typing_extensions import Self
16
+ from pydantic import SkipValidation, Field
17
+
18
+ class TransactionLabels(BaseModel):
19
+ """
20
+ TransactionLabels
21
+ """ # noqa: E501
22
+ tenant: SkipValidation[Optional[str]] = Field(alias="tenant", default=None, description="A label used to group transactions by customers, applications, or other criteria.")
23
+ env: SkipValidation[Optional[str]] = Field(alias="env", default=None, description="A label used to differentiate transactions by development stages.")
24
+ __properties: ClassVar[List[str]] = ["tenant", "env"]
25
+
26
+ model_config = ConfigDict(
27
+ populate_by_name=True,
28
+ validate_assignment=True,
29
+ protected_namespaces=(),
30
+ arbitrary_types_allowed=True,
31
+ use_enum_values=True
32
+ )
33
+
34
+
35
+ def to_str(self) -> str:
36
+ """Returns the string representation of the model using alias"""
37
+ return pprint.pformat(self.model_dump(by_alias=True))
38
+
39
+ def to_json(self) -> str:
40
+ """Returns the JSON representation of the model using alias"""
41
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
42
+ return json.dumps(self.to_dict())
43
+
44
+ @classmethod
45
+ def from_json(cls, json_str: str) -> Optional[Self]:
46
+ """Create an instance of TransactionLabels from a JSON string"""
47
+ return cls.from_dict(json.loads(json_str))
48
+
49
+ def to_dict(self) -> Dict[str, Any]:
50
+ """Return the dictionary representation of the model using alias.
51
+
52
+ This has the following differences from calling pydantic's
53
+ `self.model_dump(by_alias=True)`:
54
+
55
+ * `None` is only added to the output dict for nullable fields that
56
+ were set at model initialization. Other fields with value `None`
57
+ are ignored.
58
+ """
59
+ excluded_fields: Set[str] = set([
60
+ ])
61
+
62
+ _dict = self.model_dump(
63
+ by_alias=True,
64
+ exclude=excluded_fields,
65
+ exclude_none=True,
66
+ )
67
+ return _dict
68
+
69
+ @classmethod
70
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
71
+ """Create an instance of TransactionLabels from a dict"""
72
+ if obj is None:
73
+ return None
74
+
75
+ if not isinstance(obj, dict):
76
+ return cls.model_validate(obj)
77
+
78
+ _obj = cls.model_validate({
79
+ "tenant": obj.get("tenant"),
80
+ "env": obj.get("env")
81
+ })
82
+ return _obj
83
+
84
+
@@ -0,0 +1,85 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Generated by: https://openapi-generator.tech
5
+ """
6
+
7
+ from __future__ import annotations
8
+ import pprint
9
+ import re # noqa: F401
10
+ import json
11
+
12
+ from pydantic import BaseModel, ConfigDict, Field
13
+ from typing import Any, ClassVar, Dict, List, Optional
14
+ from uuid import UUID
15
+ from typing import Optional, Set
16
+ from typing_extensions import Self
17
+ from pydantic import SkipValidation, Field
18
+
19
+ class UpdateGroup(BaseModel):
20
+ """
21
+ Update group.
22
+ """ # noqa: E501
23
+ add_items: SkipValidation[Optional[List[str]]] = Field(alias="addItems", default=None, description="Add items.")
24
+ remove_items: SkipValidation[Optional[List[str]]] = Field(alias="removeItems", default=None, description="Remove items.")
25
+ __properties: ClassVar[List[str]] = ["addItems", "removeItems"]
26
+
27
+ model_config = ConfigDict(
28
+ populate_by_name=True,
29
+ validate_assignment=True,
30
+ protected_namespaces=(),
31
+ arbitrary_types_allowed=True,
32
+ use_enum_values=True
33
+ )
34
+
35
+
36
+ def to_str(self) -> str:
37
+ """Returns the string representation of the model using alias"""
38
+ return pprint.pformat(self.model_dump(by_alias=True))
39
+
40
+ def to_json(self) -> str:
41
+ """Returns the JSON representation of the model using alias"""
42
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
43
+ return json.dumps(self.to_dict())
44
+
45
+ @classmethod
46
+ def from_json(cls, json_str: str) -> Optional[Self]:
47
+ """Create an instance of UpdateGroup from a JSON string"""
48
+ return cls.from_dict(json.loads(json_str))
49
+
50
+ def to_dict(self) -> Dict[str, Any]:
51
+ """Return the dictionary representation of the model using alias.
52
+
53
+ This has the following differences from calling pydantic's
54
+ `self.model_dump(by_alias=True)`:
55
+
56
+ * `None` is only added to the output dict for nullable fields that
57
+ were set at model initialization. Other fields with value `None`
58
+ are ignored.
59
+ """
60
+ excluded_fields: Set[str] = set([
61
+ ])
62
+
63
+ _dict = self.model_dump(
64
+ by_alias=True,
65
+ exclude=excluded_fields,
66
+ exclude_none=True,
67
+ )
68
+ return _dict
69
+
70
+ @classmethod
71
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
72
+ """Create an instance of UpdateGroup from a dict"""
73
+ if obj is None:
74
+ return None
75
+
76
+ if not isinstance(obj, dict):
77
+ return cls.model_validate(obj)
78
+
79
+ _obj = cls.model_validate({
80
+ "addItems": obj.get("addItems"),
81
+ "removeItems": obj.get("removeItems")
82
+ })
83
+ return _obj
84
+
85
+
File without changes
@@ -1,54 +1,60 @@
1
- """
2
- Regula Face SDK Web API
3
-
4
- <a href=\"https://regulaforensics.com/products/face-recognition-sdk/ \" target=\"_blank\">Regula Face SDK</a> is a cross-platform biometric verification solution for a digital identity verification process and image quality assurance. The SDK enables convenient and reliable face capture on the client side (mobile, web, and desktop) and further processing on the client or server side. The Face SDK includes the following features: * <a href=\"https://docs.regulaforensics.com/develop/face-sdk/overview/introduction/#face-detection\" target=\"_blank\">Face detection and image quality assessment</a> * <a href=\"https://docs.regulaforensics.com/develop/face-sdk/overview/introduction/#face-comparison-11\" target=\"_blank\">Face match (1:1)</a> * <a href=\"https://docs.regulaforensics.com/develop/face-sdk/overview/introduction/#face-identification-1n\" target=\"_blank\">Face search (1:N)</a> * <a href=\"https://docs.regulaforensics.com/develop/face-sdk/overview/introduction/#liveness-assessment\" target=\"_blank\">Liveness detection</a> Here is the <a href=\"https://github.com/regulaforensics/FaceSDK-web-openapi \" target=\"_blank\">OpenAPI specification on GitHub</a>. ### Clients * [JavaScript](https://github.com/regulaforensics/FaceSDK-web-js-client) client for the browser and node.js based on axios * [Java](https://github.com/regulaforensics/FaceSDK-web-java-client) client compatible with jvm and android * [Python](https://github.com/regulaforensics/FaceSDK-web-python-client) 3.5+ client * [C#](https://github.com/regulaforensics/FaceSDK-web-csharp-client) client for .NET & .NET Core # noqa: E501
1
+ # coding: utf-8
5
2
 
6
- The version of the OpenAPI document: 7.2.0
3
+ """
7
4
  Generated by: https://openapi-generator.tech
8
5
  """
9
6
 
10
-
11
7
  import io
12
8
  import json
13
- import logging
14
9
  import re
15
10
  import ssl
16
- from urllib.parse import urlencode
17
- from urllib.parse import urlparse
18
- from urllib.request import proxy_bypass_environment
11
+
19
12
  import urllib3
20
- import ipaddress
21
13
 
22
- from regula.facesdk.webclient.gen.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError
14
+ from regula.facesdk.webclient.gen.exceptions import ApiException, ApiValueError
15
+
16
+ SUPPORTED_SOCKS_PROXIES = {"socks5", "socks5h", "socks4", "socks4a"}
17
+ RESTResponseType = urllib3.HTTPResponse
23
18
 
24
19
 
25
- logger = logging.getLogger(__name__)
20
+ def is_socks_proxy_url(url):
21
+ if url is None:
22
+ return False
23
+ split_section = url.split("://")
24
+ if len(split_section) < 2:
25
+ return False
26
+ else:
27
+ return split_section[0].lower() in SUPPORTED_SOCKS_PROXIES
26
28
 
27
29
 
28
30
  class RESTResponse(io.IOBase):
29
31
 
30
- def __init__(self, resp):
31
- self.urllib3_response = resp
32
+ def __init__(self, resp) -> None:
33
+ self.response = resp
32
34
  self.status = resp.status
33
35
  self.reason = resp.reason
34
- self.data = resp.data
36
+ self.data = None
37
+
38
+ def read(self):
39
+ if self.data is None:
40
+ self.data = self.response.data
41
+ return self.data
35
42
 
36
43
  def getheaders(self):
37
44
  """Returns a dictionary of the response headers."""
38
- return self.urllib3_response.getheaders()
45
+ return self.response.headers
39
46
 
40
47
  def getheader(self, name, default=None):
41
48
  """Returns a given response header."""
42
- return self.urllib3_response.getheader(name, default)
49
+ return self.response.headers.get(name, default)
43
50
 
44
51
 
45
- class RESTClientObject(object):
52
+ class RESTClientObject:
46
53
 
47
- def __init__(self, configuration, pools_size=4, maxsize=None):
54
+ def __init__(self, configuration) -> None:
48
55
  # urllib3.PoolManager will pass all kw parameters to connectionpool
49
56
  # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501
50
57
  # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501
51
- # maxsize is the number of requests to host that are allowed in parallel # noqa: E501
52
58
  # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501
53
59
 
54
60
  # cert_reqs
@@ -57,70 +63,80 @@ class RESTClientObject(object):
57
63
  else:
58
64
  cert_reqs = ssl.CERT_NONE
59
65
 
60
- addition_pool_args = {}
66
+ pool_args = {
67
+ "cert_reqs": cert_reqs,
68
+ "ca_certs": configuration.ssl_ca_cert,
69
+ "cert_file": configuration.cert_file,
70
+ "key_file": configuration.key_file,
71
+ "ca_cert_data": configuration.ca_cert_data,
72
+ }
61
73
  if configuration.assert_hostname is not None:
62
- addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501
74
+ pool_args['assert_hostname'] = (
75
+ configuration.assert_hostname
76
+ )
63
77
 
64
78
  if configuration.retries is not None:
65
- addition_pool_args['retries'] = configuration.retries
79
+ pool_args['retries'] = configuration.retries
80
+
81
+ if configuration.tls_server_name:
82
+ pool_args['server_hostname'] = configuration.tls_server_name
83
+
66
84
 
67
85
  if configuration.socket_options is not None:
68
- addition_pool_args['socket_options'] = configuration.socket_options
86
+ pool_args['socket_options'] = configuration.socket_options
69
87
 
70
- if maxsize is None:
71
- if configuration.connection_pool_maxsize is not None:
72
- maxsize = configuration.connection_pool_maxsize
73
- else:
74
- maxsize = 4
88
+ if configuration.connection_pool_maxsize is not None:
89
+ pool_args['maxsize'] = configuration.connection_pool_maxsize
75
90
 
76
91
  # https pool manager
77
- if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''):
78
- self.pool_manager = urllib3.ProxyManager(
79
- num_pools=pools_size,
80
- maxsize=maxsize,
81
- cert_reqs=cert_reqs,
82
- ca_certs=configuration.ssl_ca_cert,
83
- cert_file=configuration.cert_file,
84
- key_file=configuration.key_file,
85
- proxy_url=configuration.proxy,
86
- proxy_headers=configuration.proxy_headers,
87
- **addition_pool_args
88
- )
92
+ self.pool_manager: urllib3.PoolManager
93
+
94
+ if configuration.proxy:
95
+ if is_socks_proxy_url(configuration.proxy):
96
+ from urllib3.contrib.socks import SOCKSProxyManager
97
+ pool_args["proxy_url"] = configuration.proxy
98
+ pool_args["headers"] = configuration.proxy_headers
99
+ self.pool_manager = SOCKSProxyManager(**pool_args)
100
+ else:
101
+ pool_args["proxy_url"] = configuration.proxy
102
+ pool_args["proxy_headers"] = configuration.proxy_headers
103
+ self.pool_manager = urllib3.ProxyManager(**pool_args)
89
104
  else:
90
- self.pool_manager = urllib3.PoolManager(
91
- num_pools=pools_size,
92
- maxsize=maxsize,
93
- cert_reqs=cert_reqs,
94
- ca_certs=configuration.ssl_ca_cert,
95
- cert_file=configuration.cert_file,
96
- key_file=configuration.key_file,
97
- **addition_pool_args
98
- )
99
-
100
- def request(self, method, url, query_params=None, headers=None,
101
- body=None, post_params=None, _preload_content=True,
102
- _request_timeout=None):
105
+ self.pool_manager = urllib3.PoolManager(**pool_args)
106
+
107
+ def request(
108
+ self,
109
+ method,
110
+ url,
111
+ headers=None,
112
+ body=None,
113
+ post_params=None,
114
+ _request_timeout=None
115
+ ):
103
116
  """Perform requests.
104
117
 
105
118
  :param method: http request method
106
119
  :param url: http request url
107
- :param query_params: query parameters in the url
108
120
  :param headers: http request headers
109
121
  :param body: request json body, for `application/json`
110
122
  :param post_params: request post parameters,
111
123
  `application/x-www-form-urlencoded`
112
124
  and `multipart/form-data`
113
- :param _preload_content: if False, the urllib3.HTTPResponse object will
114
- be returned without reading/decoding response
115
- data. Default is True.
116
125
  :param _request_timeout: timeout setting for this request. If one
117
126
  number provided, it will be total request
118
127
  timeout. It can also be a pair (tuple) of
119
128
  (connection, read) timeouts.
120
129
  """
121
130
  method = method.upper()
122
- assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT',
123
- 'PATCH', 'OPTIONS']
131
+ assert method in [
132
+ 'GET',
133
+ 'HEAD',
134
+ 'DELETE',
135
+ 'POST',
136
+ 'PUT',
137
+ 'PATCH',
138
+ 'OPTIONS'
139
+ ]
124
140
 
125
141
  if post_params and body:
126
142
  raise ApiValueError(
@@ -132,60 +148,83 @@ class RESTClientObject(object):
132
148
 
133
149
  timeout = None
134
150
  if _request_timeout:
135
- if isinstance(_request_timeout, (int, float)): # noqa: E501,F821
151
+ if isinstance(_request_timeout, (int, float)):
136
152
  timeout = urllib3.Timeout(total=_request_timeout)
137
- elif (isinstance(_request_timeout, tuple) and
138
- len(_request_timeout) == 2):
153
+ elif (
154
+ isinstance(_request_timeout, tuple)
155
+ and len(_request_timeout) == 2
156
+ ):
139
157
  timeout = urllib3.Timeout(
140
- connect=_request_timeout[0], read=_request_timeout[1])
158
+ connect=_request_timeout[0],
159
+ read=_request_timeout[1]
160
+ )
141
161
 
142
162
  try:
143
163
  # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE`
144
164
  if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']:
145
- # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests
146
- if (method != 'DELETE') and ('Content-Type' not in headers):
147
- headers['Content-Type'] = 'application/json'
148
- if query_params:
149
- url += '?' + urlencode(query_params)
150
- if ('Content-Type' not in headers) or (re.search('json', headers['Content-Type'], re.IGNORECASE)):
165
+
166
+ # no content type provided or payload is json
167
+ content_type = headers.get('Content-Type')
168
+ if (
169
+ not content_type
170
+ or re.search('json', content_type, re.IGNORECASE)
171
+ ):
151
172
  request_body = None
152
173
  if body is not None:
153
174
  request_body = json.dumps(body)
154
175
  r = self.pool_manager.request(
155
- method, url,
176
+ method,
177
+ url,
156
178
  body=request_body,
157
- preload_content=_preload_content,
158
179
  timeout=timeout,
159
- headers=headers)
160
- elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501
180
+ headers=headers,
181
+ preload_content=False
182
+ )
183
+ elif content_type == 'application/x-www-form-urlencoded':
161
184
  r = self.pool_manager.request(
162
- method, url,
185
+ method,
186
+ url,
163
187
  fields=post_params,
164
188
  encode_multipart=False,
165
- preload_content=_preload_content,
166
189
  timeout=timeout,
167
- headers=headers)
168
- elif headers['Content-Type'] == 'multipart/form-data':
190
+ headers=headers,
191
+ preload_content=False
192
+ )
193
+ elif content_type == 'multipart/form-data':
169
194
  # must del headers['Content-Type'], or the correct
170
195
  # Content-Type which generated by urllib3 will be
171
196
  # overwritten.
172
197
  del headers['Content-Type']
198
+ # Ensures that dict objects are serialized
199
+ post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a,b) for a, b in post_params]
173
200
  r = self.pool_manager.request(
174
- method, url,
201
+ method,
202
+ url,
175
203
  fields=post_params,
176
204
  encode_multipart=True,
177
- preload_content=_preload_content,
178
205
  timeout=timeout,
179
- headers=headers)
206
+ headers=headers,
207
+ preload_content=False
208
+ )
180
209
  # Pass a `string` parameter directly in the body to support
181
- # other content types than Json when `body` argument is
182
- # provided in serialized form
210
+ # other content types than JSON when `body` argument is
211
+ # provided in serialized form.
183
212
  elif isinstance(body, str) or isinstance(body, bytes):
184
- request_body = body
185
213
  r = self.pool_manager.request(
186
- method, url,
214
+ method,
215
+ url,
216
+ body=body,
217
+ timeout=timeout,
218
+ headers=headers,
219
+ preload_content=False
220
+ )
221
+ elif headers['Content-Type'].startswith('text/') and isinstance(body, bool):
222
+ request_body = "true" if body else "false"
223
+ r = self.pool_manager.request(
224
+ method,
225
+ url,
187
226
  body=request_body,
188
- preload_content=_preload_content,
227
+ preload_content=False,
189
228
  timeout=timeout,
190
229
  headers=headers)
191
230
  else:
@@ -196,151 +235,16 @@ class RESTClientObject(object):
196
235
  raise ApiException(status=0, reason=msg)
197
236
  # For `GET`, `HEAD`
198
237
  else:
199
- r = self.pool_manager.request(method, url,
200
- fields=query_params,
201
- preload_content=_preload_content,
202
- timeout=timeout,
203
- headers=headers)
238
+ r = self.pool_manager.request(
239
+ method,
240
+ url,
241
+ fields={},
242
+ timeout=timeout,
243
+ headers=headers,
244
+ preload_content=False
245
+ )
204
246
  except urllib3.exceptions.SSLError as e:
205
- msg = "{0}\n{1}".format(type(e).__name__, str(e))
247
+ msg = "\n".join([type(e).__name__, str(e)])
206
248
  raise ApiException(status=0, reason=msg)
207
249
 
208
- if _preload_content:
209
- r = RESTResponse(r)
210
-
211
- # log response body
212
- logger.debug("response body: %s", r.data)
213
-
214
- if not 200 <= r.status <= 299:
215
- if r.status == 401:
216
- raise UnauthorizedException(http_resp=r)
217
-
218
- if r.status == 403:
219
- raise ForbiddenException(http_resp=r)
220
-
221
- if r.status == 404:
222
- raise NotFoundException(http_resp=r)
223
-
224
- if 500 <= r.status <= 599:
225
- raise ServiceException(http_resp=r)
226
-
227
- raise ApiException(http_resp=r)
228
-
229
- return r
230
-
231
- def GET(self, url, headers=None, query_params=None, _preload_content=True,
232
- _request_timeout=None):
233
- return self.request("GET", url,
234
- headers=headers,
235
- _preload_content=_preload_content,
236
- _request_timeout=_request_timeout,
237
- query_params=query_params)
238
-
239
- def HEAD(self, url, headers=None, query_params=None, _preload_content=True,
240
- _request_timeout=None):
241
- return self.request("HEAD", url,
242
- headers=headers,
243
- _preload_content=_preload_content,
244
- _request_timeout=_request_timeout,
245
- query_params=query_params)
246
-
247
- def OPTIONS(self, url, headers=None, query_params=None, post_params=None,
248
- body=None, _preload_content=True, _request_timeout=None):
249
- return self.request("OPTIONS", url,
250
- headers=headers,
251
- query_params=query_params,
252
- post_params=post_params,
253
- _preload_content=_preload_content,
254
- _request_timeout=_request_timeout,
255
- body=body)
256
-
257
- def DELETE(self, url, headers=None, query_params=None, body=None,
258
- _preload_content=True, _request_timeout=None):
259
- return self.request("DELETE", url,
260
- headers=headers,
261
- query_params=query_params,
262
- _preload_content=_preload_content,
263
- _request_timeout=_request_timeout,
264
- body=body)
265
-
266
- def POST(self, url, headers=None, query_params=None, post_params=None,
267
- body=None, _preload_content=True, _request_timeout=None):
268
- return self.request("POST", url,
269
- headers=headers,
270
- query_params=query_params,
271
- post_params=post_params,
272
- _preload_content=_preload_content,
273
- _request_timeout=_request_timeout,
274
- body=body)
275
-
276
- def PUT(self, url, headers=None, query_params=None, post_params=None,
277
- body=None, _preload_content=True, _request_timeout=None):
278
- return self.request("PUT", url,
279
- headers=headers,
280
- query_params=query_params,
281
- post_params=post_params,
282
- _preload_content=_preload_content,
283
- _request_timeout=_request_timeout,
284
- body=body)
285
-
286
- def PATCH(self, url, headers=None, query_params=None, post_params=None,
287
- body=None, _preload_content=True, _request_timeout=None):
288
- return self.request("PATCH", url,
289
- headers=headers,
290
- query_params=query_params,
291
- post_params=post_params,
292
- _preload_content=_preload_content,
293
- _request_timeout=_request_timeout,
294
- body=body)
295
-
296
- # end of class RESTClientObject
297
- def is_ipv4(target):
298
- """ Test if IPv4 address or not
299
- """
300
- try:
301
- chk = ipaddress.IPv4Address(target)
302
- return True
303
- except ipaddress.AddressValueError:
304
- return False
305
-
306
- def in_ipv4net(target, net):
307
- """ Test if target belongs to given IPv4 network
308
- """
309
- try:
310
- nw = ipaddress.IPv4Network(net)
311
- ip = ipaddress.IPv4Address(target)
312
- if ip in nw:
313
- return True
314
- return False
315
- except ipaddress.AddressValueError:
316
- return False
317
- except ipaddress.NetmaskValueError:
318
- return False
319
-
320
- def should_bypass_proxies(url, no_proxy=None):
321
- """ Yet another requests.should_bypass_proxies
322
- Test if proxies should not be used for a particular url.
323
- """
324
-
325
- parsed = urlparse(url)
326
-
327
- # special cases
328
- if parsed.hostname in [None, '']:
329
- return True
330
-
331
- # special cases
332
- if no_proxy in [None , '']:
333
- return False
334
- if no_proxy == '*':
335
- return True
336
-
337
- no_proxy = no_proxy.lower().replace(' ','');
338
- entries = (
339
- host for host in no_proxy.split(',') if host
340
- )
341
-
342
- if is_ipv4(parsed.hostname):
343
- for item in entries:
344
- if in_ipv4net(parsed.hostname, item):
345
- return True
346
- return proxy_bypass_environment(parsed.hostname, {'no': no_proxy} )
250
+ return RESTResponse(r)