rapidata 2.18.0__py3-none-any.whl → 2.19.1__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.

Potentially problematic release.


This version of rapidata might be problematic. Click here for more details.

Files changed (30) hide show
  1. rapidata/__init__.py +2 -0
  2. rapidata/api_client/__init__.py +7 -5
  3. rapidata/api_client/api/order_api.py +3 -6
  4. rapidata/api_client/api/pipeline_api.py +665 -98
  5. rapidata/api_client/api/validation_set_api.py +6 -6
  6. rapidata/api_client/models/__init__.py +7 -5
  7. rapidata/api_client/models/add_user_response_result.py +3 -3
  8. rapidata/api_client/models/campaign_query_result.py +2 -2
  9. rapidata/api_client/models/campaign_status.py +2 -1
  10. rapidata/api_client/models/create_order_model_user_filters_inner.py +39 -9
  11. rapidata/api_client/models/get_simple_workflow_results_result.py +3 -3
  12. rapidata/api_client/models/get_validation_rapids_result.py +143 -0
  13. rapidata/api_client/models/get_validation_rapids_result_asset.py +174 -0
  14. rapidata/api_client/models/get_validation_rapids_result_paged_result.py +105 -0
  15. rapidata/api_client/models/get_validation_rapids_result_payload.py +252 -0
  16. rapidata/api_client/models/get_validation_rapids_result_truth.py +258 -0
  17. rapidata/api_client/models/not_user_filter_model.py +102 -0
  18. rapidata/api_client/models/or_user_filter_model.py +106 -0
  19. rapidata/api_client/models/query_validation_rapids_result.py +9 -9
  20. rapidata/api_client/rest.py +94 -72
  21. rapidata/api_client_README.md +9 -5
  22. rapidata/rapidata_client/__init__.py +2 -0
  23. rapidata/rapidata_client/filter/__init__.py +2 -0
  24. rapidata/rapidata_client/filter/not_filter.py +30 -0
  25. rapidata/rapidata_client/filter/or_filter.py +30 -0
  26. rapidata/rapidata_client/filter/rapidata_filters.py +6 -3
  27. {rapidata-2.18.0.dist-info → rapidata-2.19.1.dist-info}/METADATA +1 -1
  28. {rapidata-2.18.0.dist-info → rapidata-2.19.1.dist-info}/RECORD +30 -21
  29. {rapidata-2.18.0.dist-info → rapidata-2.19.1.dist-info}/LICENSE +0 -0
  30. {rapidata-2.18.0.dist-info → rapidata-2.19.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,102 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Rapidata.Dataset
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
21
+ from typing import Any, ClassVar, Dict, List
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class NotUserFilterModel(BaseModel):
26
+ """
27
+ NotUserFilterModel
28
+ """ # noqa: E501
29
+ t: StrictStr = Field(description="Discriminator value for NotFilter", alias="_t")
30
+ filter: CreateOrderModelUserFiltersInner
31
+ __properties: ClassVar[List[str]] = ["_t", "filter"]
32
+
33
+ @field_validator('t')
34
+ def t_validate_enum(cls, value):
35
+ """Validates the enum"""
36
+ if value not in set(['NotFilter']):
37
+ raise ValueError("must be one of enum values ('NotFilter')")
38
+ return value
39
+
40
+ model_config = ConfigDict(
41
+ populate_by_name=True,
42
+ validate_assignment=True,
43
+ protected_namespaces=(),
44
+ )
45
+
46
+
47
+ def to_str(self) -> str:
48
+ """Returns the string representation of the model using alias"""
49
+ return pprint.pformat(self.model_dump(by_alias=True))
50
+
51
+ def to_json(self) -> str:
52
+ """Returns the JSON representation of the model using alias"""
53
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
54
+ return json.dumps(self.to_dict())
55
+
56
+ @classmethod
57
+ def from_json(cls, json_str: str) -> Optional[Self]:
58
+ """Create an instance of NotUserFilterModel from a JSON string"""
59
+ return cls.from_dict(json.loads(json_str))
60
+
61
+ def to_dict(self) -> Dict[str, Any]:
62
+ """Return the dictionary representation of the model using alias.
63
+
64
+ This has the following differences from calling pydantic's
65
+ `self.model_dump(by_alias=True)`:
66
+
67
+ * `None` is only added to the output dict for nullable fields that
68
+ were set at model initialization. Other fields with value `None`
69
+ are ignored.
70
+ """
71
+ excluded_fields: Set[str] = set([
72
+ ])
73
+
74
+ _dict = self.model_dump(
75
+ by_alias=True,
76
+ exclude=excluded_fields,
77
+ exclude_none=True,
78
+ )
79
+ # override the default output from pydantic by calling `to_dict()` of filter
80
+ if self.filter:
81
+ _dict['filter'] = self.filter.to_dict()
82
+ return _dict
83
+
84
+ @classmethod
85
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
86
+ """Create an instance of NotUserFilterModel from a dict"""
87
+ if obj is None:
88
+ return None
89
+
90
+ if not isinstance(obj, dict):
91
+ return cls.model_validate(obj)
92
+
93
+ _obj = cls.model_validate({
94
+ "_t": obj.get("_t") if obj.get("_t") is not None else 'NotFilter',
95
+ "filter": CreateOrderModelUserFiltersInner.from_dict(obj["filter"]) if obj.get("filter") is not None else None
96
+ })
97
+ return _obj
98
+
99
+ from rapidata.api_client.models.create_order_model_user_filters_inner import CreateOrderModelUserFiltersInner
100
+ # TODO: Rewrite to not use raise_errors
101
+ NotUserFilterModel.model_rebuild(raise_errors=False)
102
+
@@ -0,0 +1,106 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Rapidata.Dataset
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
7
+
8
+ The version of the OpenAPI document: v1
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
21
+ from typing import Any, ClassVar, Dict, List
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class OrUserFilterModel(BaseModel):
26
+ """
27
+ OrUserFilterModel
28
+ """ # noqa: E501
29
+ t: StrictStr = Field(description="Discriminator value for OrFilter", alias="_t")
30
+ filters: List[CreateOrderModelUserFiltersInner]
31
+ __properties: ClassVar[List[str]] = ["_t", "filters"]
32
+
33
+ @field_validator('t')
34
+ def t_validate_enum(cls, value):
35
+ """Validates the enum"""
36
+ if value not in set(['OrFilter']):
37
+ raise ValueError("must be one of enum values ('OrFilter')")
38
+ return value
39
+
40
+ model_config = ConfigDict(
41
+ populate_by_name=True,
42
+ validate_assignment=True,
43
+ protected_namespaces=(),
44
+ )
45
+
46
+
47
+ def to_str(self) -> str:
48
+ """Returns the string representation of the model using alias"""
49
+ return pprint.pformat(self.model_dump(by_alias=True))
50
+
51
+ def to_json(self) -> str:
52
+ """Returns the JSON representation of the model using alias"""
53
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
54
+ return json.dumps(self.to_dict())
55
+
56
+ @classmethod
57
+ def from_json(cls, json_str: str) -> Optional[Self]:
58
+ """Create an instance of OrUserFilterModel from a JSON string"""
59
+ return cls.from_dict(json.loads(json_str))
60
+
61
+ def to_dict(self) -> Dict[str, Any]:
62
+ """Return the dictionary representation of the model using alias.
63
+
64
+ This has the following differences from calling pydantic's
65
+ `self.model_dump(by_alias=True)`:
66
+
67
+ * `None` is only added to the output dict for nullable fields that
68
+ were set at model initialization. Other fields with value `None`
69
+ are ignored.
70
+ """
71
+ excluded_fields: Set[str] = set([
72
+ ])
73
+
74
+ _dict = self.model_dump(
75
+ by_alias=True,
76
+ exclude=excluded_fields,
77
+ exclude_none=True,
78
+ )
79
+ # override the default output from pydantic by calling `to_dict()` of each item in filters (list)
80
+ _items = []
81
+ if self.filters:
82
+ for _item_filters in self.filters:
83
+ if _item_filters:
84
+ _items.append(_item_filters.to_dict())
85
+ _dict['filters'] = _items
86
+ return _dict
87
+
88
+ @classmethod
89
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
90
+ """Create an instance of OrUserFilterModel from a dict"""
91
+ if obj is None:
92
+ return None
93
+
94
+ if not isinstance(obj, dict):
95
+ return cls.model_validate(obj)
96
+
97
+ _obj = cls.model_validate({
98
+ "_t": obj.get("_t") if obj.get("_t") is not None else 'OrFilter',
99
+ "filters": [CreateOrderModelUserFiltersInner.from_dict(_item) for _item in obj["filters"]] if obj.get("filters") is not None else None
100
+ })
101
+ return _obj
102
+
103
+ from rapidata.api_client.models.create_order_model_user_filters_inner import CreateOrderModelUserFiltersInner
104
+ # TODO: Rewrite to not use raise_errors
105
+ OrUserFilterModel.model_rebuild(raise_errors=False)
106
+
@@ -19,10 +19,10 @@ import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
- from rapidata.api_client.models.add_user_response_result_validation_truth import AddUserResponseResultValidationTruth
23
22
  from rapidata.api_client.models.file_asset_model_metadata_value import FileAssetModelMetadataValue
24
- from rapidata.api_client.models.query_validation_rapids_result_asset import QueryValidationRapidsResultAsset
25
- from rapidata.api_client.models.query_validation_rapids_result_payload import QueryValidationRapidsResultPayload
23
+ from rapidata.api_client.models.get_validation_rapids_result_asset import GetValidationRapidsResultAsset
24
+ from rapidata.api_client.models.get_validation_rapids_result_payload import GetValidationRapidsResultPayload
25
+ from rapidata.api_client.models.get_validation_rapids_result_truth import GetValidationRapidsResultTruth
26
26
  from typing import Optional, Set
27
27
  from typing_extensions import Self
28
28
 
@@ -32,9 +32,9 @@ class QueryValidationRapidsResult(BaseModel):
32
32
  """ # noqa: E501
33
33
  id: StrictStr
34
34
  type: StrictStr
35
- asset: Optional[QueryValidationRapidsResultAsset] = None
36
- truth: Optional[AddUserResponseResultValidationTruth] = None
37
- payload: QueryValidationRapidsResultPayload
35
+ asset: Optional[GetValidationRapidsResultAsset] = None
36
+ truth: Optional[GetValidationRapidsResultTruth] = None
37
+ payload: GetValidationRapidsResultPayload
38
38
  metadata: Dict[str, FileAssetModelMetadataValue]
39
39
  correct_validation_count: StrictInt = Field(alias="correctValidationCount")
40
40
  invalid_validation_count: StrictInt = Field(alias="invalidValidationCount")
@@ -125,9 +125,9 @@ class QueryValidationRapidsResult(BaseModel):
125
125
  _obj = cls.model_validate({
126
126
  "id": obj.get("id"),
127
127
  "type": obj.get("type"),
128
- "asset": QueryValidationRapidsResultAsset.from_dict(obj["asset"]) if obj.get("asset") is not None else None,
129
- "truth": AddUserResponseResultValidationTruth.from_dict(obj["truth"]) if obj.get("truth") is not None else None,
130
- "payload": QueryValidationRapidsResultPayload.from_dict(obj["payload"]) if obj.get("payload") is not None else None,
128
+ "asset": GetValidationRapidsResultAsset.from_dict(obj["asset"]) if obj.get("asset") is not None else None,
129
+ "truth": GetValidationRapidsResultTruth.from_dict(obj["truth"]) if obj.get("truth") is not None else None,
130
+ "payload": GetValidationRapidsResultPayload.from_dict(obj["payload"]) if obj.get("payload") is not None else None,
131
131
  "metadata": dict(
132
132
  (_k, FileAssetModelMetadataValue.from_dict(_v))
133
133
  for _k, _v in obj["metadata"].items()
@@ -16,20 +16,19 @@ import json
16
16
  import re
17
17
  from typing import Dict, Optional
18
18
 
19
- import requests
20
- from authlib.integrations.requests_client import OAuth2Session
21
- from requests.adapters import HTTPAdapter
22
- from urllib3 import Retry
19
+ import httpx
20
+ from authlib.integrations.httpx_client import OAuth2Client
21
+ from httpx import Timeout
23
22
 
24
23
  from rapidata.api_client.exceptions import ApiException, ApiValueError
25
24
 
26
25
 
27
26
  class RESTResponse(io.IOBase):
28
27
 
29
- def __init__(self, resp: requests.Response) -> None:
28
+ def __init__(self, resp: httpx.Response) -> None:
30
29
  self.response = resp
31
30
  self.status = resp.status_code
32
- self.reason = resp.reason
31
+ self.reason = resp.reason_phrase
33
32
  self.data = None
34
33
 
35
34
  def read(self):
@@ -54,43 +53,48 @@ class RESTClientObject:
54
53
  def __init__(self, configuration) -> None:
55
54
  self.configuration = configuration
56
55
 
57
- self.session: Optional[OAuth2Session] = None
56
+ self.session: Optional[OAuth2Client] = None
58
57
 
59
58
  def setup_oauth_client_credentials(
60
- self, client_id: str, client_secret: str, token_endpoint: str, scope: str
59
+ self, client_id: str, client_secret: str, token_endpoint: str, scope: str
61
60
  ):
62
- self.session = OAuth2Session(
61
+ client_args = self._get_session_defaults()
62
+ self.session = OAuth2Client(
63
63
  client_id=client_id,
64
64
  client_secret=client_secret,
65
65
  token_endpoint=token_endpoint,
66
66
  scope=scope,
67
+ **client_args,
67
68
  )
68
- self._configure_session_defaults()
69
+
69
70
  self.session.fetch_token()
70
71
 
71
- def setup_oauth_with_token(self,
72
- client_id: str | None,
73
- client_secret: str | None,
74
- token: dict,
75
- token_endpoint: str,
76
- leeway: int = 60):
77
- self.session = OAuth2Session(
72
+ def setup_oauth_with_token(
73
+ self,
74
+ client_id: str | None,
75
+ client_secret: str | None,
76
+ token: dict,
77
+ token_endpoint: str,
78
+ leeway: int = 60,
79
+ ):
80
+ client_args = self._get_session_defaults()
81
+ self.session = OAuth2Client(
78
82
  token=token,
79
83
  token_endpoint=token_endpoint,
80
84
  client_id=client_id,
81
85
  client_secret=client_secret,
82
86
  leeway=leeway,
87
+ **client_args,
83
88
  )
84
- self._configure_session_defaults()
85
89
 
86
90
  def request(
87
- self,
88
- method,
89
- url,
90
- headers=None,
91
- body=None,
92
- post_params=None,
93
- _request_timeout=None,
91
+ self,
92
+ method,
93
+ url,
94
+ headers=None,
95
+ body=None,
96
+ post_params=None,
97
+ _request_timeout=None,
94
98
  ):
95
99
  """Perform requests.
96
100
 
@@ -127,9 +131,10 @@ class RESTClientObject:
127
131
  timeout = None
128
132
  if _request_timeout:
129
133
  if isinstance(_request_timeout, (int, float)):
130
- timeout = _request_timeout
134
+ timeout = Timeout(timeout=_request_timeout)
131
135
  elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2:
132
- timeout = _request_timeout
136
+ connect_timeout, read_timeout = _request_timeout
137
+ timeout = Timeout(timeout=connect_timeout, read=read_timeout)
133
138
 
134
139
  try:
135
140
  if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]:
