[build-system] requires = ["setuptools~=70.3.0"] build-backend = "setuptools.build_meta" # We will keep handling dependencies in setup.py # since it helps us organize and isolate version management [project] name = "openmetadata-ingestion" version = "1.6.0.0.dev0" dynamic = ["readme", "dependencies", "optional-dependencies"] authors = [ { name = "OpenMetadata Committers" } ] license = { file = "LICENSE" } description = "Ingestion Framework for OpenMetadata" requires-python = ">=3.8" [project.urls] Homepage = "https://open-metadata.org/" Documentation = "https://docs.open-metadata.org/" Source = "https://github.com/open-metadata/OpenMetadata" [tool.setuptools.dynamic] readme = { file = ["README.md"] } [tool.setuptools.packages.find] where = ["./src"] exclude = ["tests*"] namespaces = true [tool.setuptools.package-data] "metadata.examples" = ["workflows/*.yaml"] "_openmetadata_testutils" = ["data/**/*"] [project.scripts] metadata = "metadata.cmd:metadata" [project.entry-points.apache_airflow_provider] provider_info = "airflow_provider_openmetadata:get_provider_config" [tool.coverage.run] source = [ "env/lib/python3.9/site-packages/metadata" ] relative_files = true branch = true [tool.coverage.report] omit = [ "*__init__*", "*/generated/*", "tests/*", "ingestion/src/*", "*/src/metadata/ingestion/source/database/sample_*" ] [tool.mypy] mypy_path = "src" plugins = [ "sqlalchemy.ext.mypy.plugin", "pydantic.mypy" ] ignore_missing_imports = true namespace_packages = true strict_optional = true check_untyped_defs = true # eventually we'd like to enable these disallow_untyped_defs = false disallow_incomplete_defs = false [tool.pytest.ini_options] markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')" ] [project.entry-points.pytest11] pytest_openmetadata = "_openmetadata_testutils.pytest_openmetadata.plugin" [tool.pylint.BASIC] # W1203: logging-fstring-interpolation - f-string brings better readability and unifies style # W1202: logging-format-interpolation - lazy formatting in logging functions # R0903: too-few-public-methods - False negatives in pydantic classes # W0707: raise-missing-from - Tends to be a false positive as exception are closely encapsulated # R0901: too-many-ancestors - We are already inheriting from SQA classes with a bunch of ancestors # W0703: broad-except - We are dealing with many different source systems, but we want to make sure workflows run until the end # W0511: fixme - These are internal notes and guides # W1518: method-cache-max-size-none - allow us to use LRU Cache with maxsize `None` to speed up certain calls disable = "W1203,W1202,R0903,W0707,R0901,W1201,W0703,W0511,W1518" docstring-min-length = 20 max-args = 7 max-attributes = 12 # usual typevar naming good-names = "T,C,fn,db,df,i" module-rgx = "(([a-z_][a-z0-9_]*)|([a-zA-Z0-9]+))$" [tool.pylint.MASTER] fail-under = 6.0 init-hook = "from pylint.config import find_default_config_files; import os, sys; sys.path.append(os.path.dirname(next(find_default_config_files())))" extension-pkg-allow-list = "pydantic" load-plugins = "ingestion.plugins.print_checker" max-public-methods = 25 ignore-paths = [ "ingestion/src/metadata/generated", # TODO - Remove these as we fix the linting issues "ingestion/src/metadata/data_quality/validations/column/sqlalchemy/columnValuesToBeUnique.py", "ingestion/src/metadata/clients/azure_client.py", "ingestion/src/metadata/ingestion/ometa/mixins/es_mixin.py", "ingestion/src/metadata/ingestion/api/topology_runner.py", "ingestion/src/metadata/data_quality/validations/mixins/sqa_validator_mixin.py", "ingestion/src/metadata/utils/datalake/datalake_utils.py", "ingestion/src/metadata/great_expectations/action.py", "ingestion/src/metadata/profiler/interface/nosql/profiler_interface.py", "ingestion/src/metadata/profiler/processor/sampler/nosql/sampler.py", "ingestion/src/metadata/ingestion/source", "ingestion/src/metadata/profiler/metrics", "ingestion/src/metadata/profiler/source/databricks", ] [tool.pylint."MESSAGES CONTROL"] disable = "no-name-in-module,import-error,duplicate-code" enable = "useless-suppression" [tool.pylint.FORMAT] # We all have big monitors now max-line-length = 120 [tool.black] extend-exclude = "src/metadata/generated" [tool.pycln] all = true extend-exclude = "src/metadata/generated" [tool.isort] skip_glob = [ "src/metadata/generated/*", "build/*", "env/*", "../openmetadata-airflow-apis/build/*" ] profile = "black" indent = " " multi_line_output = 3 known_first_party = "ingestion" [tool.basedpyright] include = ["src"] exclude = [ "**/__pycache__", "src/metadata/generated/*", "src/metadata/__version__.py", ] # TODO: Remove the ignored paths little by little. ignore = [ "src/_openmetadata_testutils/*", "src/airflow_provider_openmetadata/*", "src/metadata/antlr/*", "src/metadata/automations/*", "src/metadata/cli/*", "src/metadata/clients/*", "src/metadata/config/*", "src/metadata/data_insight/*", "src/metadata/data_quality/*", "src/metadata/examples/*", "src/metadata/great_expectations/*", "src/metadata/ingestion/*", "src/metadata/mixins/*", "src/metadata/parsers/*", "src/metadata/pii/*", "src/metadata/profiler/*", "src/metadata/readers/*", "src/metadata/timer/*", "src/metadata/utils/*", "src/metadata/workflow/base.py", "src/metadata/workflow/application.py", "src/metadata/workflow/data_insight.py", "src/metadata/workflow/data_quality.py", "src/metadata/workflow/ingestion.py", "src/metadata/workflow/metadata.py", "src/metadata/workflow/profiler.py", "src/metadata/workflow/usage.py", "src/metadata/workflow/workflow_status_mixin.py", ] reportDeprecated = false reportMissingTypeStubs = false reportAny = false