[build-system] requires = ["setuptools>=61", "setuptools_scm[toml]>=7"] build-backend = "setuptools.build_meta" [project] name = "dvc" description = "Git for data scientists - manage your code and data together" readme = "README.rst" keywords = [ "data-science", "data-version-control", "machine-learning", "git", "developer-tools", "reproducibility", "collaboration", "ai", ] license = { text = "Apache License 2.0" } authors = [{ name = "Dmitry Petrov", email = "dmitry@dvc.org" }] maintainers = [{ name = "Iterative", email = "support@dvc.org" }] requires-python = ">=3.8" dependencies = [ "colorama>=0.3.9", "configobj>=5.0.6", "voluptuous>=0.11.7", "requests>=2.22.0", # See https://github.com/bdcht/grandalf/issues/26 "grandalf==0.6", "distro>=1.3.0", "appdirs>=1.4.3", "ruamel.yaml>=0.17.11", "tomlkit>=0.11.1", "funcy>=1.14", "pathspec>=0.9.0,<0.10.0", "shortuuid>=0.5.0", "tqdm>=4.63.1,<5", "packaging>=19.0", "zc.lockfile>=1.2.1", "flufl.lock>=5", "networkx>=2.5", "psutil>=5.8.0", "pydot>=1.2.4", "importlib-resources>=5.2.2; python_version < '3.9'", "flatten_dict>=0.4.1,<1", "tabulate>=0.8.7", "pygtrie>=2.3.2", "dpath>=2.0.2,<3", "shtab>=1.3.4,<2", "rich>=10.13.0", "pyparsing>=2.4.7", "typing-extensions>=3.7.4", "scmrepo==0.1.4", "dvc-render==0.0.15", "dvc-task==0.1.8", "dvclive>=1.2.2", "dvc-data==0.28.4", "dvc-http==2.27.2", "hydra-core>=1.1.0", "iterative-telemetry==0.0.6", "dvc-studio-client>=0.1.1" ] dynamic = ["version"] classifiers = [ "Development Status :: 4 - Beta", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", ] [project.optional-dependencies] azure = ["dvc-azure==2.20.5"] gdrive = ["dvc-gdrive==2.19.1"] gs = ["dvc-gs==2.20.0"] hdfs = ["dvc-hdfs==2.19.0"] oss = ["dvc-oss==2.19.0"] s3 = ["dvc-s3==2.21.0"] ssh = ["dvc-ssh==2.20.0"] ssh_gssapi = ["dvc-ssh[gssapi]==2.20.0"] webdav = ["dvc-webdav==2.19.0"] webhdfs = ["dvc-webhdfs==2.19.0"] webhdfs_kerberos = ["dvc-webhdfs[kerberos]==2.19.0"] terraform = ["tpi[ssh]>=2.1.0"] testing = ["pytest-test-utils==0.0.8"] tests = [ "tpi[ssh]>=2.1.0", "dvc-ssh==2.20.0", "pytest-test-utils==0.0.8", # Test requirements "pytest==7.2.0", "pytest-cov==4.0.0", "pytest-xdist==3.1.0", "pytest-mock==3.10.0", "pytest-lazy-fixture==0.6.3", # https://github.com/docker/docker-py/issues/2902 "pytest-docker==0.11.0; python_version < '3.10' or sys_platform != 'win32'", "flaky==3.7.0", "pytest-timeout==2.1.0", "filelock==3.8.2", "beautifulsoup4==4.11.1", "pywin32>=225; sys_platform == 'win32'", # optional dependency # pylint requirements "pylint==2.15.9", # we use this to suppress pytest-related false positives in our tests. "pylint-pytest==1.1.2", # we use this to suppress some messages in tests, eg: foo/bar naming, # and, protected method calls in our tests "pylint-plugin-utils==0.7", # type-checking "mypy==0.991", "types-requests", "types-tabulate", "types-toml", ] all = ["dvc[azure,gdrive,gs,hdfs,oss,s3,ssh,webdav,webhdfs]"] dev = ["dvc[azure,gdrive,gs,hdfs,oss,s3,ssh,webdav,webhdfs,tests]"] [project.urls] Documentation = "https://dvc.org/doc" "Bug Tracker" = "https://github.com/iterative/dvc/issues" Source = "https://github.com/iterative/dvc" [project.scripts] dvc = "dvc.cli:main" [project.entry-points."fsspec.specs"] dvc = "dvc.api:DVCFileSystem" [tool.setuptools] license-files = ["LICENSE"] [tool.setuptools.packages] find = {namespaces = false, exclude=["tests", "tests.*"]} [tool.setuptools_scm] write_to = "dvc/_dvc_version.py" [tool.black] line-length = 79 include = '\.pyi?$' exclude = ''' /( \.eggs | \.git | \.hg | \.mypy_cache | \.tox | \.venv | _build | buck-out | build | dist )/ ''' [tool.isort] profile = "black" known_first_party = ["dvc", "dvc_data", "dvc_objects", "dvc_render", "dvc_task", "tests"] line_length = 79 [tool.pytest.ini_options] log_level = "debug" addopts = "-ra --cov-config pyproject.toml" markers = [ "needs_internet: Might need network access for the tests", "vscode: Tests verifying contract between DVC and VSCode plugin", "studio: Tests verifying contract between DVC and Studio", ] xfail_strict = true testpaths = ["tests"] filterwarnings = ["error::pytest_mock.PytestMockWarning"] [tool.coverage.run] branch = true source = ["dvc", "tests"] [tool.coverage.paths] source = ["dvc"] [tool.coverage.report] show_missing = true exclude_lines = [ "pragma: no cover", "if __name__ == .__main__.:", "if typing.TYPE_CHECKING:", "if TYPE_CHECKING:", "raise NotImplementedError", "raise AssertionError", "@overload", ] [tool.mypy] # Error output show_column_numbers = true show_error_codes = true show_error_context = true show_traceback = true pretty = true # See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports. ignore_missing_imports = true implicit_optional = true check_untyped_defs = false # Warnings warn_no_return = true warn_redundant_casts = true warn_unreachable = true files = ["dvc"] [tool.pylint.master] extension-pkg-whitelist = ["pygit2"] init-hook = "import sys; sys.path.append(str('tests'))" load-plugins = ["pylint_pytest", "pylint_plugin_disable"] [tool.pylint.message_control] disable = [ "format", "refactoring", "spelling", "design", "invalid-name", "duplicate-code", "fixme", "unused-wildcard-import", "cyclic-import", "wrong-import-order", "wrong-import-position", "ungrouped-imports", "multiple-imports", "logging-format-interpolation", "logging-fstring-interpolation", "missing-function-docstring", "missing-module-docstring", "missing-class-docstring", "raise-missing-from", "import-outside-toplevel", "cannot-enumerate-pytest-fixtures", ] enable = ["c-extension-no-member", "no-else-return"] [tool.pylint.typecheck] generated-members = ["pytest.lazy_fixture", "logging.TRACE", "logger.trace", "sys.getwindowsversion", "argparse.Namespace"] ignored-classes = ["Dvcfile"] ignored-modules = ["azure"] signature-mutators = ["funcy.decorators.decorator"] [tool.pylint.variables] dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_" ignored-argument-names = "_.*|^ignored_|^unused_|args|kwargs" [tool.codespell] ignore-words-list = "ba,datas,fo,uptodate,cachable,falsy"