pinexq-client 0.10.3rc1__py3-none-any.whl → 0.10.5rc1__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.
@@ -629,29 +629,47 @@ class Job:
629
629
  delete_subjobs_with_data: bool = True
630
630
  ) -> Self:
631
631
  """Delete this job after deleting output workdata and subjobs (recursive call) depending on the flag.
632
- Afterward, also deletes input workdata depending on the flag. This is a best effort operation,
633
- if an operation can not be executed a warning will be printed but the process continues.
632
+ Afterward, also deletes input workdata depending on the flag. This is a best effort operation,
633
+ if an operation can not be executed a warning will be printed but the process continues.
634
634
 
635
- Args:
636
- delete_output_workdata: boolean flag to specify if output WorkData should be attempted for deletion. Default: True
637
- delete_input_workdata: boolean flag to specify if input WorkData should be attempted for deletion. Default: False
638
- delete_subjobs_with_data: boolean flag tp specify if Sub jobs should be attempted for deletion. Default: True
635
+ Args:
636
+ delete_output_workdata: boolean flag to specify if output WorkData should be attempted for deletion. Default: True
637
+ delete_input_workdata: boolean flag to specify if input WorkData should be attempted for deletion. Default: False
638
+ delete_subjobs_with_data: boolean flag tp specify if Sub jobs should be attempted for deletion. Default: True
639
639
 
640
- Returns:
641
- This `Job` object
640
+ Returns:
641
+ This `Job` object
642
642
  """
643
+ self._delete_with_associated_internal(
644
+ delete_output_workdata=delete_output_workdata,
645
+ delete_input_workdata=delete_input_workdata,
646
+ delete_subjobs_with_data=delete_subjobs_with_data,
647
+ recursion_depth = 0)
648
+
649
+ def _delete_with_associated_internal(
650
+ self,
651
+ *,
652
+ delete_output_workdata: bool = True,
653
+ delete_input_workdata: bool = False,
654
+ delete_subjobs_with_data: bool = True,
655
+ recursion_depth: int = 0
656
+ ) -> Self:
643
657
  self._raise_if_no_hco()
644
658
 
645
659
  # delete subjobs
646
- if delete_subjobs_with_data is True:
660
+ if delete_subjobs_with_data:
661
+ if recursion_depth > 20:
662
+ raise Exception("Recursion limit of subjob deletion exceeded.")
663
+
647
664
  for subjob in self._get_sub_jobs().iter_flat():
648
665
  try:
649
666
  # recursion
650
667
  subjob_wrapper = Job.from_hco(subjob)
651
- subjob_wrapper.delete_with_associated(
668
+ subjob_wrapper._delete_with_associated_internal(
652
669
  delete_output_workdata=delete_output_workdata,
653
670
  delete_input_workdata=delete_input_workdata,
654
- delete_subjobs_with_data=delete_subjobs_with_data)
671
+ delete_subjobs_with_data=delete_subjobs_with_data,
672
+ recursion_depth = recursion_depth + 1)
655
673
  if subjob.self_link.exists():
656
674
  warnings.warn(f"Could not delete subjob: {subjob.self_link.get_url()}")
657
675
  except (ClientException, ApiException) as e:
@@ -660,7 +678,7 @@ class Job:
660
678
  self.refresh()
661
679
 
662
680
  # delete output workdatas
663
- if delete_output_workdata is True:
681
+ if delete_output_workdata:
664
682
  for slot in self.job_hco.output_dataslots:
665
683
  for wd in slot.assigned_workdatas:
666
684
  try:
@@ -11,11 +11,11 @@ from pinexq_client.job_management.hcos.job_hco import GenericProcessingConfigure
11
11
  from pinexq_client.job_management.hcos.processingsteproot_hco import ProcessingStepsRootHco
12
12
  from pinexq_client.job_management.known_relations import Relations
