[tool.poetry] name = "nicegui" version = "2.17.0-dev" description = "Create web-based user interfaces with Python. The nice way." authors = ["Zauberzeug GmbH "] license = "MIT" readme = "README.md" repository = "https://github.com/zauberzeug/nicegui" keywords = ["gui", "ui", "web", "interface", "live"] [tool.poetry.dependencies] python = "^3.8" typing-extensions = ">=4.0.0" markdown2 = ">=2.4.7,!=2.4.11" Pygments = ">=2.15.1,<3.0.0" starlette = [ {version = "<0.42.0", python = "~3.8"}, # https://github.com/zauberzeug/nicegui/issues/4255 {version = ">=0.45.3", python = ">=3.9"} ] uvicorn = {extras = ["standard"], version = ">=0.22.0"} fastapi = ">=0.109.1" python-socketio = {extras = ["asyncio-client"], version = ">=5.10.0"} # version min: see https://github.com/zauberzeug/nicegui/issues/1809 python-engineio = ">=4.12.0" # https://github.com/zauberzeug/nicegui/issues/4602 vbuild = ">=0.8.2" watchfiles = ">=0.18.1" jinja2 = "^3.1.6" # https://github.com/zauberzeug/nicegui/security/dependabot/44 python-multipart = ">=0.0.18" orjson = {version = ">=3.9.15", markers = "platform_machine != 'i386' and platform_machine != 'i686'"} # https://github.com/zauberzeug/nicegui/security/dependabot/29, orjson does not support 32bit itsdangerous = "^2.1.2" aiofiles = ">=23.1.0" pywebview = { version = "^5.0.1", optional = true } plotly = { version = ">=5.13,<7.0", optional = true } matplotlib = { version = "^3.5.0", optional = true } httpx = ">=0.24.0" nicegui-highcharts = { version = "^2.0.2", optional = true } ifaddr = ">=0.2.0" aiohttp = ">=3.10.2" # https://github.com/zauberzeug/nicegui/security/dependabot/36 libsass = { version = "^0.23.0", optional = true } docutils = ">=0.19.0" requests = ">=2.32.0" # https://github.com/zauberzeug/nicegui/security/dependabot/33 urllib3 = ">=1.26.18,!=2.0.0,!=2.0.1,!=2.0.2,!=2.0.3,!=2.0.4,!=2.0.5,!=2.0.6,!=2.0.7,!=2.1.0,!=2.2.0,!=2.2.1" # https://github.com/zauberzeug/nicegui/security/dependabot/34 certifi = ">=2024.07.04" # https://github.com/zauberzeug/nicegui/security/dependabot/35 redis = { version = ">=4.0.0", optional = true } h11 = ">=0.16.0" # https://github.com/zauberzeug/nicegui/security/dependabot/45 wait_for2 = ">=0.3.2" [tool.poetry.extras] native = ["pywebview"] plotly = ["plotly"] matplotlib = ["matplotlib"] highcharts = ["nicegui-highcharts"] sass = ["libsass"] redis = ["redis"] [tool.poetry.group.dev.dependencies] autopep8 = ">=1.5.7,<3.0.0" debugpy = "^1.3.0" pytest-selenium = "^4.1.0" pytest-asyncio = ">=0.23.0" pytest-watcher = "^0.4.2" pytest = "^8.2.2" itsdangerous = "^2.1.2" # required by SessionMiddleware (see https://fastapi.tiangolo.com/?h=itsdangerous#optional-dependencies) pandas = [ {version = "^2.0.0", python = "<3.13"}, {version = "^2.2.3", python = ">=3.13,<3.14"} ] secure = ">=0.3.0" webdriver-manager = ">=3.8.6,<5.0.0" numpy = [ {version = "^1.24.0", python = "~3.8"}, {version = ">=1.26.0", python = ">=3.9,<3.14"} ] selenium = "^4.11.2" pyecharts = "^2.0.4" ruff = ">=0.8.1" pre-commit = [ {version = "<4.0.0", python = "<3.9"}, {version = ">=4.0.0", python = ">=3.9,<3.14"} ] isort = "^5.11" polars = [ {version = "^1.8.0", python = "~3.8"}, {version = "^1.12.0", python = ">=3.9,<3.14"} ] mypy = "^1.13.0" pylint = [ {version = "^3.1.0", python = "~3.8"}, {version = ">=3.3.1", python = ">=3.9,<3.13"} ] [tool.poetry.scripts] nicegui-pack = "nicegui.scripts.pack:main" [build-system] requires = [ "setuptools>=30.3.0", "poetry-core>=1.0.0" ] build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] addopts = "--driver Chrome" asyncio_mode = "auto" testpaths = ["tests"] asyncio_default_fixture_loop_scope = "function" filterwarnings = [ 'ignore::DeprecationWarning:^vbuild(\.|$)', 'ignore::DeprecationWarning:^websockets\.legacy(\.|$)', 'ignore::DeprecationWarning:^uvicorn\.protocols\.websockets(\.|$)', ] [tool.mypy] python_version = "3.8" install_types = true check_untyped_defs = true [[tool.mypy.overrides]] module = [ "markdown2", "matplotlib.*", "nicegui_highcharts", "plotly.*", "polars.*", "pyecharts.*", "sass", "socketio.*", "vbuild", "wait_for2", "webview.*", # can be removed with next pywebview release ] ignore_missing_imports = true [tool.autopep8] max-line-length = 120 [tool.ruff] target-version = "py38" indent-width = 4 line-length = 120 [tool.ruff.lint] # See complete list: https://docs.astral.sh/ruff/rules/ select = [ "I", # isort "E", # pycodestyle "W", # pycodestyle "B", # bugbear "F", # pyflakes "UP", # pyupgrade "RUF", # ruff "PL", # pylint ] fixable = [ "I", # isort "RUF022", # `__all__` is not sorted ] ignore = [ "E501", # line too long "UP006", # use pipe for union type annotation "UP007", # use pipe for union type annotation "PLR0911", # too many return statements "PLR0912", # too many branches "PLR0913", # too many arguments "PLR0915", # too many statements "PLR2004", # magic value comparison ] exclude = [ "website/documentation/content/*", ] [tool.pylint] disable = [ "C0103", # Invalid name (e.g., variable/function/class naming conventions) "C0114", # Missing module docstring "C0115", # Missing class docstring "C0301", # Line too long (exceeds character limit) "C0302", # Too many lines in module "R0801", # Similar lines in files "R0901", # Too many ancestors "R0902", # Too many instance attributes "R0903", # Too few public methods "R0904", # Too many public methods "R0911", # Too many return statements "R0912", # Too many branches "R0913", # Too many arguments "R0914", # Too many local variables "R0915", # Too many statements "R1705", # Unnecessary "else" after "return" "W0102", # Dangerous default value as argument "W0718", # Catching too general exception "W1203", # Use % formatting in logging functions ]