Skip to content

Commit c742a0a

Browse files
committed
update logs + lint
1 parent 2a588a9 commit c742a0a

File tree

12 files changed

+85
-75
lines changed

12 files changed

+85
-75
lines changed

.flake8

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
ignore = W503,E402,E731
77

88
exclude = .git, __pycache__, build, dist, .eggs, .github, .local, docs/,
9-
Samples, azure_functions_worker/protos/, proxy_worker/protos/,
10-
azure_functions_worker/_thirdparty/typing_inspect.py,
11-
tests/unittests/test_typing_inspect.py,
12-
tests/unittests/broken_functions/syntax_error/main.py,
13-
.env*, .vscode, venv*, *.venv*
9+
Samples, workers/azure_functions_worker/protos/, workers/proxy_worker/protos/,
10+
workers/azure_functions_worker/_thirdparty/typing_inspect.py,
11+
workers/tests/unittests/test_typing_inspect.py,
12+
workers/tests/unittests/broken_functions/syntax_error/main.py,
13+
.env*, .vscode, venv*, *.venv*,
14+
azure_functions_worker_v2/tests/protos/*,
15+
azure_functions_worker_v2/azure_functions_worker_v2/utils/typing_inspect.py
1416

1517
max-line-length = 88

azure_functions_worker_v2/azure_functions_worker_v2/bindings/meta.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def load_binding_registry() -> None:
6767

6868
if func is None:
6969
import azure.functions as func
70-
70+
7171
set_sdk_version(func.__version__) # type: ignore
7272

7373
global BINDING_REGISTRY

azure_functions_worker_v2/azure_functions_worker_v2/handle_event.py

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
WORKER_STATUS)
4949
from .utils.executor import get_current_loop, execute_async, run_sync_func
5050
from .utils.helpers import change_cwd, get_sdk_version, get_worker_metadata
51-
from .utils.tracing import serialize_exception, serialize_exception_as_str
51+
from .utils.tracing import serialize_exception
5252
from .utils.validators import validate_script_file_name
5353

5454
_metadata_result: Optional[List] = None
@@ -60,8 +60,8 @@
6060

6161

6262
async def worker_init_request(request):
63-
logger.info("V2 Library Worker: received WorkerInitRequest,"
64-
"Version %s", VERSION)
63+
logger.debug("V2 Library Worker: received WorkerInitRequest,"
64+
"Version %s", VERSION)
6565
global _host, protos, _function_data_cache_enabled, _metadata_exception
6666
init_request = request.request.worker_init_request
6767
host_capabilities = init_request.capabilities
@@ -93,7 +93,7 @@ async def worker_init_request(request):
9393
# dictionary which will be later used in the invocation request
9494
load_binding_registry()
9595

96-
# Index in init by default
96+
# Index in init by default. Fail if an exception occurs.
9797
try:
9898
load_function_metadata(
9999
init_request.function_app_directory,
@@ -105,15 +105,23 @@ async def worker_init_request(request):
105105
initialize_http_server(_host)
106106
capabilities[REQUIRES_ROUTE_PARAMETERS] = TRUE
107107
except HttpServerInitError as ex:
108-
logger.error("HTTP server init error has occurred")
109-
_metadata_exception = ex
108+
return protos.WorkerInitResponse(
109+
capabilities=capabilities,
110+
worker_metadata=get_worker_metadata(protos),
111+
result=protos.StatusResult(
112+
status=protos.StatusResult.Failure,
113+
exception=serialize_exception(
114+
ex, protos))
115+
)
110116
except Exception as ex:
111-
# This is catching an exception that happens during indexing while the init
112-
# request is still in progress. The proxy worker will do nothing with this,
113-
# but metadata will fail
114-
_metadata_exception = ex
115-
logger.error("An exception in WorkerInitRequest has occurred: %s",
116-
serialize_exception_as_str(ex))
117+
return protos.WorkerInitResponse(
118+
capabilities=capabilities,
119+
worker_metadata=get_worker_metadata(protos),
120+
result=protos.StatusResult(
121+
status=protos.StatusResult.Failure,
122+
exception=serialize_exception(
123+
ex, protos))
124+
)
117125

118126
logger.debug("Successfully completed WorkerInitRequest")
119127
return protos.WorkerInitResponse(
@@ -126,26 +134,17 @@ async def worker_init_request(request):
126134
# worker_status_request can be done in the proxy worker
127135

128136
async def functions_metadata_request(request):
129-
global protos, _metadata_result, _metadata_exception
137+
global protos, _metadata_result
130138
logger.debug("V2 Library Worker: received WorkerMetadataRequest."
131-
" Metadata Result: %s, Metadata Exception: %s,"
139+
" Metadata Result: %s,"
132140
" azure-functions version: %s",
133-
_metadata_result, _metadata_exception, get_sdk_version())
134-
135-
if _metadata_exception:
136-
return protos.FunctionMetadataResponse(
137-
result=protos.StatusResult(
138-
status=protos.StatusResult.Failure,
139-
exception=serialize_exception(
140-
_metadata_exception, protos)))
141+
_metadata_result, get_sdk_version())
141142

142-
else:
143-
logger.debug("Successfully completed WorkerMetadataRequest.")
144-
return protos.FunctionMetadataResponse(
145-
use_default_metadata_indexing=False,
146-
function_metadata_results=_metadata_result,
147-
result=protos.StatusResult(
148-
status=protos.StatusResult.Success))
143+
return protos.FunctionMetadataResponse(
144+
use_default_metadata_indexing=False,
145+
function_metadata_results=_metadata_result,
146+
result=protos.StatusResult(
147+
status=protos.StatusResult.Success))
149148

150149

151150
async def function_load_request(request):
@@ -154,7 +153,6 @@ async def function_load_request(request):
154153
func_request = request.request.function_load_request
155154
function_id = func_request.function_id
156155

157-
logger.debug("Successfully completed WorkerLoadRequest.")
158156
return protos.FunctionLoadResponse(
159157
function_id=function_id,
160158
result=protos.StatusResult(
@@ -177,9 +175,9 @@ async def invocation_request(request):
177175
fi: FunctionInfo = _functions.get_function(
178176
function_id)
179177
assert fi is not None
180-
logger.debug("Function name: %s, Function Type: %s",
181-
fi.name,
182-
("async" if fi.is_async else "sync"))
178+
logger.info("Function name: %s, Function Type: %s",
179+
fi.name,
180+
("async" if fi.is_async else "sync"))
183181

184182
args = {}
185183

@@ -295,8 +293,8 @@ async def function_environment_reload_request(request):
295293
This is called only when placeholder mode is true. On worker restarts
296294
worker init request will be called directly.
297295
"""
298-
logger.info("V2 Library Worker: received WorkerEnvReloadRequest,"
299-
"Version %s", VERSION)
296+
logger.debug("V2 Library Worker: received WorkerEnvReloadRequest,"
297+
"Version %s", VERSION)
300298
global _host, protos, _metadata_exception
301299
try:
302300

@@ -349,7 +347,10 @@ async def function_environment_reload_request(request):
349347
initialize_http_server(_host)
350348
capabilities[REQUIRES_ROUTE_PARAMETERS] = TRUE
351349
except HttpServerInitError as ex:
352-
_metadata_exception = ex
350+
return protos.FunctionEnvironmentReloadResponse(
351+
result=protos.StatusResult(
352+
status=protos.StatusResult.Failure,
353+
exception=serialize_exception(ex, protos)))
353354

354355
# Change function app directory
355356
if getattr(func_env_reload_request,
@@ -365,7 +366,6 @@ async def function_environment_reload_request(request):
365366
status=protos.StatusResult.Success))
366367

367368
except Exception as ex:
368-
_metadata_exception = ex
369369
return protos.FunctionEnvironmentReloadResponse(
370370
result=protos.StatusResult(
371371
status=protos.StatusResult.Failure,
@@ -385,7 +385,7 @@ def load_function_metadata(function_app_directory, caller_info):
385385
default_value=PYTHON_SCRIPT_FILE_NAME_DEFAULT)
386386

387387
logger.debug(
388-
'Received load metadata request from %s, '
388+
'Received load_function_metadata request from %s, '
389389
'script_file_name: %s',
390390
caller_info, script_file_name)
391391

@@ -406,10 +406,6 @@ def load_function_metadata(function_app_directory, caller_info):
406406
def index_functions(function_path: str, function_dir: str):
407407
global protos
408408
indexed_functions = index_function_app(function_path)
409-
logger.info(
410-
"Indexed function app and found %s functions",
411-
len(indexed_functions)
412-
)
413409

414410
if indexed_functions:
415411
fx__metadata_results, fx_bindings_logs = (
@@ -436,7 +432,8 @@ def index_functions(function_path: str, function_dir: str):
436432
indexed_function_logs.append(function_log)
437433

438434
log_data = {
439-
"message": "Successfully processed FunctionMetadataRequest",
435+
"message": "Successfully indexed function app.",
436+
"function_count": len(indexed_functions),
440437
"functions": " ".join(indexed_function_logs),
441438
"deferred_bindings_enabled": _functions.deferred_bindings_enabled(),
442439
"app_settings": get_python_appsetting_state()

azure_functions_worker_v2/azure_functions_worker_v2/http_v2.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,15 @@ def ext_base(cls):
277277

278278
@classmethod
279279
def _check_http_v2_enabled(cls):
280-
import azurefunctions.extensions.base as ext_base
281-
cls._ext_base = ext_base
282-
283-
return cls._ext_base.HttpV2FeatureChecker.http_v2_enabled()
280+
try:
281+
# Attempt to import the base extension module
282+
import azurefunctions.extensions.base as ext_base
283+
cls._ext_base = ext_base
284+
285+
return cls._ext_base.HttpV2FeatureChecker.http_v2_enabled()
286+
except ImportError:
287+
logger.debug("ImportError when importing base extension.")
288+
return False
284289

285290

286291
http_coordinator = HttpCoordinator()

azure_functions_worker_v2/tests/unittests/test_code_quality.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import sys
66
import unittest
77

8-
ROOT_PATH = pathlib.Path(__file__).parent.parent.parent
8+
ROOT_PATH = pathlib.Path(__file__).parent.parent.parent.parent
99

1010

1111
class TestCodeQuality(unittest.TestCase):

azure_functions_worker_v2/tests/unittests/test_utilities.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,22 +257,25 @@ def test_app_settings_should_return_value(self):
257257
self.assertEqual(app_setting, '42')
258258

259259
def test_app_settings_not_set_should_return_default_value(self):
260-
app_setting = app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME, 'default')
260+
app_setting = app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME,
261+
'default')
261262
self.assertEqual(app_setting, 'default')
262263

263264
def test_app_settings_should_ignore_default_value(self):
264265
# Set application setting by os.setenv
265266
os.environ.update({TEST_APP_SETTING_NAME: '42'})
266267

267268
# Try using utility to acquire application setting
268-
app_setting = app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME, 'default')
269+
app_setting = app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME,
270+
'default')
269271
self.assertEqual(app_setting, '42')
270272

271273
def test_app_settings_should_not_trigger_validator_when_not_set(self):
272274
def raise_excpt(value: str):
273275
raise Exception('Should not raise on app setting not found')
274276

275-
app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME, validator=raise_excpt)
277+
app_setting_manager.get_app_setting(TEST_APP_SETTING_NAME,
278+
validator=raise_excpt)
276279

277280
def test_app_settings_return_default_value_when_validation_fail(self):
278281
def parse_int_no_raise(value: str):
@@ -322,13 +325,12 @@ def test_invalid_script_file_name(self):
322325
file_name = 'test'
323326
with self.assertRaises(validators.InvalidFileNameError):
324327
validators.validate_script_file_name(file_name)
325-
328+
326329
def test_set_get_sdk_version(self):
327330
test_version = '1.2.3'
328331
helpers.set_sdk_version(test_version)
329332
self.assertEqual(helpers.get_sdk_version(), test_version)
330333

331-
332334
def _unset_feature_flag(self):
333335
try:
334336
os.environ.pop(TEST_FEATURE_FLAG)

workers/proxy_worker/dispatcher.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,13 +409,17 @@ async def _handle__worker_init_request(self, request):
409409
self.request_id)
410410

411411
if DependencyManager.is_in_linux_consumption():
412-
import azure_functions_worker_v2
412+
import azure_functions_worker_v2 # NoQA
413413

414414
if DependencyManager.should_load_cx_dependencies():
415415
DependencyManager.prioritize_customer_dependencies()
416416

417417
directory = request.worker_init_request.function_app_directory
418418
self.reload_library_worker(directory)
419+
logger.info('Using library: %s, '
420+
'library version: %s',
421+
_library_worker,
422+
_library_worker.version.VERSION) # type: ignore[union-attr]
419423

420424
init_request = WorkerRequest(name="WorkerInitRequest",
421425
request=request,
@@ -442,6 +446,10 @@ async def _handle__function_environment_reload_request(self, request):
442446

443447
DependencyManager.prioritize_customer_dependencies(directory)
444448
self.reload_library_worker(directory)
449+
logger.info('Using library: %s, '
450+
'library version: %s',
451+
_library_worker,
452+
_library_worker.version.VERSION) # type: ignore[union-attr]
445453

446454
env_reload_request = WorkerRequest(name="FunctionEnvironmentReloadRequest",
447455
request=request,

workers/proxy_worker/start_worker.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
_GRPC_CONNECTION_TIMEOUT = 5.0
99

10+
1011
def parse_args():
1112
parser = argparse.ArgumentParser(
1213
description='Python Azure Functions Worker')

workers/proxy_worker/utils/constants.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@
1212
# new programming model default script file name
1313
PYTHON_SCRIPT_FILE_NAME = "PYTHON_SCRIPT_FILE_NAME"
1414
PYTHON_SCRIPT_FILE_NAME_DEFAULT = "function_app.py"
15-

workers/proxy_worker/utils/dependency.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,21 +134,18 @@ def prioritize_customer_dependencies(cls, cx_working_dir=None):
134134
if not cx_deps_path:
135135
cx_deps_path = cls.cx_deps_path
136136

137-
logger.info(
138-
'Applying prioritize_customer_dependencies: '
139-
'worker_dependencies_path: %s, customer_dependencies_path: %s, '
140-
'working_directory: %s, Linux Consumption: %s, Placeholder: %s, '
141-
'sys.path: %s',
142-
cls.worker_deps_path, cx_deps_path, working_directory,
143-
DependencyManager.is_in_linux_consumption(),
144-
is_envvar_true("WEBSITE_PLACEHOLDER_MODE"), sys.path)
145-
146137
cls._remove_from_sys_path(cls.worker_deps_path)
147138
cls._add_to_sys_path(cls.worker_deps_path, True)
148139
cls._add_to_sys_path(cls.cx_deps_path, True)
149140
cls._add_to_sys_path(working_directory, False)
150141

151-
logger.info(f'Finished prioritize_customer_dependencies: {sys.path}')
142+
logger.info(
143+
'Finished prioritize_customer_dependencies: '
144+
'worker_dependencies_path: %s, customer_dependencies_path: %s, '
145+
'working_directory: %s, Placeholder: %s, '
146+
'sys.path: %s',
147+
cls.worker_deps_path, cx_deps_path, working_directory,
148+
is_envvar_true("WEBSITE_PLACEHOLDER_MODE"), sys.path)
152149

153150
@classmethod
154151
def _add_to_sys_path(cls, path: str, add_to_first: bool):

0 commit comments

Comments
 (0)