1+ <!doctype html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="utf-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1, minimum-scale=1 " />
6+ < meta name ="generator " content ="pdoc 0.9.2 " />
7+ < title > hypertrace.agent.autoinstrumentation.hypertrace_instrument API documentation</ title >
8+ < meta name ="description " content ="This module implements a CLI command that be used to
9+ autoinstrument existing pythong programs that use supported
10+ modules. " />
11+ < link rel ="preload stylesheet " as ="style " href ="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css " integrity ="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs= " crossorigin >
12+ < link rel ="preload stylesheet " as ="style " href ="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css " integrity ="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg= " crossorigin >
13+ < link rel ="stylesheet preload " as ="style " href ="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css " crossorigin >
14+ < style > : root {--highlight-color : # fe9 }.flex {display : flex !important }body {line-height : 1.5em }# content {padding : 20px }# sidebar {padding : 30px ;overflow : hidden}# sidebar > * : last-child {margin-bottom : 2cm }.http-server-breadcrumbs {font-size : 130% ;margin : 0 0 15px 0 }# footer {font-size : .75em ;padding : 5px 30px ;border-top : 1px solid # ddd ;text-align : right}# footer p {margin : 0 0 0 1em ;display : inline-block}# footer p : last-child {margin-right : 30px }h1 , h2 , h3 , h4 , h5 {font-weight : 300 }h1 {font-size : 2.5em ;line-height : 1.1em }h2 {font-size : 1.75em ;margin : 1em 0 .50em 0 }h3 {font-size : 1.4em ;margin : 25px 0 10px 0 }h4 {margin : 0 ;font-size : 105% }h1 : target , h2 : target , h3 : target , h4 : target , h5 : target , h6 : target {background : var (--highlight-color );padding : .2em 0 }a {color : # 058 ;text-decoration : none;transition : color .3s ease-in-out}a : hover {color : # e82 }.title code {font-weight : bold}h2 [id ^= "header-" ]{margin-top : 2em }.ident {color : # 900 }pre code {background : # f8f8f8 ;font-size : .8em ;line-height : 1.4em }code {background : # f2f2f1 ;padding : 1px 4px ;overflow-wrap : break-word}h1 code {background : transparent}pre {background : # f8f8f8 ;border : 0 ;border-top : 1px solid # ccc ;border-bottom : 1px solid # ccc ;margin : 1em 0 ;padding : 1ex }# http-server-module-list {display : flex;flex-flow : column}# http-server-module-list div {display : flex}# http-server-module-list dt {min-width : 10% }# http-server-module-list p {margin-top : 0 }.toc ul , # index {list-style-type : none;margin : 0 ;padding : 0 }# index code {background : transparent}# index h3 {border-bottom : 1px solid # ddd }# index ul {padding : 0 }# index h4 {margin-top : .6em ;font-weight : bold}@media (min-width : 200ex ){# index .two-column {column-count : 2 }}@media (min-width : 300ex ){# index .two-column {column-count : 3 }}dl {margin-bottom : 2em }dl dl : last-child {margin-bottom : 4em }dd {margin : 0 0 1em 3em }# header-classes + dl > dd {margin-bottom : 3em }dd dd {margin-left : 2em }dd p {margin : 10px 0 }.name {background : # eee ;font-weight : bold;font-size : .85em ;padding : 5px 10px ;display : inline-block;min-width : 40% }.name : hover {background : # e0e0e0 }dt : target .name {background : var (--highlight-color )}.name > span : first-child {white-space : nowrap}.name .class > span : nth-child (2 ){margin-left : .4em }.inherited {color : # 999 ;border-left : 5px solid # eee ;padding-left : 1em }.inheritance em {font-style : normal;font-weight : bold}.desc h2 {font-weight : 400 ;font-size : 1.25em }.desc h3 {font-size : 1em }.desc dt code {background : inherit}.source summary , .git-link-div {color : # 666 ;text-align : right;font-weight : 400 ;font-size : .8em ;text-transform : uppercase}.source summary > * {white-space : nowrap;cursor : pointer}.git-link {color : inherit;margin-left : 1em }.source pre {max-height : 500px ;overflow : auto;margin : 0 }.source pre code {font-size : 12px ;overflow : visible}.hlist {list-style : none}.hlist li {display : inline}.hlist li : after {content : ',\2002' }.hlist li : last-child : after {content : none}.hlist .hlist {display : inline;padding-left : 1em }img {max-width : 100% }td {padding : 0 .5em }.admonition {padding : .1em .5em ;margin-bottom : 1em }.admonition-title {font-weight : bold}.admonition .note , .admonition .info , .admonition .important {background : # aef }.admonition .todo , .admonition .versionadded , .admonition .tip , .admonition .hint {background : # dfd }.admonition .warning , .admonition .versionchanged , .admonition .deprecated {background : # fd4 }.admonition .error , .admonition .danger , .admonition .caution {background : lightpink}</ style >
15+ < style media ="screen and (min-width: 700px) "> @media screen and (min-width : 700px ){# sidebar {width : 30% ;height : 100vh ;overflow : auto;position : sticky;top : 0 }# content {width : 70% ;max-width : 100ch ;padding : 3em 4em ;border-left : 1px solid # ddd }pre code {font-size : 1em }.item .name {font-size : 1em }main {display : flex;flex-direction : row-reverse;justify-content : flex-end}.toc ul ul , # index ul {padding-left : 1.5em }.toc > ul > li {margin-top : .5em }}</ style >
16+ < style media ="print "> @media print{# sidebar h1 {page-break-before : always}.source {display : none}}@media print{* {background : transparent !important ;color : # 000 !important ;box-shadow : none !important ;text-shadow : none !important }a [href ]: after {content : " (" attr (href) ")" ;font-size : 90% }a [href ][title ]: after {content : none}abbr [title ]: after {content : " (" attr (title) ")" }.ir a : after , a [href ^= "javascript:" ]: after , a [href ^= "#" ]: after {content : "" }pre , blockquote {border : 1px solid # 999 ;page-break-inside : avoid}thead {display : table-header-group}tr , img {page-break-inside : avoid}img {max-width : 100% !important }@page {margin : 0.5cm }p , h2 , h3 {orphans : 3 ;widows : 3 }h1 , h2 , h3 , h4 , h5 , h6 {page-break-after : avoid}}</ style >
17+ < script defer src ="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js " integrity ="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8= " crossorigin > </ script >
18+ < script > window . addEventListener ( 'DOMContentLoaded' , ( ) => hljs . initHighlighting ( ) ) </ script >
19+ </ head >
20+ < body >
21+ < main >
22+ < article id ="content ">
23+ < header >
24+ < h1 class ="title "> Module < code > hypertrace.agent.autoinstrumentation.hypertrace_instrument</ code > </ h1 >
25+ </ header >
26+ < section id ="section-intro ">
27+ < p > This module implements a CLI command that be used to
28+ autoinstrument existing pythong programs that use supported
29+ modules.</ p >
30+ < details class ="source ">
31+ < summary >
32+ < span > Expand source code</ span >
33+ </ summary >
34+ < pre > < code class ="python "> # Based upon the OTel autoinstrumentation feature
35+ '''This module implements a CLI command that be used to
36+ autoinstrument existing pythong programs that use supported
37+ modules.'''
38+ import argparse
39+ from logging import getLogger
40+ from os import environ, execl, getcwd
41+ from os.path import abspath, dirname, pathsep
42+ from shutil import which
43+
44+ logger = getLogger(__file__)
45+
46+ def parse_args():
47+ '''Parse CLI arguments.'''
48+ parser = argparse.ArgumentParser(
49+ description="""
50+ hypertrace-instrument automatically instruments a Python
51+ program and runs the program
52+ """
53+ )
54+
55+ parser.add_argument("command", help="Your Python application.")
56+
57+ parser.add_argument(
58+ "command_args",
59+ help="Arguments for your application.",
60+ nargs=argparse.REMAINDER,
61+ )
62+
63+ return parser.parse_args()
64+
65+ def update_python_path() -> None:
66+ '''Retrieve existing PYTHONPATH'''
67+ python_path = environ.get("PYTHONPATH")
68+
69+ # Split the paths
70+ if not python_path:
71+ python_path = []
72+ else:
73+ python_path = python_path.split(pathsep)
74+
75+ # Get the current working directory
76+ cwd_path = getcwd()
77+
78+ # If this directory is already in python_path, remove it.
79+ python_path = [path for path in python_path if path != cwd_path]
80+
81+ # If cwd is not in the PYTHONPATH, add it to the front.
82+ if cwd_path not in python_path:
83+ python_path.insert(0, cwd_path)
84+
85+ # What is the directory containing this python file?
86+ filedir_path = dirname(abspath(__file__))
87+
88+ # If this directory is already in python_path, remove it.
89+ python_path = [path for path in python_path if path != filedir_path]
90+
91+ # If this diretory is not in python_path, add it to the front
92+ python_path.insert(0, filedir_path)
93+
94+ # Reset PYTHONPATH environment variable
95+ environ["PYTHONPATH"] = pathsep.join(python_path)
96+
97+ def run() -> None:
98+ '''hypertrace-instrument Entry point'''
99+ args = parse_args()
100+
101+ # update PYTHONPATH env var
102+ update_python_path()
103+
104+ # Get full path to the command that was passed in as an
105+ # argument
106+ executable = which(args.command)
107+
108+ # Execute the app
109+ execl(executable, executable, *args.command_args)
110+
111+ if __name__ == '__main__':
112+ run()</ code > </ pre >
113+ </ details >
114+ </ section >
115+ < section >
116+ </ section >
117+ < section >
118+ </ section >
119+ < section >
120+ < h2 class ="section-title " id ="header-functions "> Functions</ h2 >
121+ < dl >
122+ < dt id ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.parse_args "> < code class ="name flex ">
123+ < span > def < span class ="ident "> parse_args</ span > </ span > (< span > )</ span >
124+ </ code > </ dt >
125+ < dd >
126+ < div class ="desc "> < p > Parse CLI arguments.</ p > </ div >
127+ < details class ="source ">
128+ < summary >
129+ < span > Expand source code</ span >
130+ </ summary >
131+ < pre > < code class ="python "> def parse_args():
132+ '''Parse CLI arguments.'''
133+ parser = argparse.ArgumentParser(
134+ description="""
135+ hypertrace-instrument automatically instruments a Python
136+ program and runs the program
137+ """
138+ )
139+
140+ parser.add_argument("command", help="Your Python application.")
141+
142+ parser.add_argument(
143+ "command_args",
144+ help="Arguments for your application.",
145+ nargs=argparse.REMAINDER,
146+ )
147+
148+ return parser.parse_args()</ code > </ pre >
149+ </ details >
150+ </ dd >
151+ < dt id ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.run "> < code class ="name flex ">
152+ < span > def < span class ="ident "> run</ span > </ span > (< span > ) ‑> NoneType</ span >
153+ </ code > </ dt >
154+ < dd >
155+ < div class ="desc "> < p > hypertrace-instrument Entry point</ p > </ div >
156+ < details class ="source ">
157+ < summary >
158+ < span > Expand source code</ span >
159+ </ summary >
160+ < pre > < code class ="python "> def run() -> None:
161+ '''hypertrace-instrument Entry point'''
162+ args = parse_args()
163+
164+ # update PYTHONPATH env var
165+ update_python_path()
166+
167+ # Get full path to the command that was passed in as an
168+ # argument
169+ executable = which(args.command)
170+
171+ # Execute the app
172+ execl(executable, executable, *args.command_args)</ code > </ pre >
173+ </ details >
174+ </ dd >
175+ < dt id ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.update_python_path "> < code class ="name flex ">
176+ < span > def < span class ="ident "> update_python_path</ span > </ span > (< span > ) ‑> NoneType</ span >
177+ </ code > </ dt >
178+ < dd >
179+ < div class ="desc "> < p > Retrieve existing PYTHONPATH</ p > </ div >
180+ < details class ="source ">
181+ < summary >
182+ < span > Expand source code</ span >
183+ </ summary >
184+ < pre > < code class ="python "> def update_python_path() -> None:
185+ '''Retrieve existing PYTHONPATH'''
186+ python_path = environ.get("PYTHONPATH")
187+
188+ # Split the paths
189+ if not python_path:
190+ python_path = []
191+ else:
192+ python_path = python_path.split(pathsep)
193+
194+ # Get the current working directory
195+ cwd_path = getcwd()
196+
197+ # If this directory is already in python_path, remove it.
198+ python_path = [path for path in python_path if path != cwd_path]
199+
200+ # If cwd is not in the PYTHONPATH, add it to the front.
201+ if cwd_path not in python_path:
202+ python_path.insert(0, cwd_path)
203+
204+ # What is the directory containing this python file?
205+ filedir_path = dirname(abspath(__file__))
206+
207+ # If this directory is already in python_path, remove it.
208+ python_path = [path for path in python_path if path != filedir_path]
209+
210+ # If this diretory is not in python_path, add it to the front
211+ python_path.insert(0, filedir_path)
212+
213+ # Reset PYTHONPATH environment variable
214+ environ["PYTHONPATH"] = pathsep.join(python_path)</ code > </ pre >
215+ </ details >
216+ </ dd >
217+ </ dl >
218+ </ section >
219+ < section >
220+ </ section >
221+ </ article >
222+ < nav id ="sidebar ">
223+ < h1 > Index</ h1 >
224+ < div class ="toc ">
225+ < ul > </ ul >
226+ </ div >
227+ < ul id ="index ">
228+ < li > < h3 > Super-module</ h3 >
229+ < ul >
230+ < li > < code > < a title ="hypertrace.agent.autoinstrumentation " href ="index.html "> hypertrace.agent.autoinstrumentation</ a > </ code > </ li >
231+ </ ul >
232+ </ li >
233+ < li > < h3 > < a href ="#header-functions "> Functions</ a > </ h3 >
234+ < ul class ="">
235+ < li > < code > < a title ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.parse_args " href ="#hypertrace.agent.autoinstrumentation.hypertrace_instrument.parse_args "> parse_args</ a > </ code > </ li >
236+ < li > < code > < a title ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.run " href ="#hypertrace.agent.autoinstrumentation.hypertrace_instrument.run "> run</ a > </ code > </ li >
237+ < li > < code > < a title ="hypertrace.agent.autoinstrumentation.hypertrace_instrument.update_python_path " href ="#hypertrace.agent.autoinstrumentation.hypertrace_instrument.update_python_path "> update_python_path</ a > </ code > </ li >
238+ </ ul >
239+ </ li >
240+ </ ul >
241+ </ nav >
242+ </ main >
243+ < footer id ="footer ">
244+ < p > Generated by < a href ="https://pdoc3.github.io/pdoc "> < cite > pdoc</ cite > 0.9.2</ a > .</ p >
245+ </ footer >
246+ </ body >
247+ </ html >
0 commit comments