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,148 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..models.deleted_transcript_cause import (
10
+ DeletedTranscriptCause,
11
+ check_deleted_transcript_cause,
12
+ )
13
+
14
+ if TYPE_CHECKING:
15
+ from ..models.deleted_transcript_receipt_type_0 import DeletedTranscriptReceiptType0
16
+
17
+
18
+ T = TypeVar("T", bound="DeletedTranscript")
19
+
20
+
21
+ @_attrs_define
22
+ class DeletedTranscript:
23
+ """
24
+ Attributes:
25
+ id (str):
26
+ title (str):
27
+ duration_seconds (int):
28
+ created_at (int): When the transcript was originally uploaded, Unix seconds. This is the key the list is ordered
29
+ and paged on.
30
+ deleted_at (int):
31
+ cause (DeletedTranscriptCause): Which deletion path removed the transcript: an explicit delete (manual), the
32
+ transcript's own auto_delete_at retention date (scheduled), the dormant-account purge (dormant), or the global
33
+ retention sweep (expired).
34
+ receipt (DeletedTranscriptReceiptType0 | None): The receipt recorded when the transcript was deleted, kept so
35
+ the deletion stays evidenced after the content itself is gone. Null when the stored receipt could not be read
36
+ back.
37
+ """
38
+
39
+ id: str
40
+ title: str
41
+ duration_seconds: int
42
+ created_at: int
43
+ deleted_at: int
44
+ cause: DeletedTranscriptCause
45
+ receipt: DeletedTranscriptReceiptType0 | None
46
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
47
+
48
+ def to_dict(self) -> dict[str, Any]:
49
+ from ..models.deleted_transcript_receipt_type_0 import (
50
+ DeletedTranscriptReceiptType0, # noqa: PLC0415
51
+ )
52
+
53
+ id = self.id
54
+
55
+ title = self.title
56
+
57
+ duration_seconds = self.duration_seconds
58
+
59
+ created_at = self.created_at
60
+
61
+ deleted_at = self.deleted_at
62
+
63
+ cause: str = self.cause
64
+
65
+ receipt: dict[str, Any] | None
66
+ if isinstance(self.receipt, DeletedTranscriptReceiptType0):
67
+ receipt = self.receipt.to_dict()
68
+ else:
69
+ receipt = self.receipt
70
+
71
+ field_dict: dict[str, Any] = {}
72
+ field_dict.update(self.additional_properties)
73
+ field_dict.update(
74
+ {
75
+ "id": id,
76
+ "title": title,
77
+ "duration_seconds": duration_seconds,
78
+ "created_at": created_at,
79
+ "deleted_at": deleted_at,
80
+ "cause": cause,
81
+ "receipt": receipt,
82
+ }
83
+ )
84
+
85
+ return field_dict
86
+
87
+ @classmethod
88
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
89
+ from ..models.deleted_transcript_receipt_type_0 import (
90
+ DeletedTranscriptReceiptType0, # noqa: PLC0415
91
+ )
92
+
93
+ d = dict(src_dict)
94
+ id = d.pop("id")
95
+
96
+ title = d.pop("title")
97
+
98
+ duration_seconds = d.pop("duration_seconds")
99
+
100
+ created_at = d.pop("created_at")
101
+
102
+ deleted_at = d.pop("deleted_at")
103
+
104
+ cause = check_deleted_transcript_cause(d.pop("cause"))
105
+
106
+ def _parse_receipt(data: object) -> DeletedTranscriptReceiptType0 | None:
107
+ if data is None:
108
+ return data
109
+ try:
110
+ if not isinstance(data, dict):
111
+ raise TypeError()
112
+ receipt_type_0 = DeletedTranscriptReceiptType0.from_dict(data)
113
+
114
+ return receipt_type_0
115
+ except (TypeError, ValueError, AttributeError, KeyError):
116
+ pass
117
+ return cast(DeletedTranscriptReceiptType0 | None, data)
118
+
119
+ receipt = _parse_receipt(d.pop("receipt"))
120
+
121
+ deleted_transcript = cls(
122
+ id=id,
123
+ title=title,
124
+ duration_seconds=duration_seconds,
125
+ created_at=created_at,
126
+ deleted_at=deleted_at,
127
+ cause=cause,
128
+ receipt=receipt,
129
+ )
130
+
131
+ deleted_transcript.additional_properties = d
132
+ return deleted_transcript
133
+
134
+ @property
135
+ def additional_keys(self) -> list[str]:
136
+ return list(self.additional_properties.keys())
137
+
138
+ def __getitem__(self, key: str) -> Any:
139
+ return self.additional_properties[key]
140
+
141
+ def __setitem__(self, key: str, value: Any) -> None:
142
+ self.additional_properties[key] = value
143
+
144
+ def __delitem__(self, key: str) -> None:
145
+ del self.additional_properties[key]
146
+
147
+ def __contains__(self, key: str) -> bool:
148
+ return key in self.additional_properties
@@ -0,0 +1,18 @@
1
+ from typing import Literal
2
+
3
+ DeletedTranscriptCause = Literal["dormant", "expired", "manual", "scheduled"]
4
+
5
+ DELETED_TRANSCRIPT_CAUSE_VALUES: set[DeletedTranscriptCause] = {
6
+ "dormant",
7
+ "expired",
8
+ "manual",
9
+ "scheduled",
10
+ }
11
+
12
+
13
+ def check_deleted_transcript_cause(value: str) -> DeletedTranscriptCause:
14
+ if value in DELETED_TRANSCRIPT_CAUSE_VALUES:
15
+ return value
16
+ raise TypeError(
17
+ f"Unexpected value {value!r}. Expected one of {DELETED_TRANSCRIPT_CAUSE_VALUES!r}"
18
+ )
@@ -0,0 +1,107 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.deleted_transcript_receipt_type_0_items_item import (
11
+ DeletedTranscriptReceiptType0ItemsItem,
12
+ )
13
+
14
+
15
+ T = TypeVar("T", bound="DeletedTranscriptReceiptType0")
16
+
17
+
18
+ @_attrs_define
19
+ class DeletedTranscriptReceiptType0:
20
+ """The receipt recorded when the transcript was deleted, kept so the deletion stays evidenced after the content itself
21
+ is gone. Null when the stored receipt could not be read back.
22
+
23
+ Attributes:
24
+ type_ (str):
25
+ version (int):
26
+ created_at (str): UTC timestamp, seconds precision.
27
+ items (list[DeletedTranscriptReceiptType0ItemsItem]):
28
+ """
29
+
30
+ type_: str
31
+ version: int
32
+ created_at: str
33
+ items: list[DeletedTranscriptReceiptType0ItemsItem]
34
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
35
+
36
+ def to_dict(self) -> dict[str, Any]:
37
+ type_ = self.type_
38
+
39
+ version = self.version
40
+
41
+ created_at = self.created_at
42
+
43
+ items = []
44
+ for items_item_data in self.items:
45
+ items_item = items_item_data.to_dict()
46
+ items.append(items_item)
47
+
48
+ field_dict: dict[str, Any] = {}
49
+ field_dict.update(self.additional_properties)
50
+ field_dict.update(
51
+ {
52
+ "type": type_,
53
+ "version": version,
54
+ "created_at": created_at,
55
+ "items": items,
56
+ }
57
+ )
58
+
59
+ return field_dict
60
+
61
+ @classmethod
62
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
63
+ from ..models.deleted_transcript_receipt_type_0_items_item import (
64
+ DeletedTranscriptReceiptType0ItemsItem, # noqa: PLC0415
65
+ )
66
+
67
+ d = dict(src_dict)
68
+ type_ = d.pop("type")
69
+
70
+ version = d.pop("version")
71
+
72
+ created_at = d.pop("created_at")
73
+
74
+ items = []
75
+ _items = d.pop("items")
76
+ for items_item_data in _items:
77
+ items_item = DeletedTranscriptReceiptType0ItemsItem.from_dict(
78
+ items_item_data
79
+ )
80
+
81
+ items.append(items_item)
82
+
83
+ deleted_transcript_receipt_type_0 = cls(
84
+ type_=type_,
85
+ version=version,
86
+ created_at=created_at,
87
+ items=items,
88
+ )
89
+
90
+ deleted_transcript_receipt_type_0.additional_properties = d
91
+ return deleted_transcript_receipt_type_0
92
+
93
+ @property
94
+ def additional_keys(self) -> list[str]:
95
+ return list(self.additional_properties.keys())
96
+
97
+ def __getitem__(self, key: str) -> Any:
98
+ return self.additional_properties[key]
99
+
100
+ def __setitem__(self, key: str, value: Any) -> None:
101
+ self.additional_properties[key] = value
102
+
103
+ def __delitem__(self, key: str) -> None:
104
+ del self.additional_properties[key]
105
+
106
+ def __contains__(self, key: str) -> bool:
107
+ return key in self.additional_properties
@@ -0,0 +1,69 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="DeletedTranscriptReceiptType0ItemsItem")
10
+
11
+
12
+ @_attrs_define
13
+ class DeletedTranscriptReceiptType0ItemsItem:
14
+ """
15
+ Attributes:
16
+ kind (str):
17
+ deleted_at (str): UTC timestamp, seconds precision, e.g. 2026-09-07T14:53:35Z.
18
+ """
19
+
20
+ kind: str
21
+ deleted_at: str
22
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
23
+
24
+ def to_dict(self) -> dict[str, Any]:
25
+ kind = self.kind
26
+
27
+ deleted_at = self.deleted_at
28
+
29
+ field_dict: dict[str, Any] = {}
30
+ field_dict.update(self.additional_properties)
31
+ field_dict.update(
32
+ {
33
+ "kind": kind,
34
+ "deleted_at": deleted_at,
35
+ }
36
+ )
37
+
38
+ return field_dict
39
+
40
+ @classmethod
41
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
42
+ d = dict(src_dict)
43
+ kind = d.pop("kind")
44
+
45
+ deleted_at = d.pop("deleted_at")
46
+
47
+ deleted_transcript_receipt_type_0_items_item = cls(
48
+ kind=kind,
49
+ deleted_at=deleted_at,
50
+ )
51
+
52
+ deleted_transcript_receipt_type_0_items_item.additional_properties = d
53
+ return deleted_transcript_receipt_type_0_items_item
54
+
55
+ @property
56
+ def additional_keys(self) -> list[str]:
57
+ return list(self.additional_properties.keys())
58
+
59
+ def __getitem__(self, key: str) -> Any:
60
+ return self.additional_properties[key]
61
+
62
+ def __setitem__(self, key: str, value: Any) -> None:
63
+ self.additional_properties[key] = value
64
+
65
+ def __delitem__(self, key: str) -> None:
66
+ del self.additional_properties[key]
67
+
68
+ def __contains__(self, key: str) -> bool:
69
+ return key in self.additional_properties
@@ -0,0 +1,90 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.deleted_transcript import DeletedTranscript
11
+
12
+
13
+ T = TypeVar("T", bound="DeletedTranscriptsResponse")
14
+
15
+
16
+ @_attrs_define
17
+ class DeletedTranscriptsResponse:
18
+ """
19
+ Attributes:
20
+ deleted (list[DeletedTranscript]):
21
+ next_cursor (None | str): An opaque token for the next page's cursor parameter, or null on the last page. This
22
+ API refuses a cursor it did not mint.
23
+ """
24
+
25
+ deleted: list[DeletedTranscript]
26
+ next_cursor: None | str
27
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
28
+
29
+ def to_dict(self) -> dict[str, Any]:
30
+ deleted = []
31
+ for deleted_item_data in self.deleted:
32
+ deleted_item = deleted_item_data.to_dict()
33
+ deleted.append(deleted_item)
34
+
35
+ next_cursor: None | str
36
+ next_cursor = self.next_cursor
37
+
38
+ field_dict: dict[str, Any] = {}
39
+ field_dict.update(self.additional_properties)
40
+ field_dict.update(
41
+ {
42
+ "deleted": deleted,
43
+ "next_cursor": next_cursor,
44
+ }
45
+ )
46
+
47
+ return field_dict
48
+
49
+ @classmethod
50
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
51
+ from ..models.deleted_transcript import DeletedTranscript # noqa: PLC0415
52
+
53
+ d = dict(src_dict)
54
+ deleted = []
55
+ _deleted = d.pop("deleted")
56
+ for deleted_item_data in _deleted:
57
+ deleted_item = DeletedTranscript.from_dict(deleted_item_data)
58
+
59
+ deleted.append(deleted_item)
60
+
61
+ def _parse_next_cursor(data: object) -> None | str:
62
+ if data is None:
63
+ return data
64
+ return cast(None | str, data)
65
+
66
+ next_cursor = _parse_next_cursor(d.pop("next_cursor"))
67
+
68
+ deleted_transcripts_response = cls(
69
+ deleted=deleted,
70
+ next_cursor=next_cursor,
71
+ )
72
+
73
+ deleted_transcripts_response.additional_properties = d
74
+ return deleted_transcripts_response
75
+
76
+ @property
77
+ def additional_keys(self) -> list[str]:
78
+ return list(self.additional_properties.keys())
79
+
80
+ def __getitem__(self, key: str) -> Any:
81
+ return self.additional_properties[key]
82
+
83
+ def __setitem__(self, key: str, value: Any) -> None:
84
+ self.additional_properties[key] = value
85
+
86
+ def __delitem__(self, key: str) -> None:
87
+ del self.additional_properties[key]
88
+
89
+ def __contains__(self, key: str) -> bool:
90
+ return key in self.additional_properties
@@ -0,0 +1,123 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..models.dictionary_entry_category import (
10
+ DictionaryEntryCategory,
11
+ check_dictionary_entry_category,
12
+ )
13
+
14
+ T = TypeVar("T", bound="DictionaryEntry")
15
+
16
+
17
+ @_attrs_define
18
+ class DictionaryEntry:
19
+ """
20
+ Attributes:
21
+ id (str):
22
+ canonical (str): The spelling the transcript should use.
23
+ variants (list[str]): Alternative spellings that should be normalized to the canonical form.
24
+ category (DictionaryEntryCategory): What kind of term this is. Never empty and never null: an entry saved
25
+ without a category is stored as other.
26
+ note (str): Free-text note about the entry. Empty when unset; never null.
27
+ case_sensitive (bool):
28
+ created_at (int):
29
+ updated_at (int):
30
+ """
31
+
32
+ id: str
33
+ canonical: str
34
+ variants: list[str]
35
+ category: DictionaryEntryCategory
36
+ note: str
37
+ case_sensitive: bool
38
+ created_at: int
39
+ updated_at: int
40
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
41
+
42
+ def to_dict(self) -> dict[str, Any]:
43
+ id = self.id
44
+
45
+ canonical = self.canonical
46
+
47
+ variants = self.variants
48
+
49
+ category: str = self.category
50
+
51
+ note = self.note
52
+
53
+ case_sensitive = self.case_sensitive
54
+
55
+ created_at = self.created_at
56
+
57
+ updated_at = self.updated_at
58
+
59
+ field_dict: dict[str, Any] = {}
60
+ field_dict.update(self.additional_properties)
61
+ field_dict.update(
62
+ {
63
+ "id": id,
64
+ "canonical": canonical,
65
+ "variants": variants,
66
+ "category": category,
67
+ "note": note,
68
+ "case_sensitive": case_sensitive,
69
+ "created_at": created_at,
70
+ "updated_at": updated_at,
71
+ }
72
+ )
73
+
74
+ return field_dict
75
+
76
+ @classmethod
77
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
78
+ d = dict(src_dict)
79
+ id = d.pop("id")
80
+
81
+ canonical = d.pop("canonical")
82
+
83
+ variants = cast(list[str], d.pop("variants"))
84
+
85
+ category = check_dictionary_entry_category(d.pop("category"))
86
+
87
+ note = d.pop("note")
88
+
89
+ case_sensitive = d.pop("case_sensitive")
90
+
91
+ created_at = d.pop("created_at")
92
+
93
+ updated_at = d.pop("updated_at")
94
+
95
+ dictionary_entry = cls(
96
+ id=id,
97
+ canonical=canonical,
98
+ variants=variants,
99
+ category=category,
100
+ note=note,
101
+ case_sensitive=case_sensitive,
102
+ created_at=created_at,
103
+ updated_at=updated_at,
104
+ )
105
+
106
+ dictionary_entry.additional_properties = d
107
+ return dictionary_entry
108
+
109
+ @property
110
+ def additional_keys(self) -> list[str]:
111
+ return list(self.additional_properties.keys())
112
+
113
+ def __getitem__(self, key: str) -> Any:
114
+ return self.additional_properties[key]
115
+
116
+ def __setitem__(self, key: str, value: Any) -> None:
117
+ self.additional_properties[key] = value
118
+
119
+ def __delitem__(self, key: str) -> None:
120
+ del self.additional_properties[key]
121
+
122
+ def __contains__(self, key: str) -> bool:
123
+ return key in self.additional_properties
@@ -0,0 +1,37 @@
1
+ from typing import Literal
2
+
3
+ DictionaryEntryCategory = Literal[
4
+ "abbreviation",
5
+ "acronym",
6
+ "legal_term",
7
+ "medical_term",
8
+ "organization",
9
+ "other",
10
+ "person_name",
11
+ "place",
12
+ "preferred_spelling",
13
+ "product",
14
+ "technical_term",
15
+ ]
16
+
17
+ DICTIONARY_ENTRY_CATEGORY_VALUES: set[DictionaryEntryCategory] = {
18
+ "abbreviation",
19
+ "acronym",
20
+ "legal_term",
21
+ "medical_term",
22
+ "organization",
23
+ "other",
24
+ "person_name",
25
+ "place",
26
+ "preferred_spelling",
27
+ "product",
28
+ "technical_term",
29
+ }
30
+
31
+
32
+ def check_dictionary_entry_category(value: str) -> DictionaryEntryCategory:
33
+ if value in DICTIONARY_ENTRY_CATEGORY_VALUES:
34
+ return value
35
+ raise TypeError(
36
+ f"Unexpected value {value!r}. Expected one of {DICTIONARY_ENTRY_CATEGORY_VALUES!r}"
37
+ )