Skip to content

Commit 9dba1bc

Browse files
Kamal Sai DevarapalliKamal Sai Devarapalli
authored andcommitted
refactor: update usermanagement views to use EventStreamMonitor error classes
- Update imports to use renamed error classes - Replace all PyPortalAdmin*Error references with EventStreamMonitor*Error - Fix logger parameter name (logger -> logger_instance) - Convert f-string logging to lazy % formatting for better performance
1 parent b10704c commit 9dba1bc

File tree

2 files changed

+203
-181
lines changed

2 files changed

+203
-181
lines changed

services/usermanagement/app/views/fetch_user.py

Lines changed: 95 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -4,61 +4,68 @@
44
from usermanagement_service.users.request_handlers.user import User
55
from app.models.user_model import UsersModel
66
from app import (
7-
user_management_app_logger,
7+
user_management_logger,
88
getuser_headers_schema,
99
usermanager,
1010
app_manager_db_obj,
1111
)
1212
from app.redis_helper import UserManagementRedisHelper
13-
from common.pyportal_common.error_handlers.base_error_handler import (
14-
PyPortalAdminInvalidRequestError,
15-
PyPortalAdminInternalServerError,
16-
PyPortalAdminNotFoundError,
13+
from common.pyportal_common.error_handlers.invalid_request_handler import (
14+
EventStreamMonitorInvalidRequestError,
1715
)
16+
from common.pyportal_common.error_handlers.\
17+
internal_server_error_handler import (
18+
EventStreamMonitorInternalServerError,
19+
)
20+
from common.pyportal_common.error_handlers.not_found_error_handler import (
21+
EventStreamMonitorNotFoundError,
22+
)
23+
from common.pyportal_common.utils import mask_request_headers
1824

1925

2026
def get_user_info(userid):
2127
try:
22-
user_management_app_logger.info(
23-
f"REQUEST ==> Received Endpoint for the request:: "
24-
f"{request.endpoint}"
28+
user_management_logger.info(
29+
"REQUEST ==> Received Endpoint for the request:: %s",
30+
request.endpoint
2531
)
26-
user_management_app_logger.info(
27-
f"REQUEST ==> Received url for the request :: {request.url}"
32+
user_management_logger.info(
33+
"REQUEST ==> Received url for the request :: %s",
34+
request.url
2835
)
2936
if request.method == "GET":
30-
from common.pyportal_common.utils import mask_request_headers
3137
rec_req_headers = dict(request.headers)
3238
masked_headers = mask_request_headers(rec_req_headers)
33-
user_management_app_logger.info(
34-
f"Received Headers from the request :: {masked_headers}"
39+
user_management_logger.info(
40+
"Received Headers from the request :: %s",
41+
masked_headers
3542
)
36-
"""
37-
1. Find the missing headers, any schema related issue
38-
related to headers in the request
39-
2. If any missing headers or schema related issue,
40-
send the error response back to client.
41-
3. Custom error response contains the information about
42-
headers related to missing/schema issue, with status
43-
code as 400, BAD_REQUEST
44-
"""
43+
# Steps:
44+
# 1. Find the missing headers, any schema related issue
45+
# related to headers in the request
46+
# 2. If any missing headers or schema related issue,
47+
# send the error response back to client.
48+
# 3. Custom error response contains the information about
49+
# headers related to missing/schema issue, with status
50+
# code as 400, BAD_REQUEST
4551
get_header_result = usermanager.generate_req_missing_params(
4652
rec_req_headers, getuser_headers_schema
4753
)
4854
if len(get_header_result.keys()) != 0:
49-
invalid_header_err_res = PyPortalAdminInvalidRequestError(
55+
invalid_header_err_res = EventStreamMonitorInvalidRequestError(
5056
message="Request Headers Missing",
5157
error_details=get_header_result,
52-
logger=user_management_app_logger,
58+
logger_instance=user_management_logger,
5359
)
5460
return invalid_header_err_res.send_response_to_client()
5561
# Initialize Redis helper for caching
5662
redis_helper = UserManagementRedisHelper()
5763
# Try to get user from cache first (Cache-Aside pattern)
5864
cached_user = redis_helper.get_cached_user(userid)
5965
if cached_user:
60-
user_management_app_logger.info(
61-
f"User {userid} retrieved from Redis cache [CACHE HIT]"
66+
user_management_logger.info(
67+
"User %s retrieved from Redis cache [CACHE HIT]",
68+
userid
6269
)
6370
# Reconstruct the format expected by
6471
# generate_custom_response_body
@@ -74,122 +81,122 @@ def get_user_info(userid):
7481
messagedata="Retrieved User"
7582
)
7683
if len(custom_user_response_body.keys()) <= 0:
77-
invalid_req_err_res = PyPortalAdminInternalServerError(
84+
invalid_req_err_res = EventStreamMonitorInternalServerError(
7885
message="Get User Response creation Failed",
79-
logger=user_management_app_logger,
86+
logger_instance=user_management_logger,
8087
)
8188
return invalid_req_err_res.send_response_to_client()
8289
get_usr_response = make_response(custom_user_response_body)
8390
get_usr_response.headers["Content-Type"] = "application/json"
8491
get_usr_response.headers["Cache-Control"] = "no-cache"
8592
get_usr_response.status_code = 200
86-
user_management_app_logger.info(
93+
user_management_logger.info(
8794
"Prepared success response from cache and sending "
8895
"back to client [SUCCESS]"
8996
)
9097
return get_usr_response
9198
# Cache miss - retrieve from database
92-
user_management_app_logger.info(
93-
f"User {userid} not found in cache, querying database "
94-
f"[CACHE MISS]"
99+
user_management_logger.info(
100+
"User %s not found in cache, querying database "
101+
"[CACHE MISS]",
102+
userid
95103
)
96104
# Retrieve the user logic.
97105
get_user_management_session = (
98106
app_manager_db_obj.get_session_from_session_maker()
99107
)
100108
if get_user_management_session is None:
101-
session_err_res = PyPortalAdminInternalServerError(
109+
session_err_res = EventStreamMonitorInternalServerError(
102110
message="Create Session Failed",
103-
logger=user_management_app_logger
111+
logger_instance=user_management_logger
104112
)
105113
return session_err_res.send_response_to_client()
106114
# IF the created session is not active, send the response
107115
# back to client as internal error
108116
if get_user_management_session.is_active:
109117
try:
110-
"""
111-
1. Fetching the user record from the database using
112-
the primary key userid
113-
2. Converting the database model of user to defined
114-
user and serialize to json
115-
3. Using the serialize, Generating the success custom
116-
response, headers
117-
4. Caching the user data in Redis for future requests
118-
"""
118+
# Steps:
119+
# 1. Fetching the user record from the database using
120+
# the primary key userid
121+
# 2. Converting the database model of user to defined
122+
# user and serialize to json
123+
# 3. Using the serialize, Generating the success custom
124+
# response, headers
125+
# 4. Caching the user data in Redis for future requests
119126
get_user_instance = get_user_management_session.query(
120127
UsersModel
121128
).get(userid)
122129
if get_user_instance is None:
123-
usr_not_found_err_res = PyPortalAdminNotFoundError(
130+
usr_not_found_err_res = EventStreamMonitorNotFoundError(
124131
message="Retrieved user doesn't exists",
125-
logger=user_management_app_logger,
132+
logger_instance=user_management_logger,
126133
)
127134
return usr_not_found_err_res.send_response_to_client()
128135
except sqlalchemy.exc.NoResultFound as ex:
129136
# Specific: Query returned no results
130137
app_manager_db_obj.close_session(
131138
session_instance=get_user_management_session
132139
)
133-
user_management_app_logger.warning(
134-
f"NoResultFound occurred :: {ex}\tLine No:: "
135-
f"{sys.exc_info()[2].tb_lineno}"
140+
user_management_logger.warning(
141+
"NoResultFound occurred :: %s\tLine No:: %s",
142+
ex, sys.exc_info()[2].tb_lineno
136143
)
137-
usr_not_found_err_res = PyPortalAdminNotFoundError(
144+
usr_not_found_err_res = EventStreamMonitorNotFoundError(
138145
message="User not found",
139-
logger=user_management_app_logger,
146+
logger_instance=user_management_logger,
140147
)
141148
return usr_not_found_err_res.send_response_to_client()
142149
except sqlalchemy.exc.OperationalError as ex:
143150
# Specific: Database connection/operational issues
144151
app_manager_db_obj.close_session(
145152
session_instance=get_user_management_session
146153
)
147-
user_management_app_logger.error(
148-
f"OperationalError occurred - database connection "
149-
f"issue :: {ex}\tLine No:: "
150-
f"{sys.exc_info()[2].tb_lineno}"
154+
user_management_logger.error(
155+
"OperationalError occurred - database connection "
156+
"issue :: %s\tLine No:: %s",
157+
ex, sys.exc_info()[2].tb_lineno
151158
)
152-
db_err_res = PyPortalAdminInternalServerError(
159+
db_err_res = EventStreamMonitorInternalServerError(
153160
message="Database connection error",
154-
logger=user_management_app_logger
161+
logger_instance=user_management_logger
155162
)
156163
return db_err_res.send_response_to_client()
157164
except sqlalchemy.exc.SQLAlchemyError as ex:
158165
# Specific: Other SQLAlchemy database errors
159166
app_manager_db_obj.close_session(
160167
session_instance=get_user_management_session
161168
)
162-
user_management_app_logger.error(
163-
f"SQLAlchemyError occurred :: {ex}\tLine No:: "
164-
f"{sys.exc_info()[2].tb_lineno}"
169+
user_management_logger.error(
170+
"SQLAlchemyError occurred :: %s\tLine No:: %s",
171+
ex, sys.exc_info()[2].tb_lineno
165172
)
166-
db_err_res = PyPortalAdminInternalServerError(
173+
db_err_res = EventStreamMonitorInternalServerError(
167174
message="Database Error",
168-
logger=user_management_app_logger
175+
logger_instance=user_management_logger
169176
)
170177
return db_err_res.send_response_to_client()
171178
except Exception as ex: # pylint: disable=broad-except
172179
# Fallback: Unexpected errors
173180
app_manager_db_obj.close_session(
174181
session_instance=get_user_management_session
175182
)
176-
user_management_app_logger.error(
177-
f"Unexpected error occurred :: {ex}\tLine No:: "
178-
f"{sys.exc_info()[2].tb_lineno}"
183+
user_management_logger.error(
184+
"Unexpected error occurred :: %s\tLine No:: %s",
185+
ex, sys.exc_info()[2].tb_lineno
179186
)
180-
internal_err_res = PyPortalAdminInternalServerError(
187+
internal_err_res = EventStreamMonitorInternalServerError(
181188
message="Internal Server Error",
182-
logger=user_management_app_logger,
189+
logger_instance=user_management_logger,
183190
)
184191
return internal_err_res.send_response_to_client()
185192
else:
186193
get_user_instance = User.convert_db_model_to_resp(
187194
get_user_instance
188195
)
189196
if len(get_user_instance.keys()) <= 0:
190-
invalid_req_err_res = PyPortalAdminInternalServerError(
197+
invalid_req_err_res = EventStreamMonitorInternalServerError(
191198
message="Get User Response creation Failed",
192-
logger=user_management_app_logger,
199+
logger_instance=user_management_logger,
193200
)
194201
app_manager_db_obj.close_session(
195202
session_instance=get_user_management_session
@@ -207,15 +214,16 @@ def get_user_info(userid):
207214
user_data=user_data_for_cache,
208215
ttl=3600 # 1 hour TTL
209216
)
210-
user_management_app_logger.info(
211-
f"User {userid} cached in Redis [SUCCESS]"
217+
user_management_logger.info(
218+
"User %s cached in Redis [SUCCESS]",
219+
userid
212220
)
213221
# pylint: disable=broad-except
214222
except Exception as cache_ex:
215223
# Log cache error but don't fail the request
216-
user_management_app_logger.warning(
217-
f"Failed to cache user {userid} in Redis: "
218-
f"{cache_ex}"
224+
user_management_logger.warning(
225+
"Failed to cache user %s in Redis: %s",
226+
userid, cache_ex
219227
)
220228
custom_user_response_body = (
221229
User.generate_custom_response_body(
@@ -225,10 +233,10 @@ def get_user_info(userid):
225233
)
226234
if len(custom_user_response_body.keys()) <= 0:
227235
invalid_req_err_res = (
228-
PyPortalAdminInternalServerError(
236+
EventStreamMonitorInternalServerError(
229237
message="Get User success Response "
230238
"creation Failed",
231-
logger=user_management_app_logger,
239+
logger_instance=user_management_logger,
232240
)
233241
)
234242
app_manager_db_obj.close_session(
@@ -241,29 +249,31 @@ def get_user_info(userid):
241249
)
242250
get_usr_response.headers["Cache-Control"] = "no-cache"
243251
get_usr_response.status_code = 200
244-
user_management_app_logger.info(
245-
f"Prepared success response and sending back to "
246-
f"client {get_usr_response}:: [SUCCESS]"
252+
user_management_logger.info(
253+
"Prepared success response and sending back to "
254+
"client %s:: [SUCCESS]",
255+
get_usr_response
247256
)
248257
app_manager_db_obj.close_session(
249258
session_instance=get_user_management_session
250259
)
251260
return get_usr_response
252261
else:
253262
invalid_req_err_res = (
254-
PyPortalAdminInternalServerError(
263+
EventStreamMonitorInternalServerError(
255264
message="Create Session Failed",
256-
logger=user_management_app_logger
265+
logger_instance=user_management_logger
257266
)
258267
)
259268
return invalid_req_err_res.send_response_to_client()
260269

261270
except Exception as ex: # pylint: disable=broad-except
262-
user_management_app_logger.error(
263-
f"Error occurred :: {ex}\tLine No:: "
264-
f"{sys.exc_info()[2].tb_lineno}"
271+
user_management_logger.error(
272+
"Error occurred :: %s\tLine No:: %s",
273+
ex, sys.exc_info()[2].tb_lineno
265274
)
266-
invalid_req_err_res = PyPortalAdminInternalServerError(
267-
message="Unknown error caused", logger=user_management_app_logger
275+
invalid_req_err_res = EventStreamMonitorInternalServerError(
276+
message="Unknown error caused",
277+
logger_instance=user_management_logger
268278
)
269279
return invalid_req_err_res.send_response_to_client()

0 commit comments

Comments
 (0)