windmill-api 1.489.0__py3-none-any.whl → 1.491.0__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 windmill-api might be problematic. Click here for more details.

@@ -0,0 +1,171 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Dict, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...types import UNSET, Response, Unset
9
+
10
+
11
+ def _get_kwargs(
12
+ workspace: str,
13
+ id: str,
14
+ *,
15
+ approver: Union[Unset, None, str] = UNSET,
16
+ message: Union[Unset, None, str] = UNSET,
17
+ team_name: str,
18
+ channel_name: str,
19
+ flow_step_id: str,
20
+ default_args_json: Union[Unset, None, str] = UNSET,
21
+ dynamic_enums_json: Union[Unset, None, str] = UNSET,
22
+ ) -> Dict[str, Any]:
23
+ pass
24
+
25
+ params: Dict[str, Any] = {}
26
+ params["approver"] = approver
27
+
28
+ params["message"] = message
29
+
30
+ params["team_name"] = team_name
31
+
32
+ params["channel_name"] = channel_name
33
+
34
+ params["flow_step_id"] = flow_step_id
35
+
36
+ params["default_args_json"] = default_args_json
37
+
38
+ params["dynamic_enums_json"] = dynamic_enums_json
39
+
40
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
41
+
42
+ return {
43
+ "method": "get",
44
+ "url": "/w/{workspace}/jobs/teams_approval/{id}".format(
45
+ workspace=workspace,
46
+ id=id,
47
+ ),
48
+ "params": params,
49
+ }
50
+
51
+
52
+ def _parse_response(*, client: Union[AuthenticatedClient, Client], response: httpx.Response) -> Optional[Any]:
53
+ if response.status_code == HTTPStatus.OK:
54
+ return None
55
+ if client.raise_on_unexpected_status:
56
+ raise errors.UnexpectedStatus(response.status_code, response.content)
57
+ else:
58
+ return None
59
+
60
+
61
+ def _build_response(*, client: Union[AuthenticatedClient, Client], response: httpx.Response) -> Response[Any]:
62
+ return Response(
63
+ status_code=HTTPStatus(response.status_code),
64
+ content=response.content,
65
+ headers=response.headers,
66
+ parsed=_parse_response(client=client, response=response),
67
+ )
68
+
69
+
70
+ def sync_detailed(
71
+ workspace: str,
72
+ id: str,
73
+ *,
74
+ client: Union[AuthenticatedClient, Client],
75
+ approver: Union[Unset, None, str] = UNSET,
76
+ message: Union[Unset, None, str] = UNSET,
77
+ team_name: str,
78
+ channel_name: str,
79
+ flow_step_id: str,
80
+ default_args_json: Union[Unset, None, str] = UNSET,
81
+ dynamic_enums_json: Union[Unset, None, str] = UNSET,
82
+ ) -> Response[Any]:
83
+ """generate interactive teams approval for suspended job
84
+
85
+ Args:
86
+ workspace (str):
87
+ id (str):
88
+ approver (Union[Unset, None, str]):
89
+ message (Union[Unset, None, str]):
90
+ team_name (str):
91
+ channel_name (str):
92
+ flow_step_id (str):
93
+ default_args_json (Union[Unset, None, str]):
94
+ dynamic_enums_json (Union[Unset, None, str]):
95
+
96
+ Raises:
97
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
98
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
99
+
100
+ Returns:
101
+ Response[Any]
102
+ """
103
+
104
+ kwargs = _get_kwargs(
105
+ workspace=workspace,
106
+ id=id,
107
+ approver=approver,
108
+ message=message,
109
+ team_name=team_name,
110
+ channel_name=channel_name,
111
+ flow_step_id=flow_step_id,
112
+ default_args_json=default_args_json,
113
+ dynamic_enums_json=dynamic_enums_json,
114
+ )
115
+
116
+ response = client.get_httpx_client().request(
117
+ **kwargs,
118
+ )
119
+
120
+ return _build_response(client=client, response=response)
121
+
122
+
123
+ async def asyncio_detailed(
124
+ workspace: str,
125
+ id: str,
126
+ *,
127
+ client: Union[AuthenticatedClient, Client],
128
+ approver: Union[Unset, None, str] = UNSET,
129
+ message: Union[Unset, None, str] = UNSET,
130
+ team_name: str,
131
+ channel_name: str,
132
+ flow_step_id: str,
133
+ default_args_json: Union[Unset, None, str] = UNSET,
134
+ dynamic_enums_json: Union[Unset, None, str] = UNSET,
135
+ ) -> Response[Any]:
136
+ """generate interactive teams approval for suspended job
137
+
138
+ Args:
139
+ workspace (str):
140
+ id (str):
141
+ approver (Union[Unset, None, str]):
142
+ message (Union[Unset, None, str]):
143
+ team_name (str):
144
+ channel_name (str):
145
+ flow_step_id (str):
146
+ default_args_json (Union[Unset, None, str]):
147
+ dynamic_enums_json (Union[Unset, None, str]):
148
+
149
+ Raises:
150
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
151
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
152
+
153
+ Returns:
154
+ Response[Any]
155
+ """
156
+
157
+ kwargs = _get_kwargs(
158
+ workspace=workspace,
159
+ id=id,
160
+ approver=approver,
161
+ message=message,
162
+ team_name=team_name,
163
+ channel_name=channel_name,
164
+ flow_step_id=flow_step_id,
165
+ default_args_json=default_args_json,
166
+ dynamic_enums_json=dynamic_enums_json,
167
+ )
168
+
169
+ response = await client.get_async_httpx_client().request(**kwargs)
170
+
171
+ return _build_response(client=client, response=response)
@@ -1,12 +1,11 @@
1
1
  import datetime
