hushscript 1.0.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.
Files changed (187) hide show
  1. hushscript/__init__.py +97 -0
  2. hushscript/_client.py +687 -0
  3. hushscript/_clock.py +36 -0
  4. hushscript/_config.py +139 -0
  5. hushscript/_errors.py +563 -0
  6. hushscript/_guard.py +61 -0
  7. hushscript/_http.py +624 -0
  8. hushscript/_json.py +55 -0
  9. hushscript/_log.py +155 -0
  10. hushscript/_models.py +144 -0
  11. hushscript/_pacing.py +51 -0
  12. hushscript/_redact.py +140 -0
  13. hushscript/_response.py +67 -0
  14. hushscript/_retry.py +205 -0
  15. hushscript/_shape.py +197 -0
  16. hushscript/_shapes.py +248 -0
  17. hushscript/_version.py +1 -0
  18. hushscript/format.py +224 -0
  19. hushscript/generated/__init__.py +8 -0
  20. hushscript/generated/api/__init__.py +1 -0
  21. hushscript/generated/api/default/__init__.py +1 -0
  22. hushscript/generated/api/default/buy_minutes.py +248 -0
  23. hushscript/generated/api/default/claim_agent_account.py +238 -0
  24. hushscript/generated/api/default/complete_upload.py +238 -0
  25. hushscript/generated/api/default/create_agent_account_signup.py +261 -0
  26. hushscript/generated/api/default/create_setup_session.py +244 -0
  27. hushscript/generated/api/default/create_upload.py +225 -0
  28. hushscript/generated/api/default/get_account.py +169 -0
  29. hushscript/generated/api/default/get_job.py +198 -0
  30. hushscript/generated/api/default/get_org.py +169 -0
  31. hushscript/generated/api/default/get_transcript.py +226 -0
  32. hushscript/generated/api/default/get_transcription_context.py +173 -0
  33. hushscript/generated/api/default/get_upload_part_urls.py +246 -0
  34. hushscript/generated/api/default/heartbeat_upload.py +197 -0
  35. hushscript/generated/api/default/lift_transcript_hold.py +206 -0
  36. hushscript/generated/api/default/list_credit_ledger.py +229 -0
  37. hushscript/generated/api/default/list_deleted_transcripts.py +237 -0
  38. hushscript/generated/api/default/list_holds.py +233 -0
  39. hushscript/generated/api/default/list_jobs.py +249 -0
  40. hushscript/generated/api/default/list_org_audit.py +221 -0
  41. hushscript/generated/api/default/list_org_invoices.py +221 -0
  42. hushscript/generated/api/default/list_org_ledger.py +221 -0
  43. hushscript/generated/api/default/list_org_matters.py +247 -0
  44. hushscript/generated/api/default/list_org_members.py +221 -0
  45. hushscript/generated/api/default/list_org_transcripts.py +233 -0
  46. hushscript/generated/api/default/list_packs.py +169 -0
  47. hushscript/generated/api/default/list_saved_cards.py +169 -0
  48. hushscript/generated/api/default/list_transactions.py +225 -0
  49. hushscript/generated/api/default/list_transcripts.py +225 -0
  50. hushscript/generated/api/default/org_audit_csv.py +163 -0
  51. hushscript/generated/api/default/org_ledger_csv.py +163 -0
  52. hushscript/generated/api/default/org_usage_report.py +247 -0
  53. hushscript/generated/api/default/org_usage_report_csv.py +229 -0
  54. hushscript/generated/api/default/patch_org_member.py +237 -0
  55. hushscript/generated/api/default/place_transcript_hold.py +206 -0
  56. hushscript/generated/api/default/rotate_agent_credentials.py +177 -0
  57. hushscript/generated/api/default/schedule_org_custody.py +215 -0
  58. hushscript/generated/api/default/set_default_card.py +223 -0
  59. hushscript/generated/api/default/upload_part.py +249 -0
  60. hushscript/generated/catalog.py +138 -0
  61. hushscript/generated/client.py +282 -0
  62. hushscript/generated/errors.py +16 -0
  63. hushscript/generated/hints.py +28 -0
  64. hushscript/generated/models/__init__.py +193 -0
  65. hushscript/generated/models/account_response.py +114 -0
  66. hushscript/generated/models/active_hold.py +88 -0
  67. hushscript/generated/models/active_hold_kind.py +18 -0
  68. hushscript/generated/models/agent_claim_request.py +61 -0
  69. hushscript/generated/models/agent_claim_response.py +85 -0
  70. hushscript/generated/models/agent_credentials_rotate_response.py +101 -0
  71. hushscript/generated/models/agent_signup_request.py +118 -0
  72. hushscript/generated/models/agent_signup_request_agent.py +80 -0
  73. hushscript/generated/models/agent_signup_response.py +111 -0
  74. hushscript/generated/models/buy_minutes_body.py +89 -0
  75. hushscript/generated/models/card.py +132 -0
  76. hushscript/generated/models/cards_response.py +90 -0
  77. hushscript/generated/models/complete_upload_body.py +107 -0
  78. hushscript/generated/models/complete_upload_body_parts_type_0_item.py +69 -0
  79. hushscript/generated/models/context_dictionary.py +143 -0
  80. hushscript/generated/models/context_prompt_preset.py +118 -0
  81. hushscript/generated/models/create_setup_session_body.py +62 -0
  82. hushscript/generated/models/create_upload_body.py +254 -0
  83. hushscript/generated/models/create_upload_body_transcription_options_type_0.py +178 -0
  84. hushscript/generated/models/credit_ledger_entry.py +113 -0
  85. hushscript/generated/models/credit_ledger_response.py +90 -0
  86. hushscript/generated/models/deleted_transcript.py +148 -0
  87. hushscript/generated/models/deleted_transcript_cause.py +18 -0
  88. hushscript/generated/models/deleted_transcript_receipt_type_0.py +107 -0
  89. hushscript/generated/models/deleted_transcript_receipt_type_0_items_item.py +69 -0
  90. hushscript/generated/models/deleted_transcripts_response.py +90 -0
  91. hushscript/generated/models/dictionary_entry.py +123 -0
  92. hushscript/generated/models/dictionary_entry_category.py +37 -0
  93. hushscript/generated/models/error.py +155 -0
  94. hushscript/generated/models/error_details.py +94 -0
  95. hushscript/generated/models/get_upload_part_urls_response_200_type_0.py +108 -0
  96. hushscript/generated/models/heartbeat_upload_response_200.py +61 -0
  97. hushscript/generated/models/holds_response.py +90 -0
  98. hushscript/generated/models/job.py +309 -0
  99. hushscript/generated/models/job_failure_kind_type_1.py +16 -0
  100. hushscript/generated/models/job_failure_kind_type_2_type_1.py +16 -0
  101. hushscript/generated/models/job_failure_kind_type_3_type_1.py +16 -0
  102. hushscript/generated/models/job_list.py +90 -0
  103. hushscript/generated/models/lift_transcript_hold_response_200.py +61 -0
  104. hushscript/generated/models/list_jobs_active.py +17 -0
  105. hushscript/generated/models/list_org_matters_status.py +16 -0
  106. hushscript/generated/models/options_summary.py +135 -0
  107. hushscript/generated/models/org_audit_entry.py +105 -0
  108. hushscript/generated/models/org_audit_response.py +90 -0
  109. hushscript/generated/models/org_invoice.py +175 -0
  110. hushscript/generated/models/org_invoices_response.py +90 -0
  111. hushscript/generated/models/org_ledger_entry.py +155 -0
  112. hushscript/generated/models/org_ledger_response.py +90 -0
  113. hushscript/generated/models/org_matter.py +79 -0
  114. hushscript/generated/models/org_matter_status.py +16 -0
  115. hushscript/generated/models/org_matters_response.py +75 -0
  116. hushscript/generated/models/org_member.py +123 -0
  117. hushscript/generated/models/org_members_response.py +90 -0
  118. hushscript/generated/models/org_summary_response.py +482 -0
  119. hushscript/generated/models/org_transcript.py +103 -0
  120. hushscript/generated/models/org_transcripts_response.py +90 -0
  121. hushscript/generated/models/org_usage_report_csv_group_by.py +17 -0
  122. hushscript/generated/models/org_usage_report_group_by.py +17 -0
  123. hushscript/generated/models/org_usage_response.py +112 -0
  124. hushscript/generated/models/org_usage_response_group_by.py +17 -0
  125. hushscript/generated/models/org_usage_row.py +86 -0
  126. hushscript/generated/models/pack.py +107 -0
  127. hushscript/generated/models/packs_response.py +75 -0
  128. hushscript/generated/models/patch_org_member_body.py +102 -0
  129. hushscript/generated/models/patch_org_member_response_200.py +61 -0
  130. hushscript/generated/models/place_transcript_hold_response_200.py +61 -0
  131. hushscript/generated/models/presigned_part_url.py +69 -0
  132. hushscript/generated/models/purchase_response.py +76 -0
  133. hushscript/generated/models/schedule_org_custody_body.py +66 -0
  134. hushscript/generated/models/schedule_org_custody_body_custody.py +17 -0
  135. hushscript/generated/models/schedule_org_custody_response_200.py +69 -0
  136. hushscript/generated/models/set_default_card_body.py +61 -0
  137. hushscript/generated/models/set_default_card_response_200.py +61 -0
  138. hushscript/generated/models/setup_session_response.py +77 -0
  139. hushscript/generated/models/transaction.py +183 -0
  140. hushscript/generated/models/transactions_response.py +98 -0
  141. hushscript/generated/models/transcript_detail.py +194 -0
  142. hushscript/generated/models/transcript_detail_speaker_names.py +47 -0
  143. hushscript/generated/models/transcript_envelope.py +89 -0
  144. hushscript/generated/models/transcript_envelope_translations.py +62 -0
  145. hushscript/generated/models/transcript_language.py +75 -0
  146. hushscript/generated/models/transcript_list.py +90 -0
  147. hushscript/generated/models/transcript_list_row.py +152 -0
  148. hushscript/generated/models/transcript_list_row_insights_state.py +20 -0
  149. hushscript/generated/models/transcription_context_response.py +95 -0
  150. hushscript/generated/models/upload_complete_response.py +100 -0
  151. hushscript/generated/models/upload_create_response.py +148 -0
  152. hushscript/generated/models/upload_create_response_funding.py +16 -0
  153. hushscript/generated/models/upload_create_response_upload_type_0.py +108 -0
  154. hushscript/generated/models/upload_limits.py +86 -0
  155. hushscript/generated/models/upload_part_response_200.py +69 -0
  156. hushscript/generated/models/utterance.py +85 -0
  157. hushscript/generated/scopes.py +42 -0
  158. hushscript/generated/types.py +54 -0
  159. hushscript/money.py +79 -0
  160. hushscript/paginate.py +78 -0
  161. hushscript/py.typed +0 -0
  162. hushscript/resources/__init__.py +1 -0
  163. hushscript/resources/_params.py +33 -0
  164. hushscript/resources/account.py +121 -0
  165. hushscript/resources/agent.py +421 -0
  166. hushscript/resources/billing.py +567 -0
  167. hushscript/resources/jobs.py +105 -0
  168. hushscript/resources/transcripts.py +209 -0
  169. hushscript/transcribe/__init__.py +1 -0
  170. hushscript/transcribe/apipeline.py +234 -0
  171. hushscript/transcribe/aupload.py +197 -0
  172. hushscript/transcribe/heartbeat.py +78 -0
  173. hushscript/transcribe/pipeline.py +312 -0
  174. hushscript/transcribe/preflight.py +272 -0
  175. hushscript/transcribe/probe.py +185 -0
  176. hushscript/transcribe/resume.py +115 -0
  177. hushscript/transcribe/segment.py +23 -0
  178. hushscript/transcribe/session.py +34 -0
  179. hushscript/transcribe/sniff.py +30 -0
  180. hushscript/transcribe/source.py +218 -0
  181. hushscript/transcribe/upload.py +498 -0
  182. hushscript/transcribe/wait.py +124 -0
  183. hushscript/transcript.py +197 -0
  184. hushscript-1.0.0.dist-info/METADATA +502 -0
  185. hushscript-1.0.0.dist-info/RECORD +187 -0
  186. hushscript-1.0.0.dist-info/WHEEL +4 -0
  187. hushscript-1.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,163 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.error import Error