13
13
  from pinexq_client.job_management.model import (
14
- CreateProcessingStepParameters,
15
14
  SetProcessingStepTagsParameters, ProcessingStepQueryParameters, ProcessingStepFilterParameter,
16
- FunctionNameMatchTypes, EditProcessingStepParameters, CopyPsFromUserToOrgActionParameters,
17
- CopyPsFromOrgToUserActionParameters, DeprecatePsActionParameters, ConfigureDeploymentParameters,
18
- DeploymentResourcePresets, ScalingConfiguration, DeploymentStates, AssignCodeHashParameters
15
+ FunctionNameMatchTypes, CopyPsFromUserToOrgActionParameters,
16
+ DeprecatePsActionParameters, ConfigureDeploymentParameters,
17
+ DeploymentResourcePresets, ScalingConfiguration, DeploymentStates, AssignCodeHashParameters,
18
+ SetProcessingStepTitleParameters
19
19
  )
20
20
 
21
21
 
@@ -39,24 +39,22 @@ class ProcessingStep:
39
39
  self._entrypoint = enter_jma(client)
40
40
  self._processing_steps_root = self._entrypoint.processing_step_root_link.navigate()
41
41
 
42
- def create(self, title: str, function_name: str, version: str = "0") -> Self:
43
- """
44
- Creates a new ProcessingStep by name.
42
+ def create(self, json_data: Any) -> Self:
43
+ """Create a new processing step.
45
44
 
46
45
  Args:
47
- title: Title of the ProcessingStep to be created
48
- function_name: Function name of the ProcessingStep to be created
49
- version: Version of the ProcessingStep to be created
46
+ json_data: The JSON data representing the configuration of the processing step to be created.
50
47
 
51
48
  Returns:
52
- The newly created ProcessingStep as `ProcessingStep` object
49
+ The newly created processing step as `ProcessingStep` object.
53
50
  """
54
- processing_step_hco = self._processing_steps_root.register_new_action.execute(CreateProcessingStepParameters(
55
- title=title,
56
- function_name=function_name,
57
- version=version
58
- ))
59
- self.processing_step_hco = processing_step_hco
51
+ upload_parameters = UploadParameters(
52
+ filename="processing_step.json", # placeholder, jma does not care about filename
53
+ mediatype=MediaTypes.APPLICATION_JSON,
54
+ json=json_data
55
+ )
56
+ processing_step_link = self._processing_steps_root.register_new_action.execute(upload_parameters)
57
+ self._get_by_link(processing_step_link)
60
58
  return self
61
59
 
62
60
  def _get_by_link(self, processing_step_link: ProcessingStepLink):
@@ -141,10 +139,10 @@ class ProcessingStep:
141
139
  Query result object containing the matching processing steps.
142
140
  """