2
- from typing import Any, Dict, List, Type, TypeVar, Union
2
+ from typing import Any, Dict, List, Type, TypeVar
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
  from dateutil.parser import isoparse
7
7
 
8
8
  from ..models.capture_trigger_kind import CaptureTriggerKind
9
- from ..types import UNSET, Unset
10
9
 
11
10
  T = TypeVar("T", bound="Capture")
12
11
 
@@ -16,40 +15,38 @@ class Capture:
16
15
  """
17
16
  Attributes:
18
17
  trigger_kind (CaptureTriggerKind):
19
- payload (Any):
18
+ main_args (Any):
19
+ preprocessor_args (Any):
20
20
  id (int):
21
21
  created_at (datetime.datetime):
22
- trigger_extra (Union[Unset, Any]):
23
22
  """
24
23
 
25
24
  trigger_kind: CaptureTriggerKind
26
- payload: Any
25
+ main_args: Any
26
+ preprocessor_args: Any
27
27
  id: int
28
28
  created_at: datetime.datetime
29
- trigger_extra: Union[Unset, Any] = UNSET
30
29
  additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
31
30
 
32
31
  def to_dict(self) -> Dict[str, Any]:
33
32
  trigger_kind = self.trigger_kind.value
34
33
 
35
- payload = self.payload
34
+ main_args = self.main_args
35
+ preprocessor_args = self.preprocessor_args
36
36
  id = self.id
37
37
  created_at = self.created_at.isoformat()
38
38
 
39
- trigger_extra = self.trigger_extra
40
-
41
39
  field_dict: Dict[str, Any] = {}
42
40
  field_dict.update(self.additional_properties)
43
41
  field_dict.update(
44
42
  {
45
43
  "trigger_kind": trigger_kind,
46
- "payload": payload,
44
+ "main_args": main_args,
45
+ "preprocessor_args": preprocessor_args,
47
46
  "id": id,
48
47
  "created_at": created_at,
49
48
  }
50
49
  )
51
- if trigger_extra is not UNSET:
52
- field_dict["trigger_extra"] = trigger_extra
53
50
 
54
51
  return field_dict
55
52
 
@@ -58,20 +55,20 @@ class Capture:
58
55
  d = src_dict.copy()
59
56
  trigger_kind = CaptureTriggerKind(d.pop("trigger_kind"))
