/ server / pyproject.toml
pyproject.toml
  1  # Copyright 2025 Alibaba Group Holding Ltd.
  2  #
  3  # Licensed under the Apache License, Version 2.0 (the "License");
  4  # you may not use this file except in compliance with the License.
  5  # You may obtain a copy of the License at
  6  #
  7  #     http://www.apache.org/licenses/LICENSE-2.0
  8  #
  9  # Unless required by applicable law or agreed to in writing, software
 10  # distributed under the License is distributed on an "AS IS" BASIS,
 11  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12  # See the License for the specific language governing permissions and
 13  # limitations under the License.
 14  
 15  [build-system]
 16  requires = ["hatchling", "hatch-vcs"]
 17  build-backend = "hatchling.build"
 18  
 19  [project]
 20  name = "opensandbox-server"
 21  dynamic = ["version"]
 22  description = "FastAPI control plane for OpenSandbox that manages sandbox lifecycle on Docker (ready) and Kubernetes (planned) runtimes."
 23  readme = "README.md"
 24  authors = [
 25      { name = "OpenSandbox Team", email = "pangjiping.pjp@alibaba-inc.com" }
 26  ]
 27  license = { text = "Apache-2.0" }
 28  requires-python = ">=3.10"
 29  keywords = ["sandbox", "server", "control-plane", "fastapi", "opensandbox"]
 30  classifiers = [
 31      "Development Status :: 3 - Alpha",
 32      "Intended Audience :: Developers",
 33      "License :: OSI Approved :: Apache Software License",
 34      "Operating System :: OS Independent",
 35      "Programming Language :: Python :: 3",
 36      "Programming Language :: Python :: 3 :: Only",
 37      "Programming Language :: Python :: 3.10",
 38      "Programming Language :: Python :: 3.11",
 39      "Programming Language :: Python :: 3.12",
 40      "Programming Language :: Python :: 3.13",
 41      "Topic :: Software Development :: Libraries",
 42      "Typing :: Typed",
 43  ]
 44  dependencies = [
 45      "docker",
 46      "fastapi",
 47      "httpx[socks]",
 48      "kubernetes",
 49      "pydantic",
 50      "redis>=5",
 51      "pydantic-settings",
 52      "pyyaml",
 53      "tomli; python_version < \"3.11\"",
 54      "uvicorn",
 55      "websockets>=14.0",
 56  ]
 57  
 58  [project.urls]
 59  Homepage = "https://github.com/alibaba/OpenSandbox"
 60  Repository = "https://github.com/alibaba/OpenSandbox"
 61  Issues = "https://github.com/alibaba/OpenSandbox/issues"
 62  
 63  [project.scripts]
 64  opensandbox-server = "opensandbox_server.cli:main"
 65  
 66  [tool.hatch.version]
 67  source = "vcs"
 68  
 69  [tool.hatch.version.raw-options]
 70  # This package is in a subdirectory; explicitly point setuptools-scm at the git root.
 71  root = ".."
 72  tag_regex = "^server/v(?P<version>\\d+\\.\\d+\\.\\d+(?:[\\.\\w\\+\\-]*)?)$"
 73  git_describe_command = 'git describe --dirty --tags --long --match "server/v*"'
 74  fallback_version = "0.1.0.dev0"
 75  
 76  [tool.hatch.build]
 77  include = [
 78      "LICENSE",
 79      "opensandbox_server",
 80  ]
 81  
 82  [tool.hatch.build.targets.wheel]
 83  packages = ["opensandbox_server"]
 84  
 85  [dependency-groups]
 86  dev = [
 87      "pytest>=7.0.0",
 88      "pytest-asyncio>=0.21.0",
 89      "pytest-cov>=4.0.0",
 90      "ruff>=0.14.8",
 91      "pyright>=1.1.0",
 92  ]
 93  
 94  [tool.ruff]
 95  target-version = "py310"
 96  line-length = 100
 97  src = ["opensandbox_server", "tests"]
 98  
 99  [tool.ruff.lint]
100  select = ["E4", "E7", "E9", "F"]
101  
102  [tool.pyright]
103  typeCheckingMode = "standard"
104  pythonVersion = "3.10"
105  pythonPlatform = "All"
106  
107  include = ["opensandbox_server", "tests"]
108  
109  exclude = [
110      "**/node_modules",
111      "**/__pycache__",
112  ]
113  
114  venvPath = "."
115  venv = ".venv"
116  
117  reportMissingImports = true
118  reportMissingTypeStubs = false