Skip to content

Commit f0ed1ec

Browse files
Merge pull request #317 from dvonthenen/remove-optional-dataclass
Examine JSON DataClasses and Remove `Optional` for Those That are Required
2 parents 78abcd1 + ff0b734 commit f0ed1ec

File tree

10 files changed

+582
-400
lines changed

10 files changed

+582
-400
lines changed

deepgram/clients/analyze/v1/options.py

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
# Use of this source code is governed by a MIT license that can be found in the LICENSE file.
33
# SPDX-License-Identifier: MIT
44

5-
from dataclasses import dataclass
6-
from dataclasses_json import dataclass_json
5+
from dataclasses import dataclass, field
6+
from dataclasses_json import dataclass_json, config
77

88
from io import BufferedReader
99
from typing import Union, Optional
@@ -20,17 +20,39 @@ class AnalyzeOptions:
2020
https://developers.deepgram.com/reference/text-intelligence-apis
2121
"""
2222

23-
callback: Optional[str] = None
24-
callback_method: Optional[str] = None
25-
custom_intent: Optional[Union[list, str]] = None
26-
custom_intent_mode: Optional[str] = None
27-
custom_topic: Optional[Union[list, str]] = None
28-
custom_topic_mode: Optional[str] = None
29-
intents: Optional[bool] = None
30-
language: Optional[str] = None
31-
sentiment: Optional[bool] = None
32-
summarize: Optional[bool] = None
33-
topics: Optional[bool] = None
23+
callback: Optional[str] = field(
24+
default=None, metadata=config(exclude=lambda f: f is None)
25+
)
26+
callback_method: Optional[str] = field(
27+
default=None, metadata=config(exclude=lambda f: f is None)
28+
)
29+
custom_intent: Optional[Union[list, str]] = field(
30+
default=None, metadata=config(exclude=lambda f: f is None)
31+
)
32+
custom_intent_mode: Optional[str] = field(
33+
default=None, metadata=config(exclude=lambda f: f is None)
34+
)
35+
custom_topic: Optional[Union[list, str]] = field(
36+
default=None, metadata=config(exclude=lambda f: f is None)
37+
)
38+
custom_topic_mode: Optional[str] = field(
39+
default=None, metadata=config(exclude=lambda f: f is None)
40+
)
41+
intents: Optional[bool] = field(
42+
default=None, metadata=config(exclude=lambda f: f is None)
43+
)
44+
language: Optional[str] = field(
45+
default=None, metadata=config(exclude=lambda f: f is None)
46+
)
47+
sentiment: Optional[bool] = field(
48+
default=None, metadata=config(exclude=lambda f: f is None)
49+
)
50+
summarize: Optional[bool] = field(
51+
default=None, metadata=config(exclude=lambda f: f is None)
52+
)
53+
topics: Optional[bool] = field(
54+
default=None, metadata=config(exclude=lambda f: f is None)
55+
)
3456

3557
def __getitem__(self, key):
3658
_dict = self.to_dict()
@@ -69,7 +91,7 @@ class StreamSource:
6991
stream (BufferedReader): A BufferedReader object for reading binary data.
7092
"""
7193

72-
stream: BufferedReader
94+
stream: BufferedReader = None
7395

7496
def __getitem__(self, key):
7597
_dict = self.to_dict()
@@ -95,7 +117,7 @@ class UrlSource:
95117
url (str): The URL pointing to the hosted file.
96118
"""
97119

98-
url: str
120+
url: str = ""
99121

100122
def __getitem__(self, key):
101123
_dict = self.to_dict()
@@ -121,7 +143,7 @@ class BufferSource:
121143
buffer (bytes): The binary data.
122144
"""
123145

124-
buffer: bytes
146+
buffer: bytes = b""
125147

126148
def __getitem__(self, key):
127149
_dict = self.to_dict()

deepgram/clients/analyze/v1/response.py

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@dataclass_json
1515
@dataclass
1616
class AsyncAnalyzeResponse:
17-
request_id: Optional[str] = ""
17+
request_id: str = ""
1818

1919
def __getitem__(self, key):
2020
_dict = self.to_dict()
@@ -30,9 +30,9 @@ def __str__(self) -> str:
3030
@dataclass_json
3131
@dataclass
3232
class IntentsInfo:
33-
model_uuid: Optional[str] = ""
34-
input_tokens: Optional[int] = 0
35-
output_tokens: Optional[int] = 0
33+
model_uuid: str = ""
34+
input_tokens: int = 0
35+
output_tokens: int = 0
3636

3737
def __getitem__(self, key):
3838
_dict = self.to_dict()
@@ -45,9 +45,9 @@ def __str__(self) -> str:
4545
@dataclass_json
4646
@dataclass
4747
class SentimentInfo:
48-
model_uuid: Optional[str] = ""
49-
input_tokens: Optional[int] = 0
50-
output_tokens: Optional[int] = 0
48+
model_uuid: str = ""
49+
input_tokens: int = 0
50+
output_tokens: int = 0
5151

