golf-mcp 0.1.20__py3-none-any.whl → 0.2.1__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.
- golf/__init__.py +9 -1
- golf/_endpoints.py +6 -0
- golf/_endpoints_fallback.py +10 -0
- golf/auth/__init__.py +235 -83
- golf/auth/api_key.py +6 -14
- golf/auth/factory.py +358 -0
- golf/auth/helpers.py +12 -42
- golf/auth/providers.py +446 -0
- golf/auth/registry.py +256 -0
- golf/cli/branding.py +192 -0
- golf/cli/main.py +28 -69
- golf/commands/__init__.py +2 -0
- golf/commands/build.py +4 -7
- golf/commands/init.py +30 -53
- golf/commands/run.py +50 -20
- golf/core/builder.py +355 -414
- golf/core/builder_auth.py +63 -144
- golf/core/builder_telemetry.py +26 -3
- golf/core/config.py +38 -59
- golf/core/parser.py +132 -139
- golf/core/platform.py +12 -10
- golf/core/telemetry.py +11 -19
- golf/core/transformer.py +38 -15
- golf/examples/__pycache__/__init__.cpython-311.pyc +0 -0
- golf/examples/basic/.coverage +0 -0
- golf/examples/basic/.env.example +8 -4
- golf/examples/basic/README.md +117 -45
- golf/examples/basic/__pycache__/auth.cpython-311.pyc +0 -0
- golf/examples/basic/auth.py +76 -0
- golf/examples/basic/golf.json +2 -5
- golf/examples/basic/htmlcov/.gitignore +2 -0
- golf/examples/basic/htmlcov/class_index.html +547 -0
- golf/examples/basic/htmlcov/coverage_html_cb_6fb7b396.js +733 -0
- golf/examples/basic/htmlcov/favicon_32_cb_58284776.png +0 -0
- golf/examples/basic/htmlcov/function_index.html +2091 -0
- golf/examples/basic/htmlcov/index.html +349 -0
- golf/examples/basic/htmlcov/keybd_closed_cb_ce680311.png +0 -0
- golf/examples/basic/htmlcov/status.json +1 -0
- golf/examples/basic/htmlcov/style_cb_8e611ae1.css +337 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496___init___py.html +323 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_api_key_py.html +170 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_factory_py.html +430 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_helpers_py.html +288 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_providers_py.html +493 -0
- golf/examples/basic/htmlcov/z_1c9a91c0e91c8496_registry_py.html +353 -0
- golf/examples/basic/htmlcov/z_3ec3b3f490dc0950___init___py.html +120 -0
- golf/examples/basic/htmlcov/z_3ec3b3f490dc0950_instrumentation_py.html +1535 -0
- golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db___init___py.html +98 -0
- golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_branding_py.html +289 -0
- golf/examples/basic/htmlcov/z_4b8b9dd4ccccc5db_main_py.html +476 -0
- golf/examples/basic/htmlcov/z_5a6c4e6bcc86fb2f___init___py.html +97 -0
- golf/examples/basic/htmlcov/z_6cadab9ec0df475d___init___py.html +102 -0
- golf/examples/basic/htmlcov/z_6cadab9ec0df475d_build_py.html +178 -0
- golf/examples/basic/htmlcov/z_6cadab9ec0df475d_init_py.html +387 -0
- golf/examples/basic/htmlcov/z_6cadab9ec0df475d_run_py.html +222 -0
- golf/examples/basic/htmlcov/z_6fcdee0582ba84e4___init___py.html +106 -0
- golf/examples/basic/htmlcov/z_6fcdee0582ba84e4__endpoints_fallback_py.html +107 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217___init___py.html +98 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_auth_py.html +306 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_metrics_py.html +329 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_py.html +1471 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_builder_telemetry_py.html +186 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_config_py.html +315 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_parser_py.html +1149 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_platform_py.html +279 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_telemetry_py.html +589 -0
- golf/examples/basic/htmlcov/z_7ba499ed22986217_transformer_py.html +286 -0
- golf/examples/basic/htmlcov/z_7d7da37693a43688___init___py.html +107 -0
- golf/examples/basic/htmlcov/z_7d7da37693a43688_collector_py.html +417 -0
- golf/examples/basic/htmlcov/z_7d7da37693a43688_registry_py.html +109 -0
- golf/examples/basic/htmlcov/z_abe733142b40ad4e___init___py.html +109 -0
- golf/examples/basic/htmlcov/z_abe733142b40ad4e_context_py.html +150 -0
- golf/examples/basic/htmlcov/z_abe733142b40ad4e_elicitation_py.html +267 -0
- golf/examples/basic/htmlcov/z_abe733142b40ad4e_sampling_py.html +318 -0
- golf/examples/basic/prompts/__pycache__/welcome.cpython-311.pyc +0 -0
- golf/examples/basic/prompts/welcome.py +3 -5
- golf/examples/basic/resources/__pycache__/current_time.cpython-311.pyc +0 -0
- golf/examples/basic/resources/__pycache__/info.cpython-311.pyc +0 -0
- golf/examples/basic/resources/current_time.py +5 -13
- golf/examples/basic/resources/weather/__pycache__/common.cpython-311.pyc +0 -0
- golf/examples/basic/resources/weather/__pycache__/current.cpython-311.pyc +0 -0
- golf/examples/basic/resources/weather/__pycache__/forecast.cpython-311.pyc +0 -0
- golf/examples/basic/resources/weather/city.py +46 -0
- golf/examples/basic/resources/weather/common.py +4 -11
- golf/examples/basic/resources/weather/current.py +5 -5
- golf/examples/basic/resources/weather/forecast.py +5 -5
- golf/examples/basic/tools/__pycache__/calculator.cpython-311.pyc +0 -0
- golf/examples/basic/tools/calculator.py +94 -0
- golf/examples/basic/tools/say/__pycache__/hello.cpython-311.pyc +0 -0
- golf/examples/basic/tools/say/hello.py +65 -0
- golf/metrics/collector.py +100 -19
- golf/telemetry/__init__.py +4 -0
- golf/telemetry/instrumentation.py +484 -178
- golf/utilities/__init__.py +12 -0
- golf/utilities/context.py +53 -0
- golf/utilities/elicitation.py +170 -0
- golf/utilities/sampling.py +221 -0
- {golf_mcp-0.1.20.dist-info → golf_mcp-0.2.1.dist-info}/METADATA +51 -104
- golf_mcp-0.2.1.dist-info/RECORD +110 -0
- golf/auth/oauth.py +0 -861
- golf/auth/provider.py +0 -115
- golf/examples/api_key/.env +0 -2
- golf/examples/api_key/.env.example +0 -1
- golf/examples/api_key/README.md +0 -84
- golf/examples/api_key/golf.json +0 -8
- golf/examples/api_key/pre_build.py +0 -11
- golf/examples/api_key/tools/issues/create.py +0 -93
- golf/examples/api_key/tools/issues/list.py +0 -92
- golf/examples/api_key/tools/repos/list.py +0 -111
- golf/examples/api_key/tools/search/code.py +0 -106
- golf/examples/api_key/tools/users/get.py +0 -82
- golf/examples/basic/.env +0 -5
- golf/examples/basic/pre_build.py +0 -28
- golf/examples/basic/tools/github_user.py +0 -65
- golf/examples/basic/tools/hello.py +0 -34
- golf/examples/basic/tools/payments/charge.py +0 -70
- golf/examples/basic/tools/payments/common.py +0 -36
- golf/examples/basic/tools/payments/refund.py +0 -61
- golf_mcp-0.1.20.dist-info/RECORD +0 -60
- {golf_mcp-0.1.20.dist-info → golf_mcp-0.2.1.dist-info}/WHEEL +0 -0
- {golf_mcp-0.1.20.dist-info → golf_mcp-0.2.1.dist-info}/entry_points.txt +0 -0
- {golf_mcp-0.1.20.dist-info → golf_mcp-0.2.1.dist-info}/licenses/LICENSE +0 -0
- {golf_mcp-0.1.20.dist-info → golf_mcp-0.2.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,288 @@
|
|
|
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/auth/helpers.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/auth/helpers.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
|
+
toggle line displays
|
|
30
|
+
</p>
|
|
31
|
+
<p>
|
|
32
|
+
<kbd>j</kbd>
|
|
33
|
+
<kbd>k</kbd>
|
|
34
|
+
next/prev highlighted chunk
|
|
35
|
+
</p>
|
|
36
|
+
<p>
|
|
37
|
+
<kbd>0</kbd> (zero) top of page
|
|
38
|
+
</p>
|
|
39
|
+
<p>
|
|
40
|
+
<kbd>1</kbd> (one) first highlighted chunk
|
|
41
|
+
</p>
|
|
42
|
+
<p>
|
|
43
|
+
<kbd>[</kbd>
|
|
44
|
+
<kbd>]</kbd>
|
|
45
|
+
prev/next file
|
|
46
|
+
</p>
|
|
47
|
+
<p>
|
|
48
|
+
<kbd>u</kbd> up to the index
|
|
49
|
+
</p>
|
|
50
|
+
<p>
|
|
51
|
+
<kbd>?</kbd> show/hide this help
|
|
52
|
+
</p>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</aside>
|
|
56
|
+
<h2>
|
|
57
|
+
<span class="text">72 statements </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">72<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_1c9a91c0e91c8496_factory_py.html">« prev</a>
|
|
64
|
+
<a id="indexLink" class="nav" href="index.html">^ index</a>
|
|
65
|
+
<a id="nextFileLink" class="nav" href="z_1c9a91c0e91c8496_providers_py.html">» next</a>
|
|
66
|
+
|
|
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">"""Helper functions for working with authentication in MCP context."""</span> </span><span class="r"></span></p>
|
|
84
|
+
<p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> </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">contextvars</span> <span class="key">import</span> <span class="nam">ContextVar</span> </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">typing</span> <span class="key">import</span> <span class="nam">Any</span> </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><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">starlette</span><span class="op">.</span><span class="nam">requests</span> <span class="key">import</span> <span class="nam">Request</span> </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><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="com"># Context variable to store the current request's API key</span> </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="nam">_current_api_key</span><span class="op">:</span> <span class="nam">ContextVar</span><span class="op">[</span><span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">]</span> <span class="op">=</span> <span class="nam">ContextVar</span><span class="op">(</span><span class="str">"current_api_key"</span><span class="op">,</span> <span class="nam">default</span><span class="op">=</span><span class="key">None</span><span class="op">)</span> </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><span class="r"></span></p>
|
|
93
|
+
<p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> </span><span class="r"></span></p>
|
|
94
|
+
<p class="mis show_mis"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">def</span> <span class="nam">get_provider_token</span><span class="op">(</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">:</span> </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="str">"""</span> </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="str"> Get a provider token (legacy function - no longer supported in Golf 0.2.x).</span> </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><span class="r"></span></p>
|
|
98
|
+
<p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="str"> In Golf 0.2.x, use FastMCP's built-in auth providers for OAuth flows.</span> </span><span class="r"></span></p>
|
|
99
|
+
<p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="str"> This function returns None and is kept for backwards compatibility.</span> </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="str"> """</span> </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="com"># Legacy OAuth provider support removed in Golf 0.2.x</span> </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="com"># Use FastMCP 2.11+ auth providers instead</span> </span><span class="r"></span></p>
|
|
103
|
+
<p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="key">return</span> <span class="key">None</span> </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><span class="r"></span></p>
|
|
105
|
+
<p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> </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="key">def</span> <span class="nam">extract_token_from_header</span><span class="op">(</span><span class="nam">auth_header</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
107
|
+
<p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="str">"""Extract bearer token from Authorization header.</span> </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><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"> Args:</span> </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"> auth_header: Authorization header value</span> </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><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"> Returns:</span> </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"> Bearer token or None if not present/valid</span> </span><span class="r"></span></p>
|
|
114
|
+
<p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="str"> """</span> </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="key">if</span> <span class="key">not</span> <span class="nam">auth_header</span><span class="op">:</span> </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="key">return</span> <span class="key">None</span> </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><span class="r"></span></p>
|
|
118
|
+
<p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="nam">parts</span> <span class="op">=</span> <span class="nam">auth_header</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="op">)</span> </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">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">parts</span><span class="op">)</span> <span class="op">!=</span> <span class="num">2</span> <span class="key">or</span> <span class="nam">parts</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span> <span class="op">!=</span> <span class="str">"bearer"</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
120
|
+
<p class="mis show_mis"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="key">return</span> <span class="key">None</span> </span><span class="r"></span></p>
|
|
121
|
+
<p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> </span><span class="r"></span></p>
|
|
122
|
+
<p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="key">return</span> <span class="nam">parts</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> </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><span class="r"></span></p>
|
|
124
|
+
<p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> </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">def</span> <span class="nam">set_api_key</span><span class="op">(</span><span class="nam">api_key</span><span class="op">:</span> <span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
126
|
+
<p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="str">"""Set the API key for the current request context.</span> </span><span class="r"></span></p>
|
|
127
|
+
<p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> </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"> This is an internal function used by the middleware.</span> </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><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="str"> Args:</span> </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="str"> api_key: The API key to store in the context</span> </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="str"> """</span> </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">_current_api_key</span><span class="op">.</span><span class="nam">set</span><span class="op">(</span><span class="nam">api_key</span><span class="op">)</span> </span><span class="r"></span></p>
|
|
134
|
+
<p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> </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><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">def</span> <span class="nam">get_api_key</span><span class="op">(</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">:</span> </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">"""Get the API key from the current request context.</span> </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><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="str"> This function should be used in tools to retrieve the API key</span> </span><span class="r"></span></p>
|
|
140
|
+
<p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str"> that was sent in the request headers.</span> </span><span class="r"></span></p>
|
|
141
|
+
<p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> </span><span class="r"></span></p>
|
|
142
|
+
<p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="str"> Returns:</span> </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="str"> The API key if available, None otherwise</span> </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><span class="r"></span></p>
|
|
145
|
+
<p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str"> Example:</span> </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="str"> # In a tool file</span> </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="str"> from golf.auth import get_api_key</span> </span><span class="r"></span></p>
|
|
148
|
+
<p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> </span><span class="r"></span></p>
|
|
149
|
+
<p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="str"> async def call_api():</span> </span><span class="r"></span></p>
|
|
150
|
+
<p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"><span class="str"> api_key = get_api_key()</span> </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="str"> if not api_key:</span> </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="str"> return {"error": "No API key provided"}</span> </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><span class="r"></span></p>
|
|
154
|
+
<p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="str"> # Use the API key in your request</span> </span><span class="r"></span></p>
|
|
155
|
+
<p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"><span class="str"> headers = {"Authorization": f"Bearer {api_key}"}</span> </span><span class="r"></span></p>
|
|
156
|
+
<p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"><span class="str"> ...</span> </span><span class="r"></span></p>
|
|
157
|
+
<p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"><span class="str"> """</span> </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="com"># Try to get directly from HTTP request if available (FastMCP pattern)</span> </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">try</span><span class="op">:</span> </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="com"># This follows the FastMCP pattern for accessing HTTP requests</span> </span><span class="r"></span></p>
|
|
161
|
+
<p class="mis show_mis"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="key">from</span> <span class="nam">fastmcp</span><span class="op">.</span><span class="nam">server</span><span class="op">.</span><span class="nam">dependencies</span> <span class="key">import</span> <span class="nam">get_http_request</span> </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><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="nam">request</span> <span class="op">=</span> <span class="nam">get_http_request</span><span class="op">(</span><span class="op">)</span> </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><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">request</span> <span class="key">and</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">request</span><span class="op">,</span> <span class="str">"state"</span><span class="op">)</span> <span class="key">and</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">request</span><span class="op">.</span><span class="nam">state</span><span class="op">,</span> <span class="str">"api_key"</span><span class="op">)</span><span class="op">:</span> </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">api_key</span> <span class="op">=</span> <span class="nam">request</span><span class="op">.</span><span class="nam">state</span><span class="op">.</span><span class="nam">api_key</span> </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">return</span> <span class="nam">api_key</span> </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><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="com"># Get the API key configuration</span> </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">from</span> <span class="nam">golf</span><span class="op">.</span><span class="nam">auth</span><span class="op">.</span><span class="nam">api_key</span> <span class="key">import</span> <span class="nam">get_api_key_config</span> </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><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="nam">api_key_config</span> <span class="op">=</span> <span class="nam">get_api_key_config</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p>
|
|
173
|
+
<p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> </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">if</span> <span class="nam">api_key_config</span> <span class="key">and</span> <span class="nam">request</span><span class="op">:</span> </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"># Extract API key from headers</span> </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">header_name</span> <span class="op">=</span> <span class="nam">api_key_config</span><span class="op">.</span><span class="nam">header_name</span> </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="nam">header_prefix</span> <span class="op">=</span> <span class="nam">api_key_config</span><span class="op">.</span><span class="nam">header_prefix</span> </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><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="com"># Case-insensitive header lookup</span> </span><span class="r"></span></p>
|
|
180
|
+
<p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="nam">api_key</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p>
|
|
181
|
+
<p class="mis show_mis"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> <span class="key">for</span> <span class="nam">k</span><span class="op">,</span> <span class="nam">v</span> <span class="key">in</span> <span class="nam">request</span><span class="op">.</span><span class="nam">headers</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </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="key">if</span> <span class="nam">k</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="nam">header_name</span><span class="op">.</span><span class="nam">lower</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </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">api_key</span> <span class="op">=</span> <span class="nam">v</span> </span><span class="r"></span></p>
|
|
184
|
+
<p class="mis show_mis"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="key">break</span> </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><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="com"># Strip prefix if configured</span> </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="key">if</span> <span class="nam">api_key</span> <span class="key">and</span> <span class="nam">header_prefix</span> <span class="key">and</span> <span class="nam">api_key</span><span class="op">.</span><span class="nam">startswith</span><span class="op">(</span><span class="nam">header_prefix</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
188
|
+
<p class="mis show_mis"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> <span class="nam">api_key</span> <span class="op">=</span> <span class="nam">api_key</span><span class="op">[</span><span class="nam">len</span><span class="op">(</span><span class="nam">header_prefix</span><span class="op">)</span> <span class="op">:</span><span class="op">]</span> </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><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="key">if</span> <span class="nam">api_key</span><span class="op">:</span> </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">return</span> <span class="nam">api_key</span> </span><span class="r"></span></p>
|
|
192
|
+
<p class="mis show_mis"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"> <span class="key">except</span> <span class="op">(</span><span class="nam">ImportError</span><span class="op">,</span> <span class="nam">RuntimeError</span><span class="op">)</span><span class="op">:</span> </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="com"># FastMCP not available or not in HTTP context</span> </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="key">pass</span> </span><span class="r"></span></p>
|
|
195
|
+
<p class="mis show_mis"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span><span class="op">:</span> </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="key">pass</span> </span><span class="r"></span></p>
|
|
197
|
+
<p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> </span><span class="r"></span></p>
|
|
198
|
+
<p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> <span class="com"># Final fallback: environment variable (for development/testing)</span> </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">import</span> <span class="nam">os</span> </span><span class="r"></span></p>
|
|
200
|
+
<p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> </span><span class="r"></span></p>
|
|
201
|
+
<p class="mis show_mis"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"> <span class="nam">env_api_key</span> <span class="op">=</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">"API_KEY"</span><span class="op">)</span> </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">if</span> <span class="nam">env_api_key</span><span class="op">:</span> </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">return</span> <span class="nam">env_api_key</span> </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><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="key">return</span> <span class="key">None</span> </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><span class="r"></span></p>
|
|
207
|
+
<p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> </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="key">def</span> <span class="nam">get_api_key_from_request</span><span class="op">(</span><span class="nam">request</span><span class="op">:</span> <span class="nam">Request</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span> <span class="op">|</span> <span class="key">None</span><span class="op">:</span> </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">"""Get the API key from a specific request object.</span> </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><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="str"> This is useful when you have direct access to the request object.</span> </span><span class="r"></span></p>
|
|
212
|
+
<p class="pln"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"> </span><span class="r"></span></p>
|
|
213
|
+
<p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"><span class="str"> Args:</span> </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="str"> request: The Starlette Request object</span> </span><span class="r"></span></p>
|
|
215
|
+
<p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"> </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="str"> Returns:</span> </span><span class="r"></span></p>
|
|
217
|
+
<p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"><span class="str"> The API key if available, None otherwise</span> </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="str"> """</span> </span><span class="r"></span></p>
|
|
219
|
+
<p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"> <span class="com"># Check request state first (set by our middleware)</span> </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">if</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">request</span><span class="op">,</span> <span class="str">"state"</span><span class="op">)</span> <span class="key">and</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">request</span><span class="op">.</span><span class="nam">state</span><span class="op">,</span> <span class="str">"api_key"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
221
|
+
<p class="mis show_mis"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"> <span class="key">return</span> <span class="nam">request</span><span class="op">.</span><span class="nam">state</span><span class="op">.</span><span class="nam">api_key</span> </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><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="com"># Fall back to context variable</span> </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="key">return</span> <span class="nam">_current_api_key</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p>
|
|
225
|
+
<p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"> </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><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="key">def</span> <span class="nam">debug_api_key_context</span><span class="op">(</span><span class="op">)</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">Any</span><span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p>
|
|
228
|
+
<p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> <span class="str">"""Debug function to inspect API key context.</span> </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><span class="r"></span></p>
|
|
230
|
+
<p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"><span class="str"> Returns a dictionary with debugging information about the current</span> </span><span class="r"></span></p>
|
|
231
|
+
<p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"><span class="str"> API key context. Useful for troubleshooting authentication issues.</span> </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><span class="r"></span></p>
|
|
233
|
+
<p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"><span class="str"> Returns:</span> </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="str"> Dictionary with debug information</span> </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="str"> """</span> </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="key">import</span> <span class="nam">asyncio</span> </span><span class="r"></span></p>
|
|
237
|
+
<p class="mis show_mis"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"> <span class="key">import</span> <span class="nam">os</span> </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">import</span> <span class="nam">sys</span> </span><span class="r"></span></p>
|
|
239
|
+
<p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"> </span><span class="r"></span></p>
|
|
240
|
+
<p class="mis show_mis"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="nam">debug_info</span> <span class="op">=</span> <span class="op">{</span> </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="str">"context_var_value"</span><span class="op">:</span> <span class="nam">_current_api_key</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </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="str">"has_async_task"</span><span class="op">:</span> <span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p>
|
|
243
|
+
<p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"> <span class="str">"task_id"</span><span class="op">:</span> <span class="key">None</span><span class="op">,</span> </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="str">"main_module_has_storage"</span><span class="op">:</span> <span class="key">False</span><span class="op">,</span> </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="str">"main_module_has_context"</span><span class="op">:</span> <span class="key">False</span><span class="op">,</span> </span><span class="r"></span></p>
|
|
246
|
+
<p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> <span class="str">"request_id_from_context"</span><span class="op">:</span> <span class="key">None</span><span class="op">,</span> </span><span class="r"></span></p>
|
|
247
|
+
<p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"> <span class="str">"env_vars"</span><span class="op">:</span> <span class="op">{</span> </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="str">"API_KEY"</span><span class="op">:</span> <span class="nam">bool</span><span class="op">(</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">"API_KEY"</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
|
249
|
+
<p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"> <span class="str">"GOLF_API_KEY_DEBUG"</span><span class="op">:</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_API_KEY_DEBUG"</span><span class="op">,</span> <span class="str">"false"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
|
250
|
+
<p class="pln"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </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="op">}</span> </span><span class="r"></span></p>
|
|
252
|
+
<p class="pln"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"> </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">try</span><span class="op">:</span> </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">task</span> <span class="op">=</span> <span class="nam">asyncio</span><span class="op">.</span><span class="nam">current_task</span><span class="op">(</span><span class="op">)</span> </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="key">if</span> <span class="nam">task</span><span class="op">:</span> </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">debug_info</span><span class="op">[</span><span class="str">"has_async_task"</span><span class="op">]</span> <span class="op">=</span> <span class="key">True</span> </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">debug_info</span><span class="op">[</span><span class="str">"task_id"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">id</span><span class="op">(</span><span class="nam">task</span><span class="op">)</span> </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="key">except</span> <span class="nam">Exception</span><span class="op">:</span> </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="key">pass</span> </span><span class="r"></span></p>
|
|
260
|
+
<p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"> </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="key">try</span><span class="op">:</span> </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">main_module</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="str">"__main__"</span><span class="op">)</span> </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="key">if</span> <span class="nam">main_module</span><span class="op">:</span> </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">debug_info</span><span class="op">[</span><span class="str">"main_module_has_storage"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">main_module</span><span class="op">,</span> <span class="str">"api_key_storage"</span><span class="op">)</span> </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">debug_info</span><span class="op">[</span><span class="str">"main_module_has_context"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">main_module</span><span class="op">,</span> <span class="str">"request_id_context"</span><span class="op">)</span> </span><span class="r"></span></p>
|
|
266
|
+
<p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"> </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="key">if</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">main_module</span><span class="op">,</span> <span class="str">"request_id_context"</span><span class="op">)</span><span class="op">:</span> </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">request_id_context</span> <span class="op">=</span> <span class="nam">main_module</span><span class="op">.</span><span class="nam">request_id_context</span> </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">debug_info</span><span class="op">[</span><span class="str">"request_id_from_context"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">request_id_context</span><span class="op">.</span><span class="nam">get</span><span class="op">(</span><span class="op">)</span> </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="key">except</span> <span class="nam">Exception</span><span class="op">:</span> </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">pass</span> </span><span class="r"></span></p>
|
|
272
|
+
<p class="pln"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> </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="key">return</span> <span class="nam">debug_info</span> </span><span class="r"></span></p>
|
|
274
|
+
</main>
|
|
275
|
+
<footer>
|
|
276
|
+
<div class="content">
|
|
277
|
+
<p>
|
|
278
|
+
<a class="nav" href="z_1c9a91c0e91c8496_factory_py.html">« prev</a>
|
|
279
|
+
<a class="nav" href="index.html">^ index</a>
|
|
280
|
+
<a class="nav" href="z_1c9a91c0e91c8496_providers_py.html">» next</a>
|
|
281
|
+
|
|
282
|
+
<a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
|
|
283
|
+
created at 2025-08-16 18:46 +0200
|
|
284
|
+
</p>
|
|
285
|
+
</div>
|
|
286
|
+
</footer>
|
|
287
|
+
</body>
|
|
288
|
+
</html>
|