143
141
  query_param = ProcessingStepQueryParameters(
144
- filter=ProcessingStepFilterParameter(
145
- function_name=step_name,
146
- function_name_match_type=FunctionNameMatchTypes.match_exact,
147
- version=version
142
+ Filter=ProcessingStepFilterParameter(
143
+ FunctionName=step_name,
144
+ FunctionNameMatchType=FunctionNameMatchTypes.match_exact,
145
+ Version=version
148
146
  )
149
147
  )
150
148
  instance = ProcessingStep(client)
@@ -190,29 +188,7 @@ class ProcessingStep:
190
188
  This `ProcessingStep` object"""
191
189
  self._raise_if_no_hco()
192
190
  self.processing_step_hco.edit_tags_action.execute(SetProcessingStepTagsParameters(
193
- tags=tags
194
- ))
195
- self.refresh()
196
- return self
197
-
198
- def edit_properties(
199
- self,
200
- *,
201
- new_title: str | None = None,
202
- is_public: bool | None = None,
203
- new_function_name: str | None = None,
204
- new_version: str | None = None,
205
- ) -> Self:
206
- """Edit processing step properties.
207
-
208
- Returns:
209
- This `ProcessingStep` object"""
210
- self._raise_if_no_hco()
211
- self.processing_step_hco.edit_properties_action.execute(EditProcessingStepParameters(
212
- title=new_title,
213
- is_public=is_public,
214
- function_name=new_function_name,
215
- version=new_version
191
+ Tags=tags
216
192
  ))
217
193
  self.refresh()
218
194
  return self
@@ -284,7 +260,7 @@ class ProcessingStep:
284
260
  This `ProcessingStep` object"""
285
261
  self._raise_if_no_hco()
286
262
  self.processing_step_hco.deprecate_ps_action.execute(
287
- DeprecatePsActionParameters(reason=reason)
263
+ DeprecatePsActionParameters(Reason=reason)
288
264
  )
289
265
  self.refresh()
290
266
  return self
@@ -319,7 +295,7 @@ class ProcessingStep:
319
295
  """
320
296
  self._raise_if_no_hco()
321
297
  self.processing_step_hco.assign_code_hash_action.execute(
322
- AssignCodeHashParameters(code_hash=code_hash)
298
+ AssignCodeHashParameters(CodeHash=code_hash)
323
299
  )
324
300
  self.refresh()
325
301
  return self
@@ -339,9 +315,9 @@ class ProcessingStep:
339
315
  self._raise_if_no_hco()
340
316
  self.processing_step_hco.configure_deployment_action.execute(
341
317
  ConfigureDeploymentParameters(
342
- resource_preset = resource_preset,
343
- entrypoint = entrypoint,
344
- scaling = scaling
318
+ ResourcePreset = resource_preset,
319
+ Entrypoint = entrypoint,
320
+ Scaling = scaling
345
321
  )
346
322
  )
347
323
  self.refresh()
@@ -411,28 +387,20 @@ class ProcessingStep:
411
387
  self._raise_if_no_hco()
412
388
  return self.processing_step_hco.deployment_state
413
389
 
414
- def upload_configuration(self, json_data: Any) -> Self:
415
- """Upload processing configuration.
390
+ def copy_from_org_to_user(self) -> ProcessingStepLink:
391
+ """Copy ProcessingStep from organization to user.
416
392
 
417
393
  Returns:
418
- This `ProcessingStep` object
394
+ The URL of the copied ProcessingStep
419
395
  """
420
396
  self._raise_if_no_hco()
421
- self.processing_step_hco.upload_configuration_action.execute(
422
- UploadParameters(
423
- filename="config.json", # placeholder, jma does not care about filename
424
- mediatype=MediaTypes.APPLICATION_JSON,
425
- json=json_data
426
- )
427
- )
428
- self.refresh()
429
-
430
- return self
397
+ return self.processing_step_hco.copy_from_org_to_user_action.execute()
431
398
 
432
- def copy_from_org_to_user(self, *, title: str, function_name: str, version: str) -> ProcessingStepLink:
433
- """Copy ProcessingStep from organization to user.
399
+ def copy_from_user_to_org(self, *, org_id: str) -> ProcessingStepLink:
400
+ """Copy ProcessingStep from user to organization.
434
401
 
435
402
  Args:
403
+ org_id: The ID of the organization to copy the processing step to.
436
404
  title: New title for the copied ProcessingStep
437
405
  function_name: New function for the copied ProcessingStep
438
406
  version: New version for the copied ProcessingStep
@@ -441,35 +409,47 @@ class ProcessingStep:
441
409
  The URL of the copied ProcessingStep
442
410
  """
443
411
  self._raise_if_no_hco()
444
- return self.processing_step_hco.copy_from_org_to_user_action.execute(
445
- CopyPsFromOrgToUserActionParameters(
446
- title=title,
447
- function_name=function_name,
448
- version=version
449
- )
412
+ return self.processing_step_hco.copy_from_user_to_org_action.execute(
413
+ CopyPsFromUserToOrgActionParameters(OrgId=org_id)
450
414
  )
451
415
 
452
- def copy_from_user_to_org(self, *, title: str, function_name: str, version: str, org_id: str) -> ProcessingStepLink:
453
- """Copy ProcessingStep from user to organization.
416
+ def make_public(self) -> Self:
417
+ """Make the ProcessingStep public.
418
+
419
+ Returns:
420
+ This `ProcessingStep` object
421
+ """
422
+ self._raise_if_no_hco()
423
+ self.processing_step_hco.make_public_action.execute()
424
+ self.refresh()
425
+ return self
426
+
427
+ def make_private(self) -> Self:
428
+ """Make the ProcessingStep private.
429
+
430
+ Returns:
431
+ This `ProcessingStep` object
432
+ """
433
+ self._raise_if_no_hco()
434
+ self.processing_step_hco.make_private_action.execute()
435
+ self.refresh()
436
+ return self
437
+
438
+ def set_title(self, title: str) -> Self:
439
+ """Set the title of the ProcessingStep.
454
440
 
455
441
  Args:
456
- org_id: The ID of the organization to copy the processing step to.
457
- title: New title for the copied ProcessingStep
458
- function_name: New function for the copied ProcessingStep
459
- version: New version for the copied ProcessingStep
442
+ title: The new title for the ProcessingStep.
460
443
 
461
444
  Returns:
462
- The URL of the copied ProcessingStep
445
+ This `ProcessingStep` object
463
446
  """
464
447
  self._raise_if_no_hco()
465
- return self.processing_step_hco.copy_from_user_to_org_action.execute(
466
- CopyPsFromUserToOrgActionParameters(
467
- org_id=org_id,
468
- title=title,
469
- function_name=function_name,
470
- version=version
471
- )
448
+ self.processing_step_hco.set_title_action.execute(
449
+ SetProcessingStepTitleParameters(Title=title)
472
450
  )
451
+ self.refresh()
452
+ return self
473
453
 
474
454
  def self_link(self) -> ProcessingStepLink:
475
455
  self._raise_if_no_hco()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pinexq-client
3
- Version: 0.10.3rc1
3
+ Version: 0.10.5rc1
4
4
  Summary: A hypermedia-based client for the DataCybernetics PinexQ platform.
5
5
  Author: Sebastian Höfer, Mathias Reichardt, Jasim Ahmed, Pratik Poudel
6
6
  Author-email: Sebastian Höfer <hoefer@data-cybernetics.com>, Mathias Reichardt <reichardt@data-cybernetics.com>, Jasim Ahmed <ahmed@data-cybernetics.com>, Pratik Poudel <poudel@data-cybernetics.com>
@@ -14,9 +14,9 @@ Maintainer-email: Mathias Reichardt <reichardt@data-cybernetics.com>, Sebastian
14
14
  Requires-Python: >=3.11
15
15
  Description-Content-Type: text/markdown
16
16
 
17
- # Pine-x-Q Python Client
17
+ # PineXQ Python Client
18
18
 
19
- A hypermedia-based client for the DataCybernetics PinexQ platform.
19
+ A hypermedia-based client for the DataCybernetics PineXQ platform.
20
20
 
21
21
  This module contains the submodules:
22
22
 
@@ -4,7 +4,7 @@ pinexq_client/core/base_relations.py,sha256=oIUS58pkbMDdqm-3YOdsenhL1smtzeAk4fp7
4
4
  pinexq_client/core/enterapi.py,sha256=eB4F2_t3lCbMgKhy-M-Sf_u9MhuJMO7OGh-GB-4Cc-8,731
5
5
  pinexq_client/core/exceptions.py,sha256=NqB3y1ufjOfG3kv7Rz4ppXqJRAugt2zlgxkto2nIVQU,2228
6
6
  pinexq_client/core/hco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- pinexq_client/core/hco/action_hco.py,sha256=6bWea-SkFjn52m5sYywkZeNOe74Nxmsvj338jSB6RZo,2338
7
+ pinexq_client/core/hco/action_hco.py,sha256=byPFuO3cQlc2MY20FMfJ4RvPUKrsVPtonmcT5CZU1A4,2542
8
8
  pinexq_client/core/hco/action_with_parameters_hco.py,sha256=qvtoqTfDHddxB0ALanWXNDobSpazCmK2_ulTuvax2A4,3280
9
9
  pinexq_client/core/hco/download_link_hco.py,sha256=_ijLtRfzy0qKG_QXpsWBZ8FJfp60o5Lw7QVv4_EpgPY,1335
10
10
  pinexq_client/core/hco/hco_base.py,sha256=u37c9bmjX_Ug49XgCHWdtrj7jrYIVQHkYllQQoijLGw,3534
@@ -18,35 +18,35 @@ pinexq_client/core/model/error.py,sha256=ZDbUlwsj7d8XPMolSSLTFwgs3RBLvOvgmlEtoBu
18
18
  pinexq_client/core/model/sirenmodels.py,sha256=vGRQlhM2cSa2caxQel91Jr48KWqM-vMYX32iaQCzIds,5547
19
19
  pinexq_client/core/polling.py,sha256=nNEDONEkB3Gu5WUMm2u9RFG1OIclnixaiy7l_U2Z4No,1146
20
20
  pinexq_client/core/sirenaccess.py,sha256=F7eZI5Pz79el0D30SYNGsiS2qWaAZF_jrCrUy-q2GgY,6992
21
- pinexq_client/job_management/__init__.py,sha256=of3nrM8wMG-rvSDV4cTN6CyDaxdtBw1h7P4odkgF7CA,598
21
+ pinexq_client/job_management/__init__.py,sha256=mZOGFYzI4mvKc4I11nHuPPoaPhz0QkJC8eAVyZoiNes,598
22
22
  pinexq_client/job_management/enterjma.py,sha256=A9Uo9QSJAuAm9oHAhs0BIpEat77cRuWZvJ5zEOijhPs,3386
23
23
  pinexq_client/job_management/hcos/__init__.py,sha256=TZgs5kuBk3lSBxPfn5ehgbdUgzPy2jn1PC3Ea6VQY-k,584
24
24
  pinexq_client/job_management/hcos/entrypoint_hco.py,sha256=yeGw-tirgJf4MYziGnFQFfYaOOovrUf3kkb1U_wgN4k,2423
25
- pinexq_client/job_management/hcos/info_hco.py,sha256=Y2nqDZRvqm3087-EzSGfV4QShe9Hy-eu0s-M953ggyw,1899
26
- pinexq_client/job_management/hcos/input_dataslot_hco.py,sha256=SDflhyW8kjpcTUfKAXnJxNR-etPzAHfoTqlYUcJZrxs,3442
25
+ pinexq_client/job_management/hcos/info_hco.py,sha256=9PZfx3SCuZiAvXsCsRR7XMfae18kd0Z1C_FLUyxiN_M,2122
26
+ pinexq_client/job_management/hcos/input_dataslot_hco.py,sha256=QTTn0L1czLfu3HNMsCUCYihHDQBSUMicL-lFV9wtLD4,3474
27
27
  pinexq_client/job_management/hcos/job_hco.py,sha256=8Lq5RABq7XUp3Z6jhYegPgVPfm591-38eC8CCLes0KQ,8934
28
28
  pinexq_client/job_management/hcos/job_query_result_hco.py,sha256=I0G8YIlYDhTahLz8n06L8BywlcsMGNWUEsmEr4Sk0GU,3315
29
29
  pinexq_client/job_management/hcos/job_used_tags_hco.py,sha256=JKbZerZRway_HU6ujXiBjgP9TlLho1WD0syTmivsZpk,1706
30
30
  pinexq_client/job_management/hcos/jobsroot_hco.py,sha256=8ba2vFmTeVcW0GZrtUfyrxWt-OCTtKeGOc-NeCq1Rrg,4971
31
- pinexq_client/job_management/hcos/output_dataslot_hco.py,sha256=zxpo-fI9eHcp_pMKcf2l-gRoPHX1RzQO53auHMRB_T8,1549
32
- pinexq_client/job_management/hcos/processing_step_hco.py,sha256=9WkAzoRCrQw_og8Y7fTio3TRTI8EowOJPxq9MNCQKX8,12657
31
+ pinexq_client/job_management/hcos/output_dataslot_hco.py,sha256=xIU5AsJT6zPqaR39gKOi_9N_VwdiUUPjvaXXMyA7HUU,1583
32
+ pinexq_client/job_management/hcos/processing_step_hco.py,sha256=SyFDSvM7nmkvoA3oEdrRVFFcUPvZm5zY0YoanYOLrCg,12407
33
33
  pinexq_client/job_management/hcos/processing_step_used_tags_hco.py,sha256=K4Ub5FVK5ge8CtUeit9D23MPjQTMTC-X75dS9561oyw,1947
34
34
  pinexq_client/job_management/hcos/processingstep_query_result_hco.py,sha256=YcCgigKvOIggILixgaEbmnM23FlkjCgxnhZC2Eh98dY,3817
35
- pinexq_client/job_management/hcos/processingsteproot_hco.py,sha256=MC7qxNMXwoKtMReSVzYiNqI_2MUdT3gbxoxULyYXU6c,4172
35
+ pinexq_client/job_management/hcos/processingsteproot_hco.py,sha256=u2iXoDmujuXL3z-zL-u7MRht4czdiNwG9rWS0uj3diY,4295
36
36
  pinexq_client/job_management/hcos/user_hco.py,sha256=6GZrNeUZSZxwOiyCylkfl-pqDa1RL7Lc9Lg3vf0EuYc,1095
37
37
  pinexq_client/job_management/hcos/workdata_hco.py,sha256=QI1m_IUWVBesCft9UR1svCRsWDz16moY7XMhWvfFGcE,7206
38
38
  pinexq_client/job_management/hcos/workdata_query_result_hco.py,sha256=yxEnu_COMxP3mt553JZD13jjPyqSp3DJjgd8es5Nq_E,3520
39
39
  pinexq_client/job_management/hcos/workdata_used_tags_query_result_hco.py,sha256=oMHyG4NLOOPljzIE5324vVfo4zoGiNsQnT_HEuRi-nY,1991
40
40
  pinexq_client/job_management/hcos/workdataroot_hco.py,sha256=92Q3J8q28XRL7cw1Ac5F_hl_Y5ZNaZ2gThYLbTIrka0,4441
41
- pinexq_client/job_management/known_relations.py,sha256=Xe5QhDZY_0bH6Bdqb-DJdh8Mu8Uhcas3kF2v1UJe56A,874
41
+ pinexq_client/job_management/known_relations.py,sha256=do-u2wjb6u_HK2-y604f2gs3rk9O19MTIZpvbkfTSpA,905
42
42
  pinexq_client/job_management/model/__init__.py,sha256=iuAKRXdW_Mxo0i3HsBfEzhJJZUKkNe3qs4gLW-ge1PU,63
43
- pinexq_client/job_management/model/open_api_generated.py,sha256=l5TroQbIM1ho0-CpwseorQ2nehDx4LwdrCmSeeLIsMc,39658
43
+ pinexq_client/job_management/model/open_api_generated.py,sha256=nXIX64VwGTZQxDmlB4YNYSfMNTFsmW3anAmR2sMWhYA,40601
44
44
  pinexq_client/job_management/model/sirenentities.py,sha256=75ivnSU5OSuocITfluJ5o4o0CZldgtaP5PZqj4LhjJc,3950
45
45
  pinexq_client/job_management/tool/__init__.py,sha256=zPobd-hQyANHzC0-TjJG91z9XrewvE54ZJ6VViymW5M,128
46
- pinexq_client/job_management/tool/job.py,sha256=pD8O47N5okIOflVADy-9MSSDll1aSoV3CCyfzJxejG4,34262
46
+ pinexq_client/job_management/tool/job.py,sha256=YOnNXk_tUSTjmHPcTwn_jYskjoqDg183tRHqG63HCuI,35037
47
47
  pinexq_client/job_management/tool/job_group.py,sha256=olwnPNqfT32XtLKJOzoq7j_Hb6NovUxy6YRJtQgLsW0,11221
48
- pinexq_client/job_management/tool/processing_step.py,sha256=3_KIk5IPqKXuJw4Gn3S6t2TYPf_EBCxZhBpHZqEHfUQ,16797
48
+ pinexq_client/job_management/tool/processing_step.py,sha256=AI290f0zXHu381PJr9CS0VXo-PsSk2m5ri7WXV3scE8,15851
49
49
  pinexq_client/job_management/tool/workdata.py,sha256=E1Qt945tocXiSZuQo2IbTnlgW2VRnq2ODEFQ96lXTDI,6270
50
- pinexq_client-0.10.3rc1.dist-info/WHEEL,sha256=ePp19eyRASTHUPCpRsqjeFjsybXoCLYnd2O6QHdRRAY,79
51
- pinexq_client-0.10.3rc1.dist-info/METADATA,sha256=M9QJ3veg77CzUMA0Am6ksoVQg0wNuJddFXpwt4idTv4,3520
52
- pinexq_client-0.10.3rc1.dist-info/RECORD,,
50
+ pinexq_client-0.10.5rc1.dist-info/WHEEL,sha256=KSLUh82mDPEPk0Bx0ScXlWL64bc8KmzIPNcpQZFV-6E,79
51
+ pinexq_client-0.10.5rc1.dist-info/METADATA,sha256=cILJKlfrGB8hHBcu3_YBINKV2icOzVnz75xWRPG2cKI,3518
52
+ pinexq_client-0.10.5rc1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.14
2
+ Generator: uv 0.9.22
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any