60
57
 
61
- payload = d.pop("payload")
58
+ main_args = d.pop("main_args")
59
+
60
+ preprocessor_args = d.pop("preprocessor_args")
62
61
 
63
62
  id = d.pop("id")
64
63
 
65
64
  created_at = isoparse(d.pop("created_at"))
66
65
 
67
- trigger_extra = d.pop("trigger_extra", UNSET)
68
-
69
66
  capture = cls(
70
67
  trigger_kind=trigger_kind,
71
- payload=payload,
68
+ main_args=main_args,
69
+ preprocessor_args=preprocessor_args,
72
70
  id=id,
73
71
  created_at=created_at,
74
- trigger_extra=trigger_extra,
75
72
  )
76
73
 
77
74
  capture.additional_properties = d
@@ -1,12 +1,11 @@
1
1
  import datetime
2
- from typing import Any, Dict, List, Type, TypeVar, Union
2
+ from typing import Any, Dict, List, Type, TypeVar
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
  from dateutil.parser import isoparse
7
7
 
8
8
  from ..models.get_capture_response_200_trigger_kind import GetCaptureResponse200TriggerKind
9
- from ..types import UNSET, Unset
10
9
 
11
10
  T = TypeVar("T", bound="GetCaptureResponse200")
12
11
 
@@ -16,40 +15,38 @@ class GetCaptureResponse200:
16
15
  """
17
16
  Attributes:
18
17
  trigger_kind (GetCaptureResponse200TriggerKind):
19
- payload (Any):
18
+ main_args (Any):
19
+ preprocessor_args (Any):
20
20
  id (int):
21
21
  created_at (datetime.datetime):
22
- trigger_extra (Union[Unset, Any]):
23
22
  """
24
23
 
25
24
  trigger_kind: GetCaptureResponse200TriggerKind
26
- payload: Any
25
+ main_args: Any
26
+ preprocessor_args: Any
27
27
  id: int
28
28
  created_at: datetime.datetime
29
- trigger_extra: Union[Unset, Any] = UNSET
30
29
  additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
31
30
 
32
31
  def to_dict(self) -> Dict[str, Any]:
33
32
  trigger_kind = self.trigger_kind.value
34
33
 
35
- payload = self.payload
34
+ main_args = self.main_args
35
+ preprocessor_args = self.preprocessor_args
36
36
  id = self.id
37
37
  created_at = self.created_at.isoformat()
38
38
 
39
- trigger_extra = self.trigger_extra
40
-
41
39
  field_dict: Dict[str, Any] = {}
42
40
  field_dict.update(self.additional_properties)
43
41
  field_dict.update(
44
42
  {
45
43
  "trigger_kind": trigger_kind,
46
- "payload": payload,
44
+ "main_args": main_args,
45
+ "preprocessor_args": preprocessor_args,
47
46
  "id": id,
48
47
  "created_at": created_at,
49
48
  }
50
49
  )
51
- if trigger_extra is not UNSET:
52
- field_dict["trigger_extra"] = trigger_extra
53
50
 
54
51
  return field_dict
55
52
 
@@ -58,20 +55,20 @@ class GetCaptureResponse200:
58
55
  d = src_dict.copy()
59
56
  trigger_kind = GetCaptureResponse200TriggerKind(d.pop("trigger_kind"))
60
57
 
61
- payload = d.pop("payload")
58
+ main_args = d.pop("main_args")
59
+
60
+ preprocessor_args = d.pop("preprocessor_args")
62
61
 
63
62
  id = d.pop("id")
64
63
 
65
64
  created_at = isoparse(d.pop("created_at"))
66
65
 
67
- trigger_extra = d.pop("trigger_extra", UNSET)
68
-
69
66
  get_capture_response_200 = cls(
70
67
  trigger_kind=trigger_kind,
71
- payload=payload,
68
+ main_args=main_args,
69
+ preprocessor_args=preprocessor_args,
72
70
  id=id,
73
71
  created_at=created_at,
74
- trigger_extra=trigger_extra,
75
72
  )
