rapidata 2.23.0__py3-none-any.whl → 2.23.2__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 CHANGED
@@ -22,7 +22,9 @@ from .rapidata_client import (
22
22
  CustomFilter,
23
23
  NotFilter,
24
24
  OrFilter,
25
+ AgeFilter,
25
26
  AgeGroup,
27
+ GenderFilter,
26
28
  Gender,
27
29
  CountryCodes,
28
30
  MediaAsset,
@@ -9,3 +9,4 @@ from .custom_filter import CustomFilter
9
9
  from .not_filter import NotFilter
10
10
  from .or_filter import OrFilter
11
11
  from .response_count_filter import ResponseCountFilter
12
+ from .new_user_filter import NewUserFilter
@@ -0,0 +1,13 @@
1
+ from rapidata.rapidata_client.filter._base_filter import RapidataFilter
2
+ from rapidata.api_client.models.new_user_filter_model import NewUserFilterModel
3
+
4
+ class NewUserFilter(RapidataFilter):
5
+ """NewUserFilter Class
6
+
7
+ Can be used to filter new users.
8
+ """
9
+
10
+ def _to_model(self):
11
+ return NewUserFilterModel(
12
+ _t="NewUserFilter"
13
+ )
@@ -123,7 +123,7 @@ class RapidataOrderBuilder:
123
123
  isinstance(item, MultiAsset) for item in self.__assets
124
124
  ), "The media paths must be of type MultiAsset for comparison tasks."
125
125
 