5252
def __getitem__(self, key):
5353
_dict = self.to_dict()
@@ -60,9 +60,9 @@ def __str__(self) -> str:
6060
@dataclass_json
6161
@dataclass
6262
class SummaryInfo:
63-
model_uuid: Optional[str] = ""
64-
input_tokens: Optional[int] = 0
65-
output_tokens: Optional[int] = 0
63+
model_uuid: str = ""
64+
input_tokens: int = 0
65+
output_tokens: int = 0
6666

6767
def __getitem__(self, key):
6868
_dict = self.to_dict()
@@ -75,9 +75,9 @@ def __str__(self) -> str:
7575
@dataclass_json
7676
@dataclass
7777
class TopicsInfo:
78-
model_uuid: Optional[str] = ""
79-
input_tokens: Optional[int] = 0
80-
output_tokens: Optional[int] = 0
78+
model_uuid: str = ""
79+
input_tokens: int = 0
80+
output_tokens: int = 0
8181

8282
def __getitem__(self, key):
8383
_dict = self.to_dict()
@@ -90,9 +90,9 @@ def __str__(self) -> str:
9090
@dataclass_json
9191
@dataclass
9292
class Metadata:
93-
request_id: Optional[str] = ""
94-
created: Optional[str] = ""
95-
language: Optional[str] = ""
93+
request_id: str = ""
94+
created: str = ""
95+
language: str = ""
9696
intents_info: Optional[IntentsInfo] = field(
9797
default=None, metadata=config(exclude=lambda f: f is None)
9898
)
@@ -125,10 +125,8 @@ def __str__(self) -> str:
125125
@dataclass_json
126126
@dataclass
127127
class Average:
128-
sentiment: Optional[Sentiment] = field(
129-
default=None, metadata=config(exclude=lambda f: f is None)
130-
)
131-
sentiment_score: Optional[float] = 0
128+
sentiment: Sentiment = None
129+
sentiment_score: float = 0
132130

133131
def __getitem__(self, key):
134132
_dict = self.to_dict()
@@ -143,7 +141,7 @@ def __str__(self) -> str:
143141
@dataclass_json
144142
@dataclass
145143
class Summary:
146-
text: Optional[str] = ""
144+
text: str = ""
147145

148146
def __getitem__(self, key):
149147
_dict = self.to_dict()
@@ -156,8 +154,8 @@ def __str__(self) -> str:
156154
@dataclass_json
157155
@dataclass
158156
class Topic:
159-
topic: Optional[str] = ""
160-
confidence_score: Optional[float] = 0
157+
topic: str = ""
158+
confidence_score: float = 0
161159

162160
def __getitem__(self, key):
163161
_dict = self.to_dict()
@@ -170,8 +168,8 @@ def __str__(self) -> str:
170168
@dataclass_json
171169
@dataclass
172170
class Intent:
173-
intent: Optional[str] = ""
174-
confidence_score: Optional[float] = 0
171+
intent: str = ""
172+
confidence_score: float = 0
175173

176174
def __getitem__(self, key):
177175
_dict = self.to_dict()
@@ -184,9 +182,9 @@ def __str__(self) -> str:
184182
@dataclass_json
185183
@dataclass
186184
class Segment:
187-
text: Optional[str] = ""
188-
start_word: Optional[int] = 0
189-
end_word: Optional[int] = 0
185+
text: str = ""
186+
start_word: int = 0
187+
end_word: int = 0
190188
sentiment: Optional[Sentiment] = field(
191189
default=None, metadata=config(exclude=lambda f: f is None)
192190
)
@@ -215,12 +213,8 @@ def __str__(self) -> str:
215213
@dataclass_json
216214
@dataclass
217215
class Sentiments:
218-
segments: Optional[List[Segment]] = field(
219-
default=None, metadata=config(exclude=lambda f: f is None)
220-
)
221-
average: Optional[Average] = field(
222-
default=None, metadata=config(exclude=lambda f: f is None)
223-
)
216+
segments: List[Segment] = None
217+
average: Average = None
224218

225219
def __getitem__(self, key):
226220
_dict = self.to_dict()
@@ -239,9 +233,7 @@ def __str__(self) -> str:
239233
@dataclass_json
240234
@dataclass
241235
class Topics:
242-
segments: Optional[List[Segment]] = field(
243-
default=None, metadata=config(exclude=lambda f: f is None)
244-
)
236+
segments: List[Segment] = None
245237

246238
def __getitem__(self, key):
247239
_dict = self.to_dict()
@@ -258,9 +250,7 @@ def __str__(self) -> str:
258250
@dataclass_json
259251
@dataclass
260252
class Intents:
261-
segments: Optional[List[Segment]] = field(
262-
default=None, metadata=config(exclude=lambda f: f is None)
263-
)
253+
segments: List[Segment] = None
264254

265255
def __getitem__(self, key):
266256
_dict = self.to_dict()

deepgram/clients/live/v1/options.py

Lines changed: 86 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
# Use of this source code is governed by a MIT license that can be found in the LICENSE file.
33
# SPDX-License-Identifier: MIT
44

