Skip to content

Commit 1a04967

Browse files
Merge pull request #273 from dvonthenen/fix-to-json-object-to-str
Clean Up JSON to Remove Null and Handle Default Fields
2 parents 231f916 + 1918c12 commit 1a04967

File tree

2 files changed

+83
-31
lines changed

2 files changed

+83
-31
lines changed

Diff for: deepgram/clients/analyze/v1/response.py

+32-12
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 config, dataclass_json
77
from typing import List, Optional, TypedDict, Dict
88
from ..enums import Sentiment
99

@@ -78,10 +78,18 @@ class Metadata:
7878
request_id: Optional[str] = ""
7979
created: Optional[str] = ""
8080
language: Optional[str] = ""
81-
intents_info: Optional[IntentsInfo] = None
82-
sentiment_info: Optional[SentimentInfo] = None
83-
summary_info: Optional[SummaryInfo] = None
84-
topics_info: Optional[TopicsInfo] = None
81+
intents_info: Optional[IntentsInfo] = field(
82+
default=None, metadata=config(exclude=lambda f: f is None)
83+
)
84+
sentiment_info: Optional[SentimentInfo] = field(
85+
default=None, metadata=config(exclude=lambda f: f is None)
86+
)
87+
summary_info: Optional[SummaryInfo] = field(
88+
default=None, metadata=config(exclude=lambda f: f is None)
89+
)
90+
topics_info: Optional[TopicsInfo] = field(
91+
default=None, metadata=config(exclude=lambda f: f is None)
92+
)
8593

8694
def __getitem__(self, key):
8795
_dict = self.to_dict()
@@ -147,8 +155,12 @@ class Segment:
147155
end_word: Optional[int] = 0
148156
sentiment: Optional[Sentiment] = ""
149157
sentiment_score: Optional[float] = 0
150-
intents: Optional[List[Intent]] = None
151-
topics: Optional[List[Topic]] = None
158+
intents: Optional[List[Intent]] = field(
159+
default=None, metadata=config(exclude=lambda f: f is None)
160+
)
161+
topics: Optional[List[Topic]] = field(
162+
default=None, metadata=config(exclude=lambda f: f is None)
163+
)
152164

153165
def __getitem__(self, key):
154166
_dict = self.to_dict()
@@ -207,10 +219,18 @@ def __getitem__(self, key):
207219
@dataclass_json
208220
@dataclass
209221
class Results:
210-
summary: Optional[Summary] = None
211-
sentiments: Optional[Sentiments] = None
212-
topics: Optional[Topics] = None
213-
intents: Optional[Intents] = None
222+
summary: Optional[Summary] = field(
223+
default=None, metadata=config(exclude=lambda f: f is None)
224+
)
225+
sentiments: Optional[Sentiments] = field(
226+
default=None, metadata=config(exclude=lambda f: f is None)
227+
)
228+
topics: Optional[Topics] = field(
229+
default=None, metadata=config(exclude=lambda f: f is None)
230+
)
231+
intents: Optional[Intents] = field(
232+
default=None, metadata=config(exclude=lambda f: f is None)
233+
)
214234

215235
def __getitem__(self, key):
216236
_dict = self.to_dict()

Diff for: deepgram/clients/prerecorded/v1/response.py

+51-19
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 config, dataclass_json
77
from typing import List, Optional, TypedDict, Dict
88
from ..enums import Sentiment
99

@@ -93,12 +93,22 @@ class Metadata:
9393
duration: Optional[float] = 0
9494
channels: Optional[int] = 0
9595
models: Optional[List[str]] = None
96-
warnings: Optional[List[Warning]] = None
96+
warnings: Optional[List[Warning]] = field(
97+
default=None, metadata=config(exclude=lambda f: f is None)
98+
)
9799
model_info: Optional[Dict[str, ModelInfo]] = None
98-
summary_info: Optional[SummaryInfo] = None
99-
intents_info: Optional[IntentsInfo] = None
100-
sentiment_info: Optional[SentimentInfo] = None
101-
topics_info: Optional[TopicsInfo] = None
100+
summary_info: Optional[SummaryInfo] = field(
101+
default=None, metadata=config(exclude=lambda f: f is None)
102+
)
103+
intents_info: Optional[IntentsInfo] = field(
104+
default=None, metadata=config(exclude=lambda f: f is None)
105+
)
106+
sentiment_info: Optional[SentimentInfo] = field(
107+
default=None, metadata=config(exclude=lambda f: f is None)
108+
)
109+
topics_info: Optional[TopicsInfo] = field(
110+
default=None, metadata=config(exclude=lambda f: f is None)
111+
)
102112
extra: Optional[str] = ""
103113