76
73
 
77
74
  get_capture_response_200.additional_properties = d
@@ -1,12 +1,11 @@
1
1
  import datetime
2
- from typing import Any, Dict, List, Type, TypeVar, Union
2
+ from typing import Any, Dict, List, Type, TypeVar
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
  from dateutil.parser import isoparse
7
7
 
8
8
  from ..models.list_captures_response_200_item_trigger_kind import ListCapturesResponse200ItemTriggerKind
9
- from ..types import UNSET, Unset
10
9
 
11
10
  T = TypeVar("T", bound="ListCapturesResponse200Item")
12
11
 
@@ -16,40 +15,38 @@ class ListCapturesResponse200Item:
16
15
  """
17
16
  Attributes:
18
17
  trigger_kind (ListCapturesResponse200ItemTriggerKind):
19
- payload (Any):
18
+ main_args (Any):
19
+ preprocessor_args (Any):
20
20
  id (int):
21
21
  created_at (datetime.datetime):
22
- trigger_extra (Union[Unset, Any]):
23
22
  """
24
23
 
25
24
  trigger_kind: ListCapturesResponse200ItemTriggerKind
26
- payload: Any
25
+ main_args: Any
26
+ preprocessor_args: Any
27
27
  id: int
28
28
  created_at: datetime.datetime
29
- trigger_extra: Union[Unset, Any] = UNSET
30
29
  additional_properties: Dict[str, Any] = _attrs_field(init=False, factory=dict)
31
30
 
32
31
  def to_dict(self) -> Dict[str, Any]:
33
32
  trigger_kind = self.trigger_kind.value
34
33
 
35
- payload = self.payload
34
+ main_args = self.main_args
35
+ preprocessor_args = self.preprocessor_args
36
36
  id = self.id
37
37
  created_at = self.created_at.isoformat()
38
38
 
39
- trigger_extra = self.trigger_extra
40
-
41
39
  field_dict: Dict[str, Any] = {}
42
40
  field_dict.update(self.additional_properties)
43
41
  field_dict.update(
44
42
  {
45
43
  "trigger_kind": trigger_kind,
46
- "payload": payload,
44
+ "main_args": main_args,
45
+ "preprocessor_args": preprocessor_args,
47
46
  "id": id,
48
47
  "created_at": created_at,
49
48
  }
50
49
  )
51
- if trigger_extra is not UNSET:
52
- field_dict["trigger_extra"] = trigger_extra
53
50
 
54
51
  return field_dict
55
52
 
@@ -58,20 +55,20 @@ class ListCapturesResponse200Item:
58
55
  d = src_dict.copy()
59
56
  trigger_kind = ListCapturesResponse200ItemTriggerKind(d.pop("trigger_kind"))
60
57
 
61
- payload = d.pop("payload")
58
+ main_args = d.pop("main_args")
59
+
60
+ preprocessor_args = d.pop("preprocessor_args")
62
61
 
63
62
  id = d.pop("id")
64
63
 
65
64
  created_at = isoparse(d.pop("created_at"))
66
65
 
67
- trigger_extra = d.pop("trigger_extra", UNSET)
68
-
69
66
  list_captures_response_200_item = cls(
70
67
  trigger_kind=trigger_kind,
71
- payload=payload,
68
+ main_args=main_args,
69
+ preprocessor_args=preprocessor_args,
72
70
  id=id,
73
71
  created_at=created_at,
74
- trigger_extra=trigger_extra,
75
72
  )
76
73
 
77
74
  list_captures_response_200_item.additional_properties = d
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: windmill-api
3
- Version: 1.489.0
3
+ Version: 1.491.0
4
4
  Summary: A client library for accessing Windmill API
5
5
  License: Apache-2.0
6
6
  Author: Ruben Fiszel
@@ -201,6 +201,7 @@ windmill_api/api/job/get_resume_urls.py,sha256=Eg8zgcjmDmJi0CWfwIiIU4j8MfHPU7KgQ
201
201
  windmill_api/api/job/get_root_job_id.py,sha256=LZMq-95eOA0y3UAcEfS9gj0zTI35KwNvSwDdn8JZhRM,3727