@@ -139,13 +144,21 @@ class RESTClientObject:
139
144
  request_body = None
140
145
  if body is not None:
141
146
  request_body = json.dumps(body)
142
- r = session.request(method, url, data=request_body, timeout=timeout, headers=headers)
143
-
144
- elif content_type == 'application/x-www-form-urlencoded':
145
- r = session.request(method, url, data=post_params, timeout=timeout, headers=headers)
146
-
147
- elif content_type == 'multipart/form-data':
148
- del headers['Content-Type']
147
+ r = session.request(
148
+ method,
149
+ url,
150
+ content=request_body,
151
+ timeout=timeout,
152
+ headers=headers,
153
+ )
154
+
155
+ elif content_type == "application/x-www-form-urlencoded":
156
+ r = session.request(
157
+ method, url, data=post_params, timeout=timeout, headers=headers
158
+ )
159
+
160
+ elif content_type == "multipart/form-data":
161
+ del headers["Content-Type"]
149
162
  files = []
150
163
  data = {}
151
164
 
@@ -173,59 +186,68 @@ class RESTClientObject:
173
186
  data[key].append(value)
174
187
  else:
175
188
  data[key] = value
176
- r = session.request(method, url, files=files, data=data, timeout=timeout, headers=headers)
189
+ r = session.request(
190
+ method,
191
+ url,
192
+ files=files,
193
+ data=data,
194
+ timeout=timeout,
195
+ headers=headers,
196
+ )
177
197
 
