@@ -16,6 +16,7 @@ maintainers = [
16
16
{
name =
" Rafi Al Attrach" ,
email =
" [email protected] " },
17
17
{
name =
" Pedro Moreira" ,
email =
" [email protected] " },
18
18
{
name =
" Rajna Fani" ,
email =
" [email protected] " },
19
+ {
name =
" Provost Simon" ,
email =
" [email protected] " },
19
20
]
20
21
readme = " README.md"
21
22
license = " MIT"
@@ -50,21 +51,27 @@ dependencies = [
50
51
" cryptography>=41.0.0" , # Cryptographic operations for JWT
51
52
" python-jose[cryptography]>=3.3.0" , # Additional JWT support with crypto
52
53
" httpx>=0.24.0" , # Modern HTTP client for OAuth2 token validation
54
+ " pyaml>=25.7.0" ,
55
+ " beartype>=0.21.0" ,
56
+ " thefuzz>=0.22.1" ,
57
+ " rich-pyfiglet>=0.1.4" ,
58
+ " click==8.1.8" ,
53
59
]
54
60
55
- [project . dependency-groups ]
61
+ [dependency-groups ]
56
62
dev = [
57
63
" ruff>=0.4.0" ,
58
64
" pre-commit>=3.0.0" ,
59
65
" pytest>=7.4.0" ,
60
66
" pytest-asyncio>=0.23.0" ,
61
67
" pytest-mock>=3.10.0" ,
62
- " aiohttp>=3.8.0" , # For MCP client testing
68
+ " aiohttp>=3.8.0" ,
69
+ " pytest-cov>=6.2.1" ,
63
70
]
64
71
65
72
[project .scripts ]
66
- m3 = " m3.cli:app "
67
- m3-mcp-server = " m3.mcp_server :main"
73
+ m3 = " m3.cli:main_cli "
74
+ m3-mcp-server = " m3.core.__main__ :main"
68
75
69
76
[project .urls ]
70
77
Homepage = " https://github.com/rafiattrach/m3"
@@ -90,6 +97,8 @@ select = [
90
97
" I" , # isort (import sorting)
91
98
" UP" , # pyupgrade (modernize syntax)
92
99
" RUF" ,# Ruff-specific rules
100
+ " B" , # flake8-bugbear
101
+ " C4" , # simplify comprehensions
93
102
]
94
103
95
104
ignore = [
@@ -109,3 +118,35 @@ asyncio_default_fixture_loop_scope = "function"
109
118
filterwarnings = [
110
119
" ignore::DeprecationWarning:jupyter_client.*" ,
111
120
]
121
+
122
+ [tool .coverage .paths ]
123
+ source = [
124
+ " src/m3" ,
125
+ ]
126
+
127
+ [tool .coverage .run ]
128
+ branch = true
129
+ omit = [
130
+ " src/m3/**/base.py" ,
131
+ " src/m3/**/__init__.py" ,
132
+ " src/m3/**/configurations/*.yaml" ,
133
+ " tests/**" ,
134
+ ]
135
+
136
+ [tool .coverage .report ]
137
+ exclude_also = [
138
+ " def __repr__" ,
139
+ " if self\\ .debug" ,
140
+
141
+ " raise AssertionError" ,
142
+ " raise NotImplementedError" ,
143
+
144
+ " if 0:" ,
145
+ " if __name__ == .__main__.:" ,
146
+
147
+ " @(abc\\ .)?abstractmethod" ,
148
+ ]
149
+ ignore_errors = true
150
+
151
+ [tool .coverage .html ]
152
+ directory = " coverage_html_report"
0 commit comments