content: # SPDX-License-Identifier: Apache-2.0
  # Copyright 2021-2022 The Foundry Visionmongers Ltd
  
  [build-system]
  requires = [
      "setuptools>=65.5.0",
      "cmake==3.28.3",
      "ninja>=1.10.2.4",
      # For generating .pyi stub files.
      "pybind11-stubgen==2.5.1"
  ]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "openassetio"
  version = "1.0.0"
  requires-python = ">=3.10"
  
  authors = [
      { name = "Contributors to the OpenAssetIO project", email = "openassetio-discussion@lists.aswf.io" }
  ]
  description = """\
      An open-source interoperability standard for tools and content management systems used in \
      media production.\
      """
  keywords = ["asset", "ams", "dam", "mam", "pipeline", "dcc", "media", "resolver"]
  classifiers = [
      "Development Status :: 5 - Production/Stable",
      "Intended Audience :: Developers",
      "Topic :: Software Development :: Build Tools",
      "License :: OSI Approved :: Apache Software License",
      "Natural Language :: English",
      "Operating System :: MacOS",
      "Operating System :: Microsoft :: Windows",
      "Operating System :: POSIX :: Linux",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Topic :: Software Development :: Object Brokering",
      "Topic :: System :: Distributed Computing",
      "Topic :: System :: Filesystems"
  ]
  
  [project.urls]
  Source = "https://github.com/OpenAssetIO/OpenAssetIO"
  Documentation = "https://docs.openassetio.org/OpenAssetIO"
  Issues = "https://github.com/OpenAssetIO/OpenAssetIO/issues"
  
  [project.readme]
  # Don't link to README.md, since it has local hrefs that won't work on
  # PyPI. Instead, boil down the first couple of sections to give a brief
  # overview.
  text = """
  In modern creative pipelines, data is often managed by an authoritative system (Asset \
  Management System, Digital Asset Manager, MAM, et. al).
  
  It is common for media creation tools to reference this managed data by its present location \
  in a file system.
  
  OpenAssetIO enables tools to reference managed data by identity (using an "Entity Reference") \
  instead of a file system path.
  
  This is achieved through the definition of a common set of interactions between a host of the \
  API (eg: a Digital Content Creation tool or pipeline script) and an Asset Management System.
  
  This common API surface area removes the need for common pipeline business logic to be \
  re-implemented against the native API of each tool, and allows the tools themselves to design \
  new workflows that streamline the creation of complex assets. \
  """
  content-type = "text/markdown"
  
  [tool.pylint.messages_control]
  disable = [
      "too-many-arguments",
      "too-few-public-methods",
      # Disable Python 3 improvements:
      # - We've not definitely ruled 2 out
      # - Much of this code will move to C++
      "useless-object-inheritance",
      "super-with-arguments",
      "consider-using-f-string"
  ]
  # Presently it's not possible to disable the `duplicate-code` check for
  # specific files, so it thinks that symlinks are duplicated
  # implementation. We also have issues where multi-line calls are
  # classed as duplicates.
  #
  # See:
  #     https://github.com/PyCQA/pylint/issues/214
  #
  # As we're not going to have a lot of python
  # implementation anyway, use this trick to disable the similarity
  # checker globally.
  min-similarity-lines=10000
  
  # NB: This requires the use of pyproject-flake8
  [tool.flake8]
  max-line-length = 99
  extend-ignore = "E266,"
  
  [tool.pylint.format]
  max-line-length = 99
  
  [tool.pylint.basic]
  #module-naming-style = "camelCase"
  argument-naming-style = "camelCase"
  #attr-naming-style = "camelCase"
  #function-naming-style = "camelCase"
  #method-naming-style = "camelCase"
  #const-naming-style = "camelCase"
  class-const-naming-style = "camelCase"
  variable-naming-style = "camelCase"
  
  # Support both camelCase and PascalCase for modules
  module-rgx = "_?([a-z]|[A-Z])+([A-Z][a-z0-9]*)*"
  # camelCase doesn't include "__camelCase" or "test_camelCase"
  attr-rgx = "_?_?[a-z0-9]+([A-Z][a-z0-9]*)*"
  method-rgx = "(_?_|test_)?[a-z0-9]+([A-Z][a-z0-9]*)*"
  function-rgx = "(_|test_)?[a-z0-9]+([A-Z][a-z0-9]*)*"
  # C++ style constants, e.g. `kThing_SubThing`.
  const-rgx = "k([A-Z0-9]+[a-z0-9]*)+_?([A-Z0-9]+[a-z0-9]*)*"
  class-const-rgx = "k([A-Z0-9]+[a-z0-9]*)+_?([A-Z0-9]+[a-z0-9]*)*"
  
  [tool.pylint.similarities]
  # Ignore imports when computing similarities.
  ignore-imports = true
  
  [tool.black]
  line-length = 99
  target-version = ["py39"]
  
  [tool.cibuildwheel]
  test-requires = ["pytest==7.4.4", "pytest-subtests==0.11.0"]
  test-command = "pytest {package}/tests/package"
  environment-pass = ["PIP_VERBOSE", "OPENASSETIO_TEST_ENABLE_PYTHON_STUBGEN"]
  
  [tool.cibuildwheel.linux]
  # Linux runs in a docker container, with the project at top level
  before-build = "resources/build/bootstrap-cibuildwheel-manylinux.sh"
  environment = { CMAKE_TOOLCHAIN_FILE=".conan/conan_paths.cmake" }
  