Skip to content

Commit 8e974e8

Browse files
authored
Replaces jsonable_encoder with custom dict function and removes db_session.add() in update functions (Netflix#1496)
1 parent 5e8b251 commit 8e974e8

File tree

29 files changed

+74
-110
lines changed

29 files changed

+74
-110
lines changed

src/dispatch/auth/service.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from typing import Optional
99

1010
from fastapi import HTTPException, Depends
11-
from fastapi.encoders import jsonable_encoder
1211
from starlette.requests import Request
1312
from starlette.status import HTTP_401_UNAUTHORIZED
1413

@@ -144,7 +143,7 @@ def get_or_create(*, db_session, organization: str, user_in: UserRegister) -> Di
144143

145144
def update(*, db_session, user: DispatchUser, user_in: UserUpdate) -> DispatchUser:
146145
"""Updates a user."""
147-
user_data = jsonable_encoder(user)
146+
user_data = user.dict()
148147

149148
update_data = user_in.dict(exclude={"password"}, skip_defaults=True)
150149
for field in user_data:
@@ -163,7 +162,6 @@ def update(*, db_session, user: DispatchUser, user_in: UserUpdate) -> DispatchUs
163162
create_or_update_organization_role(db_session=db_session, user=user, role_in=role)
164163
)
165164

166-
db_session.add(user)
167165
db_session.commit()
168166
return user
169167

src/dispatch/conference/service.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,4 @@ def create(*, db_session, conference_in: ConferenceCreate) -> Conference:
2828
conference = Conference(**conference_in.dict())
2929
db_session.add(conference)
3030
db_session.commit()
31-
db_session.flush(conference)
3231
return conference

src/dispatch/conversation/service.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from typing import Optional
22

3-
from fastapi.encoders import jsonable_encoder
4-
53
from dispatch.event import service as event_service
64

75
from .models import Conversation, ConversationCreate, ConversationUpdate
@@ -58,14 +56,13 @@ def update(
5856
*, db_session, conversation: Conversation, conversation_in: ConversationUpdate
5957
) -> Conversation:
6058
"""Updates a conversation."""
61-
conversation_data = jsonable_encoder(conversation)
59+
conversation_data = conversation.dict()
6260
update_data = conversation_in.dict(skip_defaults=True)
6361

6462
for field in conversation_data:
6563
if field in update_data:
6664
setattr(conversation, field, update_data[field])
6765

68-
db_session.add(conversation)
6966
db_session.commit()
7067
return conversation
7168

src/dispatch/database/core.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ class CustomBase:
4343
def __tablename__(self):
4444
return resolve_table_name(self.__name__)
4545

46+
def dict(self):
47+
"""Returns a dict representation of a model."""
48+
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
49+
4650

4751
Base = declarative_base(cls=CustomBase)
4852
make_searchable(Base.metadata)

src/dispatch/definition/service.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
from typing import List, Optional
2-
from fastapi.encoders import jsonable_encoder
32

4-
from .models import Definition, DefinitionCreate, DefinitionUpdate
53
from dispatch.project import service as project_service
64
from dispatch.term import service as term_service
75

6+
from .models import Definition, DefinitionCreate, DefinitionUpdate
7+
88

99
def get(*, db_session, definition_id: int) -> Optional[Definition]:
10+
"""Gets a definition by its id."""
1011
return db_session.query(Definition).filter(Definition.id == definition_id).first()
1112

1213

1314
def get_by_text(*, db_session, text: str) -> Optional[Definition]:
15+
"""Gets a definition by its text."""
1416
return db_session.query(Definition).filter(Definition.text == text).first()
1517

1618

1719
def get_all(*, db_session) -> List[Optional[Definition]]:
20+
"""Gets all definitions."""
1821
return db_session.query(Definition)
1922

2023

2124
def create(*, db_session, definition_in: DefinitionCreate) -> Definition:
25+
"""Creates a new definition."""
2226
terms = [
2327
term_service.get_or_create(db_session=db_session, term_in=t) for t in definition_in.terms
2428
]
@@ -33,6 +37,7 @@ def create(*, db_session, definition_in: DefinitionCreate) -> Definition:
3337

3438

