Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 21 additions & 22 deletions google/cloud/logging_v2/handlers/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
flask = None

from google.cloud.logging_v2.handlers.middleware.request import _get_django_request
from google.logging.type.http_request_pb2 import HttpRequest

_DJANGO_TRACE_HEADER = "HTTP_X_CLOUD_TRACE_CONTEXT"
_DJANGO_USERAGENT_HEADER = "HTTP_USER_AGENT"
Expand Down Expand Up @@ -55,23 +54,23 @@ def get_request_data_from_flask():
"""Get http_request and trace data from flask request headers.

Returns:
Tuple[Optional[google.logging.type.http_request_pb2.HttpRequest], Optional[str]]:
Tuple[Optional[dict], Optional[str]]:
Data related to the current http request and the trace_id for the
request. Both fields will be None if a flask request isn't found.
"""
if flask is None or not flask.request:
return None, None

# build http_request
http_request = HttpRequest(
request_method=flask.request.method,
request_url=flask.request.url,
request_size=flask.request.content_length,
user_agent=flask.request.user_agent.string,
remote_ip=flask.request.remote_addr,
referer=flask.request.referrer,
protocol=flask.request.environ.get(_PROTOCOL_HEADER),
)
http_request = {
"requestMethod": flask.request.method,
"requestUrl": flask.request.url,
"requestSize": flask.request.content_length,
"userAgent": flask.request.user_agent.string,
"remoteIp": flask.request.remote_addr,
"referer": flask.request.referrer,
"protocol": flask.request.environ.get(_PROTOCOL_HEADER),
}

# find trace id
trace_id = None
Expand All @@ -86,7 +85,7 @@ def get_request_data_from_django():
"""Get http_request and trace data from django request headers.

Returns:
Tuple[Optional[google.logging.type.http_request_pb2.HttpRequest], Optional[str]]:
Tuple[Optional[dict], Optional[str]]:
Data related to the current http request and the trace_id for the
request. Both fields will be None if a django request isn't found.
"""
Expand All @@ -95,15 +94,15 @@ def get_request_data_from_django():
if request is None:
return None, None
# build http_request
http_request = HttpRequest(
request_method=request.method,
request_url=request.build_absolute_uri(),
request_size=len(request.body),
user_agent=request.META.get(_DJANGO_USERAGENT_HEADER),
remote_ip=request.META.get(_DJANGO_REMOTE_ADDR_HEADER),
referer=request.META.get(_DJANGO_REFERER_HEADER),
protocol=request.META.get(_PROTOCOL_HEADER),
)
http_request = {
"requestMethod": request.method,
"requestUrl": request.build_absolute_uri(),
"requestSize": len(request.body),
"userAgent": request.META.get(_DJANGO_USERAGENT_HEADER),
"remoteIp": request.META.get(_DJANGO_REMOTE_ADDR_HEADER),
"referer": request.META.get(_DJANGO_REFERER_HEADER),
"protocol": request.META.get(_PROTOCOL_HEADER),
}

# find trace id
trace_id = None
Expand All @@ -119,7 +118,7 @@ def get_request_data():
frameworks (currently supported: Flask and Django).