202
202
  windmill_api/api/job/get_slack_approval_payload.py,sha256=edDFLOOMc2ZBBNJAnH1He_KH5rF9cyInQDHhp20Wa1E,4964
203
203
  windmill_api/api/job/get_suspended_job_flow.py,sha256=1ujITk_TDUgnZ-uWPRfBfb58qFtfGrEJF9TndIcHhok,5652
204
+ windmill_api/api/job/get_teams_approval_payload.py,sha256=t68Eiee-4Jrg3rgDqfLAtW3HHlRutUP4L7q1H3MmZDI,4876
204
205
  windmill_api/api/job/list_completed_jobs.py,sha256=Ba7pXA-l4ryYpGktFgHK_nzrtzYxz1_EnsUMbr-Ttqw,18888
205
206
  windmill_api/api/job/list_filtered_jobs_uuids.py,sha256=9oCc8koG12x65_7Pth3DvvwuP11eKblgdyHKAeK-m1I,25823
206
207
  windmill_api/api/job/list_filtered_queue_uuids.py,sha256=gh5EUDcbIk4tnszu8Kxs6Nsd-umknDbG3iaPHTDjXhM,18820
@@ -660,7 +661,7 @@ windmill_api/models/branch_one_type.py,sha256=HJpBGZqSqDVoeKBVepXMg4g97Guo7EwWEP
660
661
  windmill_api/models/cancel_persistent_queued_jobs_json_body.py,sha256=hmmaGPBsJcbSJgtJ0zeo7NUS1sCXuuBe43NTQ9VBL2g,1653
661
662
  windmill_api/models/cancel_queued_job_json_body.py,sha256=bEDGehOWMK5OxJ1FXH3KHMxhEESjJlIqR2p3AbE2zkU,1595
662
663
  windmill_api/models/cancel_suspended_job_post_json_body.py,sha256=IdId9-s4n5FrTr8KkeGLU_9NYzQynom1fp2mjRrbpTg,1317
663
- windmill_api/models/capture.py,sha256=Q5W19-DTlKmoLnuMxbSz2FntZn7PuFzHtEz7gg86cKU,2555
664
+ windmill_api/models/capture.py,sha256=kJ3-4jZtn9Yo6vfFTkHHts4m8vquQ7XXGtcyzwnc7ZE,2484
664
665
  windmill_api/models/capture_config.py,sha256=lHEBzVKhgmpQWMJhGMVS1-0V8iE5Fco3cWznbXPo1pQ,3043
665
666
  windmill_api/models/capture_config_trigger_kind.py,sha256=iO5FSZVlIIjVa5nxSAdk2C8O3pK5BDnWpqGEzlLTJUQ,333
666
667
  windmill_api/models/capture_trigger_kind.py,sha256=GZCjyw5Ncimm-vcIz4lYlLU-I8j_0lx4vEIekiSx-wI,327
@@ -1550,7 +1551,7 @@ windmill_api/models/get_audit_log_response_200_parameters.py,sha256=0DpzZiiQe-WP
1550
1551
  windmill_api/models/get_capture_configs_response_200_item.py,sha256=Ru4nl77ejFHiheMVY_lQjTCieQeCiUEf0UHjjkSuMI4,3249
1551
1552
  windmill_api/models/get_capture_configs_response_200_item_trigger_kind.py,sha256=JotLRpEhP_bLsTfFLnAJXOvc6T2mX9bVTpCDFLFJWsc,352
1552
1553
  windmill_api/models/get_capture_configs_runnable_kind.py,sha256=VWQCYIDQqajAHhcs3aZHMfZUA_SdkF_7aXvvDlhO4hc,174
