golf-mcp 0.2.2__py3-none-any.whl → 0.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of golf-mcp might be problematic. Click here for more details.

Files changed (64) hide show
  1. golf/__init__.py +1 -1
  2. golf/_endpoints.py.in +6 -0
  3. {golf_mcp-0.2.2.dist-info → golf_mcp-0.2.4.dist-info}/METADATA +1 -1
  4. golf_mcp-0.2.4.dist-info/RECORD +56 -0
  5. golf/examples/__pycache__/__init__.cpython-311.pyc +0 -0
  6. golf/examples/basic/.coverage +0 -0
  7. golf/examples/basic/__pycache__/auth.cpython-311.pyc +0 -0
  8. golf/examples/basic/htmlcov/.gitignore +0 -2
  9. golf/examples/basic/htmlcov/class_index.html +0 -547
  10. golf/examples/basic/htmlcov/coverage_html_cb_6fb7b396.js +0 -733
  11. golf/examples/basic/htmlcov/favicon_32_cb_58284776.png +0 -0
  12. golf/examples/basic/htmlcov/function_index.html +0 -2091
  13. golf/examples/basic/htmlcov/index.html +0 -349
  14. golf/examples/basic/htmlcov/keybd_closed_cb_ce680311.png +0 -0
  15. golf/examples/basic/htmlcov/status.json +0 -1
  16. golf/examples/basic/htmlcov/style_cb_8e611ae1.css +0 -337
  17. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496___init___py.html +0 -323
  18. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_api_key_py.html +0 -170
  19. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_factory_py.html +0 -430
  20. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_helpers_py.html +0 -288
  21. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_providers_py.html +0 -493
  22. golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_registry_py.html +0 -353
  23. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950___init___py.html +0 -120
  24. golf/examples/basic/htmlcov/z_3ec3b3f490dc0950_instrumentation_py.html +0 -1535
  25. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db___init___py.html +0 -98
  26. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_branding_py.html +0 -289
  27. golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_main_py.html +0 -476
  28. golf/examples/basic/htmlcov/z_5a6c4e6bcc86fb2f___init___py.html +0 -97
  29. golf/examples/basic/htmlcov/z_6cadab9ec0df475d___init___py.html +0 -102
  30. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_build_py.html +0 -178
  31. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_init_py.html +0 -387
  32. golf/examples/basic/htmlcov/z_6cadab9ec0df475d_run_py.html +0 -222
  33. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4___init___py.html +0 -106
  34. golf/examples/basic/htmlcov/z_6fcdee0582ba84e4__endpoints_fallback_py.html +0 -107
  35. golf/examples/basic/htmlcov/z_7ba499ed22986217___init___py.html +0 -98
  36. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_auth_py.html +0 -306
  37. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_metrics_py.html +0 -329
  38. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_py.html +0 -1471
  39. golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_telemetry_py.html +0 -186
  40. golf/examples/basic/htmlcov/z_7ba499ed22986217_config_py.html +0 -315
  41. golf/examples/basic/htmlcov/z_7ba499ed22986217_parser_py.html +0 -1149
  42. golf/examples/basic/htmlcov/z_7ba499ed22986217_platform_py.html +0 -279
  43. golf/examples/basic/htmlcov/z_7ba499ed22986217_telemetry_py.html +0 -589
  44. golf/examples/basic/htmlcov/z_7ba499ed22986217_transformer_py.html +0 -286
  45. golf/examples/basic/htmlcov/z_7d7da37693a43688___init___py.html +0 -107
  46. golf/examples/basic/htmlcov/z_7d7da37693a43688_collector_py.html +0 -417
  47. golf/examples/basic/htmlcov/z_7d7da37693a43688_registry_py.html +0 -109
  48. golf/examples/basic/htmlcov/z_abe733142b40ad4e___init___py.html +0 -109
  49. golf/examples/basic/htmlcov/z_abe733142b40ad4e_context_py.html +0 -150
  50. golf/examples/basic/htmlcov/z_abe733142b40ad4e_elicitation_py.html +0 -267
  51. golf/examples/basic/htmlcov/z_abe733142b40ad4e_sampling_py.html +0 -318
  52. golf/examples/basic/prompts/__pycache__/welcome.cpython-311.pyc +0 -0
  53. golf/examples/basic/resources/__pycache__/current_time.cpython-311.pyc +0 -0
  54. golf/examples/basic/resources/__pycache__/info.cpython-311.pyc +0 -0
  55. golf/examples/basic/resources/weather/__pycache__/common.cpython-311.pyc +0 -0
  56. golf/examples/basic/resources/weather/__pycache__/current.cpython-311.pyc +0 -0
  57. golf/examples/basic/resources/weather/__pycache__/forecast.cpython-311.pyc +0 -0
  58. golf/examples/basic/tools/__pycache__/calculator.cpython-311.pyc +0 -0
  59. golf/examples/basic/tools/say/__pycache__/hello.cpython-311.pyc +0 -0
  60. golf_mcp-0.2.2.dist-info/RECORD +0 -110
  61. {golf_mcp-0.2.2.dist-info → golf_mcp-0.2.4.dist-info}/WHEEL +0 -0
  62. {golf_mcp-0.2.2.dist-info → golf_mcp-0.2.4.dist-info}/entry_points.txt +0 -0
  63. {golf_mcp-0.2.2.dist-info → golf_mcp-0.2.4.dist-info}/licenses/LICENSE +0 -0
  64. {golf_mcp-0.2.2.dist-info → golf_mcp-0.2.4.dist-info}/top_level.txt +0 -0
