rapidata 2.35.3__py3-none-any.whl → 2.36.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.
- rapidata/__init__.py +1 -1
- rapidata/api_client/__init__.py +25 -4
- rapidata/api_client/api/__init__.py +1 -0
- rapidata/api_client/api/benchmark_api.py +294 -0
- rapidata/api_client/api/campaign_api.py +268 -0
- rapidata/api_client/api/customer_rapid_api.py +247 -0
- rapidata/api_client/api/leaderboard_api.py +295 -6
- rapidata/api_client/api/pipeline_api.py +0 -873
- rapidata/api_client/api/sample_api.py +299 -0
- rapidata/api_client/api/validation_set_api.py +537 -312
- rapidata/api_client/models/__init__.py +24 -4
- rapidata/api_client/models/add_validation_rapid_model.py +12 -2
- rapidata/api_client/models/add_validation_rapid_model_truth.py +7 -1
- rapidata/api_client/models/and_filter.py +121 -0
- rapidata/api_client/models/and_filter_filters_inner.py +268 -0
- rapidata/api_client/models/asset_type.py +40 -0
- rapidata/api_client/models/boost_mode.py +37 -0
- rapidata/api_client/models/boost_query_result.py +10 -1
- rapidata/api_client/models/campaign_filter.py +98 -0
- rapidata/api_client/models/change_boost_model.py +89 -0
- rapidata/api_client/models/compare_rapid_blueprint.py +5 -3
- rapidata/api_client/models/compare_rapid_blueprint1.py +96 -0
- rapidata/api_client/models/country_filter.py +98 -0
- rapidata/api_client/models/create_leaderboard_model.py +32 -2
- rapidata/api_client/models/demographic_filter.py +100 -0
- rapidata/api_client/models/feature_flag_model.py +4 -4
- rapidata/api_client/models/free_text_payload.py +10 -3
- rapidata/api_client/models/free_text_rapid_blueprint.py +10 -3
- rapidata/api_client/models/get_compare_ab_summary_result.py +4 -2
- rapidata/api_client/models/get_leaderboard_by_id_result.py +29 -2
- rapidata/api_client/models/get_public_responses_result.py +95 -0
- rapidata/api_client/models/get_sample_by_id_result.py +126 -0
- rapidata/api_client/models/language_filter.py +98 -0
- rapidata/api_client/models/leaderboard_query_result.py +29 -2
- rapidata/api_client/models/new_user_filter.py +96 -0
- rapidata/api_client/models/not_filter.py +117 -0
- rapidata/api_client/models/or_filter.py +121 -0
- rapidata/api_client/models/prompt_type.py +38 -0
- rapidata/api_client/models/public_rapid_response.py +112 -0
- rapidata/api_client/models/rapid_modality.py +46 -0
- rapidata/api_client/models/response_count_filter.py +109 -0
- rapidata/api_client/models/sample_by_identifier.py +126 -0
- rapidata/api_client/models/sample_by_identifier_paged_result.py +105 -0
- rapidata/api_client/models/simple_workflow_config_blueprint.py +37 -23
- rapidata/api_client/models/update_leaderboard_model.py +91 -0
- rapidata/api_client/models/user_score_filter.py +102 -0
- rapidata/api_client/models/user_state.py +38 -0
- rapidata/api_client/models/user_state_filter.py +101 -0
- rapidata/api_client/models/validation_set_model.py +54 -3
- rapidata/api_client_README.md +33 -10
- rapidata/rapidata_client/benchmark/rapidata_benchmark.py +26 -2
- rapidata/rapidata_client/order/rapidata_order_manager.py +298 -219
- rapidata/rapidata_client/workflow/_compare_workflow.py +7 -2
- rapidata/rapidata_client/workflow/_free_text_workflow.py +9 -2
- {rapidata-2.35.3.dist-info → rapidata-2.36.1.dist-info}/METADATA +1 -1
- {rapidata-2.35.3.dist-info → rapidata-2.36.1.dist-info}/RECORD +58 -32
- {rapidata-2.35.3.dist-info → rapidata-2.36.1.dist-info}/LICENSE +0 -0
- {rapidata-2.35.3.dist-info → rapidata-2.36.1.dist-info}/WHEEL +0 -0
|
@@ -16,29 +16,30 @@
|
|
|
16
16
|
# import models into model package
|
|
17
17
|
from rapidata.api_client.models.ab_test_selection import AbTestSelection
|
|
18
18
|
from rapidata.api_client.models.ab_test_selection_a_inner import AbTestSelectionAInner
|
|
19
|
-
from rapidata.api_client.models.add_campaign_artifact_result import AddCampaignArtifactResult
|
|
20
|
-
from rapidata.api_client.models.add_campaign_model import AddCampaignModel
|
|
21
19
|
from rapidata.api_client.models.add_user_response_result import AddUserResponseResult
|
|
22
20
|
from rapidata.api_client.models.add_validation_rapid_model import AddValidationRapidModel
|
|
23
21
|
from rapidata.api_client.models.add_validation_rapid_model_payload import AddValidationRapidModelPayload
|
|
24
22
|
from rapidata.api_client.models.add_validation_rapid_model_truth import AddValidationRapidModelTruth
|
|
25
23
|
from rapidata.api_client.models.add_validation_rapid_result import AddValidationRapidResult
|
|
26
|
-
from rapidata.api_client.models.add_validation_text_rapid_model import AddValidationTextRapidModel
|
|
27
24
|
from rapidata.api_client.models.age_group import AgeGroup
|
|
28
25
|
from rapidata.api_client.models.age_user_filter_model import AgeUserFilterModel
|
|
29
26
|
from rapidata.api_client.models.aggregator_type import AggregatorType
|
|
27
|
+
from rapidata.api_client.models.and_filter import AndFilter
|
|
28
|
+
from rapidata.api_client.models.and_filter_filters_inner import AndFilterFiltersInner
|
|
30
29
|
from rapidata.api_client.models.and_user_filter_model import AndUserFilterModel
|
|
31
30
|
from rapidata.api_client.models.and_user_filter_model_filters_inner import AndUserFilterModelFiltersInner
|
|
32
31
|
from rapidata.api_client.models.are_rapids_active_result import AreRapidsActiveResult
|
|
33
32
|
from rapidata.api_client.models.asset_metadata import AssetMetadata
|
|
34
33
|
from rapidata.api_client.models.asset_metadata_asset import AssetMetadataAsset
|
|
35
34
|
from rapidata.api_client.models.asset_metadata_model import AssetMetadataModel
|
|
35
|
+
from rapidata.api_client.models.asset_type import AssetType
|
|
36
36
|
from rapidata.api_client.models.attach_category_rapid_blueprint import AttachCategoryRapidBlueprint
|
|
37
37
|
from rapidata.api_client.models.attach_category_result import AttachCategoryResult
|
|
38
38
|
from rapidata.api_client.models.attach_category_truth import AttachCategoryTruth
|
|
39
39
|
from rapidata.api_client.models.benchmark_query_result import BenchmarkQueryResult
|
|
40
40
|
from rapidata.api_client.models.benchmark_query_result_paged_result import BenchmarkQueryResultPagedResult
|
|
41
41
|
from rapidata.api_client.models.boost_leaderboard_model import BoostLeaderboardModel
|
|
42
|
+
from rapidata.api_client.models.boost_mode import BoostMode
|
|
42
43
|
from rapidata.api_client.models.boost_query_result import BoostQueryResult
|
|
43
44
|
from rapidata.api_client.models.boost_status import BoostStatus
|
|
44
45
|
from rapidata.api_client.models.bounding_box_payload import BoundingBoxPayload
|
|
@@ -47,11 +48,13 @@ from rapidata.api_client.models.bounding_box_result import BoundingBoxResult
|
|
|
47
48
|
from rapidata.api_client.models.bounding_box_truth import BoundingBoxTruth
|
|
48
49
|
from rapidata.api_client.models.box_shape import BoxShape
|
|
49
50
|
from rapidata.api_client.models.campaign_artifact_model import CampaignArtifactModel
|
|
51
|
+
from rapidata.api_client.models.campaign_filter import CampaignFilter
|
|
50
52
|
from rapidata.api_client.models.campaign_query_result import CampaignQueryResult
|
|
51
53
|
from rapidata.api_client.models.campaign_query_result_paged_result import CampaignQueryResultPagedResult
|
|
52
54
|
from rapidata.api_client.models.campaign_status import CampaignStatus
|
|
53
55
|
from rapidata.api_client.models.campaign_user_filter_model import CampaignUserFilterModel
|
|
54
56
|
from rapidata.api_client.models.capped_selection import CappedSelection
|
|
57
|
+
from rapidata.api_client.models.change_boost_model import ChangeBoostModel
|
|
55
58
|
from rapidata.api_client.models.classification_metadata import ClassificationMetadata
|
|
56
59
|
from rapidata.api_client.models.classification_metadata_filter_config import ClassificationMetadataFilterConfig
|
|
57
60
|
from rapidata.api_client.models.classification_metadata_model import ClassificationMetadataModel
|
|
@@ -82,6 +85,7 @@ from rapidata.api_client.models.coordinate import Coordinate
|
|
|
82
85
|
from rapidata.api_client.models.count_classification_metadata_filter_config import CountClassificationMetadataFilterConfig
|
|
83
86
|
from rapidata.api_client.models.count_metadata import CountMetadata
|
|
84
87
|
from rapidata.api_client.models.count_metadata_model import CountMetadataModel
|
|
88
|
+
from rapidata.api_client.models.country_filter import CountryFilter
|
|
85
89
|
from rapidata.api_client.models.country_user_filter_model import CountryUserFilterModel
|
|
86
90
|
from rapidata.api_client.models.create_benchmark_model import CreateBenchmarkModel
|
|
87
91
|
from rapidata.api_client.models.create_benchmark_participant_model import CreateBenchmarkParticipantModel
|
|
@@ -125,6 +129,7 @@ from rapidata.api_client.models.dataset_artifact_model import DatasetArtifactMod
|
|
|
125
129
|
from rapidata.api_client.models.dataset_dataset_id_datapoints_post_request_metadata_inner import DatasetDatasetIdDatapointsPostRequestMetadataInner
|
|
126
130
|
from rapidata.api_client.models.dataset_evaluation_step_model import DatasetEvaluationStepModel
|
|
127
131
|
from rapidata.api_client.models.demographic import Demographic
|
|
132
|
+
from rapidata.api_client.models.demographic_filter import DemographicFilter
|
|
128
133
|
from rapidata.api_client.models.demographic_metadata_model import DemographicMetadataModel
|
|
129
134
|
from rapidata.api_client.models.demographic_selection import DemographicSelection
|
|
130
135
|
from rapidata.api_client.models.dynamic_client_registration_request import DynamicClientRegistrationRequest
|
|
@@ -176,8 +181,10 @@ from rapidata.api_client.models.get_participant_by_id_result import GetParticipa
|
|
|
176
181
|
from rapidata.api_client.models.get_pipeline_by_id_result import GetPipelineByIdResult
|
|
177
182
|
from rapidata.api_client.models.get_pipeline_by_id_result_artifacts_value import GetPipelineByIdResultArtifactsValue
|
|
178
183
|
from rapidata.api_client.models.get_public_orders_result import GetPublicOrdersResult
|
|
184
|
+
from rapidata.api_client.models.get_public_responses_result import GetPublicResponsesResult
|
|
179
185
|
from rapidata.api_client.models.get_rapid_responses_result import GetRapidResponsesResult
|
|
180
186
|
from rapidata.api_client.models.get_responses_result import GetResponsesResult
|
|
187
|
+
from rapidata.api_client.models.get_sample_by_id_result import GetSampleByIdResult
|
|
181
188
|
from rapidata.api_client.models.get_simple_workflow_results_model import GetSimpleWorkflowResultsModel
|
|
182
189
|
from rapidata.api_client.models.get_standing_by_id_result import GetStandingByIdResult
|
|
183
190
|
from rapidata.api_client.models.get_validation_rapids_result import GetValidationRapidsResult
|
|
@@ -201,6 +208,7 @@ from rapidata.api_client.models.inspect_report_result import InspectReportResult
|
|
|
201
208
|
from rapidata.api_client.models.json_web_key import JsonWebKey
|
|
202
209
|
from rapidata.api_client.models.json_web_key_set import JsonWebKeySet
|
|
203
210
|
from rapidata.api_client.models.labeling_selection import LabelingSelection
|
|
211
|
+
from rapidata.api_client.models.language_filter import LanguageFilter
|
|
204
212
|
from rapidata.api_client.models.language_user_filter_model import LanguageUserFilterModel
|
|
205
213
|
from rapidata.api_client.models.leaderboard_query_result import LeaderboardQueryResult
|
|
206
214
|
from rapidata.api_client.models.leaderboard_query_result_paged_result import LeaderboardQueryResultPagedResult
|
|
@@ -241,15 +249,18 @@ from rapidata.api_client.models.named_entity_result import NamedEntityResult
|
|
|
241
249
|
from rapidata.api_client.models.named_entity_truth import NamedEntityTruth
|
|
242
250
|
from rapidata.api_client.models.never_ending_referee_config import NeverEndingRefereeConfig
|
|
243
251
|
from rapidata.api_client.models.never_ending_referee_info import NeverEndingRefereeInfo
|
|
252
|
+
from rapidata.api_client.models.new_user_filter import NewUserFilter
|
|
244
253
|
from rapidata.api_client.models.new_user_filter_model import NewUserFilterModel
|
|
245
254
|
from rapidata.api_client.models.newsletter_model import NewsletterModel
|
|
246
255
|
from rapidata.api_client.models.not_available_yet_result import NotAvailableYetResult
|
|
256
|
+
from rapidata.api_client.models.not_filter import NotFilter
|
|
247
257
|
from rapidata.api_client.models.not_user_filter_model import NotUserFilterModel
|
|
248
258
|
from rapidata.api_client.models.null_asset import NullAsset
|
|
249
259
|
from rapidata.api_client.models.null_asset_model import NullAssetModel
|
|
250
260
|
from rapidata.api_client.models.online_pair_maker_config import OnlinePairMakerConfig
|
|
251
261
|
from rapidata.api_client.models.online_pair_maker_config_model import OnlinePairMakerConfigModel
|
|
252
262
|
from rapidata.api_client.models.online_pair_maker_information import OnlinePairMakerInformation
|
|
263
|
+
from rapidata.api_client.models.or_filter import OrFilter
|
|
253
264
|
from rapidata.api_client.models.or_user_filter_model import OrUserFilterModel
|
|
254
265
|
from rapidata.api_client.models.order_model import OrderModel
|
|
255
266
|
from rapidata.api_client.models.order_model_paged_result import OrderModelPagedResult
|
|
@@ -281,12 +292,15 @@ from rapidata.api_client.models.prompt_by_benchmark_result_paged_result import P
|
|
|
281
292
|
from rapidata.api_client.models.prompt_metadata import PromptMetadata
|
|
282
293
|
from rapidata.api_client.models.prompt_metadata_input import PromptMetadataInput
|
|
283
294
|
from rapidata.api_client.models.prompt_metadata_model import PromptMetadataModel
|
|
295
|
+
from rapidata.api_client.models.prompt_type import PromptType
|
|
284
296
|
from rapidata.api_client.models.proxy_file_wrapper import ProxyFileWrapper
|
|
285
297
|
from rapidata.api_client.models.public_order_model import PublicOrderModel
|
|
298
|
+
from rapidata.api_client.models.public_rapid_response import PublicRapidResponse
|
|
286
299
|
from rapidata.api_client.models.public_text_metadata_input import PublicTextMetadataInput
|
|
287
300
|
from rapidata.api_client.models.query_model import QueryModel
|
|
288
301
|
from rapidata.api_client.models.query_validation_model import QueryValidationModel
|
|
289
302
|
from rapidata.api_client.models.rapid_issue import RapidIssue
|
|
303
|
+
from rapidata.api_client.models.rapid_modality import RapidModality
|
|
290
304
|
from rapidata.api_client.models.rapid_model import RapidModel
|
|
291
305
|
from rapidata.api_client.models.rapid_model_paged_result import RapidModelPagedResult
|
|
292
306
|
from rapidata.api_client.models.rapid_model_referee import RapidModelReferee
|
|
@@ -300,12 +314,15 @@ from rapidata.api_client.models.read_bridge_token_keys_result import ReadBridgeT
|
|
|
300
314
|
from rapidata.api_client.models.register_temporary_customer_model import RegisterTemporaryCustomerModel
|
|
301
315
|
from rapidata.api_client.models.register_temporary_customer_result import RegisterTemporaryCustomerResult
|
|
302
316
|
from rapidata.api_client.models.report_model import ReportModel
|
|
317
|
+
from rapidata.api_client.models.response_count_filter import ResponseCountFilter
|
|
303
318
|
from rapidata.api_client.models.response_count_user_filter_model import ResponseCountUserFilterModel
|
|
304
319
|
from rapidata.api_client.models.retrieval_mode import RetrievalMode
|
|
305
320
|
from rapidata.api_client.models.root_filter import RootFilter
|
|
306
321
|
from rapidata.api_client.models.run_status import RunStatus
|
|
307
322
|
from rapidata.api_client.models.runs_by_leaderboard_result import RunsByLeaderboardResult
|
|
308
323
|
from rapidata.api_client.models.runs_by_leaderboard_result_paged_result import RunsByLeaderboardResultPagedResult
|
|
324
|
+
from rapidata.api_client.models.sample_by_identifier import SampleByIdentifier
|
|
325
|
+
from rapidata.api_client.models.sample_by_identifier_paged_result import SampleByIdentifierPagedResult
|
|
309
326
|
from rapidata.api_client.models.sample_by_participant import SampleByParticipant
|
|
310
327
|
from rapidata.api_client.models.sample_by_participant_paged_result import SampleByParticipantPagedResult
|
|
311
328
|
from rapidata.api_client.models.scrub_payload import ScrubPayload
|
|
@@ -361,9 +378,9 @@ from rapidata.api_client.models.translated_prompt_metadata_model import Translat
|
|
|
361
378
|
from rapidata.api_client.models.translated_string import TranslatedString
|
|
362
379
|
from rapidata.api_client.models.unlock_order_result import UnlockOrderResult
|
|
363
380
|
from rapidata.api_client.models.update_benchmark_name_model import UpdateBenchmarkNameModel
|
|
364
|
-
from rapidata.api_client.models.update_campaign_model import UpdateCampaignModel
|
|
365
381
|
from rapidata.api_client.models.update_dataset_name_model import UpdateDatasetNameModel
|
|
366
382
|
from rapidata.api_client.models.update_dimensions_model import UpdateDimensionsModel
|
|
383
|
+
from rapidata.api_client.models.update_leaderboard_model import UpdateLeaderboardModel
|
|
367
384
|
from rapidata.api_client.models.update_leaderboard_name_model import UpdateLeaderboardNameModel
|
|
368
385
|
from rapidata.api_client.models.update_leaderboard_response_config_model import UpdateLeaderboardResponseConfigModel
|
|
369
386
|
from rapidata.api_client.models.update_order_name_model import UpdateOrderNameModel
|
|
@@ -375,7 +392,10 @@ from rapidata.api_client.models.update_validation_rapid_model_truth import Updat
|
|
|
375
392
|
from rapidata.api_client.models.upload_coco_result import UploadCocoResult
|
|
376
393
|
from rapidata.api_client.models.upload_from_s3_result import UploadFromS3Result
|
|
377
394
|
from rapidata.api_client.models.url_asset_input import UrlAssetInput
|
|
395
|
+
from rapidata.api_client.models.user_score_filter import UserScoreFilter
|
|
378
396
|
from rapidata.api_client.models.user_score_user_filter_model import UserScoreUserFilterModel
|
|
397
|
+
from rapidata.api_client.models.user_state import UserState
|
|
398
|
+
from rapidata.api_client.models.user_state_filter import UserStateFilter
|
|
379
399
|
from rapidata.api_client.models.validation_chance import ValidationChance
|
|
380
400
|
from rapidata.api_client.models.validation_selection import ValidationSelection
|
|
381
401
|
from rapidata.api_client.models.validation_set_model import ValidationSetModel
|
|
@@ -30,8 +30,8 @@ class AddValidationRapidModel(BaseModel):
|
|
|
30
30
|
The model for adding a validation rapid.
|
|
31
31
|
""" # noqa: E501
|
|
32
32
|
payload: AddValidationRapidModelPayload
|
|
33
|
-
metadata: List[DatasetDatasetIdDatapointsPostRequestMetadataInner] = Field(description="Some metadata to attach to the rapid.")
|
|
34
|
-
truth: AddValidationRapidModelTruth
|
|
33
|
+
metadata: Optional[List[DatasetDatasetIdDatapointsPostRequestMetadataInner]] = Field(default=None, description="Some metadata to attach to the rapid.")
|
|
34
|
+
truth: Optional[AddValidationRapidModelTruth] = None
|
|
35
35
|
random_correct_probability: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The probability for an answer to be correct when randomly guessing.", alias="randomCorrectProbability")
|
|
36
36
|
explanation: Optional[StrictStr] = Field(default=None, description="An explanation for the users if they answer the rapid incorrectly.")
|
|
37
37
|
__properties: ClassVar[List[str]] = ["payload", "metadata", "truth", "randomCorrectProbability", "explanation"]
|
|
@@ -88,6 +88,16 @@ class AddValidationRapidModel(BaseModel):
|
|
|
88
88
|
# override the default output from pydantic by calling `to_dict()` of truth
|
|
89
89
|
if self.truth:
|
|
90
90
|
_dict['truth'] = self.truth.to_dict()
|
|
91
|
+
# set to None if metadata (nullable) is None
|
|
92
|
+
# and model_fields_set contains the field
|
|
93
|
+
if self.metadata is None and "metadata" in self.model_fields_set:
|
|
94
|
+
_dict['metadata'] = None
|
|
95
|
+
|
|
96
|
+
# set to None if truth (nullable) is None
|
|
97
|
+
# and model_fields_set contains the field
|
|
98
|
+
if self.truth is None and "truth" in self.model_fields_set:
|
|
99
|
+
_dict['truth'] = None
|
|
100
|
+
|
|
91
101
|
# set to None if random_correct_probability (nullable) is None
|
|
92
102
|
# and model_fields_set contains the field
|
|
93
103
|
if self.random_correct_probability is None and "random_correct_probability" in self.model_fields_set:
|
|
@@ -87,6 +87,9 @@ class AddValidationRapidModelTruth(BaseModel):
|
|
|
87
87
|
|
|
88
88
|
@field_validator('actual_instance')
|
|
89
89
|
def actual_instance_must_validate_oneof(cls, v):
|
|
90
|
+
if v is None:
|
|
91
|
+
return v
|
|
92
|
+
|
|
90
93
|
instance = AddValidationRapidModelTruth.model_construct()
|
|
91
94
|
error_messages = []
|
|
92
95
|
match = 0
|
|
@@ -164,9 +167,12 @@ class AddValidationRapidModelTruth(BaseModel):
|
|
|
164
167
|
return cls.from_json(json.dumps(obj))
|
|
165
168
|
|
|
166
169
|
@classmethod
|
|
167
|
-
def from_json(cls, json_str: str) -> Self:
|
|
170
|
+
def from_json(cls, json_str: Optional[str]) -> Self:
|
|
168
171
|
"""Returns the object represented by the json string"""
|
|
169
172
|
instance = cls.model_construct()
|
|
173
|
+
if json_str is None:
|
|
174
|
+
return instance
|
|
175
|
+
|
|
170
176
|
error_messages = []
|
|
171
177
|
match = 0
|
|
172
178
|
|
|
@@ -0,0 +1,121 @@
|
|
|
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, StrictInt, StrictStr, field_validator
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from typing import Optional, Set
|
|
23
|
+
from typing_extensions import Self
|
|
24
|
+
|
|
25
|
+
class AndFilter(BaseModel):
|
|
26
|
+
"""
|
|
27
|
+
AndFilter
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
t: StrictStr = Field(description="Discriminator value for AndFilter", alias="_t")
|
|
30
|
+
filters: List[AndFilterFiltersInner]
|
|
31
|
+
execution_order: Optional[StrictInt] = Field(default=None, alias="executionOrder")
|
|
32
|
+
inner_filters: Optional[List[AndFilterFiltersInner]] = Field(default=None, alias="innerFilters")
|
|
33
|
+
__properties: ClassVar[List[str]] = ["_t", "filters", "executionOrder", "innerFilters"]
|
|
34
|
+
|
|
35
|
+
@field_validator('t')
|
|
36
|
+
def t_validate_enum(cls, value):
|
|
37
|
+
"""Validates the enum"""
|
|
38
|
+
if value not in set(['AndFilter']):
|
|
39
|
+
raise ValueError("must be one of enum values ('AndFilter')")
|
|
40
|
+
return value
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
populate_by_name=True,
|
|
44
|
+
validate_assignment=True,
|
|
45
|
+
protected_namespaces=(),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def to_str(self) -> str:
|
|
50
|
+
"""Returns the string representation of the model using alias"""
|
|
51
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
|
52
|
+
|
|
53
|
+
def to_json(self) -> str:
|
|
54
|
+
"""Returns the JSON representation of the model using alias"""
|
|
55
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
|
56
|
+
return json.dumps(self.to_dict())
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
60
|
+
"""Create an instance of AndFilter from a JSON string"""
|
|
61
|
+
return cls.from_dict(json.loads(json_str))
|
|
62
|
+
|
|
63
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
64
|
+
"""Return the dictionary representation of the model using alias.
|
|
65
|
+
|
|
66
|
+
This has the following differences from calling pydantic's
|
|
67
|
+
`self.model_dump(by_alias=True)`:
|
|
68
|
+
|
|
69
|
+
* `None` is only added to the output dict for nullable fields that
|
|
70
|
+
were set at model initialization. Other fields with value `None`
|
|
71
|
+
are ignored.
|
|
72
|
+
* OpenAPI `readOnly` fields are excluded.
|
|
73
|
+
* OpenAPI `readOnly` fields are excluded.
|
|
74
|
+
"""
|
|
75
|
+
excluded_fields: Set[str] = set([
|
|
76
|
+
"execution_order",
|
|
77
|
+
"inner_filters",
|
|
78
|
+
])
|
|
79
|
+
|
|
80
|
+
_dict = self.model_dump(
|
|
81
|
+
by_alias=True,
|
|
82
|
+
exclude=excluded_fields,
|
|
83
|
+
exclude_none=True,
|
|
84
|
+
)
|
|
85
|
+
# override the default output from pydantic by calling `to_dict()` of each item in filters (list)
|
|
86
|
+
_items = []
|
|
87
|
+
if self.filters:
|
|
88
|
+
for _item_filters in self.filters:
|
|
89
|
+
if _item_filters:
|
|
90
|
+
_items.append(_item_filters.to_dict())
|
|
91
|
+
_dict['filters'] = _items
|
|
92
|
+
# override the default output from pydantic by calling `to_dict()` of each item in inner_filters (list)
|
|
93
|
+
_items = []
|
|
94
|
+
if self.inner_filters:
|
|
95
|
+
for _item_inner_filters in self.inner_filters:
|
|
96
|
+
if _item_inner_filters:
|
|
97
|
+
_items.append(_item_inner_filters.to_dict())
|
|
98
|
+
_dict['innerFilters'] = _items
|
|
99
|
+
return _dict
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
103
|
+
"""Create an instance of AndFilter from a dict"""
|
|
104
|
+
if obj is None:
|
|
105
|
+
return None
|
|
106
|
+
|
|
107
|
+
if not isinstance(obj, dict):
|
|
108
|
+
return cls.model_validate(obj)
|
|
109
|
+
|
|
110
|
+
_obj = cls.model_validate({
|
|
111
|
+
"_t": obj.get("_t") if obj.get("_t") is not None else 'AndFilter',
|
|
112
|
+
"filters": [AndFilterFiltersInner.from_dict(_item) for _item in obj["filters"]] if obj.get("filters") is not None else None,
|
|
113
|
+
"executionOrder": obj.get("executionOrder"),
|
|
114
|
+
"innerFilters": [AndFilterFiltersInner.from_dict(_item) for _item in obj["innerFilters"]] if obj.get("innerFilters") is not None else None
|
|
115
|
+
})
|
|
116
|
+
return _obj
|
|
117
|
+
|
|
118
|
+
from rapidata.api_client.models.and_filter_filters_inner import AndFilterFiltersInner
|
|
119
|
+
# TODO: Rewrite to not use raise_errors
|
|
120
|
+
AndFilter.model_rebuild(raise_errors=False)
|
|
121
|
+
|
|
@@ -0,0 +1,268 @@
|
|
|
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 json
|
|
17
|
+
import pprint
|
|
18
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator
|
|
19
|
+
from typing import Any, List, Optional
|
|
20
|
+
from rapidata.api_client.models.campaign_filter import CampaignFilter
|
|
21
|
+
from rapidata.api_client.models.country_filter import CountryFilter
|
|
22
|
+
from rapidata.api_client.models.demographic_filter import DemographicFilter
|
|
23
|
+
from rapidata.api_client.models.language_filter import LanguageFilter
|
|
24
|
+
from rapidata.api_client.models.new_user_filter import NewUserFilter
|
|
25
|
+
from rapidata.api_client.models.response_count_filter import ResponseCountFilter
|
|
26
|
+
from rapidata.api_client.models.user_score_filter import UserScoreFilter
|
|
27
|
+
from rapidata.api_client.models.user_state_filter import UserStateFilter
|
|
28
|
+
from pydantic import StrictStr, Field
|
|
29
|
+
from typing import Union, List, Set, Optional, Dict
|
|
30
|
+
from typing_extensions import Literal, Self
|
|
31
|
+
|
|
32
|
+
ANDFILTERFILTERSINNER_ONE_OF_SCHEMAS = ["AndFilter", "CampaignFilter", "CountryFilter", "DemographicFilter", "LanguageFilter", "NewUserFilter", "NotFilter", "OrFilter", "ResponseCountFilter", "UserScoreFilter", "UserStateFilter"]
|
|
33
|
+
|
|
34
|
+
class AndFilterFiltersInner(BaseModel):
|
|
35
|
+
"""
|
|
36
|
+
AndFilterFiltersInner
|
|
37
|
+
"""
|
|
38
|
+
# data type: AndFilter
|
|
39
|
+
oneof_schema_1_validator: Optional[AndFilter] = None
|
|
40
|
+
# data type: CampaignFilter
|
|
41
|
+
oneof_schema_2_validator: Optional[CampaignFilter] = None
|
|
42
|
+
# data type: CountryFilter
|
|
43
|
+
oneof_schema_3_validator: Optional[CountryFilter] = None
|
|
44
|
+
# data type: DemographicFilter
|
|
45
|
+
oneof_schema_4_validator: Optional[DemographicFilter] = None
|
|
46
|
+
# data type: LanguageFilter
|
|
47
|
+
oneof_schema_5_validator: Optional[LanguageFilter] = None
|
|
48
|
+
# data type: NewUserFilter
|
|
49
|
+
oneof_schema_6_validator: Optional[NewUserFilter] = None
|
|
50
|
+
# data type: NotFilter
|
|
51
|
+
oneof_schema_7_validator: Optional[NotFilter] = None
|
|
52
|
+
# data type: OrFilter
|
|
53
|
+
oneof_schema_8_validator: Optional[OrFilter] = None
|
|
54
|
+
# data type: ResponseCountFilter
|
|
55
|
+
oneof_schema_9_validator: Optional[ResponseCountFilter] = None
|
|
56
|
+
# data type: UserScoreFilter
|
|
57
|
+
oneof_schema_10_validator: Optional[UserScoreFilter] = None
|
|
58
|
+
# data type: UserStateFilter
|
|
59
|
+
oneof_schema_11_validator: Optional[UserStateFilter] = None
|
|
60
|
+
actual_instance: Optional[Union[AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter]] = None
|
|
61
|
+
one_of_schemas: Set[str] = { "AndFilter", "CampaignFilter", "CountryFilter", "DemographicFilter", "LanguageFilter", "NewUserFilter", "NotFilter", "OrFilter", "ResponseCountFilter", "UserScoreFilter", "UserStateFilter" }
|
|
62
|
+
|
|
63
|
+
model_config = ConfigDict(
|
|
64
|
+
validate_assignment=True,
|
|
65
|
+
protected_namespaces=(),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
discriminator_value_class_map: Dict[str, str] = {
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
def __init__(self, *args, **kwargs) -> None:
|
|
73
|
+
if args:
|
|
74
|
+
if len(args) > 1:
|
|
75
|
+
raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`")
|
|
76
|
+
if kwargs:
|
|
77
|
+
raise ValueError("If a position argument is used, keyword arguments cannot be used.")
|
|
78
|
+
super().__init__(actual_instance=args[0])
|
|
79
|
+
else:
|
|
80
|
+
super().__init__(**kwargs)
|
|
81
|
+
|
|
82
|
+
@field_validator('actual_instance')
|
|
83
|
+
def actual_instance_must_validate_oneof(cls, v):
|
|
84
|
+
instance = AndFilterFiltersInner.model_construct()
|
|
85
|
+
error_messages = []
|
|
86
|
+
match = 0
|
|
87
|
+
# validate data type: AndFilter
|
|
88
|
+
if not isinstance(v, AndFilter):
|
|
89
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `AndFilter`")
|
|
90
|
+
else:
|
|
91
|
+
match += 1
|
|
92
|
+
# validate data type: CampaignFilter
|
|
93
|
+
if not isinstance(v, CampaignFilter):
|
|
94
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `CampaignFilter`")
|
|
95
|
+
else:
|
|
96
|
+
match += 1
|
|
97
|
+
# validate data type: CountryFilter
|
|
98
|
+
if not isinstance(v, CountryFilter):
|
|
99
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `CountryFilter`")
|
|
100
|
+
else:
|
|
101
|
+
match += 1
|
|
102
|
+
# validate data type: DemographicFilter
|
|
103
|
+
if not isinstance(v, DemographicFilter):
|
|
104
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `DemographicFilter`")
|
|
105
|
+
else:
|
|
106
|
+
match += 1
|
|
107
|
+
# validate data type: LanguageFilter
|
|
108
|
+
if not isinstance(v, LanguageFilter):
|
|
109
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `LanguageFilter`")
|
|
110
|
+
else:
|
|
111
|
+
match += 1
|
|
112
|
+
# validate data type: NewUserFilter
|
|
113
|
+
if not isinstance(v, NewUserFilter):
|
|
114
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `NewUserFilter`")
|
|
115
|
+
else:
|
|
116
|
+
match += 1
|
|
117
|
+
# validate data type: NotFilter
|
|
118
|
+
if not isinstance(v, NotFilter):
|
|
119
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `NotFilter`")
|
|
120
|
+
else:
|
|
121
|
+
match += 1
|
|
122
|
+
# validate data type: OrFilter
|
|
123
|
+
if not isinstance(v, OrFilter):
|
|
124
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `OrFilter`")
|
|
125
|
+
else:
|
|
126
|
+
match += 1
|
|
127
|
+
# validate data type: ResponseCountFilter
|
|
128
|
+
if not isinstance(v, ResponseCountFilter):
|
|
129
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `ResponseCountFilter`")
|
|
130
|
+
else:
|
|
131
|
+
match += 1
|
|
132
|
+
# validate data type: UserScoreFilter
|
|
133
|
+
if not isinstance(v, UserScoreFilter):
|
|
134
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `UserScoreFilter`")
|
|
135
|
+
else:
|
|
136
|
+
match += 1
|
|
137
|
+
# validate data type: UserStateFilter
|
|
138
|
+
if not isinstance(v, UserStateFilter):
|
|
139
|
+
error_messages.append(f"Error! Input type `{type(v)}` is not `UserStateFilter`")
|
|
140
|
+
else:
|
|
141
|
+
match += 1
|
|
142
|
+
if match > 1:
|
|
143
|
+
# more than 1 match
|
|
144
|
+
raise ValueError("Multiple matches found when setting `actual_instance` in AndFilterFiltersInner with oneOf schemas: AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter. Details: " + ", ".join(error_messages))
|
|
145
|
+
elif match == 0:
|
|
146
|
+
# no match
|
|
147
|
+
raise ValueError("No match found when setting `actual_instance` in AndFilterFiltersInner with oneOf schemas: AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter. Details: " + ", ".join(error_messages))
|
|
148
|
+
else:
|
|
149
|
+
return v
|
|
150
|
+
|
|
151
|
+
@classmethod
|
|
152
|
+
def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
|
|
153
|
+
return cls.from_json(json.dumps(obj))
|
|
154
|
+
|
|
155
|
+
@classmethod
|
|
156
|
+
def from_json(cls, json_str: str) -> Self:
|
|
157
|
+
"""Returns the object represented by the json string"""
|
|
158
|
+
instance = cls.model_construct()
|
|
159
|
+
error_messages = []
|
|
160
|
+
match = 0
|
|
161
|
+
|
|
162
|
+
# deserialize data into AndFilter
|
|
163
|
+
try:
|
|
164
|
+
instance.actual_instance = AndFilter.from_json(json_str)
|
|
165
|
+
match += 1
|
|
166
|
+
except (ValidationError, ValueError) as e:
|
|
167
|
+
error_messages.append(str(e))
|
|
168
|
+
# deserialize data into CampaignFilter
|
|
169
|
+
try:
|
|
170
|
+
instance.actual_instance = CampaignFilter.from_json(json_str)
|
|
171
|
+
match += 1
|
|
172
|
+
except (ValidationError, ValueError) as e:
|
|
173
|
+
error_messages.append(str(e))
|
|
174
|
+
# deserialize data into CountryFilter
|
|
175
|
+
try:
|
|
176
|
+
instance.actual_instance = CountryFilter.from_json(json_str)
|
|
177
|
+
match += 1
|
|
178
|
+
except (ValidationError, ValueError) as e:
|
|
179
|
+
error_messages.append(str(e))
|
|
180
|
+
# deserialize data into DemographicFilter
|
|
181
|
+
try:
|
|
182
|
+
instance.actual_instance = DemographicFilter.from_json(json_str)
|
|
183
|
+
match += 1
|
|
184
|
+
except (ValidationError, ValueError) as e:
|
|
185
|
+
error_messages.append(str(e))
|
|
186
|
+
# deserialize data into LanguageFilter
|
|
187
|
+
try:
|
|
188
|
+
instance.actual_instance = LanguageFilter.from_json(json_str)
|
|
189
|
+
match += 1
|
|
190
|
+
except (ValidationError, ValueError) as e:
|
|
191
|
+
error_messages.append(str(e))
|
|
192
|
+
# deserialize data into NewUserFilter
|
|
193
|
+
try:
|
|
194
|
+
instance.actual_instance = NewUserFilter.from_json(json_str)
|
|
195
|
+
match += 1
|
|
196
|
+
except (ValidationError, ValueError) as e:
|
|
197
|
+
error_messages.append(str(e))
|
|
198
|
+
# deserialize data into NotFilter
|
|
199
|
+
try:
|
|
200
|
+
instance.actual_instance = NotFilter.from_json(json_str)
|
|
201
|
+
match += 1
|
|
202
|
+
except (ValidationError, ValueError) as e:
|
|
203
|
+
error_messages.append(str(e))
|
|
204
|
+
# deserialize data into OrFilter
|
|
205
|
+
try:
|
|
206
|
+
instance.actual_instance = OrFilter.from_json(json_str)
|
|
207
|
+
match += 1
|
|
208
|
+
except (ValidationError, ValueError) as e:
|
|
209
|
+
error_messages.append(str(e))
|
|
210
|
+
# deserialize data into ResponseCountFilter
|
|
211
|
+
try:
|
|
212
|
+
instance.actual_instance = ResponseCountFilter.from_json(json_str)
|
|
213
|
+
match += 1
|
|
214
|
+
except (ValidationError, ValueError) as e:
|
|
215
|
+
error_messages.append(str(e))
|
|
216
|
+
# deserialize data into UserScoreFilter
|
|
217
|
+
try:
|
|
218
|
+
instance.actual_instance = UserScoreFilter.from_json(json_str)
|
|
219
|
+
match += 1
|
|
220
|
+
except (ValidationError, ValueError) as e:
|
|
221
|
+
error_messages.append(str(e))
|
|
222
|
+
# deserialize data into UserStateFilter
|
|
223
|
+
try:
|
|
224
|
+
instance.actual_instance = UserStateFilter.from_json(json_str)
|
|
225
|
+
match += 1
|
|
226
|
+
except (ValidationError, ValueError) as e:
|
|
227
|
+
error_messages.append(str(e))
|
|
228
|
+
|
|
229
|
+
if match > 1:
|
|
230
|
+
# more than 1 match
|
|
231
|
+
raise ValueError("Multiple matches found when deserializing the JSON string into AndFilterFiltersInner with oneOf schemas: AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter. Details: " + ", ".join(error_messages))
|
|
232
|
+
elif match == 0:
|
|
233
|
+
# no match
|
|
234
|
+
raise ValueError("No match found when deserializing the JSON string into AndFilterFiltersInner with oneOf schemas: AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter. Details: " + ", ".join(error_messages))
|
|
235
|
+
else:
|
|
236
|
+
return instance
|
|
237
|
+
|
|
238
|
+
def to_json(self) -> str:
|
|
239
|
+
"""Returns the JSON representation of the actual instance"""
|
|
240
|
+
if self.actual_instance is None:
|
|
241
|
+
return "null"
|
|
242
|
+
|
|
243
|
+
if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json):
|
|
244
|
+
return self.actual_instance.to_json()
|
|
245
|
+
else:
|
|
246
|
+
return json.dumps(self.actual_instance)
|
|
247
|
+
|
|
248
|
+
def to_dict(self) -> Optional[Union[Dict[str, Any], AndFilter, CampaignFilter, CountryFilter, DemographicFilter, LanguageFilter, NewUserFilter, NotFilter, OrFilter, ResponseCountFilter, UserScoreFilter, UserStateFilter]]:
|
|
249
|
+
"""Returns the dict representation of the actual instance"""
|
|
250
|
+
if self.actual_instance is None:
|
|
251
|
+
return None
|
|
252
|
+
|
|
253
|
+
if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict):
|
|
254
|
+
return self.actual_instance.to_dict()
|
|
255
|
+
else:
|
|
256
|
+
# primitive type
|
|
257
|
+
return self.actual_instance
|
|
258
|
+
|
|
259
|
+
def to_str(self) -> str:
|
|
260
|
+
"""Returns the string representation of the actual instance"""
|
|
261
|
+
return pprint.pformat(self.model_dump())
|
|
262
|
+
|
|
263
|
+
from rapidata.api_client.models.and_filter import AndFilter
|
|
264
|
+
from rapidata.api_client.models.not_filter import NotFilter
|
|
265
|
+
from rapidata.api_client.models.or_filter import OrFilter
|
|
266
|
+
# TODO: Rewrite to not use raise_errors
|
|
267
|
+
AndFilterFiltersInner.model_rebuild(raise_errors=False)
|
|
268
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
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 json
|
|
17
|
+
from enum import Enum
|
|
18
|
+
from typing_extensions import Self
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AssetType(str, Enum):
|
|
22
|
+
"""
|
|
23
|
+
AssetType
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
allowed enum values
|
|
28
|
+
"""
|
|
29
|
+
NONE = 'None'
|
|
30
|
+
IMAGE = 'Image'
|
|
31
|
+
VIDEO = 'Video'
|
|
32
|
+
AUDIO = 'Audio'
|
|
33
|
+
TEXT = 'Text'
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def from_json(cls, json_str: str) -> Self:
|
|
37
|
+
"""Create an instance of AssetType from a JSON string"""
|
|
38
|
+
return cls(json.loads(json_str))
|
|
39
|
+
|
|
40
|
+
|