126
- result = self.__openapi_service.order_api.order_create_post(
126
+ result = self.__openapi_service.order_api.order_post(
127
127
  create_order_model=order_model
128
128
  )
129
129
 
@@ -61,7 +61,7 @@ class RapidataOrder:
61
61
  def pause(self) -> None:
62
62
  """Pauses the order."""
63
63
  logger.info(f"Pausing order '{self}'")
64
- self.__openapi_service.order_api.order_pause_post(self.order_id)
64
+ self.__openapi_service.order_api.order_order_id_pause_post(self.order_id)
65
65
  logger.debug(f"Order '{self}' has been paused.")
66
66
  managed_print(f"Order '{self}' has been paused.")
67
67
 
@@ -604,7 +604,7 @@ class RapidataOrderManager:
604
604
  list[RapidataOrder]: A list of RapidataOrder instances.
605
605
  """
606
606
  try:
607
- order_page_result = self._openapi_service.order_api.order_query_get(QueryModel(
607
+ order_page_result = self._openapi_service.order_api.orders_get(QueryModel(
608
608
  page=PageInfo(index=1, size=amount),
609
609
  filter=RootFilter(filters=[Filter(field="OrderName", operator="Contains", value=name)]),
610
610
  sortCriteria=[SortCriterion(direction="Desc", propertyName="OrderDate")]
@@ -1,9 +1,18 @@
1
1
  from enum import Enum
2
2
 
3
3
  class RetrievalMode(Enum):
4
- # Will just randomly shuffle the datapoints. This is the default and will NOT take into account the "max_iterations" parameter.
4
+ """
5
+ Enum for defining retrieval modes for datapoints.
6
+ """
5
7
  Random = "Random"
6
- # Will shuffle the datapoints randomly for each user. The user will then see the datapoints in that order. This will take into account the "max_iterations" parameter.
8
+ """
9
+ Will just randomly shuffle the datapoints. This is the default and will NOT take into account the "max_iterations" parameter.
10
+ """
7
11
  Shuffled = "Shuffled"
8
- # Will show the datapoints in the order they are in the dataset. This will take into account the "max_iterations" parameter.
9
- Sequential = "Sequential"
12
+ """
13
+ Will shuffle the datapoints randomly for each user. The user will then see the datapoints in that order. This will take into account the "max_iterations" parameter.
14
+ """
15
+ Sequential = "Sequential"
16
+ """
17
+ Will show the datapoints in the order they are in the dataset. This will take into account the "max_iterations" parameter.
18
+ """
@@ -34,13 +34,15 @@ class Rapid():
34
34
 
35
35
  def _add_to_validation_set(self, validationSetId: str, openapi_service: OpenAPIService) -> None:
36
36
  if isinstance(self.asset, TextAsset) or (isinstance(self.asset, MultiAsset) and isinstance(self.asset.assets[0], TextAsset)):
37
- openapi_service.validation_api.validation_add_validation_text_rapid_post(
37
+ openapi_service.validation_api.validation_set_validation_set_id_rapid_texts_post(
38
+ validation_set_id=validationSetId,
38
39
  add_validation_text_rapid_model=self.__to_text_model(validationSetId)
39
40
  )
40
41
 
41
42
  elif isinstance(self.asset, MediaAsset) or (isinstance(self.asset, MultiAsset) and isinstance(self.asset.assets[0], MediaAsset)):
42
43
  model = self.__to_media_model(validationSetId)
43
- openapi_service.validation_api.validation_add_validation_rapid_post(
44
+ openapi_service.validation_api.validation_set_validation_set_id_rapid_files_post(
45
+ validation_set_id=validationSetId,
44
46
  model=model[0], files=model[1]
45
47
  )
46
48
 
@@ -63,7 +65,7 @@ class Rapid():
63
65
  assets = [self.asset]
64
66
 
65
67
  return (AddValidationRapidModel(
66
- validationSetId=validationSetId,
68
+ validationSetId=validationSetId, # will be removed in the future
67
69
  payload=AddValidationRapidModelPayload(self.payload),
68
70
  truth=AddValidationRapidModelTruth(self.truth),
69
71
  metadata=[
@@ -90,7 +92,7 @@ class Rapid():
90
92
  texts = [self.asset.text]
91
93
 
92
94
  return AddValidationTextRapidModel(
93
- validationSetId=validationSetId,
95
+ validationSetId=validationSetId, # will be removed in the future
94
96
  payload=AddValidationRapidModelPayload(self.payload),
95
97
  truth=AddValidationRapidModelTruth(self.truth),
96
98
  metadata=[
@@ -1,5 +1,6 @@
1
1
  from rapidata.api_client import QueryModel
2
2
  from rapidata.rapidata_client.validation.rapidata_validation_set import RapidataValidationSet
3
+ from rapidata.api_client.models.create_validation_set_model import CreateValidationSetModel
3
4
  from rapidata.service.openapi_service import OpenAPIService
4
5
  from rapidata.rapidata_client.assets.data_type_enum import RapidataDataTypes
5
6
  from rapidata.rapidata_client.validation.rapids.rapids_manager import RapidsManager
@@ -427,28 +428,14 @@ class ValidationSetManager:
427
428
  """
428
429
 
429
430
  return self._submit(name=name, rapids=rapids, dimensions=dimensions)
430
-
431
- def get_validation_set_by_id(self, validation_set_id: str) -> RapidataValidationSet:
432
- """Get a validation set by ID.
433
-
434
- Args:
435
- validation_set_id (str): The ID of the validation set.
436
-
437
- Returns:
438
- RapidataValidationSet: The ValidationSet instance.
439
- """
440
- try:
441
- validation_set = self.__openapi_service.validation_api.validation_get_by_id_get(id=validation_set_id)
442
- except Exception:
443
- raise ValueError(f"ValidationSet with ID {validation_set_id} not found.")
444
-
445
- return RapidataValidationSet(validation_set_id, str(validation_set.name), self.__openapi_service)
446
431
 
447
432
  def _submit(self, name: str, rapids: list[Rapid], dimensions: list[str] | None) -> RapidataValidationSet:
448
433
  logger.debug("Creating validation set")
449
434
  validation_set_id = (
450
- self.__openapi_service.validation_api.validation_create_validation_set_post(
451
- name=name
435
+ self.__openapi_service.validation_api.validation_set_post(
436
+ create_validation_set_model=CreateValidationSetModel(
437
+ name=name
438
+ )
452
439
  )
453
440
  ).validation_set_id
454
441
 
@@ -478,6 +465,22 @@ class ValidationSetManager:
478
465
  validation_set.update_dimensions(dimensions)
479
466
 
480
467
  return validation_set
468
+
469
+ def get_validation_set_by_id(self, validation_set_id: str) -> RapidataValidationSet:
470
+ """Get a validation set by ID.
471
+
472
+ Args:
473
+ validation_set_id (str): The ID of the validation set.
474
+
475
+ Returns:
476
+ RapidataValidationSet: The ValidationSet instance.
477
+ """
478
+ try:
479
+ validation_set = self.__openapi_service.validation_api.validation_set_validation_set_id_get(validation_set_id=validation_set_id)
480
+ except Exception:
481
+ raise ValueError(f"ValidationSet with ID {validation_set_id} not found.")
482
+
483
+ return RapidataValidationSet(validation_set_id, str(validation_set.name), self.__openapi_service)
481
484
 
482
485
 
483
486
  def find_validation_sets(self, name: str = "", amount: int = 1) -> list[RapidataValidationSet]:
@@ -491,7 +494,7 @@ class ValidationSetManager:
491
494
  list[RapidataValidationSet]: The list of validation sets.
492
495
  """
493
496
  try:
494
- validation_page_result = self.__openapi_service.validation_api.validation_query_validation_sets_get(QueryModel(
497
+ validation_page_result = self.__openapi_service.validation_api.validation_sets_get(QueryModel(
495
498
  page=PageInfo(index=1, size=amount),
496
499
  filter=RootFilter(filters=[Filter(field="Name", operator="Contains", value=name)]),
497
500
  sortCriteria=[SortCriterion(direction="Desc", propertyName="CreatedAt")]
@@ -6,7 +6,7 @@ from rapidata.api_client.api.dataset_api import DatasetApi
6
6
  from rapidata.api_client.api.order_api import OrderApi
7
7
  from rapidata.api_client.api.pipeline_api import PipelineApi
8
8
  from rapidata.api_client.api.rapid_api import RapidApi
9
- from rapidata.api_client.api.validation_api import ValidationApi
9
+ from rapidata.api_client.api.validation_set_api import ValidationSetApi
10
10
  from rapidata.api_client.api.workflow_api import WorkflowApi
11
11
  from rapidata.api_client.configuration import Configuration
12
12
  from rapidata.service.credential_manager import CredentialManager
@@ -89,8 +89,8 @@ class OpenAPIService:
89
89
  return DatasetApi(self.api_client)
90
90
 
91
91
  @property
92
- def validation_api(self) -> ValidationApi:
93
- return ValidationApi(self.api_client)
92
+ def validation_api(self) -> ValidationSetApi:
93
+ return ValidationSetApi(self.api_client)
94
94
 
95
95
  @property
96
96
  def rapid_api(self) -> RapidApi:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rapidata
3
- Version: 2.23.0
3
+ Version: 2.23.2
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
@@ -1,4 +1,4 @@
1
- rapidata/__init__.py,sha256=sjsQ3uR6cZ7rqXfQQlYRyVGY0AoyJASIkvBPxhidjcY,746
1
+ rapidata/__init__.py,sha256=UtlVqb_iIvsZDlyITqKQZNb864p2cGluEdsB0sw6Lt8,779
2
2
  rapidata/api_client/__init__.py,sha256=HLyBE43YUIOhAETBIYQtCP_Qw4oJzdclvsRqFgJ1TRM,26807
3
3
  rapidata/api_client/api/__init__.py,sha256=kxo-WoJb_QrJccktYJgKVVc674eT-scwggMvMZ3Spj8,1211
4
4
  rapidata/api_client/api/campaign_api.py,sha256=1ajX0hSnA4O5GacJLIGkAgorPlNDRVaEZY029Pkutl4,71353
@@ -17,7 +17,6 @@ rapidata/api_client/api/rapid_api.py,sha256=2omzmCbZxfseGTwEMFGESrkSH-FlkP0JmqIW
17
17
  rapidata/api_client/api/rapidata_identity_api_api.py,sha256=-kgoDuLdh-R4MQ7JPi3kQ0WDFKbmI0MkCjxwHXBmksA,9824
18
18
  rapidata/api_client/api/simple_workflow_api.py,sha256=yauSlkSwoZOl4P-1Wu0yU92GcEArpEd3xjFqImU2K1g,12763
19
19
  rapidata/api_client/api/user_info_api.py,sha256=FuuA95Beeky-rnqIoSUe2-WQ7oVTfq0RElX0jfKXT0w,10042
20
- rapidata/api_client/api/validation_api.py,sha256=XET31snfRc78TJre3jGOlb0bAs8wr82qhRiURiitUaE,98706
21
20
  rapidata/api_client/api/validation_set_api.py,sha256=p3VeYzM9jIkT8csO3Af5fZmIFRRifDcNIibbs1VmpQQ,234035
22
21
  rapidata/api_client/api/workflow_api.py,sha256=a4LSlqk4X08YEKm4pS7wQeK1tK3JPKJ2xW0ye252r7A,98898
23
22
  rapidata/api_client/api_client.py,sha256=EDhxAOUc5JFWvFsF1zc726Q7GoEFkuB8uor5SlGx9K4,27503
@@ -436,7 +435,7 @@ rapidata/rapidata_client/country_codes/__init__.py,sha256=FB9Dcks44J6C6YBSYmTmNZ
436
435
  rapidata/rapidata_client/country_codes/country_codes.py,sha256=ePHqeb7y9DWQZAnddBzPx1puYBcrgUjdR2sbFijuFD8,283
437
436
  rapidata/rapidata_client/demographic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
438
437
  rapidata/rapidata_client/demographic/demographic_manager.py,sha256=RE4r6NNAXinNAlRMgAcG4te4pF4whv81xbyAW2V9XMM,1192
439
- rapidata/rapidata_client/filter/__init__.py,sha256=uHemzncxZrrs3fiKQ-spbNe6EJZ1aWxHIH6DVy2pLUo,471
438
+ rapidata/rapidata_client/filter/__init__.py,sha256=SqxlEotA_O1Lgw3Um6VPBE2P5Hw7OUVZRSBbsv1GJbI,514
440
439
  rapidata/rapidata_client/filter/_base_filter.py,sha256=ytiSyeb9dvNZf93zwgb4PRDzf9ebsAu4wHBn4x49Re0,195
441
440
  rapidata/rapidata_client/filter/age_filter.py,sha256=oRjGY65gE_X8oa0D0XRyvKAb4_Z6XOOaGTWykRSfLFA,739
442
441
  rapidata/rapidata_client/filter/campaign_filter.py,sha256=6ZT11-gub8349QcRwuHt8AcBY18F7BdLRZ2Ch_vjLyU,735
@@ -447,6 +446,7 @@ rapidata/rapidata_client/filter/language_filter.py,sha256=reQHirEGXUBQaLwtEznK5O
447
446
  rapidata/rapidata_client/filter/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
447
  rapidata/rapidata_client/filter/models/age_group.py,sha256=9Lk_zvuGqJZNij_CLFNLwE07piUaDrZMyAXzFAk6FKc,1203
449
448
  rapidata/rapidata_client/filter/models/gender.py,sha256=aXg6Kql2BIy8d5d1lCVi1axMWnyN1FFgPDU6fh2hYUM,627
449
+ rapidata/rapidata_client/filter/new_user_filter.py,sha256=qU7d6cSslGEO_N1tYPS4Ru3cGbQYH2_I5dJPNPHvtCM,369
450
450
  rapidata/rapidata_client/filter/not_filter.py,sha256=I7crEyOCs53uS0VI48s9EqC6PAFfV9EZG3upwFBJwZo,1189
451
451
  rapidata/rapidata_client/filter/or_filter.py,sha256=u6vkXMTG_j15SbY3bkbnXbxJMDgEsH5rdoFLbuoLQmo,1345
452
452
  rapidata/rapidata_client/filter/rapidata_filters.py,sha256=ZOayFtIlACfegZSoA94YFZ-fJmqr5Pf161Z_IjiZWPg,1559
@@ -463,9 +463,9 @@ rapidata/rapidata_client/metadata/_public_text_metadata.py,sha256=uXavDp1ucy_9u5
463
463
  rapidata/rapidata_client/metadata/_select_words_metadata.py,sha256=-MK5yQDi_G3BKEes6aaVyCcobB-sEy29b6bfo5f4pic,594
464
464
  rapidata/rapidata_client/order/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
465
465
  rapidata/rapidata_client/order/_rapidata_dataset.py,sha256=okwIN6e-a2cR-0KbLbwk8ULM3hEg2ls91foCjFsu36Y,20230
466
- rapidata/rapidata_client/order/_rapidata_order_builder.py,sha256=E3ZEH80DYpqhz0VHKSl-wcj8KRHE6iqYRiwAaUjwE8I,14412
467
- rapidata/rapidata_client/order/rapidata_order.py,sha256=zfBtOCmoWT2kjFQInaFpfbuKK8sTgtZjdzvXiCCo_Ho,11680
468
- rapidata/rapidata_client/order/rapidata_order_manager.py,sha256=_rPv_2LksQEP4sq8sByzPqnVCxwo8CBbfAiBsLRflYk,34415
466
+ rapidata/rapidata_client/order/_rapidata_order_builder.py,sha256=x-2lpW6Jwlq-9XRz91beWNv2TgdEA-q4b_RhOSr7vhQ,14405
467
+ rapidata/rapidata_client/order/rapidata_order.py,sha256=qloZIWNHG0790WOHMRzqQHcjOgpnFtJNFU1XIlWH0pE,11689
468
+ rapidata/rapidata_client/order/rapidata_order_manager.py,sha256=LLBbRQslRdnkGKQ7E5GzwlnjOyvb2GWgpizg5GYTQ6k,34410
469
469
  rapidata/rapidata_client/order/rapidata_results.py,sha256=UllYpuqpm2inKdRNhClaUwApuxsMLrvrGDsrHA5KqbY,8111
470
470
  rapidata/rapidata_client/rapidata_client.py,sha256=rbu3JBEVUyqs-HfJ1pdLsXM_8tp6JsCedKr-2gs9MwA,3141
471
471
  rapidata/rapidata_client/referee/__init__.py,sha256=q0Hv9nmfEpyChejtyMLT8hWKL0vTTf_UgUXPYNJ-H6M,153
@@ -480,7 +480,7 @@ rapidata/rapidata_client/selection/conditional_validation_selection.py,sha256=Oc
480
480
  rapidata/rapidata_client/selection/demographic_selection.py,sha256=l4vnNbzlf9ED6BKqN4k5cZXShkXu9L1C5DtO78Vwr5M,1454
481
481
  rapidata/rapidata_client/selection/labeling_selection.py,sha256=i_E3dUdSC16tmebcK9lMXG1MG1oFhrDfNlkNPaLkVv8,1297
482
482
  rapidata/rapidata_client/selection/rapidata_selections.py,sha256=Azh0ntBZp9EQNL19imIItotQ8QW3B1gEs5YmuTvUn6U,1526
483
- rapidata/rapidata_client/selection/retrieval_modes.py,sha256=Nigx_dQp-z6-wZ53wWwhHd3GNpTuP2fvStSyb1XbsDI,559
483
+ rapidata/rapidata_client/selection/retrieval_modes.py,sha256=vZ6JuMdz5l1AJM7hY7rqBevnsD7bIdpWjpiLDVNKqmA,672
484
484
  rapidata/rapidata_client/selection/shuffling_selection.py,sha256=FzOp7mnBLxNzM5at_-935wd77IHyWnFR1f8uqokiMOg,1201
485
485
  rapidata/rapidata_client/selection/static_selection.py,sha256=POhVLjzHcUIuU_GCvRxMuCb27m7CkLxaQPwgf20Xo9o,681
486
486
  rapidata/rapidata_client/selection/validation_selection.py,sha256=sedeIa8lpXVXKtFJA9IDeRvo9A1Ne4ZGcepaWDUGhCU,851
@@ -499,9 +499,9 @@ rapidata/rapidata_client/validation/__init__.py,sha256=s5wHVtcJkncXSFuL9I0zNwccN
499
499
  rapidata/rapidata_client/validation/rapidata_validation_set.py,sha256=PgsutRTpzJ_e_H-xJxibSKHTskcM43aNwnm9dFhpMpw,1812
500
500
  rapidata/rapidata_client/validation/rapids/__init__.py,sha256=WU5PPwtTJlte6U90MDakzx4I8Y0laj7siw9teeXj5R0,21
501
501
  rapidata/rapidata_client/validation/rapids/box.py,sha256=t3_Kn6doKXdnJdtbwefXnYKPiTKHneJl9E2inkDSqL8,589
502
- rapidata/rapidata_client/validation/rapids/rapids.py,sha256=Y00cB9T7Te9nWCmYH28Z_WoVtEnlDIdrApdqpPXstHo,4749
502
+ rapidata/rapidata_client/validation/rapids/rapids.py,sha256=e8XHYf0QdCsyDGUnrmZvGHRUp9h-WXh1n5R-LdTB3ZQ,4936
503
503
  rapidata/rapidata_client/validation/rapids/rapids_manager.py,sha256=s5VAq8H5CKACWfmIQuz9kHC8t2nd-xEHGGUj9pIfXKI,14386
504
- rapidata/rapidata_client/validation/validation_set_manager.py,sha256=j6oor5AYkng8gW5VQ1dmHhPtyWyxspNgegP7U9J7EnU,25959
504
+ rapidata/rapidata_client/validation/validation_set_manager.py,sha256=4bguQRmmtyIs4-OkqQNXTPh1GknbOaCHr1GS4XaOOhk,26135
505
505
  rapidata/rapidata_client/workflow/__init__.py,sha256=7nXcY91xkxjHudBc9H0fP35eBBtgwHGWTQKbb-M4h7Y,477
506
506
  rapidata/rapidata_client/workflow/_base_workflow.py,sha256=XyIZFKS_RxAuwIHS848S3AyLEHqd07oTD_5jm2oUbsw,762
507
507
  rapidata/rapidata_client/workflow/_classify_workflow.py,sha256=9bT54wxVJgxC-zLk6MVNbseFpzYrvFPjt7DHvxqYfnk,1736
@@ -516,8 +516,8 @@ rapidata/rapidata_client/workflow/_timestamp_workflow.py,sha256=tPi2zu1-SlE_ppbG
516
516
  rapidata/service/__init__.py,sha256=s9bS1AJZaWIhLtJX_ZA40_CK39rAAkwdAmymTMbeWl4,68
517
517
  rapidata/service/credential_manager.py,sha256=FAH9PJreDAw3G9cJ_iwzvz99s9RnFDrxxV0BHb2VYAI,8698
518
518
  rapidata/service/local_file_service.py,sha256=pgorvlWcx52Uh3cEG6VrdMK_t__7dacQ_5AnfY14BW8,877
519
- rapidata/service/openapi_service.py,sha256=bSxIgQEUHyxfkgUhS5dc_B8u_iIokDfX0c3jWJiVyjk,4854
520
- rapidata-2.23.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
521
- rapidata-2.23.0.dist-info/METADATA,sha256=CSgI9Ha8GL5RygMbWJPLGASkRj6A6RC98eBsz_JJiho,1228
522
- rapidata-2.23.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
523
- rapidata-2.23.0.dist-info/RECORD,,
519
+ rapidata/service/openapi_service.py,sha256=J07TB4P3cz9KCU7k_fwuMQwGXlq_nJx_m1_xHbZoCg0,4867
520
+ rapidata-2.23.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
521
+ rapidata-2.23.2.dist-info/METADATA,sha256=vSicSQOhjcmyF2YsiA5Gp-KIUs7axpuQTDEZryLQSeU,1228
522
+ rapidata-2.23.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
523
+ rapidata-2.23.2.dist-info/RECORD,,