Returns:
Tuple[Optional[google.logging.type.http_request_pb2.HttpRequest], Optional[str]]:
Tuple[Optional[dict], Optional[str]]:
Data related to the current http request and the trace_id for the
request. Both fields will be None if a supported web request isn't found.
"""
Expand Down
54 changes: 27 additions & 27 deletions tests/unit/handlers/test__helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import mock

_FLASK_TRACE_ID = "flask-id"
_FLASK_HTTP_REQUEST = {"request_url": "https://flask.palletsprojects.com/en/1.1.x/"}
_FLASK_HTTP_REQUEST = {"requestUrl": "https://flask.palletsprojects.com/en/1.1.x/"}
_DJANGO_TRACE_ID = "django-id"
_DJANGO_HTTP_REQUEST = {"request_url": "https://www.djangoproject.com/"}
_DJANGO_HTTP_REQUEST = {"requestUrl": "https://www.djangoproject.com/"}


class Test_get_request_data_from_flask(unittest.TestCase):
Expand Down Expand Up @@ -47,7 +47,7 @@ def test_no_context_header(self):
http_request, trace_id = self._call_fut()

self.assertIsNone(trace_id)
self.assertEqual(http_request.request_method, "GET")
self.assertEqual(http_request["requestMethod"], "GET")

def test_valid_context_header(self):
flask_trace_header = "X_CLOUD_TRACE_CONTEXT"
Expand All @@ -63,7 +63,7 @@ def test_valid_context_header(self):
http_request, trace_id = self._call_fut()

self.assertEqual(trace_id, expected_trace_id)
self.assertEqual(http_request.request_method, "GET")
self.assertEqual(http_request["requestMethod"], "GET")

def test_http_request_populated(self):
expected_path = "http://testserver/123"
Expand All @@ -86,23 +86,23 @@ def test_http_request_populated(self):
)
http_request, trace_id = self._call_fut()

self.assertEqual(http_request.request_method, "PUT")
self.assertEqual(http_request.request_url, expected_path)
self.assertEqual(http_request.user_agent, expected_agent)
self.assertEqual(http_request.referer, expected_referrer)
self.assertEqual(http_request.remote_ip, expected_ip)
self.assertEqual(http_request.request_size, len(body_content))
self.assertEqual(http_request.protocol, "HTTP/1.1")
self.assertEqual(http_request["requestMethod"], "PUT")
self.assertEqual(http_request["requestUrl"], expected_path)
self.assertEqual(http_request["userAgent"], expected_agent)
self.assertEqual(http_request["referer"], expected_referrer)
self.assertEqual(http_request["remoteIp"], expected_ip)
self.assertEqual(http_request["requestSize"], len(body_content))
self.assertEqual(http_request["protocol"], "HTTP/1.1")

def test_http_request_sparse(self):
expected_path = "http://testserver/123"
app = self.create_app()
with app.test_client() as c:
c.put(path=expected_path)
http_request, trace_id = self._call_fut()
self.assertEqual(http_request.request_method, "PUT")
self.assertEqual(http_request.request_url, expected_path)
self.assertEqual(http_request.protocol, "HTTP/1.1")
self.assertEqual(http_request["requestMethod"], "PUT")
self.assertEqual(http_request["requestUrl"], expected_path)
self.assertEqual(http_request["protocol"], "HTTP/1.1")


class Test_get_request_data_from_django(unittest.TestCase):
Expand Down Expand Up @@ -136,7 +136,7 @@ def test_no_context_header(self):
middleware = request.RequestMiddleware(None)
middleware.process_request(django_request)
http_request, trace_id = self._call_fut()
self.assertEqual(http_request.request_method, "GET")
self.assertEqual(http_request["requestMethod"], "GET")
self.assertIsNone(trace_id)

def test_valid_context_header(self):
Expand All @@ -156,7 +156,7 @@ def test_valid_context_header(self):
http_request, trace_id = self._call_fut()

self.assertEqual(trace_id, expected_trace_id)
self.assertEqual(http_request.request_method, "GET")
self.assertEqual(http_request["requestMethod"], "GET")

def test_http_request_populated(self):
from django.test import RequestFactory
Expand All @@ -176,13 +176,13 @@ def test_http_request_populated(self):
middleware = request.RequestMiddleware(None)
middleware.process_request(django_request)
http_request, trace_id = self._call_fut()
self.assertEqual(http_request.request_method, "PUT")
self.assertEqual(http_request.request_url, expected_path)
self.assertEqual(http_request.user_agent, expected_agent)
self.assertEqual(http_request.referer, expected_referrer)
self.assertEqual(http_request.remote_ip, "127.0.0.1")
self.assertEqual(http_request.request_size, len(body_content))
self.assertEqual(http_request.protocol, "HTTP/1.1")
self.assertEqual(http_request["requestMethod"], "PUT")
self.assertEqual(http_request["requestUrl"], expected_path)
self.assertEqual(http_request["userAgent"], expected_agent)
self.assertEqual(http_request["referer"], expected_referrer)
self.assertEqual(http_request["remoteIp"], "127.0.0.1")
self.assertEqual(http_request["requestSize"], len(body_content))
self.assertEqual(http_request["protocol"], "HTTP/1.1")

def test_http_request_sparse(self):
from django.test import RequestFactory
Expand All @@ -193,10 +193,10 @@ def test_http_request_sparse(self):
middleware = request.RequestMiddleware(None)
middleware.process_request(django_request)
http_request, trace_id = self._call_fut()
self.assertEqual(http_request.request_method, "PUT")
self.assertEqual(http_request.request_url, expected_path)
self.assertEqual(http_request.remote_ip, "127.0.0.1")
self.assertEqual(http_request.protocol, "HTTP/1.1")
self.assertEqual(http_request["requestMethod"], "PUT")
self.assertEqual(http_request["requestUrl"], expected_path)
self.assertEqual(http_request["remoteIp"], "127.0.0.1")
self.assertEqual(http_request["protocol"], "HTTP/1.1")


class Test_get_request_data(unittest.TestCase):
Expand Down