178
198
  elif isinstance(body, str) or isinstance(body, bytes):
179
- r = session.request(method, url, data=body, timeout=timeout, headers=headers)
180
-
181
- elif headers['Content-Type'].startswith('text/') and isinstance(body, bool):
182
- request_body = 'true' if body else 'false'
183
- r = session.request(method, url, data=request_body, timeout=timeout, headers=headers)
199
+ r = session.request(
200
+ method, url, content=body, timeout=timeout, headers=headers
201
+ )
202
+
203
+ elif headers["Content-Type"].startswith("text/") and isinstance(
204
+ body, bool
205
+ ):
206
+ request_body = "true" if body else "false"
207
+ r = session.request(
208
+ method,
209
+ url,
210
+ content=request_body,
211
+ timeout=timeout,
212
+ headers=headers,
213
+ )
184
214
 
185
215
  else:
186
- msg = '''Cannot prepare a request message for provided arguments.
187
- Please check that your arguments match declared content type.'''
216
+ msg = """Cannot prepare a request message for provided arguments.
217
+ Please check that your arguments match declared content type."""
188
218
  raise ApiException(status=0, reason=msg)
189
219
 
190
220
  else:
191
- r = session.request(method, url, params={}, timeout=timeout, headers=headers)
221
+ r = session.request(
222
+ method, url, params={}, timeout=timeout, headers=headers
223
+ )
192
224
 