104114
def __getitem__(self, key):
@@ -321,10 +331,16 @@ class Alternative:
321331
transcript: Optional[str] = ""
322332
confidence: Optional[float] = 0
323333
words: Optional[List[Word]] = None
324-
summaries: Optional[List[SummaryV1]] = None
334+
summaries: Optional[List[SummaryV1]] = field(
335+
default=None, metadata=config(exclude=lambda f: f is None)
336+
)
325337
paragraphs: Optional[Paragraphs] = None
326-
entities: Optional[List[Entity]] = None
327-
translations: Optional[List[Translation]] = None
338+
entities: Optional[List[Entity]] = field(
339+
default=None, metadata=config(exclude=lambda f: f is None)
340+
)
341+
translations: Optional[List[Translation]] = field(
342+
default=None, metadata=config(exclude=lambda f: f is None)
343+
)
328344

329345
def __getitem__(self, key):
330346
_dict = self.to_dict()
@@ -354,7 +370,9 @@ def __getitem__(self, key):
354370
@dataclass_json
355371
@dataclass
356372
class Channel:
357-
search: Optional[List[Search]] = None
373+
search: Optional[List[Search]] = field(
374+
default=None, metadata=config(exclude=lambda f: f is None)
375+
)
358376
alternatives: Optional[List[Alternative]] = None
359377
detected_language: Optional[str] = ""
360378
language_confidence: Optional[float] = 0
@@ -414,8 +432,12 @@ class Segment:
414432
end_word: Optional[int] = 0
415433
sentiment: Optional[Sentiment] = ""
416434
sentiment_score: Optional[float] = 0
417-
intents: Optional[List[Intent]] = None
418-
topics: Optional[List[Topic]] = None
435+
intents: Optional[List[Intent]] = field(
436+
default=None, metadata=config(exclude=lambda f: f is None)
437+
)
438+
topics: Optional[List[Topic]] = field(
439+
default=None, metadata=config(exclude=lambda f: f is None)
440+
)
419441

420442
def __getitem__(self, key):
421443
_dict = self.to_dict()
@@ -446,7 +468,7 @@ def __getitem__(self, key):
446468
@dataclass_json
447469
@dataclass
448470
class Topics:
449-
segments: Optional[List[Segment]] = 0
471+
segments: Optional[List[Segment]] = None
450472

451473
def __getitem__(self, key):
452474
_dict = self.to_dict()
@@ -475,11 +497,21 @@ def __getitem__(self, key):
475497
@dataclass
476498
class Results:
477499
channels: Optional[List[Channel]] = None
478-
utterances: Optional[List[Utterance]] = None
479-
summary: Optional[SummaryV2] = None
480-
sentiments: Optional[Sentiments] = None
481-
topics: Optional[Topics] = None
482-
intents: Optional[Intents] = None
500+
utterances: Optional[List[Utterance]] = field(
501+
default=None, metadata=config(exclude=lambda f: f is None)
502+
)
503+
summary: Optional[SummaryV2] = field(
504+
default=None, metadata=config(exclude=lambda f: f is None)
505+
)
506+
sentiments: Optional[Sentiments] = field(
507+
default=None, metadata=config(exclude=lambda f: f is None)
508+
)
509+
topics: Optional[Topics] = field(
510+
default=None, metadata=config(exclude=lambda f: f is None)
511+
)
512+
intents: Optional[Intents] = field(
513+
default=None, metadata=config(exclude=lambda f: f is None)
514+
)
483515

484516
def __getitem__(self, key):
485517
_dict = self.to_dict()

0 commit comments

Comments
 (0)