1553
- windmill_api/models/get_capture_response_200.py,sha256=DqyjJjcmN8PnqXPTkUd2uI4MRZqqgBMTAOYaCRTJ99s,2707
1554
+ windmill_api/models/get_capture_response_200.py,sha256=Kh602CAGhQdLjV1TjkPF2pS3Kb_nruaAUXbgCETh3Xk,2636
1554
1555
  windmill_api/models/get_capture_response_200_trigger_kind.py,sha256=SQKmfjlGeu5mUGhmAaipeksM9x9u8g9HIQj7K0bFuIc,341
1555
1556
  windmill_api/models/get_completed_count_response_200.py,sha256=cudwRJHt5jvqGetkTemW-1aOSR5ni5znOGrkvpSR9jE,1621
1556
1557
  windmill_api/models/get_completed_job_response_200.py,sha256=UTpSl7RxWkRtvzroZzEizda25dXT8hvaRWh72MV72yk,13433
@@ -2609,7 +2610,7 @@ windmill_api/models/list_audit_logs_response_200_item_parameters.py,sha256=q4xUQ
2609
2610
  windmill_api/models/list_autoscaling_events_response_200_item.py,sha256=cpgO8peKyXAJ7TVYMTKk7pJyw3RaUQBAIhMcP95edsw,3479
2610
2611
  windmill_api/models/list_available_teams_channels_response_200_item.py,sha256=-rwWVXatn4x9nWbHEovLc_M-IPLOzOuhIuHhixJrbE0,2624
2611
2612
  windmill_api/models/list_available_teams_ids_response_200_item.py,sha256=m_dVBX0c9zUoQsOFwKR1SGGSMxZItGF3RyYxsX-P0kM,1955
2612
- windmill_api/models/list_captures_response_200_item.py,sha256=tLcU9DlpJ33GUdvFF5G44zrl9vrZ3_IXBQPkgde1JxQ,2771
2613
+ windmill_api/models/list_captures_response_200_item.py,sha256=KRviYFOxsyWQ9CV2k_EgnFMKcVfIPNX-fnk_f3mLfj8,2700
2613
2614
  windmill_api/models/list_captures_response_200_item_trigger_kind.py,sha256=DjPx9pSxFNK_jZdu3FX4czqPW41PNHSI_zfolpBPl_0,347
2614
2615
  windmill_api/models/list_captures_runnable_kind.py,sha256=aX97pn4XHRbUoGVoEcMmhoLiGGjnEZU0eryz4Tl4AWQ,169
2615
2616
  windmill_api/models/list_captures_trigger_kind.py,sha256=nVI5HL_VHcvyaoaGjuR-GFhjqjTKrcZS9ktUHDZPAFU,332
@@ -3960,7 +3961,7 @@ windmill_api/models/workspace_invite.py,sha256=HnAJWGv5LwxWkz1T3fhgHKIccO7RFC1li
3960
3961
  windmill_api/models/workspace_mute_critical_alerts_ui_json_body.py,sha256=y8ZwkWEZgavVc-FgLuZZ4z8YPCLxjPcMfdGdKjGM6VQ,1883
3961
3962
  windmill_api/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
3962
3963
  windmill_api/types.py,sha256=GoYub3t4hQP2Yn5tsvShsBfIY3vHUmblU0MXszDx_V0,968
3963
- windmill_api-1.489.0.dist-info/LICENSE,sha256=qJVFNTaOevCeSY6NoXeUG1SPOwQ1K-PxVQ2iEWJzX-A,11348
3964
- windmill_api-1.489.0.dist-info/METADATA,sha256=xPm-zEGVyUo4TX2-x3ioSpxNuXHDVet4pjNzAhUi80w,5023
3965
- windmill_api-1.489.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
3966
- windmill_api-1.489.0.dist-info/RECORD,,
3964
+ windmill_api-1.491.0.dist-info/LICENSE,sha256=qJVFNTaOevCeSY6NoXeUG1SPOwQ1K-PxVQ2iEWJzX-A,11348
3965
+ windmill_api-1.491.0.dist-info/METADATA,sha256=iA5WFEHWzDS4huHrdhLX_U1reAoI9yH5rmC-P8HmM5U,5023
3966
+ windmill_api-1.491.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
3967
+ windmill_api-1.491.0.dist-info/RECORD,,