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,353 +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/auth/registry.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/registry.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">71 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">71<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_providers_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_4b8b9dd4ccccc5db___init___py.html">&#xbb; next</a>
66
- &nbsp; &nbsp; &nbsp;
67
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
68
- created at 2025-08-16 18:46 +0200
69
- </p>
70
- <aside class="hidden">
71
- <button type="button" class="button_next_chunk" data-shortcut="j"></button>
72
- <button type="button" class="button_prev_chunk" data-shortcut="k"></button>
73
- <button type="button" class="button_top_of_page" data-shortcut="0"></button>
74
- <button type="button" class="button_first_chunk" data-shortcut="1"></button>
75
- <button type="button" class="button_prev_file" data-shortcut="["></button>
76
- <button type="button" class="button_next_file" data-shortcut="]"></button>
77
- <button type="button" class="button_to_index" data-shortcut="u"></button>
78
- <button type="button" class="button_show_hide_help" data-shortcut="?"></button>
79
- </aside>
80
- </div>
81
- </header>
82
- <main id="source">
83
- <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""Provider registry system for extensible authentication providers.</span>&nbsp;</span><span class="r"></span></p>
84
- <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
85
- <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="str">This module provides a registry-based dispatch system that allows custom</span>&nbsp;</span><span class="r"></span></p>
86
- <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str">authentication providers to be added without modifying the core factory code.</span>&nbsp;</span><span class="r"></span></p>
87
- <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
88
- <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
89
- <p class="mis show_mis"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="nam">Protocol</span><span class="op">,</span> <span class="nam">TYPE_CHECKING</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">abc</span> <span class="key">import</span> <span class="nam">ABC</span><span class="op">,</span> <span class="nam">abstractmethod</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">if</span> <span class="nam">TYPE_CHECKING</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
93
- <p class="mis show_mis"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">from</span> <span class="nam">fastmcp</span><span class="op">.</span><span class="nam">server</span><span class="op">.</span><span class="nam">auth</span><span class="op">.</span><span class="nam">auth</span> <span class="key">import</span> <span class="nam">AuthProvider</span>&nbsp;</span><span class="r"></span></p>
94
- <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
95
- <p class="mis show_mis"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">providers</span> <span class="key">import</span> <span class="nam">AuthConfig</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">&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">&nbsp;</span><span class="r"></span></p>
98
- <p class="mis show_mis"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">class</span> <span class="nam">AuthProviderFactory</span><span class="op">(</span><span class="nam">Protocol</span><span class="op">)</span><span class="op">:</span>&nbsp;</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">"""Protocol for auth provider factory functions.</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">&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="str"> Custom provider factories must implement this interface to be compatible</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="str"> with the registry system.</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="str"> """</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">&nbsp;</span><span class="r"></span></p>
105
- <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</span><span class="op">)</span> <span class="op">-></span> <span class="str">"AuthProvider"</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
106
- <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="str">"""Create an AuthProvider from configuration.</span>&nbsp;</span><span class="r"></span></p>
107
- <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
108
- <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
109
- <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str"> config: Authentication configuration object</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">&nbsp;</span><span class="r"></span></p>
111
- <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
112
- <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str"> Configured FastMCP AuthProvider instance</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">&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"><span class="str"> Raises:</span>&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"> ValueError: If configuration is invalid</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"> ImportError: If required dependencies are missing</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"> """</span>&nbsp;</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="op">...</span>&nbsp;</span><span class="r"></span></p>
119
- <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">&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">&nbsp;</span><span class="r"></span></p>
121
- <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"><span class="key">class</span> <span class="nam">BaseProviderPlugin</span><span class="op">(</span><span class="nam">ABC</span><span class="op">)</span><span class="op">:</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"> <span class="str">"""Base class for auth provider plugins.</span>&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">&nbsp;</span><span class="r"></span></p>
124
- <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> Provider plugins can extend this class to provide both configuration</span>&nbsp;</span><span class="r"></span></p>
125
- <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"><span class="str"> and factory logic in a single cohesive unit.</span>&nbsp;</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"> """</span>&nbsp;</span><span class="r"></span></p>
127
- <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
128
- <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="op">@</span><span class="nam">property</span>&nbsp;</span><span class="r"></span></p>
129
- <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="op">@</span><span class="nam">abstractmethod</span>&nbsp;</span><span class="r"></span></p>
130
- <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="key">def</span> <span class="nam">provider_type</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</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="str">"""Return the provider type identifier."""</span>&nbsp;</span><span class="r"></span></p>
132
- <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="op">...</span>&nbsp;</span><span class="r"></span></p>
133
- <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
134
- <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="op">@</span><span class="nam">property</span>&nbsp;</span><span class="r"></span></p>
135
- <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="op">@</span><span class="nam">abstractmethod</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">def</span> <span class="nam">config_class</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> <span class="op">-></span> <span class="nam">type</span><span class="op">[</span><span class="nam">AuthConfig</span><span class="op">]</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">"""Return the configuration class for this provider."""</span>&nbsp;</span><span class="r"></span></p>
138
- <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <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">&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="op">@</span><span class="nam">abstractmethod</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="key">def</span> <span class="nam">create_provider</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</span><span class="op">)</span> <span class="op">-></span> <span class="str">"AuthProvider"</span><span class="op">:</span>&nbsp;</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">"""Create the auth provider from configuration.</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">&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="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
145
- <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str"> config: Authentication configuration (must be instance of config_class)</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="str"> Returns:</span>&nbsp;</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 class="str"> Configured FastMCP AuthProvider instance</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"><span class="str"> """</span>&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="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">&nbsp;</span><span class="r"></span></p>
152
- <p class="mis show_mis"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="key">def</span> <span class="nam">validate_config</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</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>
153
- <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="str">"""Validate the configuration before creating provider.</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="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"><span class="str"> Override this method to add custom validation logic.</span>&nbsp;</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"> Default implementation checks config is correct type.</span>&nbsp;</span><span class="r"></span></p>
157
- <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">&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"> Args:</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="str"> config: Configuration to validate</span>&nbsp;</span><span class="r"></span></p>
160
- <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
161
- <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"><span class="str"> Raises:</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="str"> ValueError: If configuration is invalid</span>&nbsp;</span><span class="r"></span></p>
163
- <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
164
- <p class="mis show_mis"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">config</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">config_class</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
165
- <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
166
- <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="str">f"Expected {self.config_class.__name__} for {self.provider_type} provider, got {type(config).__name__}"</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="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">&nbsp;</span><span class="r"></span></p>
169
- <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
170
- <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"><span class="key">class</span> <span class="nam">AuthProviderRegistry</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="str">"""Registry for authentication provider factories and plugins.</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">&nbsp;</span><span class="r"></span></p>
173
- <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"><span class="str"> This registry allows custom authentication providers to be registered</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"><span class="str"> without modifying the core factory code. Providers can be registered</span>&nbsp;</span><span class="r"></span></p>
175
- <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"><span class="str"> either as simple factory functions or as full plugin classes.</span>&nbsp;</span><span class="r"></span></p>
176
- <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"><span class="str"> """</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="mis show_mis"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</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>
179
- <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</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">AuthProviderFactory</span><span class="op">]</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span>&nbsp;</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">self</span><span class="op">.</span><span class="nam">_plugins</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">BaseProviderPlugin</span><span class="op">]</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
181
- <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t">&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="key">def</span> <span class="nam">register_factory</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">provider_type</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">factory</span><span class="op">:</span> <span class="nam">AuthProviderFactory</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>
183
- <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> <span class="str">"""Register a factory function for a provider type.</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="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
186
- <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="str"> provider_type: Unique identifier for the provider type</span>&nbsp;</span><span class="r"></span></p>
187
- <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"><span class="str"> factory: Factory function that creates providers</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="str"> Raises:</span>&nbsp;</span><span class="r"></span></p>
190
- <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"><span class="str"> ValueError: If provider_type is already registered</span>&nbsp;</span><span class="r"></span></p>
191
- <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"><span class="str"> """</span>&nbsp;</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">if</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span> <span class="key">or</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">:</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="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">f"Provider type '{provider_type}' is already registered"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
194
- <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t">&nbsp;</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="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">[</span><span class="nam">provider_type</span><span class="op">]</span> <span class="op">=</span> <span class="nam">factory</span>&nbsp;</span><span class="r"></span></p>
196
- <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
197
- <p class="mis show_mis"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> <span class="key">def</span> <span class="nam">register_plugin</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">plugin</span><span class="op">:</span> <span class="nam">BaseProviderPlugin</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>
198
- <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> <span class="str">"""Register a provider plugin.</span>&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">&nbsp;</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 class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
201
- <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"><span class="str"> plugin: Provider plugin instance</span>&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="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"><span class="str"> Raises:</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"> ValueError: If provider type is already registered</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"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
206
- <p class="mis show_mis"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"> <span class="nam">provider_type</span> <span class="op">=</span> <span class="nam">plugin</span><span class="op">.</span><span class="nam">provider_type</span>&nbsp;</span><span class="r"></span></p>
207
- <p class="mis show_mis"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> <span class="key">if</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span> <span class="key">or</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
208
- <p class="mis show_mis"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">f"Provider type '{provider_type}' is already registered"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
209
- <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
210
- <p class="mis show_mis"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">[</span><span class="nam">provider_type</span><span class="op">]</span> <span class="op">=</span> <span class="nam">plugin</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">&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="key">def</span> <span class="nam">unregister</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">provider_type</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>
213
- <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"> <span class="str">"""Unregister a provider type.</span>&nbsp;</span><span class="r"></span></p>
214
- <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t">&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"><span class="str"> Args:</span>&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="str"> provider_type: Provider type to remove</span>&nbsp;</span><span class="r"></span></p>
217
- <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
218
- <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"><span class="str"> Raises:</span>&nbsp;</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="str"> KeyError: If provider type is not registered</span>&nbsp;</span><span class="r"></span></p>
220
- <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"><span class="str"> """</span>&nbsp;</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">if</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
222
- <p class="mis show_mis"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"> <span class="key">del</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">[</span><span class="nam">provider_type</span><span class="op">]</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="key">elif</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</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="key">del</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">[</span><span class="nam">provider_type</span><span class="op">]</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"> <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
226
- <p class="mis show_mis"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"> <span class="key">raise</span> <span class="nam">KeyError</span><span class="op">(</span><span class="str">f"Provider type '{provider_type}' is not registered"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
227
- <p class="pln"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
228
- <p class="mis show_mis"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> <span class="key">def</span> <span class="nam">get_factory</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">provider_type</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span> <span class="op">-></span> <span class="nam">AuthProviderFactory</span><span class="op">:</span>&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="str">"""Get factory function for a provider type.</span>&nbsp;</span><span class="r"></span></p>
230
- <p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
231
- <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
232
- <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"><span class="str"> provider_type: Provider type to look up</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="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
235
- <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"><span class="str"> Factory function for the provider type</span>&nbsp;</span><span class="r"></span></p>
236
- <p class="pln"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t">&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"><span class="str"> Raises:</span>&nbsp;</span><span class="r"></span></p>
238
- <p class="pln"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"><span class="str"> KeyError: If provider type is not registered</span>&nbsp;</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 class="str"> """</span>&nbsp;</span><span class="r"></span></p>
240
- <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="com"># Check factories first</span>&nbsp;</span><span class="r"></span></p>
241
- <p class="mis show_mis"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="key">if</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">:</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="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">[</span><span class="nam">provider_type</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"># Check plugins</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="key">if</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
246
- <p class="mis show_mis"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> <span class="nam">plugin</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">[</span><span class="nam">provider_type</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
247
- <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
248
- <p class="pln"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"> <span class="com"># Wrap plugin method to match factory signature</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="key">def</span> <span class="nam">plugin_factory</span><span class="op">(</span><span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</span><span class="op">)</span> <span class="op">-></span> <span class="str">"AuthProvider"</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">plugin</span><span class="op">.</span><span class="nam">validate_config</span><span class="op">(</span><span class="nam">config</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="key">return</span> <span class="nam">plugin</span><span class="op">.</span><span class="nam">create_provider</span><span class="op">(</span><span class="nam">config</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
252
- <p class="pln"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
253
- <p class="mis show_mis"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"> <span class="key">return</span> <span class="nam">plugin_factory</span>&nbsp;</span><span class="r"></span></p>
254
- <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
255
- <p class="mis show_mis"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"> <span class="key">raise</span> <span class="nam">KeyError</span><span class="op">(</span><span class="str">f"No provider registered for type '{provider_type}'"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
256
- <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
257
- <p class="mis show_mis"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"> <span class="key">def</span> <span class="nam">create_provider</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</span><span class="op">)</span> <span class="op">-></span> <span class="str">"AuthProvider"</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
258
- <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"> <span class="str">"""Create a provider from configuration using the registry.</span>&nbsp;</span><span class="r"></span></p>
259
- <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
260
- <p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
261
- <p class="pln"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"><span class="str"> config: Authentication configuration</span>&nbsp;</span><span class="r"></span></p>
262
- <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
263
- <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"><span class="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
264
- <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"><span class="str"> Configured AuthProvider instance</span>&nbsp;</span><span class="r"></span></p>
265
- <p class="pln"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
266
- <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"><span class="str"> Raises:</span>&nbsp;</span><span class="r"></span></p>
267
- <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"><span class="str"> KeyError: If provider type is not registered</span>&nbsp;</span><span class="r"></span></p>
268
- <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"><span class="str"> ValueError: If configuration is invalid</span>&nbsp;</span><span class="r"></span></p>
269
- <p class="pln"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"><span class="str"> """</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">provider_type</span> <span class="op">=</span> <span class="nam">getattr</span><span class="op">(</span><span class="nam">config</span><span class="op">,</span> <span class="str">"provider_type"</span><span class="op">,</span> <span class="key">None</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="key">if</span> <span class="key">not</span> <span class="nam">provider_type</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="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">f"Configuration {type(config).__name__} missing provider_type attribute"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
273
- <p class="pln"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t">&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">factory</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">get_factory</span><span class="op">(</span><span class="nam">provider_type</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="key">return</span> <span class="nam">factory</span><span class="op">(</span><span class="nam">config</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
276
- <p class="pln"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t">&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="key">def</span> <span class="nam">list_providers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> <span class="op">-></span> <span class="nam">list</span><span class="op">[</span><span class="nam">str</span><span class="op">]</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
278
- <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t"> <span class="str">"""List all registered provider types.</span>&nbsp;</span><span class="r"></span></p>
279
- <p class="pln"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t">&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"><span class="str"> Returns:</span>&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"><span class="str"> List of provider type identifiers</span>&nbsp;</span><span class="r"></span></p>
282
- <p class="pln"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
283
- <p class="mis show_mis"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"> <span class="key">return</span> <span class="nam">sorted</span><span class="op">(</span><span class="nam">list</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="op">+</span> <span class="nam">list</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
284
- <p class="pln"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
285
- <p class="mis show_mis"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t"> <span class="key">def</span> <span class="nam">is_registered</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">provider_type</span><span class="op">:</span> <span class="nam">str</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>
286
- <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"> <span class="str">"""Check if a provider type is registered.</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">&nbsp;</span><span class="r"></span></p>
288
- <p class="pln"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
289
- <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"><span class="str"> provider_type: Provider type to check</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="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
292
- <p class="pln"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"><span class="str"> True if provider type is registered</span>&nbsp;</span><span class="r"></span></p>
293
- <p class="pln"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
294
- <p class="mis show_mis"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t"> <span class="key">return</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_factories</span> <span class="key">or</span> <span class="nam">provider_type</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_plugins</span>&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">&nbsp;</span><span class="r"></span></p>
296
- <p class="pln"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
297
- <p class="pln"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"><span class="com"># Global registry instance</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="nam">_default_registry</span> <span class="op">=</span> <span class="nam">AuthProviderRegistry</span><span class="op">(</span><span class="op">)</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="pln"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t">&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="key">def</span> <span class="nam">get_provider_registry</span><span class="op">(</span><span class="op">)</span> <span class="op">-></span> <span class="nam">AuthProviderRegistry</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
302
- <p class="pln"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"> <span class="str">"""Get the default provider registry.</span>&nbsp;</span><span class="r"></span></p>
303
- <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
304
- <p class="pln"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"><span class="str"> Returns:</span>&nbsp;</span><span class="r"></span></p>
305
- <p class="pln"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"><span class="str"> Default AuthProviderRegistry instance</span>&nbsp;</span><span class="r"></span></p>
306
- <p class="pln"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"><span class="str"> """</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="key">return</span> <span class="nam">_default_registry</span>&nbsp;</span><span class="r"></span></p>
308
- <p class="pln"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
309
- <p class="pln"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t">&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="key">def</span> <span class="nam">register_provider_factory</span><span class="op">(</span><span class="nam">provider_type</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">factory</span><span class="op">:</span> <span class="nam">AuthProviderFactory</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>
311
- <p class="pln"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"> <span class="str">"""Register a factory function in the default registry.</span>&nbsp;</span><span class="r"></span></p>
312
- <p class="pln"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
313
- <p class="pln"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
314
- <p class="pln"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"><span class="str"> provider_type: Unique identifier for the provider type</span>&nbsp;</span><span class="r"></span></p>
315
- <p class="pln"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"><span class="str"> factory: Factory function that creates providers</span>&nbsp;</span><span class="r"></span></p>
316
- <p class="pln"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"><span class="str"> """</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">_default_registry</span><span class="op">.</span><span class="nam">register_factory</span><span class="op">(</span><span class="nam">provider_type</span><span class="op">,</span> <span class="nam">factory</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
318
- <p class="pln"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t">&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="key">def</span> <span class="nam">register_provider_plugin</span><span class="op">(</span><span class="nam">plugin</span><span class="op">:</span> <span class="nam">BaseProviderPlugin</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>
321
- <p class="pln"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t"> <span class="str">"""Register a provider plugin in the default registry.</span>&nbsp;</span><span class="r"></span></p>
322
- <p class="pln"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t">&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"><span class="str"> Args:</span>&nbsp;</span><span class="r"></span></p>
324
- <p class="pln"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"><span class="str"> plugin: Provider plugin instance</span>&nbsp;</span><span class="r"></span></p>
325
- <p class="pln"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"><span class="str"> """</span>&nbsp;</span><span class="r"></span></p>
326
- <p class="mis show_mis"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"> <span class="nam">_default_registry</span><span class="op">.</span><span class="nam">register_plugin</span><span class="op">(</span><span class="nam">plugin</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
327
- <p class="pln"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
328
- <p class="pln"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
329
- <p class="mis show_mis"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t"><span class="key">def</span> <span class="nam">create_auth_provider_from_registry</span><span class="op">(</span><span class="nam">config</span><span class="op">:</span> <span class="nam">AuthConfig</span><span class="op">)</span> <span class="op">-></span> <span class="str">"AuthProvider"</span><span class="op">:</span>&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"> <span class="str">"""Create an auth provider using the default registry.</span>&nbsp;</span><span class="r"></span></p>
331
- <p class="pln"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t">&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"> Args:</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"><span class="str"> config: Authentication configuration</span>&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">&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"> Returns:</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"><span class="str"> Configured AuthProvider instance</span>&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"> """</span>&nbsp;</span><span class="r"></span></p>
338
- <p class="mis show_mis"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"> <span class="key">return</span> <span class="nam">_default_registry</span><span class="op">.</span><span class="nam">create_provider</span><span class="op">(</span><span class="nam">config</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
339
- </main>
340
- <footer>
341
- <div class="content">
342
- <p>
343
- <a class="nav" href="z_1c9a91c0e91c8496_providers_py.html">&#xab; prev</a> &nbsp; &nbsp;
344
- <a class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
345
- <a class="nav" href="z_4b8b9dd4ccccc5db___init___py.html">&#xbb; next</a>
346
- &nbsp; &nbsp; &nbsp;
347
- <a class="nav" href="https://coverage.readthedocs.io/en/7.6.12">coverage.py v7.6.12</a>,
348
- created at 2025-08-16 18:46 +0200
349
- </p>
350
- </div>
351
- </footer>
352
- </body>
353
- </html>