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,387 +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/commands/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/commands/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">142 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">142<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_6cadab9ec0df475d_build_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_6cadab9ec0df475d_run_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">"""Project initialization command implementation."""</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">import</span> <span class="nam">shutil</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">pathlib</span> <span class="key">import</span> <span class="nam">Path</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="key">from</span> <span class="nam">rich</span><span class="op">.</span><span class="nam">console</span> <span class="key">import</span> <span class="nam">Console</span>&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">from</span> <span class="nam">rich</span><span class="op">.</span><span class="nam">progress</span> <span class="key">import</span> <span class="nam">Progress</span><span class="op">,</span> <span class="nam">SpinnerColumn</span><span class="op">,</span> <span class="nam">TextColumn</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">rich</span><span class="op">.</span><span class="nam">prompt</span> <span class="key">import</span> <span class="nam">Confirm</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">&nbsp;</span><span class="r"></span></p>
92
- <p class="mis show_mis"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">cli</span><span class="op">.</span><span class="nam">branding</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
93
- <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="nam">create_success_message</span><span class="op">,</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"> <span class="nam">create_info_panel</span><span class="op">,</span>&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"> <span class="nam">STATUS_ICONS</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
96
- <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="nam">GOLF_ORANGE</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="op">)</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">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">core</span><span class="op">.</span><span class="nam">telemetry</span> <span class="key">import</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">track_command</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">track_event</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">set_telemetry_enabled</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">load_telemetry_preference</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="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">&nbsp;</span><span class="r"></span></p>
106
- <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"><span class="nam">console</span> <span class="op">=</span> <span class="nam">Console</span><span class="op">(</span><span class="op">)</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">&nbsp;</span><span class="r"></span></p>
109
- <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="key">def</span> <span class="nam">initialize_project</span><span class="op">(</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="nam">project_name</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</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="nam">output_dir</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</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="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</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">"""Initialize a new GolfMCP project.</span>&nbsp;</span><span class="r"></span></p>
114
- <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
115
- <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
116
- <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> project_name: Name of the project</span>&nbsp;</span><span class="r"></span></p>
117
- <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="str"> output_dir: Directory where the project will be created</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"><span class="str"> """</span>&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">try</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="com"># Use the basic template by default</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="nam">template</span> <span class="op">=</span> <span class="str">"basic"</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="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="com"># Check if directory exists</span>&nbsp;</span><span class="r"></span></p>
124
- <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="key">if</span> <span class="nam">output_dir</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="op">)</span><span class="op">:</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="key">not</span> <span class="nam">output_dir</span><span class="op">.</span><span class="nam">is_dir</span><span class="op">(</span><span class="op">)</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="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">f"[bold red]Error:[/bold red] '{output_dir}' exists but is not a directory."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
127
- <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="nam">track_command</span><span class="op">(</span>&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="str">"init"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
129
- <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="nam">success</span><span class="op">=</span><span class="key">False</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="nam">error_type</span><span class="op">=</span><span class="str">"NotADirectory"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
131
- <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">error_message</span><span class="op">=</span><span class="str">"Target exists but is not a directory"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
132
- <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <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="key">return</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="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="com"># Check if directory is empty</span>&nbsp;</span><span class="r"></span></p>
136
- <p class="mis show_mis"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="key">if</span> <span class="nam">any</span><span class="op">(</span><span class="nam">output_dir</span><span class="op">.</span><span class="nam">iterdir</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">Confirm</span><span class="op">.</span><span class="nam">ask</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
137
- <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="str">f"Directory '{output_dir}' is not empty. Continue anyway?"</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="nam">default</span><span class="op">=</span><span class="key">False</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="op">)</span><span class="op">:</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">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"Initialization cancelled."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
141
- <p class="mis show_mis"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="nam">track_event</span><span class="op">(</span><span class="str">"cli_init_cancelled"</span><span class="op">,</span> <span class="op">{</span><span class="str">"success"</span><span class="op">:</span> <span class="key">False</span><span class="op">}</span><span class="op">)</span>&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">return</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="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
144
- <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="com"># Create the directory</span>&nbsp;</span><span class="r"></span></p>
145
- <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="nam">output_dir</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>&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">&nbsp;</span><span class="r"></span></p>
147
- <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="com"># Find template directory within the installed package</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="key">import</span> <span class="nam">golf</span>&nbsp;</span><span class="r"></span></p>
149
- <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
150
- <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="nam">package_init_file</span> <span class="op">=</span> <span class="nam">Path</span><span class="op">(</span><span class="nam">golf</span><span class="op">.</span><span class="nam">__file__</span><span class="op">)</span>&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"># The 'examples' directory is now inside the 'golf' package directory</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"># e.g. golf/examples/basic, so go up one from __init__.py to get to 'golf'</span>&nbsp;</span><span class="r"></span></p>
153
- <p class="mis show_mis"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="nam">template_dir</span> <span class="op">=</span> <span class="nam">package_init_file</span><span class="op">.</span><span class="nam">parent</span> <span class="op">/</span> <span class="str">"examples"</span> <span class="op">/</span> <span class="nam">template</span>&nbsp;</span><span class="r"></span></p>
154
- <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">&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="key">not</span> <span class="nam">template_dir</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="op">)</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">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">f"[bold red]Error:[/bold red] Could not find template '{template}'"</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="nam">track_command</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
158
- <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> <span class="str">"init"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
159
- <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="nam">success</span><span class="op">=</span><span class="key">False</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"> <span class="nam">error_type</span><span class="op">=</span><span class="str">"TemplateNotFound"</span><span class="op">,</span>&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="nam">error_message</span><span class="op">=</span><span class="str">f"Template directory not found: {template}"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
162
- <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
163
- <p class="mis show_mis"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="key">return</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">&nbsp;</span><span class="r"></span></p>
165
- <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="com"># Copy template files</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="key">with</span> <span class="nam">Progress</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
167
- <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="nam">SpinnerColumn</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
168
- <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="nam">TextColumn</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"> <span class="str">f"[bold {GOLF_ORANGE}]{STATUS_ICONS['building']} Creating project structure...[/bold {GOLF_ORANGE}]"</span>&nbsp;</span><span class="r"></span></p>
170
- <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="op">)</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="nam">transient</span><span class="op">=</span><span class="key">True</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
172
- <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="op">)</span> <span class="key">as</span> <span class="nam">progress</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
173
- <p class="mis show_mis"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="nam">progress</span><span class="op">.</span><span class="nam">add_task</span><span class="op">(</span><span class="str">"copying"</span><span class="op">,</span> <span class="nam">total</span><span class="op">=</span><span class="key">None</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
174
- <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">&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"> <span class="com"># Copy directory structure</span>&nbsp;</span><span class="r"></span></p>
176
- <p class="mis show_mis"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> <span class="nam">_copy_template</span><span class="op">(</span><span class="nam">template_dir</span><span class="op">,</span> <span class="nam">output_dir</span><span class="op">,</span> <span class="nam">project_name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
177
- <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">&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="com"># Ask for telemetry consent</span>&nbsp;</span><span class="r"></span></p>
179
- <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">_prompt_for_telemetry_consent</span><span class="op">(</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">&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="com"># Show success message</span>&nbsp;</span><span class="r"></span></p>
182
- <p class="mis show_mis"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
183
- <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> <span class="nam">create_success_message</span><span class="op">(</span><span class="str">"Project initialized successfully!"</span><span class="op">,</span> <span class="nam">console</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">&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"> <span class="com"># Show next steps</span>&nbsp;</span><span class="r"></span></p>
186
- <p class="mis show_mis"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"> <span class="nam">next_steps</span> <span class="op">=</span> <span class="str">f"cd {output_dir.name}\ngolf build dev\ngolf run"</span>&nbsp;</span><span class="r"></span></p>
187
- <p class="mis show_mis"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> <span class="nam">create_info_panel</span><span class="op">(</span><span class="str">"Next Steps"</span><span class="op">,</span> <span class="nam">next_steps</span><span class="op">,</span> <span class="nam">console</span><span class="op">)</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">&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="com"># Track successful initialization</span>&nbsp;</span><span class="r"></span></p>
190
- <p class="mis show_mis"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"> <span class="nam">track_event</span><span class="op">(</span><span class="str">"cli_init_success"</span><span class="op">,</span> <span class="op">{</span><span class="str">"success"</span><span class="op">:</span> <span class="key">True</span><span class="op">,</span> <span class="str">"template"</span><span class="op">:</span> <span class="nam">template</span><span class="op">}</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
191
- <p class="mis show_mis"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">e</span><span class="op">:</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"> <span class="com"># Capture error details for telemetry</span>&nbsp;</span><span class="r"></span></p>
193
- <p class="mis show_mis"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"> <span class="nam">error_type</span> <span class="op">=</span> <span class="nam">type</span><span class="op">(</span><span class="nam">e</span><span class="op">)</span><span class="op">.</span><span class="nam">__name__</span>&nbsp;</span><span class="r"></span></p>
194
- <p class="mis show_mis"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"> <span class="nam">error_message</span> <span class="op">=</span> <span class="nam">str</span><span class="op">(</span><span class="nam">e</span><span class="op">)</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">&nbsp;</span><span class="r"></span></p>
196
- <p class="mis show_mis"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">f"[bold red]Error during initialization:[/bold red] {error_message}"</span><span class="op">)</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="nam">track_command</span><span class="op">(</span><span class="str">"init"</span><span class="op">,</span> <span class="nam">success</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">error_type</span><span class="op">=</span><span class="nam">error_type</span><span class="op">,</span> <span class="nam">error_message</span><span class="op">=</span><span class="nam">error_message</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
198
- <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
199
- <p class="pln"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"> <span class="com"># Re-raise to maintain existing behavior</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="key">raise</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">&nbsp;</span><span class="r"></span></p>
202
- <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
203
- <p class="mis show_mis"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"><span class="key">def</span> <span class="nam">_copy_template</span><span class="op">(</span><span class="nam">source_dir</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span> <span class="nam">target_dir</span><span class="op">:</span> <span class="nam">Path</span><span class="op">,</span> <span class="nam">project_name</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
204
- <p class="pln"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="str">"""Copy template files to the target directory, with variable substitution.</span>&nbsp;</span><span class="r"></span></p>
205
- <p class="pln"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t">&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"><span class="str"> Args:</span>&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="str"> source_dir: Source template directory</span>&nbsp;</span><span class="r"></span></p>
208
- <p class="pln"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"><span class="str"> target_dir: Target project directory</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"><span class="str"> project_name: Name of the project (for substitutions)</span>&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="str"> """</span>&nbsp;</span><span class="r"></span></p>
211
- <p class="pln"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> <span class="com"># Create standard directory structure</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="op">(</span><span class="nam">target_dir</span> <span class="op">/</span> <span class="str">"tools"</span><span class="op">)</span><span class="op">.</span><span class="nam">mkdir</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>
213
- <p class="mis show_mis"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"> <span class="op">(</span><span class="nam">target_dir</span> <span class="op">/</span> <span class="str">"resources"</span><span class="op">)</span><span class="op">.</span><span class="nam">mkdir</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>
214
- <p class="mis show_mis"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"> <span class="op">(</span><span class="nam">target_dir</span> <span class="op">/</span> <span class="str">"prompts"</span><span class="op">)</span><span class="op">.</span><span class="nam">mkdir</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>
215
- <p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
216
- <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"> <span class="com"># Copy all files from the template</span>&nbsp;</span><span class="r"></span></p>
217
- <p class="mis show_mis"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"> <span class="key">for</span> <span class="nam">source_path</span> <span class="key">in</span> <span class="nam">source_dir</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="str">"**/*"</span><span class="op">)</span><span class="op">:</span>&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"># Skip if directory (we'll create directories as needed)</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="nam">source_path</span><span class="op">.</span><span class="nam">is_dir</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
220
- <p class="mis show_mis"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"> <span class="key">continue</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">&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="com"># Compute relative path</span>&nbsp;</span><span class="r"></span></p>
223
- <p class="mis show_mis"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> <span class="nam">rel_path</span> <span class="op">=</span> <span class="nam">source_path</span><span class="op">.</span><span class="nam">relative_to</span><span class="op">(</span><span class="nam">source_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
224
- <p class="mis show_mis"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"> <span class="nam">target_path</span> <span class="op">=</span> <span class="nam">target_dir</span> <span class="op">/</span> <span class="nam">rel_path</span>&nbsp;</span><span class="r"></span></p>
225
- <p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t">&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"> <span class="com"># Create parent directories if needed</span>&nbsp;</span><span class="r"></span></p>
227
- <p class="mis show_mis"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"> <span class="nam">target_path</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>
228
- <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
229
- <p class="pln"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"> <span class="com"># Copy and substitute content for text files</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="key">if</span> <span class="nam">_is_text_file</span><span class="op">(</span><span class="nam">source_path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
231
- <p class="mis show_mis"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">source_path</span><span class="op">,</span> <span class="nam">encoding</span><span class="op">=</span><span class="str">"utf-8"</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>
232
- <p class="mis show_mis"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"> <span class="nam">content</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>
233
- <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t">&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"> <span class="com"># Replace template variables</span>&nbsp;</span><span class="r"></span></p>
235
- <p class="mis show_mis"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"> <span class="nam">content</span> <span class="op">=</span> <span class="nam">content</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"{{project_name}}"</span><span class="op">,</span> <span class="nam">project_name</span><span class="op">)</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">content</span> <span class="op">=</span> <span class="nam">content</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"{{project_name_lowercase}}"</span><span class="op">,</span> <span class="nam">project_name</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span><span class="op">)</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="mis show_mis"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">target_path</span><span class="op">,</span> <span class="str">"w"</span><span class="op">,</span> <span class="nam">encoding</span><span class="op">=</span><span class="str">"utf-8"</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>
239
- <p class="mis show_mis"><span class="n"><a id="t157" href="#t157">157</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">content</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="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
241
- <p class="pln"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="com"># Binary file, just copy</span>&nbsp;</span><span class="r"></span></p>
242
- <p class="mis show_mis"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"> <span class="nam">shutil</span><span class="op">.</span><span class="nam">copy2</span><span class="op">(</span><span class="nam">source_path</span><span class="op">,</span> <span class="nam">target_path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
243
- <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t">&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="com"># Create a .gitignore if it doesn't exist</span>&nbsp;</span><span class="r"></span></p>
245
- <p class="mis show_mis"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"> <span class="nam">gitignore_file</span> <span class="op">=</span> <span class="nam">target_dir</span> <span class="op">/</span> <span class="str">".gitignore"</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="key">if</span> <span class="key">not</span> <span class="nam">gitignore_file</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
247
- <p class="mis show_mis"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">gitignore_file</span><span class="op">,</span> <span class="str">"w"</span><span class="op">,</span> <span class="nam">encoding</span><span class="op">=</span><span class="str">"utf-8"</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>
248
- <p class="mis show_mis"><span class="n"><a id="t166" href="#t166">166</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="str">"# Python\n"</span><span class="op">)</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">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"__pycache__/\n"</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"*.py[cod]\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
251
- <p class="mis show_mis"><span class="n"><a id="t169" href="#t169">169</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="str">"*$py.class\n"</span><span class="op">)</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"*.so\n"</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">".Python\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
254
- <p class="mis show_mis"><span class="n"><a id="t172" href="#t172">172</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="str">"env/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
255
- <p class="mis show_mis"><span class="n"><a id="t173" href="#t173">173</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="str">"build/\n"</span><span class="op">)</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"develop-eggs/\n"</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"dist/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
258
- <p class="mis show_mis"><span class="n"><a id="t176" href="#t176">176</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="str">"downloads/\n"</span><span class="op">)</span>&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">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"eggs/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
260
- <p class="mis show_mis"><span class="n"><a id="t178" href="#t178">178</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="str">".eggs/\n"</span><span class="op">)</span>&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">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"lib/\n"</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">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"lib64/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
263
- <p class="mis show_mis"><span class="n"><a id="t181" href="#t181">181</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="str">"parts/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
264
- <p class="mis show_mis"><span class="n"><a id="t182" href="#t182">182</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="str">"sdist/\n"</span><span class="op">)</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">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"var/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
266
- <p class="mis show_mis"><span class="n"><a id="t184" href="#t184">184</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="str">"*.egg-info/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
267
- <p class="mis show_mis"><span class="n"><a id="t185" href="#t185">185</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="str">".installed.cfg\n"</span><span class="op">)</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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">"*.egg\n\n"</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="str">"# Environment\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
270
- <p class="mis show_mis"><span class="n"><a id="t188" href="#t188">188</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="str">".env\n"</span><span class="op">)</span>&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="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="str">".venv\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
272
- <p class="mis show_mis"><span class="n"><a id="t190" href="#t190">190</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="str">"env/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
273
- <p class="mis show_mis"><span class="n"><a id="t191" href="#t191">191</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="str">"venv/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
274
- <p class="mis show_mis"><span class="n"><a id="t192" href="#t192">192</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="str">"ENV/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
275
- <p class="mis show_mis"><span class="n"><a id="t193" href="#t193">193</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="str">"env.bak/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
276
- <p class="mis show_mis"><span class="n"><a id="t194" href="#t194">194</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="str">"venv.bak/\n\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
277
- <p class="mis show_mis"><span class="n"><a id="t195" href="#t195">195</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="str">"# GolfMCP\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
278
- <p class="mis show_mis"><span class="n"><a id="t196" href="#t196">196</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="str">".golf/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
279
- <p class="mis show_mis"><span class="n"><a id="t197" href="#t197">197</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="str">"dist/\n"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
280
- <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
281
- <p class="pln"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
282
- <p class="mis show_mis"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"><span class="key">def</span> <span class="nam">_prompt_for_telemetry_consent</span><span class="op">(</span><span class="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
283
- <p class="pln"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"> <span class="str">"""Prompt user for telemetry consent and save their preference."""</span>&nbsp;</span><span class="r"></span></p>
284
- <p class="mis show_mis"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t"> <span class="key">import</span> <span class="nam">os</span>&nbsp;</span><span class="r"></span></p>
285
- <p class="pln"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
286
- <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"> <span class="com"># Skip prompt in test mode, when telemetry is explicitly disabled, or if</span>&nbsp;</span><span class="r"></span></p>
287
- <p class="pln"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t"> <span class="com"># preference already exists</span>&nbsp;</span><span class="r"></span></p>
288
- <p class="mis show_mis"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">environ</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="str">"GOLF_TEST_MODE"</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span> <span class="key">in</span> <span class="op">(</span><span class="str">"1"</span><span class="op">,</span> <span class="str">"true"</span><span class="op">,</span> <span class="str">"yes"</span><span class="op">,</span> <span class="str">"on"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
289
- <p class="mis show_mis"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"> <span class="key">return</span>&nbsp;</span><span class="r"></span></p>
290
- <p class="pln"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
291
- <p class="pln"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t"> <span class="com"># Skip if telemetry is explicitly disabled in environment</span>&nbsp;</span><span class="r"></span></p>
292
- <p class="mis show_mis"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">environ</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="str">"GOLF_TELEMETRY"</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span> <span class="key">in</span> <span class="op">(</span><span class="str">"0"</span><span class="op">,</span> <span class="str">"false"</span><span class="op">,</span> <span class="str">"no"</span><span class="op">,</span> <span class="str">"off"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
293
- <p class="mis show_mis"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"> <span class="key">return</span>&nbsp;</span><span class="r"></span></p>
294
- <p class="pln"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
295
- <p class="pln"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"> <span class="com"># Check if user already has a saved preference</span>&nbsp;</span><span class="r"></span></p>
296
- <p class="mis show_mis"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t"> <span class="nam">existing_preference</span> <span class="op">=</span> <span class="nam">load_telemetry_preference</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
297
- <p class="mis show_mis"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"> <span class="key">if</span> <span class="nam">existing_preference</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>
298
- <p class="mis show_mis"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t"> <span class="key">return</span> <span class="com"># User already made a choice</span>&nbsp;</span><span class="r"></span></p>
299
- <p class="pln"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
300
- <p class="mis show_mis"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
301
- <p class="mis show_mis"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">rule</span><span class="op">(</span><span class="str">"[bold blue]Anonymous usage analytics[/bold blue]"</span><span class="op">,</span> <span class="nam">style</span><span class="op">=</span><span class="str">"blue"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
302
- <p class="mis show_mis"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
303
- <p class="mis show_mis"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"Golf can collect [bold]anonymous usage analytics[/bold] to help improve the tool."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
304
- <p class="mis show_mis"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
305
- <p class="mis show_mis"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"[dim]What we collect:[/dim]"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
306
- <p class="mis show_mis"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Command usage (init, build, run)"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
307
- <p class="mis show_mis"><span class="n"><a id="t225" href="#t225">225</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Error types (to fix bugs)"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
308
- <p class="mis show_mis"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Golf version and Python version"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
309
- <p class="mis show_mis"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Operating system type"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
310
- <p class="mis show_mis"><span class="n"><a id="t228" href="#t228">228</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
311
- <p class="mis show_mis"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"[dim]What we DON'T collect:[/dim]"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
312
- <p class="mis show_mis"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Your code or project content"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
313
- <p class="mis show_mis"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; File paths or project names"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
314
- <p class="mis show_mis"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; Personal information"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
315
- <p class="mis show_mis"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">" &#8226; IP addresses"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
316
- <p class="mis show_mis"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
317
- <p class="mis show_mis"><span class="n"><a id="t235" href="#t235">235</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"You can change this anytime by setting GOLF_TELEMETRY=0 in your environment."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
318
- <p class="mis show_mis"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
319
- <p class="pln"><span class="n"><a id="t237" href="#t237">237</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
320
- <p class="mis show_mis"><span class="n"><a id="t238" href="#t238">238</a></span><span class="t"> <span class="nam">enable_telemetry</span> <span class="op">=</span> <span class="nam">Confirm</span><span class="op">.</span><span class="nam">ask</span><span class="op">(</span><span class="str">"[bold]Enable anonymous usage analytics?[/bold]"</span><span class="op">,</span> <span class="nam">default</span><span class="op">=</span><span class="key">False</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
321
- <p class="pln"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
322
- <p class="mis show_mis"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t"> <span class="nam">set_telemetry_enabled</span><span class="op">(</span><span class="nam">enable_telemetry</span><span class="op">,</span> <span class="nam">persist</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
323
- <p class="pln"><span class="n"><a id="t241" href="#t241">241</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
324
- <p class="mis show_mis"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"> <span class="key">if</span> <span class="nam">enable_telemetry</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
325
- <p class="mis show_mis"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"[green]&#10003;[/green] Anonymous analytics enabled"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
326
- <p class="pln"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
327
- <p class="mis show_mis"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="str">"[yellow]&#9675;[/yellow] Anonymous analytics disabled"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
328
- <p class="mis show_mis"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t"> <span class="nam">console</span><span class="op">.</span><span class="nam">print</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
329
- <p class="pln"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
330
- <p class="pln"><span class="n"><a id="t248" href="#t248">248</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
331
- <p class="mis show_mis"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t"><span class="key">def</span> <span class="nam">_is_text_file</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">Path</span><span class="op">)</span> <span class="op">-></span> <span class="nam">bool</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
332
- <p class="pln"><span class="n"><a id="t250" href="#t250">250</a></span><span class="t"> <span class="str">"""Check if a file is a text file that needs variable substitution.</span>&nbsp;</span><span class="r"></span></p>
333
- <p class="pln"><span class="n"><a id="t251" href="#t251">251</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
334
- <p class="pln"><span class="n"><a id="t252" href="#t252">252</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
335
- <p class="pln"><span class="n"><a id="t253" href="#t253">253</a></span><span class="t"><span class="str"> path: Path to check</span>&nbsp;</span><span class="r"></span></p>
336
- <p class="pln"><span class="n"><a id="t254" href="#t254">254</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
337
- <p class="pln"><span class="n"><a id="t255" href="#t255">255</a></span><span class="t"><span class="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
338
- <p class="pln"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"><span class="str"> True if the file is a text file</span>&nbsp;</span><span class="r"></span></p>
339
- <p class="pln"><span class="n"><a id="t257" href="#t257">257</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
340
- <p class="pln"><span class="n"><a id="t258" href="#t258">258</a></span><span class="t"> <span class="com"># List of known text file extensions</span>&nbsp;</span><span class="r"></span></p>
341
- <p class="mis show_mis"><span class="n"><a id="t259" href="#t259">259</a></span><span class="t"> <span class="nam">text_extensions</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
342
- <p class="pln"><span class="n"><a id="t260" href="#t260">260</a></span><span class="t"> <span class="str">".py"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
343
- <p class="pln"><span class="n"><a id="t261" href="#t261">261</a></span><span class="t"> <span class="str">".md"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
344
- <p class="pln"><span class="n"><a id="t262" href="#t262">262</a></span><span class="t"> <span class="str">".txt"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
345
- <p class="pln"><span class="n"><a id="t263" href="#t263">263</a></span><span class="t"> <span class="str">".html"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
346
- <p class="pln"><span class="n"><a id="t264" href="#t264">264</a></span><span class="t"> <span class="str">".css"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
347
- <p class="pln"><span class="n"><a id="t265" href="#t265">265</a></span><span class="t"> <span class="str">".js"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
348
- <p class="pln"><span class="n"><a id="t266" href="#t266">266</a></span><span class="t"> <span class="str">".json"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
349
- <p class="pln"><span class="n"><a id="t267" href="#t267">267</a></span><span class="t"> <span class="str">".yml"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
350
- <p class="pln"><span class="n"><a id="t268" href="#t268">268</a></span><span class="t"> <span class="str">".yaml"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
351
- <p class="pln"><span class="n"><a id="t269" href="#t269">269</a></span><span class="t"> <span class="str">".toml"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
352
- <p class="pln"><span class="n"><a id="t270" href="#t270">270</a></span><span class="t"> <span class="str">".ini"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
353
- <p class="pln"><span class="n"><a id="t271" href="#t271">271</a></span><span class="t"> <span class="str">".cfg"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
354
- <p class="pln"><span class="n"><a id="t272" href="#t272">272</a></span><span class="t"> <span class="str">".env"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
355
- <p class="pln"><span class="n"><a id="t273" href="#t273">273</a></span><span class="t"> <span class="str">".example"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
356
- <p class="pln"><span class="n"><a id="t274" href="#t274">274</a></span><span class="t"> <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
357
- <p class="pln"><span class="n"><a id="t275" href="#t275">275</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
358
- <p class="pln"><span class="n"><a id="t276" href="#t276">276</a></span><span class="t"> <span class="com"># Check if the file has a text extension</span>&nbsp;</span><span class="r"></span></p>
359
- <p class="mis show_mis"><span class="n"><a id="t277" href="#t277">277</a></span><span class="t"> <span class="key">if</span> <span class="nam">path</span><span class="op">.</span><span class="nam">suffix</span> <span class="key">in</span> <span class="nam">text_extensions</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
360
- <p class="mis show_mis"><span class="n"><a id="t278" href="#t278">278</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span>&nbsp;</span><span class="r"></span></p>
361
- <p class="pln"><span class="n"><a id="t279" href="#t279">279</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
362
- <p class="pln"><span class="n"><a id="t280" href="#t280">280</a></span><span class="t"> <span class="com"># Check specific filenames without extensions</span>&nbsp;</span><span class="r"></span></p>
363
- <p class="mis show_mis"><span class="n"><a id="t281" href="#t281">281</a></span><span class="t"> <span class="key">if</span> <span class="nam">path</span><span class="op">.</span><span class="nam">name</span> <span class="key">in</span> <span class="op">{</span><span class="str">".gitignore"</span><span class="op">,</span> <span class="str">"README"</span><span class="op">,</span> <span class="str">"LICENSE"</span><span class="op">}</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
364
- <p class="mis show_mis"><span class="n"><a id="t282" href="#t282">282</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span>&nbsp;</span><span class="r"></span></p>
365
- <p class="pln"><span class="n"><a id="t283" href="#t283">283</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
366
- <p class="pln"><span class="n"><a id="t284" href="#t284">284</a></span><span class="t"> <span class="com"># Try to detect if it's a text file by reading a bit of it</span>&nbsp;</span><span class="r"></span></p>
367
- <p class="mis show_mis"><span class="n"><a id="t285" href="#t285">285</a></span><span class="t"> <span class="key">try</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
368
- <p class="mis show_mis"><span class="n"><a id="t286" href="#t286">286</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">encoding</span><span class="op">=</span><span class="str">"utf-8"</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>
369
- <p class="mis show_mis"><span class="n"><a id="t287" href="#t287">287</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="num">1024</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
370
- <p class="mis show_mis"><span class="n"><a id="t288" href="#t288">288</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span>&nbsp;</span><span class="r"></span></p>
371
- <p class="mis show_mis"><span class="n"><a id="t289" href="#t289">289</a></span><span class="t"> <span class="key">except</span> <span class="nam">UnicodeDecodeError</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
372
- <p class="mis show_mis"><span class="n"><a id="t290" href="#t290">290</a></span><span class="t"> <span class="key">return</span> <span class="key">False</span>&nbsp;</span><span class="r"></span></p>
373
- </main>
374
- <footer>
375
- <div class="content">
376
- <p>
377
- <a class="nav" href="z_6cadab9ec0df475d_build_py.html">&#xab; prev</a> &nbsp; &nbsp;
378
- <a class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
379
- <a class="nav" href="z_6cadab9ec0df475d_run_py.html">&#xbb; next</a>
380
- &nbsp; &nbsp; &nbsp;
381
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
382
- created at 2025-08-16 18:46 +0200
383
- </p>
384
- </div>
385
- </footer>
386
- </body>
387
- </html>