[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] requires-python = ">=3.10" dependencies = [ "aiofiles", "aiosqlite", "cryptography>42.0.0", "pyOpenSSL>23.2.0", "python-dateutil", "pytz", "sortedcontainers", "typing-extensions", "wait_for2==0.3.2;python_version<'3.12'", ] version = "1.1.8" name = "asyncua" description = "Pure Python OPC-UA client and server library" readme = "README.md" license = { text = "GNU Lesser General Public License v3 or later" } authors = [ { name = "Olivier Roulet-Dubonnet", email = "olivier.roulet@gmail.com" }, ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries :: Python Modules", ] [dependency-groups] dev = [ "pytest", "pytest-asyncio", "coverage", "pytest-cov", "pytest-repeat", "pytest-mock", "asynctest", "types-aiofiles", "types-pyOpenSSL", "types-python-dateutil", "types-pytz", "ruff", ] lint = ["ruff", "mypy", "pre-commit"] [project.scripts] uabrowse = "asyncua.tools:uals" uacall = "asyncua.tools:uacall" uaclient = "asyncua.tools:uaclient" uadiscover = "asyncua.tools:uadiscover" uageneratestructs = "asyncua.tools:uageneratestructs" uahistoryread = "asyncua.tools:uahistoryread" uals = "asyncua.tools:uals" uaread = "asyncua.tools:uaread" uaserver = "asyncua.tools:uaserver" uasubscribe = "asyncua.tools:uasubscribe" uawrite = "asyncua.tools:uawrite" [project.urls] Homepage = "http://freeopcua.github.io/" Repository = "https://github.com/FreeOpcUa/opcua-asyncio" [tool.hatch.build.targets.sdist] include = ["/asyncua"] [tool.pytest.ini_options] log_cli = false log_level = "INFO" testpaths = ["tests"] asyncio_mode = "auto" asyncio_default_test_loop_scope = "module" asyncio_default_fixture_loop_scope = "module" [tool.ruff] line-length = 120 extend-exclude = [ "docs", "nodeset", "schemas", "*_auto.py", "event_objects.py", "standard_address_space_services.py", ] [tool.ruff.lint] select = ["E", "F", "G004", "W", "UP"] ignore = [ "E111", # conflicts with ruff format, cf doc "E114", # conflicts with ruff format, cf doc "E117", # conflicts with ruff format, cf doc "E501", # conflicts with ruff format, cf doc "UP032", # Use f-string instead of `format` call "UP030", # Use implicit references for positional format fields # The following can be removed once the minimum supported Python version is 3.10 # https://github.com/astral-sh/ruff/issues/5035 "UP006", # Use `list` instead of `List` for type annotation "UP007", # Use `X | Y` for type annotations "UP035", # list instead of List again?? ] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401", "F403"] "examples/*" = ["F841", "E402"] [tool.mypy] disable_error_code = ["misc", "arg-type", "assignment", "var-annotated"] show_error_codes = true check_untyped_defs = false mypy_path = "./stubs" [[tool.mypy.overrides]] # Autogenerated file module = "asyncua.ua.uaprotocol_auto.*" disable_error_code = "literal-required" [[tool.mypy.overrides]] module = "asyncua.client.*" check_untyped_defs = true [[tool.mypy.overrides]] module = "asynctest.*" ignore_missing_imports = true