Skip to content

Commit 295a457

Browse files
committed
refactor validate_event into helper, use issubset method
1 parent 39b2e9b commit 295a457

File tree

3 files changed

+48
-80
lines changed

3 files changed

+48
-80
lines changed

unicorn_contracts/src/contracts_service/create_contract.py

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,11 @@
1111

1212
from contracts_service.contract_status import ContractStatus
1313
from contracts_service.exceptions import EventValidationException
14-
from contracts_service.helper import get_current_date, get_event_body, publish_event
14+
from contracts_service.helper import get_current_date, get_event_body, validate_event, publish_event, get_env
1515

1616
# Initialise Environment variables
17-
if (SERVICE_NAMESPACE := os.environ.get("SERVICE_NAMESPACE")) is None:
18-
raise EnvironmentError("SERVICE_NAMESPACE environment variable is undefined")
19-
if (DYNAMODB_TABLE := os.environ.get("DYNAMODB_TABLE")) is None:
20-
raise EnvironmentError("DYNAMODB_TABLE environment variable is undefined")
17+
SERVICE_NAMESPACE = get_env("SERVICE_NAMESPACE")
18+
DYNAMODB_TABLE = get_env("DYNAMODB_TABLE")
2119

2220
# Initialise PowerTools
2321
logger: Logger = Logger()
@@ -50,7 +48,7 @@ def lambda_handler(event, context):
5048
"""
5149
# Get contract and property details from the event
5250
try:
53-
event_json = validate_event(event)
51+
event_json = validate_event(event, {"property_id", "address", "seller_name"})
5452
except EventValidationException as ex:
5553
return ex.apigw_return
5654

@@ -98,37 +96,3 @@ def create_contract(contract) -> dict:
9896
"""
9997
# TODO: create entry in DDB for new contract
10098
return table.put_item(Item=contract,)
101-
102-
103-
@tracer.capture_method
104-
def validate_event(event):
105-
"""Validates the body of the API Gateway event
106-
107-
Parameters
108-
----------
109-
event : dict
110-
API Gateway event
111-
112-
Returns
113-
-------
114-
dict
115-
The body of the API
116-
117-
Raises
118-
------
119-
EventValidationException
120-
The ``Raises`` section is a list of all exceptions
121-
that are relevant to the interface.
122-
"""
123-
124-
try:
125-
event_json = get_event_body(event)
126-
except Exception as ex:
127-
logger.exception(ex)
128-
raise EventValidationException() from ex
129-
130-
for i in ["property_id", "address", "seller_name"]:
131-
if i not in event_json.keys():
132-
raise EventValidationException()
133-
134-
return event_json

unicorn_contracts/src/contracts_service/helper.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,43 @@ def publish_event(contract, request_id):
124124
}
125125
]
126126
)
127+
128+
@tracer.capture_method
129+
def validate_event(event, required_keys):
130+
"""Validates the body of the API Gateway event
131+
132+
Parameters
133+
----------
134+
event : dict
135+
API Gateway event
136+
required_keys: set
137+
Set of required field names
138+
139+
Returns
140+
-------
141+
dict
142+
The body of the API
143+
144+
Raises
145+
------
146+
EventValidationException
147+
The ``Raises`` section is a list of all exceptions
148+
that are relevant to the interface.
149+
"""
150+
151+
try:
152+
event_json = get_event_body(event)
153+
except Exception as ex:
154+
logger.exception(ex)
155+
raise EventValidationException() from ex
156+
157+
if not required_keys.issubset(event_json.keys()):
158+
raise EventValidationException()
159+
160+
return event_json
161+
162+
def get_env(name):
163+
try:
164+
return os.environ[name]
165+
except KeyError:
166+
raise EnvironmentError("%s environment variable is undefined" % name)

unicorn_contracts/src/contracts_service/update_contract.py

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
from contracts_service.contract_status import ContractStatus
1414
from contracts_service.exceptions import (ContractNotFoundException,
1515
EventValidationException)
16-
from contracts_service.helper import get_current_date, get_event_body, publish_event
16+
from contracts_service.helper import get_current_date, get_event_body, publish_event, validate_event, get_env
1717

1818
# Initialise Environment variables
19-
if (SERVICE_NAMESPACE := os.environ.get("SERVICE_NAMESPACE")) is None:
20-
raise EnvironmentError("SERVICE_NAMESPACE environment variable is undefined")
21-
22-
if (DYNAMODB_TABLE := os.environ.get("DYNAMODB_TABLE")) is None:
23-
raise EnvironmentError("DYNAMODB_TABLE environment variable is undefined")
19+
SERVICE_NAMESPACE = get_env("SERVICE_NAMESPACE")
20+
DYNAMODB_TABLE = get_env("DYNAMODB_TABLE")
2421

2522
# Initialise PowerTools
2623
logger: Logger = Logger()
@@ -53,7 +50,7 @@ def lambda_handler(event, context):
5350

5451
# Get contract and property details from the event
5552
try:
56-
event_json = validate_event(event)
53+
event_json = validate_event(event, {"property_id"})
5754
except EventValidationException as ex:
5855
return ex.apigw_return
5956

@@ -155,36 +152,3 @@ def get_existing_contract(property_id: str) -> dict:
155152
raise error
156153
except KeyError as _:
157154
raise ContractNotFoundException() from _
158-
159-
160-
@tracer.capture_method
161-
def validate_event(event):
162-
"""Validates the body of the API Gateway event
163-
164-
Parameters
165-
----------
166-
event : dict
167-
API Gateway event
168-
169-
Returns
170-
-------
171-
dict
172-
The body of the API
173-
174-
Raises
175-
------
176-
EventValidationException
177-
The ``Raises`` section is a list of all exceptions
178-
that are relevant to the interface.
179-
"""
180-
try:
181-
event_json = get_event_body(event)
182-
except Exception as ex:
183-
logger.exception(ex)
184-
raise EventValidationException() from ex
185-
186-
for i in ["property_id"]:
187-
if i not in event_json.keys():
188-
raise EventValidationException()
189-
190-
return event_json

0 commit comments

Comments
 (0)