-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathpyproject.toml
More file actions
180 lines (159 loc) · 7.46 KB
/
pyproject.toml
File metadata and controls
180 lines (159 loc) · 7.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
[project]
name = "deephaven-mcp"
dynamic = ["version"]
description = "Unified Python package providing Model Context Protocol (MCP) servers for Deephaven: orchestrate Community Core data workers and power Documentation Q&A with LLMs. Supports AI-driven data workflows and agentic documentation assistance in a single deployable package."
readme = "README.md"
requires-python = ">=3.11"
authors = [
{ name = "Deephaven Data Labs", email = "support@deephaven.io" }
]
license = { text = "Apache-2.0" }
keywords = ["deephaven", "mcp", "model-context-protocol", "ai", "documentation", "llm", "orchestration", "community-core", "docs", "q&a"]
classifiers = [
# TODO: Update development status when the project reaches a stable state
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: System :: Distributed Computing"
]
dependencies = [
# Core async file/network dependencies
"typing_extensions>=4.3.0", # Backports for typing features (override, etc.)
"aiofiles>=23.2.1", # Async file support
"aiohttp>=3.11.18", # Async HTTP client (stress testing, SSE)
"httpx>=0.24.0", # HTTP client
# MCP protocol and orchestration
"mcp[cli]>=1.12.0", # CLI and fastmcp server
"mcp-proxy", # SSE/Streamable-HTTP proxy support
# Deephaven integration
"pydeephaven>=0.39", # Deephaven Python API
"numba>=0.63.1", # Force Python 3.11+ compatible numba (see https://github.com/deephaven/deephaven-mcp/issues/145)
# Docs/LLM and web server dependencies
"fastapi>=0.116.0", # FastAPI web framework for Docs server
"uvicorn[standard]>=0.35.0", # ASGI server for FastAPI
"openai>=1.0.0", # OpenAI Python SDK for LLM Q&A
"pydantic>=2.0.0", # Data validation and settings
# Configuration file parsing
"json5>=0.9.0", # JSON5 format support (comments, trailing commas)
# Structured logging for GCP Cloud Run
"google-cloud-logging>=3.8.0", # Google Cloud Logging
# Process monitoring for debugging
"psutil>=5.9.0", # Process and system monitoring
# Table formatting for AI agents
"pyyaml>=6.0", # YAML formatting support
]
[project.optional-dependencies]
# Testing (coverage, etc.)
test = [
"pytest>=8.0.0", # Test framework
"pytest-asyncio>=0.23.0", # Async test support
"pytest-cov>=4.1.0", # Code coverage reporting
"pytest-timeout>=2.1.0", # Test timeout support for integration tests
"deephaven-server>=0.39", # Deephaven server for integration tests
"pytz", # Required by deephaven-server <41.1 (missing from its dependencies) - https://deephaven.atlassian.net/browse/DOC-1132
# Stress testing dependencies
"aiolimiter>=1.1.0", # Rate limiting for stress tests
"python-dotenv>=1.0.0", # Optional .env file loading for test scripts
]
# Code quality tools (linting, formatting, type checking)
lint = [
# Code formatting and style tools
"black>=24.0.0", # Code formatter
"ruff>=0.1.0", # Linter and code quality tool
"isort>=5.12.0", # Import sorter
"pydocstyle>=6.3.0", # Docstring style checker
# Type checking and static analysis
"mypy>=1.6.0", # Static type checker
"types-aiofiles", # Type stubs for aiofiles
"typing_extensions>=4.3.0", # Typing backports for type checking
]
# Community Core session creation (python launch method)
community = [
"deephaven-server>=0.39", # Deephaven Community Core server for python-based session creation
"pytz", # Required by deephaven-server <41.1 (missing from its dependencies) - https://deephaven.atlassian.net/browse/DOC-1132
]
# Enterprise support (Deephaven Core+)
enterprise = [
"deephaven-coreplus-client", # Client for Deephaven Enterprise (Core+) systems
]
# Full development environment (all features + tools)
dev = [
"deephaven-mcp[test,community,enterprise,lint]", # All features and tools
]
[project.urls]
Homepage = "https://deephaven.io"
Documentation = "https://deephaven.io/docs/"
Repository = "https://github.com/deephaven/deephaven-mcp"
Issues = "https://github.com/deephaven/deephaven-mcp/issues"
[project.scripts]
dh-mcp-systems-server = "deephaven_mcp.mcp_systems_server.main:main"
dh-mcp-docs-server = "deephaven_mcp.mcp_docs_server.main:main"
[tool.uv]
package = true
[build-system]
requires = ["setuptools>=61.0", "setuptools_scm[toml]>=7.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools_scm]
write_to = "src/deephaven_mcp/_version.py"
version_scheme = "python-simplified-semver"
local_scheme = "no-local-version"
fallback_version = "0.0.0"
# Black configuration for code formatting
[tool.black]
line-length = 88
target-version = ["py310"]
# Ruff configuration for linting and code quality
[tool.ruff]
[tool.ruff.lint]
select = ["E", "F", "I", "B", "C", "U", "Q", "S"] # Select specific linting rules
ignore = ["E501"] # Ignore line length warnings since we use black
# Isort configuration for import sorting
[tool.isort]
profile = "black" # Use black's style for import sorting
# pydocstyle configuration for docstring linting
[tool.pydocstyle]
convention = "pep257"
match = '(?!test_).*\.py' # Ignore test files by default
# Pytest configuration for testing
[tool.pytest.ini_options]
testpaths = ["tests"] # Directory containing test files
addopts = "-W error -W ignore::pytest.PytestUnraisableExceptionWarning --cov=deephaven_mcp --cov-report=term-missing --cov-report=xml -m 'not integration'"
python_files = ["test_*.py"] # Test file naming pattern
python_classes = ["Test"] # Test class naming pattern
python_functions = ["test_"] # Test function naming pattern
markers = [
"integration: marks tests as integration tests (require Docker/pip, skipped by default). IMPORTANT: Run with -s flag to disable output capture",
]
asyncio_mode = "strict"
filterwarnings = [
"ignore:The NumPy module was reloaded (imported a second time).*:UserWarning"
]
asyncio_default_fixture_loop_scope = "function"
# Coverage configuration
[tool.coverage.run]
omit = [
"**/_version.py", # Autogenerated version file
]
# Mypy configuration for type checking
[tool.mypy]
python_version = "3.11" # Target Python version
ignore_missing_imports = true # Allow imports that may not be present at runtime
strict_optional = true # Enable strict optional checking
warn_unused_ignores = true # Warn about unused # type: ignore comments
warn_redundant_casts = true # Warn about unnecessary casts
warn_unused_configs = true # Warn about unused mypy.ini settings
warn_no_return = true # Warn about functions without return statements
warn_return_any = true # Warn about functions returning Any
warn_unreachable = true # Warn about unreachable code
disallow_untyped_defs = true # Require type annotations for function definitions
disallow_incomplete_defs = true # Require complete type annotations
disallow_untyped_decorators = true # Require decorators to be typed
disallow_untyped_calls = true # Require all function calls to be type checked