1010GZIP_BALANCED_COMPRESSION_LEVEL = 6
1111DEFAULT_FRAME_COMPONENT_DELIMITER = ":"
1212
13-
1413def _get_module_path (file_path , sys_paths ):
1514 """
1615 We tried to remove the python library root path in order to give a reasonable expression of the module path.
1716 For example, /tmp/bin/python/site-packages/great_app/simple_expansions/simple_interface.py
1817 will get turned into great_app.simple_expansions.simple_interface given that the syspath contains
1918 /tmp/bin/python/site-packages
19+
20+ We are making sure we're removing the current path.
21+ For example, '/Users/mirelap/Documents/workspace/JSON/aws-codeguru-profiler-python-demo-application/sample-demo-django-app/./polls/views.py'
22+ will get turned into `polls.views' given that the file path contains the current path.
23+ This should not happen usually, but we've found a case where the "/." is added when calling traceback.walk_stack(..)
24+ in a uwsgi application. Check sampling_utils.py file for details.
25+
26+ sampling_utils.py returns different values when calling traceback.walk_stack(..) for uwsgi vs non-uwsgi
27+ for Python 3.8.10-Python 3.9.2.
28+ Examples of results:
29+ - file '/Users/mirelap/Documents/workspace/JSON/aws-codeguru-profiler-python-demo-application/sample-demo-django-app/./polls/views.py', line 104, code get_queryset>, 104
30+ - file '/Users/mirelap/Documents/workspace/JSON/aws-codeguru-profiler-python-demo-application/sample-demo-django-app/polls/views.py', line 104, code get_queryset>, 104
2031 """
2132 module_path = file_path
2233
2334 if platform .system () == "Windows" :
2435 # In Windows, separator can either be / or \ from experimental result
25- file_path = file_path .replace ("/" , os .sep )
36+ module_path = module_path .replace ("/" , os .sep )
2637
27- for root in sys_paths :
28- if root in file_path :
29- module_path = file_path .replace (root , "" )
30- break
38+ # remove prefix path
39+ module_path = _remove_prefix_path (module_path , sys_paths )
3140
3241 # remove suffix
3342 module_path = str (Path (module_path ).with_suffix ("" ))
@@ -42,6 +51,15 @@ def _get_module_path(file_path, sys_paths):
4251 return module_path
4352
4453
54+ def _remove_prefix_path (module_path , sys_paths ):
55+ current_path = str (Path ().absolute ())
56+ if current_path in module_path :
57+ return module_path .replace (current_path , "" ).replace ("/./" , "/" )
58+ for root in sys_paths :
59+ if root in module_path :
60+ return module_path .replace (root , "" )
61+ return module_path
62+
4563class ProfileEncoder :
4664 """
4765 Encodes a given Profile into the JSON version of the ion-based profile format
0 commit comments