fastmcp 2.12.0rc1__py3-none-any.whl → 2.12.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.
- fastmcp/client/auth/oauth.py +78 -2
- fastmcp/client/elicitation.py +3 -2
- fastmcp/experimental/sampling/handlers/__init__.py +0 -3
- fastmcp/experimental/sampling/handlers/openai.py +16 -9
- fastmcp/server/auth/auth.py +130 -59
- fastmcp/server/auth/oauth_proxy.py +122 -221
- fastmcp/server/auth/providers/azure.py +3 -12
- fastmcp/server/auth/providers/github.py +5 -13
- fastmcp/server/auth/providers/google.py +4 -11
- fastmcp/server/auth/providers/in_memory.py +0 -2
- fastmcp/server/auth/providers/jwt.py +5 -7
- fastmcp/server/auth/providers/workos.py +16 -16
- fastmcp/server/context.py +3 -2
- fastmcp/server/dependencies.py +1 -4
- fastmcp/server/elicitation.py +3 -2
- fastmcp/server/http.py +22 -59
- fastmcp/server/middleware/middleware.py +3 -3
- fastmcp/server/server.py +2 -3
- fastmcp/settings.py +14 -6
- fastmcp/tools/tool.py +2 -2
- fastmcp/utilities/components.py +3 -3
- fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +1 -1
- fastmcp/utilities/types.py +2 -2
- {fastmcp-2.12.0rc1.dist-info → fastmcp-2.12.1.dist-info}/METADATA +3 -2
- {fastmcp-2.12.0rc1.dist-info → fastmcp-2.12.1.dist-info}/RECORD +28 -29
- fastmcp/server/auth/registry.py +0 -52
- {fastmcp-2.12.0rc1.dist-info → fastmcp-2.12.1.dist-info}/WHEEL +0 -0
- {fastmcp-2.12.0rc1.dist-info → fastmcp-2.12.1.dist-info}/entry_points.txt +0 -0
- {fastmcp-2.12.0rc1.dist-info → fastmcp-2.12.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -2,7 +2,7 @@ fastmcp/__init__.py,sha256=KX2d8UjlyJdYwock62tYV7vJSRwyxzrjq-jnU6Gre_c,1544
|
|
|
2
2
|
fastmcp/exceptions.py,sha256=-krEavxwddQau6T7MESCR4VjKNLfP9KHJrU1p3y72FU,744
|
|
3
3
|
fastmcp/mcp_config.py,sha256=zbli5c8hcUfxOlqYFBJXbogpVlXwtnCuJjTg3oTfmtQ,11375
|
|
4
4
|
fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
fastmcp/settings.py,sha256=
|
|
5
|
+
fastmcp/settings.py,sha256=6m3rs7JQz8RN5rtFiRGCnb1K53Vt6588bF7zITRESK0,11982
|
|
6
6
|
fastmcp/cli/__init__.py,sha256=Ii284TNoG5lxTP40ETMGhHEq3lQZWxu9m9JuU57kUpQ,87
|
|
7
7
|
fastmcp/cli/claude.py,sha256=tGbJwLOW9BRfQ_VJ91Iz8HOiqKg0JKywzIJOijCHO78,4996
|
|
8
8
|
fastmcp/cli/cli.py,sha256=sBwMOM_DHc90YOEWV94ikCjASBBKTbA1KmIElPVHBUg,28244
|
|
@@ -15,7 +15,7 @@ fastmcp/cli/install/mcp_json.py,sha256=RlGtDuqflPXWeENL8SyuCEytLRm17lHyBNQeud9l4
|
|
|
15
15
|
fastmcp/cli/install/shared.py,sha256=_1MNGCqf7BsAL6ntwA75wn86-0g-248ppQSAPQ8uTXk,5103
|
|
16
16
|
fastmcp/client/__init__.py,sha256=J-RcLU2WcnYnstXWoW01itGtAg7DEjvCsWyqQKQljoo,663
|
|
17
17
|
fastmcp/client/client.py,sha256=N1UZopFOy5NwbWY55goqRKlkwqEgbk2UaF13EncJ1Ps,35190
|
|
18
|
-
fastmcp/client/elicitation.py,sha256=
|
|
18
|
+
fastmcp/client/elicitation.py,sha256=FKSJCQ9cZPFMC2V3e7VtrxNB9q22SoB5ou1lgjS8eCY,2445
|
|
19
19
|
fastmcp/client/logging.py,sha256=uIC9aWGKqgTbxhRqkMBlnYfYjtanC1fqyWbRu5FY6AY,1670
|
|
20
20
|
fastmcp/client/messages.py,sha256=NIPjt-5js_DkI5BD4OVdTf6pz-nGjc2dtbgt-vAY234,4329
|
|
21
21
|
fastmcp/client/oauth_callback.py,sha256=qxSMg1duv_uCYbbNaiFjl9esSlWeiiHtYBWBdQcX27w,10248
|
|
@@ -25,7 +25,7 @@ fastmcp/client/sampling.py,sha256=TXRj1Fs9lOk1wukhaHhPS__HGqpTieXSq2Rasj1F-e0,18
|
|
|
25
25
|
fastmcp/client/transports.py,sha256=7n0AnkCznQvQmck1luo3-cx1-IxVSSVihYOrgUmV8e8,38174
|
|
26
26
|
fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
|
|
27
27
|
fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
|
|
28
|
-
fastmcp/client/auth/oauth.py,sha256=
|
|
28
|
+
fastmcp/client/auth/oauth.py,sha256=tZ3Q5p2jb1a6pkWXZif_6-b5sFvfPU23BPLd6_jI8rA,15810
|
|
29
29
|
fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
|
|
30
30
|
fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
|
|
31
31
|
fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
|
|
@@ -41,9 +41,9 @@ fastmcp/contrib/mcp_mixin/__init__.py,sha256=aw9IQ1ssNjCgws4ZNt8bkdpossAAGVAwwjB
|
|
|
41
41
|
fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
|
|
42
42
|
fastmcp/contrib/mcp_mixin/mcp_mixin.py,sha256=sUSJ2o0sTsb061MyPN2xuYP0oI4W6YVQXupY3nnjD50,8687
|
|
43
43
|
fastmcp/experimental/sampling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
-
fastmcp/experimental/sampling/handlers/__init__.py,sha256=
|
|
44
|
+
fastmcp/experimental/sampling/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
fastmcp/experimental/sampling/handlers/base.py,sha256=mCPFj9ETc-Ro38R_pzx9rHVM2_EADCecScMkNWd6Tbs,714
|
|
46
|
-
fastmcp/experimental/sampling/handlers/openai.py,sha256=
|
|
46
|
+
fastmcp/experimental/sampling/handlers/openai.py,sha256=TUmIpao8LFz6BzXFG5v7JOS_CosgX6tCeGRUo1wdKvY,5753
|
|
47
47
|
fastmcp/experimental/server/openapi/README.md,sha256=1Mc1Ur15OxMn-wAPEa1rZIiNNSMdv9sboQ3YpvNpUXM,9886
|
|
48
48
|
fastmcp/experimental/server/openapi/__init__.py,sha256=f1Mc7dkuRRJb_6-3umSHuyuXtvXTzH72t8gw1GBHgZU,772
|
|
49
49
|
fastmcp/experimental/server/openapi/components.py,sha256=jp5xy0xkn14cFRk9FYlp3LpW-j44C0KcXvMQmdWVpB8,13237
|
|
@@ -66,42 +66,41 @@ fastmcp/resources/resource_manager.py,sha256=sDfMrAx1cl2sTaKrTYW3k6gxr_O0QmH18n9
|
|
|
66
66
|
fastmcp/resources/template.py,sha256=HXL_T1hUXMwv1h0962NTtszGY68R1TbumjJMvC0PjjU,11030
|
|
67
67
|
fastmcp/resources/types.py,sha256=SiYNLnpXT-mHgNUrzqKUvXYUsY-V3gwJIrYdJfFwDDo,4868
|
|
68
68
|
fastmcp/server/__init__.py,sha256=bMD4aQD4yJqLz7-mudoNsyeV8UgQfRAg3PRwPvwTEds,119
|
|
69
|
-
fastmcp/server/context.py,sha256=
|
|
70
|
-
fastmcp/server/dependencies.py,sha256=
|
|
71
|
-
fastmcp/server/elicitation.py,sha256=
|
|
72
|
-
fastmcp/server/http.py,sha256=
|
|
69
|
+
fastmcp/server/context.py,sha256=caj-K-bbuFZINiugGw6Uz2P6fcn7jJ17dvTCAY37wRQ,24454
|
|
70
|
+
fastmcp/server/dependencies.py,sha256=NDAQMAIgiWtLMkDS-oF8htoHpETilAZo1YawSDP5Lqg,3317
|
|
71
|
+
fastmcp/server/elicitation.py,sha256=gmP17CzLQVpGzU00Ks31TWxdS-OLL5wTX_W5xRzs1Cc,8777
|
|
72
|
+
fastmcp/server/http.py,sha256=dpSfE9VhilTjuz4BLh1MbdfHhMyDzWEi68GNjUZamTE,10665
|
|
73
73
|
fastmcp/server/low_level.py,sha256=LNmc_nU_wx-fRG8OEHdLPKopZpovcrWlyAxJzKss3TA,1239
|
|
74
74
|
fastmcp/server/openapi.py,sha256=-7-pKwQ1hT-UV9OnLlWrjbbXXRfZld8YJqa4Duybhtw,42102
|
|
75
75
|
fastmcp/server/proxy.py,sha256=y9h-49PIBNRh03HI3HcrY_lL8AMbKv45fyr2mAz3Vyo,25734
|
|
76
|
-
fastmcp/server/server.py,sha256=
|
|
76
|
+
fastmcp/server/server.py,sha256=JVGKi1uBsF3f3kHMQT2o0lxY-E76bbCFSuzz98Ume_M,90333
|
|
77
77
|
fastmcp/server/auth/__init__.py,sha256=GwoyosVxuWCPzFHaCnj6iFp9fulnp124G2gQfsnzcgc,695
|
|
78
|
-
fastmcp/server/auth/auth.py,sha256=
|
|
79
|
-
fastmcp/server/auth/oauth_proxy.py,sha256=
|
|
78
|
+
fastmcp/server/auth/auth.py,sha256=373WvHAh-Vt6ktWa_xeW9Ci2WUB9KUwvhN848qNs6IE,12788
|
|
79
|
+
fastmcp/server/auth/oauth_proxy.py,sha256=SxnO-K3P6UPR_uS5e63NYwWJ0V0ZY5UF9MGJX6UL4q0,40433
|
|
80
80
|
fastmcp/server/auth/redirect_validation.py,sha256=Jlhela9xpTbw4aWnQ04A5Z-TW0HYOC3f9BMsq3NXx1Q,2000
|
|
81
|
-
fastmcp/server/auth/registry.py,sha256=bGbQ2JgKxAMfa509FFpRTjgGzcWPGiwEH4bE0OVmy9M,1301
|
|
82
81
|
fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
fastmcp/server/auth/providers/azure.py,sha256=
|
|
82
|
+
fastmcp/server/auth/providers/azure.py,sha256=obQKR_M9XTjfZrqhzmfhRhCc4x4MPbF7uErDmWamSXQ,9940
|
|
84
83
|
fastmcp/server/auth/providers/bearer.py,sha256=iu4pUj7TF5pT1wPuAGzDuM6lt5WtzenBN3c0otUleQY,923
|
|
85
|
-
fastmcp/server/auth/providers/github.py,sha256=
|
|
86
|
-
fastmcp/server/auth/providers/google.py,sha256=
|
|
87
|
-
fastmcp/server/auth/providers/in_memory.py,sha256=
|
|
88
|
-
fastmcp/server/auth/providers/jwt.py,sha256=
|
|
89
|
-
fastmcp/server/auth/providers/workos.py,sha256=
|
|
84
|
+
fastmcp/server/auth/providers/github.py,sha256=mGszC3iqp_OZTIShFgSEA3vBaXjpQ1v3ECqMn-3Gxq4,10575
|
|
85
|
+
fastmcp/server/auth/providers/google.py,sha256=YvdS-QSdJMvVYVpYS5khZjE6ztv3EuTlXuoqpjsTPXI,11749
|
|
86
|
+
fastmcp/server/auth/providers/in_memory.py,sha256=CFCfYWMIPUxHNF5Liqud6ksedbykKV-RILWZqTxh3MY,14245
|
|
87
|
+
fastmcp/server/auth/providers/jwt.py,sha256=hAV_QXIoD4wotW6iWm0k378_mjMtkwWVqWEp6Zc--HE,19525
|
|
88
|
+
fastmcp/server/auth/providers/workos.py,sha256=1yUc8YrMIHCGeHySYkm0Xa7xtP3x4ukqLrlWl67SNnE,15422
|
|
90
89
|
fastmcp/server/middleware/__init__.py,sha256=vh5C9ubN6q-y5QND32P4mQ4zDT89C7XYK39yqhELNAk,155
|
|
91
90
|
fastmcp/server/middleware/error_handling.py,sha256=SoDatr9i3T2qSIUbSEGWrOnu4WPPyMDymnsF5GR_BiE,7572
|
|
92
91
|
fastmcp/server/middleware/logging.py,sha256=ZXAT4Zc_I9Y_vWqHGiDmJFtXzijPJTrmCqz5JcJZvrg,7739
|
|
93
|
-
fastmcp/server/middleware/middleware.py,sha256=
|
|
92
|
+
fastmcp/server/middleware/middleware.py,sha256=i650qPrbESjLlOqbQYkV_Pz7NuS-vahe4O3FtOKMMno,6071
|
|
94
93
|
fastmcp/server/middleware/rate_limiting.py,sha256=VTrCoQFmWCm0BxwOrNfG21CBFDDOKJT7IiSEjpJgmPA,7921
|
|
95
94
|
fastmcp/server/middleware/timing.py,sha256=lL_xc-ErLD5lplfvd5-HIyWEbZhgNBYkcQ74KFXAMkA,5591
|
|
96
95
|
fastmcp/server/sampling/handler.py,sha256=yjLzvxlGllE-EY4bc6djsijEmwMT24PCpV6vJl-sPcI,580
|
|
97
96
|
fastmcp/tools/__init__.py,sha256=vzqb-Y7Kf0d5T0aOsld-O-FA8kD7-4uFExChewFHEzY,201
|
|
98
|
-
fastmcp/tools/tool.py,sha256=
|
|
97
|
+
fastmcp/tools/tool.py,sha256=Q49E6L7Mx6v-VB9kru7CJVBM5_aF6V1Nti89scRv8Jc,19275
|
|
99
98
|
fastmcp/tools/tool_manager.py,sha256=xOm5XFbygUg2cW8jIiwhsgAdUA14wDMoUIvkWKL3LOU,9186
|
|
100
99
|
fastmcp/tools/tool_transform.py,sha256=Mga202SjKhdMglhEXSPBi4dhq1bevfdsU5Rt21KVyZo,38447
|
|
101
100
|
fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
102
101
|
fastmcp/utilities/auth.py,sha256=ZVHkNb4YBpLE1EmmFyhvFB2qfWDZdEYNH9TRI9jylOE,1140
|
|
103
102
|
fastmcp/utilities/cli.py,sha256=NZbERkcatjKxgyE0sFT6g6tghhWkzz0QTI2u_LaQGXo,8662
|
|
104
|
-
fastmcp/utilities/components.py,sha256=
|
|
103
|
+
fastmcp/utilities/components.py,sha256=ZZQuseI_880WjQZAXYPhCi70u8-bBANYgZHj1u67Nks,5802
|
|
105
104
|
fastmcp/utilities/exceptions.py,sha256=7Z9j5IzM5rT27BC1Mcn8tkS-bjqCYqMKwb2MMTaxJYU,1350
|
|
106
105
|
fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
|
|
107
106
|
fastmcp/utilities/inspect.py,sha256=UYQtU1gT_4iKev9iDjFHor61dHdPGugDplUq2ZsQS40,15575
|
|
@@ -111,10 +110,10 @@ fastmcp/utilities/logging.py,sha256=O_TsD5x8BPRRQ-xAa2CZlpKfRjipkpvdg6w6invBZVY,
|
|
|
111
110
|
fastmcp/utilities/mcp_config.py,sha256=qATTXMGiYET-7PflOixQOgiw3aOizX-RlloRjAo7nwI,1796
|
|
112
111
|
fastmcp/utilities/openapi.py,sha256=mfkY2XfWAmAOlKexArlrmDdD0Tkdqcn4TshsATaxB_o,63304
|
|
113
112
|
fastmcp/utilities/tests.py,sha256=TRMIfcdSJWlHRA4mQSYu3OXlxnvqRYKhcJXEYG5BkYA,6403
|
|
114
|
-
fastmcp/utilities/types.py,sha256=
|
|
113
|
+
fastmcp/utilities/types.py,sha256=G60OPTub4ID2GQwxfIgR38PEyF7CaxLPZ-PfWkXberA,14462
|
|
115
114
|
fastmcp/utilities/mcp_server_config/__init__.py,sha256=qbfd0c6aBpi0_SVgwt4IQCQ9siqqxmr9PWSYGiPDJqE,791
|
|
116
115
|
fastmcp/utilities/mcp_server_config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
|
-
fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=
|
|
116
|
+
fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=xP4yl04ZBmmoiDFDi10YRe9JZvTuFmDGAFogL3CC730,15311
|
|
118
117
|
fastmcp/utilities/mcp_server_config/v1/schema.json,sha256=Vrm7vOWtVcDyT1aUPXlcy916JXXSpCOcVygD5SYLUQU,8469
|
|
119
118
|
fastmcp/utilities/mcp_server_config/v1/environments/__init__.py,sha256=Tkv0dmJ6tKKotOBo-tho09QVdvEjy37iBsvBbEwH0EA,256
|
|
120
119
|
fastmcp/utilities/mcp_server_config/v1/environments/base.py,sha256=FkrUsESEdW5akyn_FeR4tQB6Vlj7dO9VFcCj0YLCghQ,845
|
|
@@ -122,8 +121,8 @@ fastmcp/utilities/mcp_server_config/v1/environments/uv.py,sha256=LZR9R5XjpIQZzbj
|
|
|
122
121
|
fastmcp/utilities/mcp_server_config/v1/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
122
|
fastmcp/utilities/mcp_server_config/v1/sources/base.py,sha256=KWunc5peDLFdSdLX8l3UI9SNxtN-KNq2FOXAZ7XD62c,980
|
|
124
123
|
fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py,sha256=eFX47XNXz2oKHW8MZvx60dqyHkBxdg2FMOrHcyAS28g,8106
|
|
125
|
-
fastmcp-2.12.
|
|
126
|
-
fastmcp-2.12.
|
|
127
|
-
fastmcp-2.12.
|
|
128
|
-
fastmcp-2.12.
|
|
129
|
-
fastmcp-2.12.
|
|
124
|
+
fastmcp-2.12.1.dist-info/METADATA,sha256=qGL0ucEimvm8yVPb_m8A_9_uppLm04V98TvM691mYh8,17919
|
|
125
|
+
fastmcp-2.12.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
126
|
+
fastmcp-2.12.1.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
|
|
127
|
+
fastmcp-2.12.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
128
|
+
fastmcp-2.12.1.dist-info/RECORD,,
|
fastmcp/server/auth/registry.py
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"""Provider registry for FastMCP auth providers."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from collections.abc import Callable
|
|
6
|
-
from typing import TYPE_CHECKING, TypeVar
|
|
7
|
-
|
|
8
|
-
if TYPE_CHECKING:
|
|
9
|
-
from fastmcp.server.auth import AuthProvider
|
|
10
|
-
|
|
11
|
-
# Type variable for auth providers
|
|
12
|
-
T = TypeVar("T", bound="AuthProvider")
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Provider Registry
|
|
16
|
-
_PROVIDER_REGISTRY: dict[str, type[AuthProvider]] = {}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def register_provider(name: str) -> Callable[[type[T]], type[T]]:
|
|
20
|
-
"""Decorator to register an auth provider with a given name.
|
|
21
|
-
|
|
22
|
-
Args:
|
|
23
|
-
name: The name to register the provider under (e.g., 'AUTHKIT')
|
|
24
|
-
|
|
25
|
-
Returns:
|
|
26
|
-
The decorated class
|
|
27
|
-
|
|
28
|
-
Example:
|
|
29
|
-
@register_provider('AUTHKIT')
|
|
30
|
-
class AuthKitProvider(AuthProvider):
|
|
31
|
-
...
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
def decorator(cls: type[T]) -> type[T]:
|
|
35
|
-
_PROVIDER_REGISTRY[name.upper()] = cls
|
|
36
|
-
return cls
|
|
37
|
-
|
|
38
|
-
return decorator
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def get_registered_provider(name: str) -> type[AuthProvider]:
|
|
42
|
-
"""Get a registered provider by name.
|
|
43
|
-
|
|
44
|
-
Args:
|
|
45
|
-
name: The provider name (case-insensitive)
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
The provider class if found, None otherwise
|
|
49
|
-
"""
|
|
50
|
-
if name.upper() in _PROVIDER_REGISTRY:
|
|
51
|
-
return _PROVIDER_REGISTRY[name.upper()]
|
|
52
|
-
raise ValueError(f"Provider {name!r} has not been registered.")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|