@@ -1,286 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
- <title>Coverage for /Users/antonigmitruk/golf/src/golf/core/transformer.py: 0%</title>
6
- <link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7
- <link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8
- <script src="coverage_html_cb_6fb7b396.js" defer></script>
9
- </head>
10
- <body class="pyfile">
11
- <header>
12
- <div class="content">
13
- <h1>
14
- <span class="text">Coverage for </span><b>/Users/antonigmitruk/golf/src/golf/core/transformer.py</b>:
15
- <span class="pc_cov">0%</span>
16
- </h1>
17
- <aside id="help_panel_wrapper">
18
- <input id="help_panel_state" type="checkbox">
19
- <label for="help_panel_state">
20
- <img id="keyboard_icon" src="keybd_closed_cb_ce680311.png" alt="Show/hide keyboard shortcuts">
21
- </label>
22
- <div id="help_panel">
23
- <p class="legend">Shortcuts on this page</p>
24
- <div class="keyhelp">
25
- <p>
26
- <kbd>r</kbd>
27
- <kbd>m</kbd>
28
- <kbd>x</kbd>
29
- &nbsp; toggle line displays
30
- </p>
31
- <p>
32
- <kbd>j</kbd>
33
- <kbd>k</kbd>
34
- &nbsp; next/prev highlighted chunk
35
- </p>
36
- <p>
37
- <kbd>0</kbd> &nbsp; (zero) top of page
38
- </p>
39
- <p>
40
- <kbd>1</kbd> &nbsp; (one) first highlighted chunk
41
- </p>
42
- <p>
43
- <kbd>[</kbd>
44
- <kbd>]</kbd>
45
- &nbsp; prev/next file
46
- </p>
47
- <p>
48
- <kbd>u</kbd> &nbsp; up to the index
49
- </p>
50
- <p>
51
- <kbd>?</kbd> &nbsp; show/hide this help
52
- </p>
53
- </div>
54
- </div>
55
- </aside>
56
- <h2>
57
- <span class="text">78 statements &nbsp;</span>
58
- <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">0<span class="text"> run</span></button>
59
- <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">78<span class="text"> missing</span></button>
60
- <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
61
- </h2>
62
- <p class="text">
63
- <a id="prevFileLink" class="nav" href="z_7ba499ed22986217_telemetry_py.html">&#xab; prev</a> &nbsp; &nbsp;
64
- <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
65
- <a id="nextFileLink" class="nav" href="z_5a6c4e6bcc86fb2f___init___py.html">&#xbb; next</a>
66
- &nbsp; &nbsp; &nbsp;
67
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
68
- created at 2025-08-16 18:46 +0200
69
- </p>
70
- <aside class="hidden">
71
- <button type="button" class="button_next_chunk" data-shortcut="j"></button>
72
- <button type="button" class="button_prev_chunk" data-shortcut="k"></button>
73
- <button type="button" class="button_top_of_page" data-shortcut="0"></button>
74
- <button type="button" class="button_first_chunk" data-shortcut="1"></button>
75
- <button type="button" class="button_prev_file" data-shortcut="["></button>
76
- <button type="button" class="button_next_file" data-shortcut="]"></button>
77
- <button type="button" class="button_to_index" data-shortcut="u"></button>
78
- <button type="button" class="button_show_hide_help" data-shortcut="?"></button>
79
- </aside>
80
- </div>
81
- </header>
82
- <main id="source">
83
- <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""Transform GolfMCP components into standalone FastMCP code.</span>&nbsp;</span><span class="r"></span></p>
84
- <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
85
- <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="str">This module provides utilities for transforming GolfMCP's convention-based code</span>&nbsp;</span><span class="r"></span></p>
86
- <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str">into explicit FastMCP component registrations.</span>&nbsp;</span><span class="r"></span></p>
87
- <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
88
- <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
89
- <p class="mis show_mis"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">ast</span>&nbsp;</span><span class="r"></span></p>
90
- <p class="mis show_mis"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">pathlib</span> <span class="key">import</span> <span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
91
- <p class="mis show_mis"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="nam">Any</span>&nbsp;</span><span class="r"></span></p>
92
- <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
93
- <p class="mis show_mis"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">core</span><span class="op">.</span><span class="nam">parser</span> <span class="key">import</span> <span class="nam">ParsedComponent</span>&nbsp;</span><span class="r"></span></p>
94
- <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
95
- <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
96
- <p class="mis show_mis"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">class</span> <span class="nam">ImportTransformer</span><span class="op">(</span><span class="nam">ast</span><span class="op">.</span><span class="nam">NodeTransformer</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
97
- <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="str">"""AST transformer for rewriting imports in component files."""</span>&nbsp;</span><span class="r"></span></p>
98
- <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
99
- <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
100
- <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
101
- <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="nam">original_path</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
102
- <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="nam">target_path</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
103
- <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="nam">import_map</span><span class="op">:</span> <span class="nam">dict</span><span class="op">[</span><span class="nam">str</span><span class="op">,</span> <span class="nam">str</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
104
- <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="nam">project_root</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
105
- <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
106
- <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="str">"""Initialize the import transformer.</span>&nbsp;</span><span class="r"></span></p>
107
- <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
108
- <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
109
- <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str"> original_path: Path to the original file</span>&nbsp;</span><span class="r"></span></p>
110
- <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="str"> target_path: Path to the target file</span>&nbsp;</span><span class="r"></span></p>
111
- <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str"> import_map: Mapping of original module paths to generated paths</span>&nbsp;</span><span class="r"></span></p>
112
- <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str"> project_root: Root path of the project</span>&nbsp;</span><span class="r"></span></p>
113
- <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
114
- <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">original_path</span> <span class="op">=</span> <span class="nam">original_path</span>&nbsp;</span><span class="r"></span></p>
115
- <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">target_path</span> <span class="op">=</span> <span class="nam">target_path</span>&nbsp;</span><span class="r"></span></p>
116
- <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span> <span class="op">=</span> <span class="nam">import_map</span>&nbsp;</span><span class="r"></span></p>
117
- <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">project_root</span> <span class="op">=</span> <span class="nam">project_root</span>&nbsp;</span><span class="r"></span></p>
118
- <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
119
- <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="key">def</span> <span class="nam">visit_Import</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">node</span><span class="op">:</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Import</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Any</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
120
- <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="str">"""Transform import statements."""</span>&nbsp;</span><span class="r"></span></p>
121
- <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="key">return</span> <span class="nam">node</span>&nbsp;</span><span class="r"></span></p>
122
- <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
123
- <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="key">def</span> <span class="nam">visit_ImportFrom</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">node</span><span class="op">:</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Any</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
124
- <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="str">"""Transform import from statements."""</span>&nbsp;</span><span class="r"></span></p>
125
- <p class="mis show_mis"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">if</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
126
- <p class="mis show_mis"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="key">return</span> <span class="nam">node</span>&nbsp;</span><span class="r"></span></p>
127
- <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
128
- <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="com"># Handle relative imports</span>&nbsp;</span><span class="r"></span></p>
129
- <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="key">if</span> <span class="nam">node</span><span class="op">.</span><span class="nam">level</span> <span class="op">></span> <span class="num">0</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
130
- <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="com"># Calculate the source module path</span>&nbsp;</span><span class="r"></span></p>
131
- <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">source_dir</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">original_path</span><span class="op">.</span><span class="nam">parent</span>&nbsp;</span><span class="r"></span></p>
132
- <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="key">for</span> <span class="nam">_</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">node</span><span class="op">.</span><span class="nam">level</span> <span class="op">-</span> <span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
133
- <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="nam">source_dir</span> <span class="op">=</span> <span class="nam">source_dir</span><span class="op">.</span><span class="nam">parent</span>&nbsp;</span><span class="r"></span></p>
134
- <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
135
- <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="key">if</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
136
- <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="com"># Handle imports like `from .helpers import utils`</span>&nbsp;</span><span class="r"></span></p>
137
- <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="nam">source_module</span> <span class="op">=</span> <span class="nam">source_dir</span> <span class="op">/</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"."</span><span class="op">,</span> <span class="str">"/"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
138
- <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
139
- <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> <span class="com"># Handle imports like `from . import something`</span>&nbsp;</span><span class="r"></span></p>
140
- <p class="mis show_mis"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> <span class="nam">source_module</span> <span class="op">=</span> <span class="nam">source_dir</span>&nbsp;</span><span class="r"></span></p>
141
- <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
142
- <p class="mis show_mis"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="key">try</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
143
- <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="com"># Check if this is a shared module import</span>&nbsp;</span><span class="r"></span></p>
144
- <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="nam">source_str</span> <span class="op">=</span> <span class="nam">str</span><span class="op">(</span><span class="nam">source_module</span><span class="op">.</span><span class="nam">relative_to</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">project_root</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
145
- <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
146
- <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="com"># First, try direct module path match (e.g., "tools/weather/helpers")</span>&nbsp;</span><span class="r"></span></p>
147
- <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="key">if</span> <span class="nam">source_str</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
148
- <p class="mis show_mis"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="nam">new_module</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span><span class="op">[</span><span class="nam">source_str</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
149
- <p class="mis show_mis"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="key">return</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">(</span><span class="nam">module</span><span class="op">=</span><span class="nam">new_module</span><span class="op">,</span> <span class="nam">names</span><span class="op">=</span><span class="nam">node</span><span class="op">.</span><span class="nam">names</span><span class="op">,</span> <span class="nam">level</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
150
- <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
151
- <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="com"># If direct match fails, try directory-based matching</span>&nbsp;</span><span class="r"></span></p>
152
- <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="com"># This handles cases like `from . import common` where the import_map</span>&nbsp;</span><span class="r"></span></p>
153
- <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="com"># has "tools/weather/common" but we're looking for "tools/weather"</span>&nbsp;</span><span class="r"></span></p>
154
- <p class="mis show_mis"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="nam">source_dir_str</span> <span class="op">=</span> <span class="nam">str</span><span class="op">(</span><span class="nam">source_dir</span><span class="op">.</span><span class="nam">relative_to</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">project_root</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
155
- <p class="mis show_mis"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="key">if</span> <span class="nam">source_dir_str</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
156
- <p class="mis show_mis"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="nam">new_module</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span><span class="op">[</span><span class="nam">source_dir_str</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
157
- <p class="mis show_mis"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="key">if</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
158
- <p class="mis show_mis"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> <span class="nam">new_module</span> <span class="op">=</span> <span class="str">f"{new_module}.{node.module}"</span>&nbsp;</span><span class="r"></span></p>
159
- <p class="mis show_mis"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="key">return</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">(</span><span class="nam">module</span><span class="op">=</span><span class="nam">new_module</span><span class="op">,</span> <span class="nam">names</span><span class="op">=</span><span class="nam">node</span><span class="op">.</span><span class="nam">names</span><span class="op">,</span> <span class="nam">level</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
160
- <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
161
- <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="com"># Check for specific module imports within the directory</span>&nbsp;</span><span class="r"></span></p>
162
- <p class="mis show_mis"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="key">for</span> <span class="nam">import_path</span><span class="op">,</span> <span class="nam">mapped_path</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">import_map</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
163
- <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="com"># Handle cases where we import a specific module from a directory</span>&nbsp;</span><span class="r"></span></p>
164
- <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="com"># e.g., `from .common import something` should match "tools/weather/common"</span>&nbsp;</span><span class="r"></span></p>
165
- <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="key">if</span> <span class="nam">import_path</span><span class="op">.</span><span class="nam">startswith</span><span class="op">(</span><span class="nam">source_dir_str</span> <span class="op">+</span> <span class="str">"/"</span><span class="op">)</span> <span class="key">and</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
166
- <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">module_name</span> <span class="op">=</span> <span class="nam">import_path</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">source_dir_str</span> <span class="op">+</span> <span class="str">"/"</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
167
- <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="key">if</span> <span class="nam">module_name</span> <span class="op">==</span> <span class="nam">node</span><span class="op">.</span><span class="nam">module</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
168
- <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="key">return</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">(</span><span class="nam">module</span><span class="op">=</span><span class="nam">mapped_path</span><span class="op">,</span> <span class="nam">names</span><span class="op">=</span><span class="nam">node</span><span class="op">.</span><span class="nam">names</span><span class="op">,</span> <span class="nam">level</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
169
- <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
170
- <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
171
- <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="com"># source_module is not relative to project_root, leave import unchanged</span>&nbsp;</span><span class="r"></span></p>
172
- <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="key">pass</span>&nbsp;</span><span class="r"></span></p>
173
- <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
174
- <p class="mis show_mis"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> <span class="key">return</span> <span class="nam">node</span>&nbsp;</span><span class="r"></span></p>
175
- <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
176
- <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
177
- <p class="mis show_mis"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="key">def</span> <span class="nam">transform_component</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
178
- <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="nam">component</span><span class="op">:</span> <span class="nam">ParsedComponent</span> <span class="op">|</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
179
- <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">output_file</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
180
- <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="nam">project_path</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
181
- <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> <span class="nam">import_map</span><span class="op">:</span> <span class="nam">dict</span><span class="op">[</span><span class="nam">str</span><span class="op">,</span> <span class="nam">str</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
182
- <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="nam">source_file</span><span class="op">:</span> <span class="nam">Path</span> <span class="op">|</span> <span class="key">None</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
183
- <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
184
- <p class="pln"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="str">"""Transform a GolfMCP component into a standalone FastMCP component.</span>&nbsp;</span><span class="r"></span></p>
185
- <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
186
- <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
187
- <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"><span class="str"> component: Parsed component to transform (optional if source_file provided)</span>&nbsp;</span><span class="r"></span></p>
188
- <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"><span class="str"> output_file: Path to write the transformed component to</span>&nbsp;</span><span class="r"></span></p>
189
- <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"><span class="str"> project_path: Path to the project root</span>&nbsp;</span><span class="r"></span></p>
190
- <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"><span class="str"> import_map: Mapping of original module paths to generated paths</span>&nbsp;</span><span class="r"></span></p>
191
- <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"><span class="str"> source_file: Optional path to source file (for shared files)</span>&nbsp;</span><span class="r"></span></p>
192
- <p class="pln"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
193
- <p class="pln"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"><span class="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
194
- <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"><span class="str"> Generated component code</span>&nbsp;</span><span class="r"></span></p>
195
- <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
196
- <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"> <span class="com"># Read the original file</span>&nbsp;</span><span class="r"></span></p>
197
- <p class="mis show_mis"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> <span class="key">if</span> <span class="nam">source_file</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
198
- <p class="mis show_mis"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> <span class="nam">file_path</span> <span class="op">=</span> <span class="nam">source_file</span>&nbsp;</span><span class="r"></span></p>
199
- <p class="mis show_mis"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"> <span class="key">elif</span> <span class="nam">component</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
200
- <p class="mis show_mis"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> <span class="nam">file_path</span> <span class="op">=</span> <span class="nam">Path</span><span class="op">(</span><span class="nam">component</span><span class="op">.</span><span class="nam">file_path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
201
- <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
202
- <p class="mis show_mis"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">"Either component or source_file must be provided"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
203
- <p class="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
204
- <p class="mis show_mis"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">file_path</span><span class="op">)</span> <span class="key">as</span> <span class="nam">f</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
205
- <p class="mis show_mis"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"> <span class="nam">source_code</span> <span class="op">=</span> <span class="nam">f</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
206
- <p class="pln"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
207
- <p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> <span class="com"># Parse the source code into an AST</span>&nbsp;</span><span class="r"></span></p>
208
- <p class="mis show_mis"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"> <span class="nam">tree</span> <span class="op">=</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">parse</span><span class="op">(</span><span class="nam">source_code</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
209
- <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
210
- <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"> <span class="com"># Transform imports</span>&nbsp;</span><span class="r"></span></p>
211
- <p class="mis show_mis"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> <span class="nam">transformer</span> <span class="op">=</span> <span class="nam">ImportTransformer</span><span class="op">(</span><span class="nam">file_path</span><span class="op">,</span> <span class="nam">output_file</span><span class="op">,</span> <span class="nam">import_map</span><span class="op">,</span> <span class="nam">project_path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
212
- <p class="mis show_mis"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"> <span class="nam">tree</span> <span class="op">=</span> <span class="nam">transformer</span><span class="op">.</span><span class="nam">visit</span><span class="op">(</span><span class="nam">tree</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
213
- <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
214
- <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"> <span class="com"># Get all imports and docstring</span>&nbsp;</span><span class="r"></span></p>
215
- <p class="mis show_mis"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"> <span class="nam">imports</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
216
- <p class="mis show_mis"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"> <span class="nam">docstring</span> <span class="op">=</span> <span class="key">None</span>&nbsp;</span><span class="r"></span></p>
217
- <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
218
- <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"> <span class="com"># Find the module docstring if present</span>&nbsp;</span><span class="r"></span></p>
219
- <p class="mis show_mis"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"> <span class="key">if</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
220
- <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"> <span class="nam">len</span><span class="op">(</span><span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">)</span> <span class="op">></span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
221
- <p class="pln"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Expr</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
222
- <p class="pln"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">value</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Constant</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
223
- <p class="pln"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">value</span><span class="op">.</span><span class="nam">value</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
224
- <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"> <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
225
- <p class="mis show_mis"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"> <span class="nam">docstring</span> <span class="op">=</span> <span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">value</span><span class="op">.</span><span class="nam">value</span>&nbsp;</span><span class="r"></span></p>
226
- <p class="pln"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
227
- <p class="pln"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"> <span class="com"># Find imports</span>&nbsp;</span><span class="r"></span></p>
228
- <p class="mis show_mis"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> <span class="key">for</span> <span class="nam">node</span> <span class="key">in</span> <span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
229
- <p class="mis show_mis"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">node</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Import</span> <span class="op">|</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
230
- <p class="mis show_mis"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"> <span class="nam">imports</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">node</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
231
- <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
232
- <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"> <span class="com"># Generate the transformed code</span>&nbsp;</span><span class="r"></span></p>
233
- <p class="mis show_mis"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"> <span class="nam">transformed_imports</span> <span class="op">=</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">unparse</span><span class="op">(</span><span class="nam">ast</span><span class="op">.</span><span class="nam">Module</span><span class="op">(</span><span class="nam">body</span><span class="op">=</span><span class="nam">imports</span><span class="op">,</span> <span class="nam">type_ignores</span><span class="op">=</span><span class="op">[</span><span class="op">]</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
234
- <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
235
- <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"> <span class="com"># Build full transformed code</span>&nbsp;</span><span class="r"></span></p>
236
- <p class="mis show_mis"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"> <span class="nam">transformed_code</span> <span class="op">=</span> <span class="nam">transformed_imports</span> <span class="op">+</span> <span class="str">"\n\n"</span>&nbsp;</span><span class="r"></span></p>
237
- <p class="pln"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
238
- <p class="pln"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> <span class="com"># Add docstring if present, using proper triple quotes for multi-line docstrings</span>&nbsp;</span><span class="r"></span></p>
239
- <p class="mis show_mis"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"> <span class="key">if</span> <span class="nam">docstring</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
240
- <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="com"># Check if docstring contains newlines</span>&nbsp;</span><span class="r"></span></p>
241
- <p class="mis show_mis"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="key">if</span> <span class="str">"\n"</span> <span class="key">in</span> <span class="nam">docstring</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
242
- <p class="pln"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"> <span class="com"># Use triple quotes for multi-line docstrings</span>&nbsp;</span><span class="r"></span></p>
243
- <p class="mis show_mis"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"> <span class="nam">transformed_code</span> <span class="op">+=</span> <span class="str">f'"""{docstring}"""\n\n'</span>&nbsp;</span><span class="r"></span></p>
244
- <p class="pln"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
245
- <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"> <span class="com"># Use single quotes for single-line docstrings</span>&nbsp;</span><span class="r"></span></p>
246
- <p class="mis show_mis"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> <span class="nam">transformed_code</span> <span class="op">+=</span> <span class="str">f'"{docstring}"\n\n'</span>&nbsp;</span><span class="r"></span></p>
247
- <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
248
- <p class="pln"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"> <span class="com"># Add the rest of the code except imports and the original docstring</span>&nbsp;</span><span class="r"></span></p>
249
- <p class="mis show_mis"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"> <span class="nam">remaining_nodes</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
250
- <p class="mis show_mis"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"> <span class="key">for</span> <span class="nam">node</span> <span class="key">in</span> <span class="nam">tree</span><span class="op">.</span><span class="nam">body</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
251
- <p class="pln"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"> <span class="com"># Skip imports</span>&nbsp;</span><span class="r"></span></p>
252
- <p class="mis show_mis"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">node</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Import</span> <span class="op">|</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">ImportFrom</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
253
- <p class="mis show_mis"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"> <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
254
- <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
255
- <p class="pln"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"> <span class="com"># Skip the original docstring</span>&nbsp;</span><span class="r"></span></p>
256
- <p class="mis show_mis"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">node</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Expr</span><span class="op">)</span> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">node</span><span class="op">.</span><span class="nam">value</span><span class="op">,</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">Constant</span><span class="op">)</span> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">node</span><span class="op">.</span><span class="nam">value</span><span class="op">.</span><span class="nam">value</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
257
- <p class="mis show_mis"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"> <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
258
- <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
259
- <p class="mis show_mis"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"> <span class="nam">remaining_nodes</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">node</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
260
- <p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
261
- <p class="mis show_mis"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"> <span class="nam">remaining_code</span> <span class="op">=</span> <span class="nam">ast</span><span class="op">.</span><span class="nam">unparse</span><span class="op">(</span><span class="nam">ast</span><span class="op">.</span><span class="nam">Module</span><span class="op">(</span><span class="nam">body</span><span class="op">=</span><span class="nam">remaining_nodes</span><span class="op">,</span> <span class="nam">type_ignores</span><span class="op">=</span><span class="op">[</span><span class="op">]</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
262
- <p class="mis show_mis"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"> <span class="nam">transformed_code</span> <span class="op">+=</span> <span class="nam">remaining_code</span>&nbsp;</span><span class="r"></span></p>
263
- <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
264
- <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"> <span class="com"># Ensure the directory exists</span>&nbsp;</span><span class="r"></span></p>
265
- <p class="mis show_mis"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"> <span class="nam">output_file</span><span class="op">.</span><span class="nam">parent</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
266
- <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
267
- <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"> <span class="com"># Write the transformed code to the output file</span>&nbsp;</span><span class="r"></span></p>
268
- <p class="mis show_mis"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">output_file</span><span class="op">,</span> <span class="str">"w"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">f</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
269
- <p class="mis show_mis"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">transformed_code</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
270
- <p class="pln"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
271
- <p class="mis show_mis"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"> <span class="key">return</span> <span class="nam">transformed_code</span>&nbsp;</span><span class="r"></span></p>
272
- </main>
273
- <footer>
274
- <div class="content">
275
- <p>
276
- <a class="nav" href="z_7ba499ed22986217_telemetry_py.html">&#xab; prev</a> &nbsp; &nbsp;
277
- <a class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
278
- <a class="nav" href="z_5a6c4e6bcc86fb2f___init___py.html">&#xbb; next</a>
279
- &nbsp; &nbsp; &nbsp;
280
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
281
- created at 2025-08-16 18:46 +0200
282
- </p>
283
- </div>
284
- </footer>
285
- </body>
286
- </html>
@@ -1,107 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
- <title>Coverage for /Users/antonigmitruk/golf/src/golf/metrics/__init__.py: 0%</title>
6
- <link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7
- <link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8
- <script src="coverage_html_cb_6fb7b396.js" defer></script>
9
- </head>
10
- <body class="pyfile">
11
- <header>
12
- <div class="content">
13
- <h1>
14
- <span class="text">Coverage for </span><b>/Users/antonigmitruk/golf/src/golf/metrics/__init__.py</b>:
15
- <span class="pc_cov">0%</span>
16
- </h1>
17
- <aside id="help_panel_wrapper">
18
- <input id="help_panel_state" type="checkbox">
19
- <label for="help_panel_state">
20
- <img id="keyboard_icon" src="keybd_closed_cb_ce680311.png" alt="Show/hide keyboard shortcuts">
21
- </label>
22
- <div id="help_panel">
23
- <p class="legend">Shortcuts on this page</p>
24
- <div class="keyhelp">
25
- <p>
26
- <kbd>r</kbd>
27
- <kbd>m</kbd>
28
- <kbd>x</kbd>
29
- &nbsp; toggle line displays
30
- </p>
31
- <p>
32
- <kbd>j</kbd>
33
- <kbd>k</kbd>
34
- &nbsp; next/prev highlighted chunk
35
- </p>
36
- <p>
37
- <kbd>0</kbd> &nbsp; (zero) top of page
38
- </p>
39
- <p>
40
- <kbd>1</kbd> &nbsp; (one) first highlighted chunk
41
- </p>
42
- <p>
43
- <kbd>[</kbd>
44
- <kbd>]</kbd>
45
- &nbsp; prev/next file
46
- </p>
47
- <p>
48
- <kbd>u</kbd> &nbsp; up to the index
49
- </p>
50
- <p>
51
- <kbd>?</kbd> &nbsp; show/hide this help
52
- </p>
53
- </div>
54
- </div>
55
- </aside>
56
- <h2>
57
- <span class="text">3 statements &nbsp;</span>
58
- <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">0<span class="text"> run</span></button>
59
- <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">3<span class="text"> missing</span></button>
60
- <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
61
- </h2>
62
- <p class="text">
63
- <a id="prevFileLink" class="nav" href="z_5a6c4e6bcc86fb2f___init___py.html">&#xab; prev</a> &nbsp; &nbsp;
64
- <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
65
- <a id="nextFileLink" class="nav" href="z_7d7da37693a43688_collector_py.html">&#xbb; next</a>
66
- &nbsp; &nbsp; &nbsp;
67
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
68
- created at 2025-08-16 18:46 +0200
69
- </p>
70
- <aside class="hidden">
71
- <button type="button" class="button_next_chunk" data-shortcut="j"></button>
72
- <button type="button" class="button_prev_chunk" data-shortcut="k"></button>
73
- <button type="button" class="button_top_of_page" data-shortcut="0"></button>
74
- <button type="button" class="button_first_chunk" data-shortcut="1"></button>
75
- <button type="button" class="button_prev_file" data-shortcut="["></button>
76
- <button type="button" class="button_next_file" data-shortcut="]"></button>
77
- <button type="button" class="button_to_index" data-shortcut="u"></button>
78
- <button type="button" class="button_show_hide_help" data-shortcut="?"></button>
79
- </aside>
80
- </div>
81
- </header>
82
- <main id="source">
83
- <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""Golf metrics module for Prometheus-compatible metrics collection."""</span>&nbsp;</span><span class="r"></span></p>
84
- <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
85
- <p class="mis show_mis"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">metrics</span><span class="op">.</span><span class="nam">collector</span> <span class="key">import</span> <span class="nam">MetricsCollector</span><span class="op">,</span> <span class="nam">get_metrics_collector</span>&nbsp;</span><span class="r"></span></p>
86
- <p class="mis show_mis"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">metrics</span><span class="op">.</span><span class="nam">registry</span> <span class="key">import</span> <span class="nam">init_metrics</span>&nbsp;</span><span class="r"></span></p>
87
- <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
88
- <p class="mis show_mis"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="nam">__all__</span> <span class="op">=</span> <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
89
- <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> <span class="str">"MetricsCollector"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
90
- <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> <span class="str">"get_metrics_collector"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
91
- <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="str">"init_metrics"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
92
- <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
93
- </main>
94
- <footer>
95
- <div class="content">
96
- <p>
97
- <a class="nav" href="z_5a6c4e6bcc86fb2f___init___py.html">&#xab; prev</a> &nbsp; &nbsp;
98
- <a class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
99
- <a class="nav" href="z_7d7da37693a43688_collector_py.html">&#xbb; next</a>
100
- &nbsp; &nbsp; &nbsp;
101
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
102
- created at 2025-08-16 18:46 +0200
103
- </p>
104
- </div>
105
- </footer>
106
- </body>
107
- </html>