3539
def create_all(*, db_session, definitions_in: List[DefinitionCreate]) -> List[Definition]:
40+
"""Creates a definitions in bulk."""
3641
definitions = [Definition(text=d.text) for d in definitions_in]
3742
db_session.bulk_save_insert(definitions)
3843
db_session.commit()
@@ -41,7 +46,8 @@ def create_all(*, db_session, definitions_in: List[DefinitionCreate]) -> List[De
4146

4247

4348
def update(*, db_session, definition: Definition, definition_in: DefinitionUpdate) -> Definition:
44-
definition_data = jsonable_encoder(definition)
49+
"""Updates a definition."""
50+
definition_data = definition.dict()
4551

4652
terms = [
4753
term_service.get_or_create(db_session=db_session, term_in=t) for t in definition_in.terms
@@ -53,19 +59,21 @@ def update(*, db_session, definition: Definition, definition_in: DefinitionUpdat
5359
setattr(definition, field, update_data[field])
5460

5561
definition.terms = terms
56-
db_session.add(definition)
62+
5763
db_session.commit()
5864
return definition
5965

6066

6167
def delete(*, db_session, definition_id: int):
68+
"""Deletes a definition."""
6269
definition = db_session.query(Definition).filter(Definition.id == definition_id).first()
6370
definition.terms = []
6471
db_session.delete(definition)
6572
db_session.commit()
6673

6774

6875
def upsert(*, db_session, definition_in: DefinitionCreate) -> Definition:
76+
"""Gets or creates a new definition."""
6977
# we only care about unique columns
7078
q = db_session.query(Definition).filter(Definition.text == definition_in.text)
7179
instance = q.first()

src/dispatch/document/service.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from typing import List, Optional
22
from datetime import datetime, timedelta
33

4-
from fastapi.encoders import jsonable_encoder
5-
64
from dispatch.enums import DocumentResourceReferenceTypes
75
from dispatch.project import service as project_service
86
from dispatch.search_filter import service as search_filter_service
@@ -124,15 +122,15 @@ def update(*, db_session, document: Document, document_in: DocumentUpdate) -> Do
124122
for f in document_in.filters
125123
]
126124

127-
document_data = jsonable_encoder(document)
125+
document_data = document.dict()
128126
update_data = document_in.dict(skip_defaults=True, exclude={"filters"})
129127

130128
for field in document_data:
131129
if field in update_data:
132130
setattr(document, field, update_data[field])
133131

134132
document.filters = filters
135-
db_session.add(document)
133+
136134
db_session.commit()
137135
return document
138136

src/dispatch/event/service.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import datetime
44
import logging
55

6-
from fastapi.encoders import jsonable_encoder
7-
86
from dispatch.incident import service as incident_service
97
from dispatch.individual import service as individual_service
108

@@ -39,14 +37,13 @@ def create(*, db_session, event_in: EventCreate) -> Event:
3937

4038
def update(*, db_session, event: Event, event_in: EventUpdate) -> Event:
4139
"""Updates an event."""
42-
event_data = jsonable_encoder(event)
40+
event_data = event.dict()
4341
update_data = event_in.dict(skip_defaults=True)
4442

4543
for field in event_data:
4644
if field in update_data:
4745
setattr(event, field, update_data[field])
4846

49-
db_session.add(event)
5047
db_session.commit()
5148
return event
5249

src/dispatch/feedback/service.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from typing import List, Optional
22
from datetime import datetime, timedelta
3-
from fastapi.encoders import jsonable_encoder
43

54
from dispatch.incident.models import Incident
65
from dispatch.project.models import Project
@@ -42,14 +41,13 @@ def create(*, db_session, feedback_in: FeedbackCreate) -> Feedback:
4241

4342
def update(*, db_session, feedback: Feedback, feedback_in: FeedbackUpdate) -> Feedback:
4443
"""Updates a piece of feedback."""
45-
feedback_data = jsonable_encoder(feedback)
44+
feedback_data = feedback.dict()
4645
update_data = feedback_in.dict(skip_defaults=True)
4746

4847
for field in feedback_data:
4948
if field in update_data:
5049
setattr(feedback, field, update_data[field])
5150

52-
db_session.add(feedback)
5351
db_session.commit()
5452
return feedback
5553

src/dispatch/group/service.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from typing import Optional
22

3-
from fastapi.encoders import jsonable_encoder
4-
53
from .models import Group, GroupCreate, GroupUpdate
64

75

@@ -37,14 +35,13 @@ def create(*, db_session, group_in: GroupCreate) -> Group:
3735

3836
def update(*, db_session, group: Group, group_in: GroupUpdate) -> Group:
3937
"""Updates a group."""
40-
group_data = jsonable_encoder(group)
38+
group_data = group.dict()
4139
update_data = group_in.dict(skip_defaults=True)
4240

4341
for field in group_data:
4442
if field in update_data:
4543
setattr(group, field, update_data[field])
4644

47-
db_session.add(group)
4845
db_session.commit()
4946
return group
5047

src/dispatch/incident_cost/service.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import math
2-
32
from datetime import datetime
43

54
from typing import List, Optional
65

7-
from fastapi.encoders import jsonable_encoder
8-
96
from dispatch.config import ANNUAL_COST_EMPLOYEE, BUSINESS_HOURS_YEAR
107
from dispatch.database.core import SessionLocal
118
from dispatch.incident import service as incident_service
@@ -77,14 +74,13 @@ def update(
7774
*, db_session, incident_cost: IncidentCost, incident_cost_in: IncidentCostUpdate
7875
) -> IncidentCost:
7976
"""Updates an incident cost."""
80-
incident_cost_data = jsonable_encoder(incident_cost)
77+
incident_cost_data = incident_cost.dict()
8178
update_data = incident_cost_in.dict(skip_defaults=True)
8279

8380
for field in incident_cost_data:
8481
if field in update_data:
8582
setattr(incident_cost, field, update_data[field])
8683

87-
db_session.add(incident_cost)
8884
db_session.commit()
8985
return incident_cost
9086

0 commit comments

Comments
 (0)