5-
from dataclasses import dataclass
6-
from dataclasses_json import dataclass_json
5+
from dataclasses import dataclass, field
6+
from dataclasses_json import dataclass_json, config
77
from typing import List, Optional, Union
88
import logging, verboselogs
99

@@ -18,34 +18,90 @@ class LiveOptions:
1818
https://developers.deepgram.com/reference/streaming
1919
"""
2020

21-
alternatives: Optional[int] = None
22-
callback: Optional[str] = None
23-
callback_method: Optional[str] = None
24-
channels: Optional[int] = None
25-
diarize: Optional[bool] = None
26-
diarize_version: Optional[str] = None
27-
encoding: Optional[str] = None
28-
endpointing: Optional[str] = None
29-
extra: Optional[Union[list, str]] = None
30-
filler_words: Optional[bool] = None
31-
interim_results: Optional[bool] = None
32-
keywords: Optional[str] = None
33-
language: Optional[str] = None
34-
model: Optional[str] = None
35-
multichannel: Optional[bool] = None
36-
numerals: Optional[bool] = None
37-
punctuate: Optional[bool] = None
38-
profanity_filter: Optional[bool] = None
39-
redact: Optional[bool] = None
40-
replace: Optional[str] = None
41-
sample_rate: Optional[int] = None
42-
search: Optional[str] = None
43-
smart_format: Optional[bool] = None
44-
tag: Optional[list] = None
45-
tier: Optional[str] = None
46-
utterance_end_ms: Optional[str] = None
47-
vad_events: Optional[bool] = None
48-
version: Optional[str] = None
21+
alternatives: Optional[int] = field(
22+
default=None, metadata=config(exclude=lambda f: f is None)
23+
)
24+
callback: Optional[str] = field(
25+
default=None, metadata=config(exclude=lambda f: f is None)
26+
)
27+
callback_method: Optional[str] = field(
28+
default=None, metadata=config(exclude=lambda f: f is None)
29+
)
30+
channels: Optional[int] = field(
31+
default=None, metadata=config(exclude=lambda f: f is None)
32+
)
33+
diarize: Optional[bool] = field(
34+
default=None, metadata=config(exclude=lambda f: f is None)
35+
)
36+
diarize_version: Optional[str] = field(
37+
default=None, metadata=config(exclude=lambda f: f is None)
38+
)
39+
encoding: Optional[str] = field(
40+
default=None, metadata=config(exclude=lambda f: f is None)
41+
)
42+
endpointing: Optional[str] = field(
43+
default=None, metadata=config(exclude=lambda f: f is None)
44+
)
45+
extra: Optional[Union[list, str]] = field(
46+
default=None, metadata=config(exclude=lambda f: f is None)
47+
)
48+
filler_words: Optional[bool] = field(
49+
default=None, metadata=config(exclude=lambda f: f is None)
50+
)
51+
interim_results: Optional[bool] = field(
52+
default=None, metadata=config(exclude=lambda f: f is None)
53+
)
54+
keywords: Optional[str] = field(
55+
default=None, metadata=config(exclude=lambda f: f is None)
56+
)
57+
language: Optional[str] = field(
58+
default=None, metadata=config(exclude=lambda f: f is None)
59+
)
60+
model: Optional[str] = field(
61+
default=None, metadata=config(exclude=lambda f: f is None)
62+
)
63+
multichannel: Optional[bool] = field(
64+
default=None, metadata=config(exclude=lambda f: f is None)
65+
)
66+
numerals: Optional[bool] = field(
67+
default=None, metadata=config(exclude=lambda f: f is None)
68+
)
69+
punctuate: Optional[bool] = field(
70+
default=None, metadata=config(exclude=lambda f: f is None)
71+
)
72+
profanity_filter: Optional[bool] = field(
73+
default=None, metadata=config(exclude=lambda f: f is None)
74+
)
75+
redact: Optional[bool] = field(
76+
default=None, metadata=config(exclude=lambda f: f is None)
77+
)
78+
replace: Optional[str] = field(
79+
default=None, metadata=config(exclude=lambda f: f is None)
80+
)
81+
sample_rate: Optional[int] = field(
82+
default=None, metadata=config(exclude=lambda f: f is None)
83+
)
84+
search: Optional[str] = field(
85+
default=None, metadata=config(exclude=lambda f: f is None)
86+
)
87+
smart_format: Optional[bool] = field(
88+
default=None, metadata=config(exclude=lambda f: f is None)
89+
)
90+
tag: Optional[list] = field(
91+
default=None, metadata=config(exclude=lambda f: f is None)
92+
)
93+
tier: Optional[str] = field(
94+
default=None, metadata=config(exclude=lambda f: f is None)
95+
)
96+
utterance_end_ms: Optional[str] = field(
97+
default=None, metadata=config(exclude=lambda f: f is None)
98+
)
99+
vad_events: Optional[bool] = field(
100+
default=None, metadata=config(exclude=lambda f: f is None)
101+
)
102+
version: Optional[str] = field(
103+
default=None, metadata=config(exclude=lambda f: f is None)
104+
)
49105

50106
def __getitem__(self, key):
51107
_dict = self.to_dict()

0 commit comments

Comments
 (0)