193
- except requests.exceptions.SSLError as e:
194
- msg = '\n'.join([type(e).__name__, str(e)])
225
+ except httpx.HTTPError as e:
226
+ msg = "\n".join([type(e).__name__, str(e)])
195
227
  raise ApiException(status=0, reason=msg)
196
228
 
197
229
  return RESTResponse(r)
198
230
 
199
- def _configure_session_defaults(self):
200
- self.session.verify = (
201
- self.configuration.ssl_ca_cert
202
- if self.configuration.ssl_ca_cert
203
- else self.configuration.verify_ssl
204
- )
205
-
206
- if self.configuration.cert_file and self.configuration.key_file:
207
- self.session.cert = (
208
- self.configuration.cert_file,
209
- self.configuration.key_file,
231
+ def _get_session_defaults(self):
232
+ client_kwargs = {
233
+ "verify": (
234
+ self.configuration.ssl_ca_cert
235
+ if self.configuration.ssl_ca_cert
236
+ else self.configuration.verify_ssl
210
237
  )
211
-
212
- if self.configuration.retries is not None:
213
- retry = Retry(
214
- total=self.configuration.retries,
215
- backoff_factor=0.3,
216
- status_forcelist=[429, 500, 502, 503, 504],
217
- )
218
- adapter = HTTPAdapter(max_retries=retry)
219
- self.session.mount("https://", adapter)
220
- # noinspection HttpUrlsUsage
221
- self.session.mount("http://", adapter)
238
+ }
222
239
 
223
240
  if self.configuration.proxy:
224
- self.session.proxies = {
225
- "http": self.configuration.proxy,
226
- "https": self.configuration.proxy,
227
- }
241
+ client_kwargs["proxy"] = self.configuration.proxy
228
242
 
243
+ existing_headers = client_kwargs.pop("headers")
229
244
  if self.configuration.proxy_headers:
230
245
  for key, value in self.configuration.proxy_headers.items():
231
- self.session.headers[key] = value
246
+ existing_headers[key] = value
247
+ client_kwargs["headers"] = existing_headers
248
+
249
+ if self.configuration.retries is not None:
250
+ transport = httpx.HTTPTransport(retries=self.configuration.retries)
251
+ client_kwargs["transport"] = transport
252
+
253
+ return client_kwargs
@@ -162,8 +162,10 @@ Class | Method | HTTP request | Description
162
162
  *OrderApi* | [**orders_public_get**](rapidata/api_client/docs/OrderApi.md#orders_public_get) | **GET** /orders/public | Retrieves orders that are public and can be cloned by any user.
163
163
  *PipelineApi* | [**pipeline_id_workflow_artifact_id_put**](rapidata/api_client/docs/PipelineApi.md#pipeline_id_workflow_artifact_id_put) | **PUT** /pipeline/{id}/workflow/{artifactId} | Updates the workflow configuration for a pipeline.
164
164
  *PipelineApi* | [**pipeline_id_workflow_config_artifact_id_put**](rapidata/api_client/docs/PipelineApi.md#pipeline_id_workflow_config_artifact_id_put) | **PUT** /pipeline/{id}/workflow-config/{artifactId} | Updates the workflow configuration for a pipeline.
165
+ *PipelineApi* | [**pipeline_id_workflow_config_put**](rapidata/api_client/docs/PipelineApi.md#pipeline_id_workflow_config_put) | **PUT** /pipeline/{id}/workflow-config | Updates the workflow configuration for a pipeline.
165
166
  *PipelineApi* | [**pipeline_pipeline_id_campaign_artifact_id_put**](rapidata/api_client/docs/PipelineApi.md#pipeline_pipeline_id_campaign_artifact_id_put) | **PUT** /pipeline/{pipelineId}/campaign/{artifactId} | Updates a specific campaign for a pipeline.
166
167
  *PipelineApi* | [**pipeline_pipeline_id_campaign_post**](rapidata/api_client/docs/PipelineApi.md#pipeline_pipeline_id_campaign_post) | **POST** /pipeline/{pipelineId}/campaign | Adds a campaign to a pipeline.
168
+ *PipelineApi* | [**pipeline_pipeline_id_campaign_put**](rapidata/api_client/docs/PipelineApi.md#pipeline_pipeline_id_campaign_put) | **PUT** /pipeline/{pipelineId}/campaign | Updates a specific campaign for a pipeline.
167
169
  *PipelineApi* | [**pipeline_pipeline_id_get**](rapidata/api_client/docs/PipelineApi.md#pipeline_pipeline_id_get) | **GET** /pipeline/{pipelineId} | Gets a pipeline by its id.
168
170
  *PipelineApi* | [**pipeline_pipeline_id_preliminary_download_post**](rapidata/api_client/docs/PipelineApi.md#pipeline_pipeline_id_preliminary_download_post) | **POST** /pipeline/{pipelineId}/preliminary-download | Initiates a preliminary download of the pipeline.
169
171
  *PipelineApi* | [**pipeline_preliminary_download_preliminary_download_id_get**](rapidata/api_client/docs/PipelineApi.md#pipeline_preliminary_download_preliminary_download_id_get) | **GET** /pipeline/preliminary-download/{preliminaryDownloadId} | Gets the preliminary download.
@@ -223,7 +225,6 @@ Class | Method | HTTP request | Description
223
225
  - [AddCampaignArtifactResult](rapidata/api_client/docs/AddCampaignArtifactResult.md)
224
226
  - [AddCampaignModel](rapidata/api_client/docs/AddCampaignModel.md)
225
227
  - [AddUserResponseResult](rapidata/api_client/docs/AddUserResponseResult.md)
226
- - [AddUserResponseResultValidationTruth](rapidata/api_client/docs/AddUserResponseResultValidationTruth.md)
227
228
  - [AddValidationRapidModel](rapidata/api_client/docs/AddValidationRapidModel.md)
228
229
  - [AddValidationRapidModelPayload](rapidata/api_client/docs/AddValidationRapidModelPayload.md)
229
230
  - [AddValidationRapidModelTruth](rapidata/api_client/docs/AddValidationRapidModelTruth.md)
@@ -353,8 +354,11 @@ Class | Method | HTTP request | Description
353
354
  - [GetSimpleWorkflowResultsModel](rapidata/api_client/docs/GetSimpleWorkflowResultsModel.md)
354
355
  - [GetSimpleWorkflowResultsResult](rapidata/api_client/docs/GetSimpleWorkflowResultsResult.md)
355
356
  - [GetSimpleWorkflowResultsResultPagedResult](rapidata/api_client/docs/GetSimpleWorkflowResultsResultPagedResult.md)
356
- - [GetValidationRapidsQuery](rapidata/api_client/docs/GetValidationRapidsQuery.md)
357
- - [GetValidationRapidsQueryPagedResult](rapidata/api_client/docs/GetValidationRapidsQueryPagedResult.md)
357
+ - [GetValidationRapidsResult](rapidata/api_client/docs/GetValidationRapidsResult.md)
358
+ - [GetValidationRapidsResultAsset](rapidata/api_client/docs/GetValidationRapidsResultAsset.md)
359
+ - [GetValidationRapidsResultPagedResult](rapidata/api_client/docs/GetValidationRapidsResultPagedResult.md)
360
+ - [GetValidationRapidsResultPayload](rapidata/api_client/docs/GetValidationRapidsResultPayload.md)
361
+ - [GetValidationRapidsResultTruth](rapidata/api_client/docs/GetValidationRapidsResultTruth.md)
358
362
  - [GetValidationSetByIdResult](rapidata/api_client/docs/GetValidationSetByIdResult.md)
359
363
  - [GetWorkflowByIdResult](rapidata/api_client/docs/GetWorkflowByIdResult.md)
360
364
  - [GetWorkflowByIdResultWorkflow](rapidata/api_client/docs/GetWorkflowByIdResultWorkflow.md)
@@ -395,10 +399,12 @@ Class | Method | HTTP request | Description
395
399
  - [NewUserFilterModel](rapidata/api_client/docs/NewUserFilterModel.md)
396
400
  - [NewsletterModel](rapidata/api_client/docs/NewsletterModel.md)
397
401
  - [NotAvailableYetResult](rapidata/api_client/docs/NotAvailableYetResult.md)
402
+ - [NotUserFilterModel](rapidata/api_client/docs/NotUserFilterModel.md)
398
403
  - [NullAssetModel](rapidata/api_client/docs/NullAssetModel.md)
399
404
  - [OnlinePairMakerConfig](rapidata/api_client/docs/OnlinePairMakerConfig.md)
400
405
  - [OnlinePairMakerConfigModel](rapidata/api_client/docs/OnlinePairMakerConfigModel.md)
401
406
  - [OnlinePairMakerInformation](rapidata/api_client/docs/OnlinePairMakerInformation.md)
407
+ - [OrUserFilterModel](rapidata/api_client/docs/OrUserFilterModel.md)
402
408
  - [OrderModel](rapidata/api_client/docs/OrderModel.md)
403
409
  - [OrderModelPagedResult](rapidata/api_client/docs/OrderModelPagedResult.md)
404
410
  - [OrderState](rapidata/api_client/docs/OrderState.md)
@@ -421,9 +427,7 @@ Class | Method | HTTP request | Description
421
427
  - [PublicTextMetadataInput](rapidata/api_client/docs/PublicTextMetadataInput.md)
422
428
  - [QueryModel](rapidata/api_client/docs/QueryModel.md)
423
429
  - [QueryValidationRapidsResult](rapidata/api_client/docs/QueryValidationRapidsResult.md)
424
- - [QueryValidationRapidsResultAsset](rapidata/api_client/docs/QueryValidationRapidsResultAsset.md)
425
430
  - [QueryValidationRapidsResultPagedResult](rapidata/api_client/docs/QueryValidationRapidsResultPagedResult.md)
426
- - [QueryValidationRapidsResultPayload](rapidata/api_client/docs/QueryValidationRapidsResultPayload.md)
427
431
  - [QueryWorkflowsModel](rapidata/api_client/docs/QueryWorkflowsModel.md)
428
432
  - [RapidIssue](rapidata/api_client/docs/RapidIssue.md)
429
433
  - [RapidResponse](rapidata/api_client/docs/RapidResponse.md)
@@ -40,6 +40,8 @@ from .filter import (
40
40
  CustomFilter,
41
41
  AgeGroup,
42
42
  Gender,
43
+ NotFilter,
44
+ OrFilter,
43
45
  )
44
46
 
45
47
  from .validation import Box
@@ -6,3 +6,5 @@ from .gender_filter import GenderFilter, Gender
6
6
  from .language_filter import LanguageFilter
7
7
  from .user_score_filter import UserScoreFilter
8
8
  from .custom_filter import CustomFilter
9
+ from .not_filter import NotFilter
10
+ from .or_filter import OrFilter
@@ -0,0 +1,30 @@
1
+ from typing import Any
2
+ from rapidata.rapidata_client.filter._base_filter import RapidataFilter
3
+ from rapidata.api_client.models.not_user_filter_model import NotUserFilterModel
4
+ from rapidata.api_client.models.create_order_model_user_filters_inner import CreateOrderModelUserFiltersInner
5
+
6
+
7
+ class NotFilter(RapidataFilter):
8
+ """A filter that negates another filter's condition.
9
+ This class implements a logical NOT operation on a given filter, inverting its results.
10
+
11
+ Args:
12
+ filter (RapidataFilter): The filter whose condition should be negated.
13
+
14
+ Example:
15
+ ```python
16
+ from rapidata import NotFilter, LanguageFilter
17
+
18
+ NotFilter(LanguageFilter(["en"]))
19
+ ```
20
+
21
+ This will limit the order to be shown to only people who have their phone set to a language other than English.
22
+ """
23
+ def __init__(self, filter: RapidataFilter):
24
+ if not isinstance(filter, RapidataFilter):
25
+ raise ValueError("Filter must be a RapidataFilter object")
26
+
27
+ self.filter = filter
28
+
29
+ def _to_model(self):
30
+ return NotUserFilterModel(_t="NotFilter", filter=CreateOrderModelUserFiltersInner(self.filter._to_model()))
@@ -0,0 +1,30 @@
1
+ from typing import Any
2
+ from rapidata.rapidata_client.filter._base_filter import RapidataFilter
3
+ from rapidata.api_client.models.or_user_filter_model import OrUserFilterModel
4
+ from rapidata.api_client.models.create_order_model_user_filters_inner import CreateOrderModelUserFiltersInner
5
+
6
+
7
+ class OrFilter(RapidataFilter):
8
+ """A filter that combines multiple filters with a logical OR operation.
9
+ This class implements a logical OR operation on a list of filters, where the condition is met if any of the filters' conditions are met.
10
+
11
+ Args:
12
+ filters (list[RapidataFilter]): A list of filters to be combined with OR.
13
+
14
+ Example:
15
+ ```python
16
+ from rapidata import OrFilter, LanguageFilter, CountryFilter
17
+
18
+ OrFilter([LanguageFilter(["en"]), CountryFilter(["US"])])
19
+ ```
20
+
21
+ This will match users who either have their phone set to English OR are located in the United States.
22
+ """
23
+ def __init__(self, filters: list[RapidataFilter]):
24
+ if not all(isinstance(filter, RapidataFilter) for filter in filters):
25
+ raise ValueError("Filters must be a RapidataFilter object")
26
+
27
+ self.filters = filters
28
+
29
+ def _to_model(self):
30
+ return OrUserFilterModel(_t="OrFilter", filters=[CreateOrderModelUserFiltersInner(filter._to_model()) for filter in self.filters])
@@ -5,7 +5,8 @@ from rapidata.rapidata_client.filter import (
5
5
  GenderFilter,
6
6
  LanguageFilter,
7
7
  UserScoreFilter,
8
- CustomFilter)
8
+ NotFilter,
9
+ OrFilter)
9
10
 
10
11
  class RapidataFilters:
11
12
  """RapidataFilters Classes
@@ -24,7 +25,8 @@ class RapidataFilters:
24
25
  country (CountryFilter): The CountryFilter instance.
25
26
  gender (GenderFilter): The GenderFilter instance.
26
27
  language (LanguageFilter): The LanguageFilter instance.
27
- custom_filter (CustomFilter): The CustomFilter instance.
28
+ not_filter (NotFilter): The NotFilter instance.
29
+ or_filter (OrFilter): The OrFilter instance.
28
30
 
29
31
  Example:
30
32
  ```python
@@ -40,4 +42,5 @@ class RapidataFilters:
40
42
  country = CountryFilter
41
43
  gender = GenderFilter
42
44
  language = LanguageFilter
43
- custom_filter = CustomFilter
45
+ not_filter = NotFilter
46
+ or_filter = OrFilter
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rapidata
3
- Version: 2.18.0
3
+ Version: 2.19.1
4
4
  Summary: Rapidata package containing the Rapidata Python Client to interact with the Rapidata Web API in an easy way.
5
5
  License: Apache-2.0
6
6
  Author: Rapidata AG