9
+ from ...types import Response
10
+
11
+
12
+ def _get_kwargs() -> dict[str, Any]:
13
+
14
+ _kwargs: dict[str, Any] = {
15
+ "method": "get",
16
+ "url": "/v1/org/ledger.csv",
17
+ }
18
+
19
+ return _kwargs
20
+
21
+
22
+ def _parse_response(
23
+ *, client: AuthenticatedClient | Client, response: httpx.Response
24
+ ) -> Error | str | None:
25
+ if response.status_code == 200:
26
+ response_200 = response.text
27
+ return response_200
28
+
29
+ if response.status_code == 401:
30
+ response_401 = Error.from_dict(response.json())
31
+
32
+ return response_401
33
+
34
+ if response.status_code == 403:
35
+ response_403 = Error.from_dict(response.json())
36
+
37
+ return response_403
38
+
39
+ if response.status_code == 429:
40
+ response_429 = Error.from_dict(response.json())
41
+
42
+ return response_429
43
+
44
+ if response.status_code == 500:
45
+ response_500 = Error.from_dict(response.json())
46
+
47
+ return response_500
48
+
49
+ if client.raise_on_unexpected_status:
50
+ raise errors.UnexpectedStatus(response.status_code, response.content)
51
+ else:
52
+ return None
53
+
54
+
55
+ def _build_response(
56
+ *, client: AuthenticatedClient | Client, response: httpx.Response
57
+ ) -> Response[Error | str]:
58
+ return Response(
59
+ status_code=HTTPStatus(response.status_code),
60
+ content=response.content,
61
+ headers=response.headers,
62
+ parsed=_parse_response(client=client, response=response),
63
+ )
64
+
65
+
66
+ def sync_detailed(
67
+ *,
68
+ client: AuthenticatedClient,
69
+ ) -> Response[Error | str]:
70
+ """Download the caller's organization's whole minute-pool ledger as CSV
71
+
72
+ Downloads the caller's organization's entire org_credit_ledger history (not paged, unlike GET
73
+ /v1/org/ledger) as a CSV file. Sets X-Hushscript-Csv-Truncated: 1 if the export hit its internal
74
+ page ceiling.
75
+
76
+ Raises:
77
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
78
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
79
+
80
+ Returns:
81
+ Response[Error | str]
82
+ """
83
+
84
+ kwargs = _get_kwargs()
85
+
86
+ response = client.get_httpx_client().request(
87
+ **kwargs,
88
+ )
89
+
90
+ return _build_response(client=client, response=response)
91
+
92
+
93
+ def sync(
94
+ *,
95
+ client: AuthenticatedClient,
96
+ ) -> Error | str | None:
97
+ """Download the caller's organization's whole minute-pool ledger as CSV
98
+
99
+ Downloads the caller's organization's entire org_credit_ledger history (not paged, unlike GET
100
+ /v1/org/ledger) as a CSV file. Sets X-Hushscript-Csv-Truncated: 1 if the export hit its internal
101
+ page ceiling.
102
+
103
+ Raises:
104
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
105
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
106
+
107
+ Returns:
108
+ Error | str
109
+ """
110
+
111
+ return sync_detailed(
112
+ client=client,
113
+ ).parsed
114
+
115
+
116
+ async def asyncio_detailed(
117
+ *,
118
+ client: AuthenticatedClient,
119
+ ) -> Response[Error | str]:
120
+ """Download the caller's organization's whole minute-pool ledger as CSV
121
+
122
+ Downloads the caller's organization's entire org_credit_ledger history (not paged, unlike GET
123
+ /v1/org/ledger) as a CSV file. Sets X-Hushscript-Csv-Truncated: 1 if the export hit its internal
124
+ page ceiling.
125
+
126
+ Raises:
127
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
128
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
129
+
130
+ Returns:
131
+ Response[Error | str]
132
+ """
133
+
134
+ kwargs = _get_kwargs()
135
+
136
+ response = await client.get_async_httpx_client().request(**kwargs)
137
+
138
+ return _build_response(client=client, response=response)
139
+
140
+
141
+ async def asyncio(
142
+ *,
143
+ client: AuthenticatedClient,
144
+ ) -> Error | str | None:
145
+ """Download the caller's organization's whole minute-pool ledger as CSV
146
+
147
+ Downloads the caller's organization's entire org_credit_ledger history (not paged, unlike GET
148
+ /v1/org/ledger) as a CSV file. Sets X-Hushscript-Csv-Truncated: 1 if the export hit its internal
149
+ page ceiling.
150
+
151
+ Raises:
152
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
153
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
154
+
155
+ Returns:
156
+ Error | str
157
+ """
158
+
159
+ return (
160
+ await asyncio_detailed(
161
+ client=client,
162
+ )
163
+ ).parsed
@@ -0,0 +1,247 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.error import Error
9
+ from ...models.org_usage_report_group_by import (
10
+ OrgUsageReportGroupBy,
11
+ )
12
+ from ...models.org_usage_response import OrgUsageResponse
13
+ from ...types import UNSET, Response, Unset
14
+
15
+
16
+ def _get_kwargs(
17
+ *,
18
+ from_: int,
19
+ to: int,
20
+ group_by: OrgUsageReportGroupBy | Unset = "member",
21
+ ) -> dict[str, Any]:
22
+
23
+ params: dict[str, Any] = {}
24
+
25
+ params["from"] = from_
26
+
27
+ params["to"] = to
28
+
29
+ json_group_by: str | Unset = UNSET
30
+ if not isinstance(group_by, Unset):
31
+ json_group_by = group_by
32
+
33
+ params["group_by"] = json_group_by
34
+
35
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
36
+
37
+ _kwargs: dict[str, Any] = {
38
+ "method": "get",
39
+ "url": "/v1/org/usage",
40
+ "params": params,
41
+ }
42
+
43
+ return _kwargs
44
+
45
+
46
+ def _parse_response(
47
+ *, client: AuthenticatedClient | Client, response: httpx.Response
48
+ ) -> Error | OrgUsageResponse | None:
49
+ if response.status_code == 200:
50
+ response_200 = OrgUsageResponse.from_dict(response.json())
51
+
52
+ return response_200
53
+
54
+ if response.status_code == 401:
55
+ response_401 = Error.from_dict(response.json())
56
+
57
+ return response_401
58
+
59
+ if response.status_code == 403:
60
+ response_403 = Error.from_dict(response.json())
61
+
62
+ return response_403
63
+
64
+ if response.status_code == 422:
65
+ response_422 = Error.from_dict(response.json())
66
+
67
+ return response_422
68
+
69
+ if response.status_code == 429:
70
+ response_429 = Error.from_dict(response.json())
71
+
72
+ return response_429
73
+
74
+ if response.status_code == 500:
75
+ response_500 = Error.from_dict(response.json())
76
+
77
+ return response_500
78
+
79
+ if client.raise_on_unexpected_status:
80
+ raise errors.UnexpectedStatus(response.status_code, response.content)
81
+ else:
82
+ return None
83
+
84
+
85
+ def _build_response(
86
+ *, client: AuthenticatedClient | Client, response: httpx.Response
87
+ ) -> Response[Error | OrgUsageResponse]:
88
+ return Response(
89
+ status_code=HTTPStatus(response.status_code),
90
+ content=response.content,
91
+ headers=response.headers,
92
+ parsed=_parse_response(client=client, response=response),
93
+ )
94
+
95
+
96
+ def sync_detailed(
97
+ *,
98
+ client: AuthenticatedClient,
99
+ from_: int,
100
+ to: int,
101
+ group_by: OrgUsageReportGroupBy | Unset = "member",
102
+ ) -> Response[Error | OrgUsageResponse]:
103
+ """Aggregate the caller's organization's settled spend by member, matter or client
104
+
105
+ Aggregates settled minute-pool spend over a bounded range (at most 366 days), grouped by member, by
106
+ matter code or by client code, and priced at the workspace's own report-only rebill rate. This is
107
+ the one org read that is not a list: it has no cursor and no paging, since it reports at most one
108
+ row per member, per matter or per client. Billing gated, like GET /v1/org/ledger, because it
109
+ aggregates the same org_credit_ledger table.
110
+
111
+ Args:
112
+ from_ (int):
113
+ to (int):
114
+ group_by (OrgUsageReportGroupBy | Unset): Default: 'member'.
115
+
116
+ Raises:
117
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
118
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
119
+
120
+ Returns:
121
+ Response[Error | OrgUsageResponse]
122
+ """
123
+
124
+ kwargs = _get_kwargs(
125
+ from_=from_,
126
+ to=to,
127
+ group_by=group_by,
128
+ )
129
+
130
+ response = client.get_httpx_client().request(
131
+ **kwargs,
132
+ )
133
+
134
+ return _build_response(client=client, response=response)
135
+
136
+
137
+ def sync(
138
+ *,
139
+ client: AuthenticatedClient,
140
+ from_: int,
141
+ to: int,
142
+ group_by: OrgUsageReportGroupBy | Unset = "member",
143
+ ) -> Error | OrgUsageResponse | None:
144
+ """Aggregate the caller's organization's settled spend by member, matter or client
145
+
146
+ Aggregates settled minute-pool spend over a bounded range (at most 366 days), grouped by member, by
147
+ matter code or by client code, and priced at the workspace's own report-only rebill rate. This is
148
+ the one org read that is not a list: it has no cursor and no paging, since it reports at most one
149
+ row per member, per matter or per client. Billing gated, like GET /v1/org/ledger, because it
150
+ aggregates the same org_credit_ledger table.
151
+
152
+ Args:
153
+ from_ (int):
154
+ to (int):
155
+ group_by (OrgUsageReportGroupBy | Unset): Default: 'member'.
156
+
157
+ Raises:
158
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
159
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
160
+
161
+ Returns:
162
+ Error | OrgUsageResponse
163
+ """
164
+
165
+ return sync_detailed(
166
+ client=client,
167
+ from_=from_,
168
+ to=to,
169
+ group_by=group_by,
170
+ ).parsed
171
+
172
+
173
+ async def asyncio_detailed(
174
+ *,
175
+ client: AuthenticatedClient,
176
+ from_: int,
177
+ to: int,
178
+ group_by: OrgUsageReportGroupBy | Unset = "member",
179
+ ) -> Response[Error | OrgUsageResponse]:
180
+ """Aggregate the caller's organization's settled spend by member, matter or client
181
+
182
+ Aggregates settled minute-pool spend over a bounded range (at most 366 days), grouped by member, by
183
+ matter code or by client code, and priced at the workspace's own report-only rebill rate. This is
184
+ the one org read that is not a list: it has no cursor and no paging, since it reports at most one
185
+ row per member, per matter or per client. Billing gated, like GET /v1/org/ledger, because it
186
+ aggregates the same org_credit_ledger table.
187
+
188
+ Args:
189
+ from_ (int):
190
+ to (int):
191
+ group_by (OrgUsageReportGroupBy | Unset): Default: 'member'.
192
+
193
+ Raises:
194
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
195
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
196
+
197
+ Returns:
198
+ Response[Error | OrgUsageResponse]
199
+ """
200
+
201
+ kwargs = _get_kwargs(
202
+ from_=from_,
203
+ to=to,
204
+ group_by=group_by,
205
+ )
206
+
207
+ response = await client.get_async_httpx_client().request(**kwargs)
208
+
209
+ return _build_response(client=client, response=response)
210
+
211
+
212
+ async def asyncio(
213
+ *,
214
+ client: AuthenticatedClient,
215
+ from_: int,
216
+ to: int,
217
+ group_by: OrgUsageReportGroupBy | Unset = "member",
218
+ ) -> Error | OrgUsageResponse | None:
219
+ """Aggregate the caller's organization's settled spend by member, matter or client
220
+
221
+ Aggregates settled minute-pool spend over a bounded range (at most 366 days), grouped by member, by
222
+ matter code or by client code, and priced at the workspace's own report-only rebill rate. This is
223
+ the one org read that is not a list: it has no cursor and no paging, since it reports at most one
224
+ row per member, per matter or per client. Billing gated, like GET /v1/org/ledger, because it
225
+ aggregates the same org_credit_ledger table.
226
+
227
+ Args:
228
+ from_ (int):
229
+ to (int):
230
+ group_by (OrgUsageReportGroupBy | Unset): Default: 'member'.
231
+
232
+ Raises:
233
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
234
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
235
+
236
+ Returns:
237
+ Error | OrgUsageResponse
238
+ """
239
+
240
+ return (
241
+ await asyncio_detailed(
242
+ client=client,
243
+ from_=from_,
244
+ to=to,
245
+ group_by=group_by,
246
+ )
247
+ ).parsed
@@ -0,0 +1,229 @@
1
+ from http import HTTPStatus
2
+ from typing import Any
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.error import Error
9
+ from ...models.org_usage_report_csv_group_by import (
10
+ OrgUsageReportCsvGroupBy,
11
+ )
12
+ from ...types import UNSET, Response, Unset
13
+
14
+
15
+ def _get_kwargs(
16
+ *,
17
+ from_: int,
18
+ to: int,
19
+ group_by: OrgUsageReportCsvGroupBy | Unset = "member",
20
+ ) -> dict[str, Any]:
21
+
22
+ params: dict[str, Any] = {}
23
+
24
+ params["from"] = from_
25
+
26
+ params["to"] = to
27
+
28
+ json_group_by: str | Unset = UNSET
29
+ if not isinstance(group_by, Unset):
30
+ json_group_by = group_by
31
+
32
+ params["group_by"] = json_group_by
33
+
34
+ params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
35
+
36
+ _kwargs: dict[str, Any] = {
37
+ "method": "get",
38
+ "url": "/v1/org/usage.csv",
39
+ "params": params,
40
+ }
41
+
42
+ return _kwargs
43
+
44
+
45
+ def _parse_response(
46
+ *, client: AuthenticatedClient | Client, response: httpx.Response
47
+ ) -> Error | str | None:
48
+ if response.status_code == 200:
49
+ response_200 = response.text
50
+ return response_200
51
+
52
+ if response.status_code == 401:
53
+ response_401 = Error.from_dict(response.json())
54
+
55
+ return response_401
56
+
57
+ if response.status_code == 403:
58
+ response_403 = Error.from_dict(response.json())
59
+
60
+ return response_403
61
+
62
+ if response.status_code == 422:
63
+ response_422 = Error.from_dict(response.json())
64
+
65
+ return response_422
66
+
67
+ if response.status_code == 429:
68
+ response_429 = Error.from_dict(response.json())
69
+
70
+ return response_429
71
+
72
+ if response.status_code == 500:
73
+ response_500 = Error.from_dict(response.json())
74
+
75
+ return response_500
76
+
77
+ if client.raise_on_unexpected_status:
78
+ raise errors.UnexpectedStatus(response.status_code, response.content)
79
+ else:
80
+ return None
81
+
82
+
83
+ def _build_response(
84
+ *, client: AuthenticatedClient | Client, response: httpx.Response
85
+ ) -> Response[Error | str]:
86
+ return Response(
87
+ status_code=HTTPStatus(response.status_code),
88
+ content=response.content,
89
+ headers=response.headers,
90
+ parsed=_parse_response(client=client, response=response),
91
+ )
92
+
93
+
94
+ def sync_detailed(
95
+ *,
96
+ client: AuthenticatedClient,
97
+ from_: int,
98
+ to: int,
99
+ group_by: OrgUsageReportCsvGroupBy | Unset = "member",
100
+ ) -> Response[Error | str]:
101
+ """Download the caller's organization's settled spend by member, matter or client as CSV
102
+
103
+ Same aggregation as GET /v1/org/usage, downloaded as a CSV file instead of a JSON body.
104
+
105
+ Args:
106
+ from_ (int):
107
+ to (int):
108
+ group_by (OrgUsageReportCsvGroupBy | Unset): Default: 'member'.
109
+
110
+ Raises:
111
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
112
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
113
+
114
+ Returns:
115
+ Response[Error | str]
116
+ """
117
+
118
+ kwargs = _get_kwargs(
119
+ from_=from_,
120
+ to=to,
121
+ group_by=group_by,
122
+ )
123
+
124
+ response = client.get_httpx_client().request(
125
+ **kwargs,
126
+ )
127
+
128
+ return _build_response(client=client, response=response)
129
+
130
+
131
+ def sync(
132
+ *,
133
+ client: AuthenticatedClient,
134
+ from_: int,
135
+ to: int,
136
+ group_by: OrgUsageReportCsvGroupBy | Unset = "member",
137
+ ) -> Error | str | None:
138
+ """Download the caller's organization's settled spend by member, matter or client as CSV
139
+
140
+ Same aggregation as GET /v1/org/usage, downloaded as a CSV file instead of a JSON body.
141
+
142
+ Args:
143
+ from_ (int):
144
+ to (int):
145
+ group_by (OrgUsageReportCsvGroupBy | Unset): Default: 'member'.
146
+
147
+ Raises:
148
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
149
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
150
+
151
+ Returns:
152
+ Error | str
153
+ """
154
+
155
+ return sync_detailed(
156
+ client=client,
157
+ from_=from_,
158
+ to=to,
159
+ group_by=group_by,
160
+ ).parsed
161
+
162
+
163
+ async def asyncio_detailed(
164
+ *,
165
+ client: AuthenticatedClient,
166
+ from_: int,
167
+ to: int,
168
+ group_by: OrgUsageReportCsvGroupBy | Unset = "member",
169
+ ) -> Response[Error | str]:
170
+ """Download the caller's organization's settled spend by member, matter or client as CSV
171
+
172
+ Same aggregation as GET /v1/org/usage, downloaded as a CSV file instead of a JSON body.
173
+
174
+ Args:
175
+ from_ (int):
176
+ to (int):
177
+ group_by (OrgUsageReportCsvGroupBy | Unset): Default: 'member'.
178
+
179
+ Raises:
180
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
181
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
182
+
183
+ Returns:
184
+ Response[Error | str]
185
+ """
186
+
187
+ kwargs = _get_kwargs(
188
+ from_=from_,
189
+ to=to,
190
+ group_by=group_by,
191
+ )
192
+
193
+ response = await client.get_async_httpx_client().request(**kwargs)
194
+
195
+ return _build_response(client=client, response=response)
196
+
197
+
198
+ async def asyncio(
199
+ *,
200
+ client: AuthenticatedClient,
201
+ from_: int,
202
+ to: int,
203
+ group_by: OrgUsageReportCsvGroupBy | Unset = "member",
204
+ ) -> Error | str | None:
205
+ """Download the caller's organization's settled spend by member, matter or client as CSV
206
+
207
+ Same aggregation as GET /v1/org/usage, downloaded as a CSV file instead of a JSON body.
208
+
209
+ Args:
210
+ from_ (int):
211
+ to (int):
212
+ group_by (OrgUsageReportCsvGroupBy | Unset): Default: 'member'.
213
+
214
+ Raises:
215
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
216
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
217
+
218
+ Returns:
219
+ Error | str
220
+ """
221
+
222
+ return (
223
+ await asyncio_detailed(
224
+ client=client,
225
+ from_=from_,
226
+ to=to,
227
+ group_by=group_by,
228
+ )
229
+ ).parsed