feat: migrate to pyproject.toml (#736)

* migrate to pyproject.toml

* remove version

* remove readme_filename

* remove long_description

* dynamic version

* move description

* move urls

* move packages

* zip_safe is deprecated

* include-package-data = true by default

* platforms are ignored

* Add copyright notice

* proto-plus when python_version >= '3.13'

* remove mypy.ini

* remove pytest.ini

---------

Co-authored-by: Anthonios Partheniou <partheniou@google.com>
diff --git a/mypy.ini b/mypy.ini
deleted file mode 100644
index ce33582..0000000
--- a/mypy.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[mypy]
-python_version = 3.7
-namespace_packages = True
-ignore_missing_imports = True
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..fda8f01
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,107 @@
+# Copyright 2024 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "google-api-core"
+authors = [{ name = "Google LLC", email = "googleapis-packages@google.com" }]
+license = { text = "Apache 2.0" }
+requires-python = ">=3.7"
+readme = "README.rst"
+description = "Google API client core library"
+classifiers = [
+  # Should be one of:
+  # "Development Status :: 3 - Alpha"
+  # "Development Status :: 4 - Beta"
+  # "Development Status :: 5 - Production/Stable"
+  "Development Status :: 5 - Production/Stable",
+  "Intended Audience :: Developers",
+  "License :: OSI Approved :: Apache Software License",
+  "Programming Language :: Python",
+  "Programming Language :: Python :: 3",
+  "Programming Language :: Python :: 3.7",
+  "Programming Language :: Python :: 3.8",
+  "Programming Language :: Python :: 3.9",
+  "Programming Language :: Python :: 3.10",
+  "Programming Language :: Python :: 3.11",
+  "Programming Language :: Python :: 3.12",
+  "Programming Language :: Python :: 3.13",
+  "Operating System :: OS Independent",
+  "Topic :: Internet",
+]
+dependencies = [
+  "googleapis-common-protos >= 1.56.2, < 2.0.dev0",
+  "protobuf >= 3.19.5, < 6.0.0.dev0, != 3.20.0, != 3.20.1, != 4.21.0, != 4.21.1, != 4.21.2, != 4.21.3, != 4.21.4, != 4.21.5",
+  "proto-plus >= 1.22.3, < 2.0.0dev",
+  "proto-plus >= 1.25.0, < 2.0.0dev; python_version >= '3.13'",
+  "google-auth >= 2.14.1, < 3.0.dev0",
+  "requests >= 2.18.0, < 3.0.0.dev0",
+]
+dynamic = ["version"]
+
+[project.urls]
+Documentation = "https://googleapis.dev/python/google-api-core/latest/"
+Repository = "https://github.com/googleapis/python-api-core"
+
+[project.optional-dependencies]
+async_rest = ["google-auth[aiohttp] >= 2.35.0, < 3.0.dev0"]
+grpc = [
+  "grpcio >= 1.33.2, < 2.0dev",
+  "grpcio >= 1.49.1, < 2.0dev; python_version >= '3.11'",
+  "grpcio-status >= 1.33.2, < 2.0.dev0",
+  "grpcio-status >= 1.49.1, < 2.0.dev0; python_version >= '3.11'",
+]
+grpcgcp = ["grpcio-gcp >= 0.2.2, < 1.0.dev0"]
+grpcio-gcp = ["grpcio-gcp >= 0.2.2, < 1.0.dev0"]
+
+[tool.setuptools.dynamic]
+version = { attr = "google.api_core.version.__version__" }
+
+[tool.setuptools.packages.find]
+# Only include packages under the 'google' namespace. Do not include tests,
+# benchmarks, etc.
+include = ["google*"]
+
+[tool.mypy]
+python_version = "3.7"
+namespace_packages = true
+ignore_missing_imports = true
+
+[tool.pytest]
+filterwarnings = [
+  # treat all warnings as errors
+  "error",
+  # Remove once https://github.com/pytest-dev/pytest-cov/issues/621 is fixed
+  "ignore:.*The --rsyncdir command line argument and rsyncdirs config variable are deprecated:DeprecationWarning",
+  # Remove once https://github.com/protocolbuffers/protobuf/issues/12186 is fixed
+  "ignore:.*custom tp_new.*in Python 3.14:DeprecationWarning",
+  # Remove once support for python 3.7 is dropped
+  # This warning only appears when using python 3.7
+  "ignore:.*Using or importing the ABCs from.*collections:DeprecationWarning",
+  # Remove once support for grpcio-gcp is deprecated
+  # See https://github.com/googleapis/python-api-core/blob/42e8b6e6f426cab749b34906529e8aaf3f133d75/google/api_core/grpc_helpers.py#L39-L45
+  "ignore:.*Support for grpcio-gcp is deprecated:DeprecationWarning",
+  "ignore: The `compression` argument is ignored for grpc_gcp.secure_channel creation:DeprecationWarning",
+  "ignore:The `attempt_direct_path` argument is ignored for grpc_gcp.secure_channel creation:DeprecationWarning",
+  # Remove once the minimum supported version of googleapis-common-protos is 1.62.0
+  "ignore:.*pkg_resources.declare_namespace:DeprecationWarning",
+  "ignore:.*pkg_resources is deprecated as an API:DeprecationWarning",
+  # Remove once https://github.com/grpc/grpc/issues/35086 is fixed (and version newer than 1.60.0 is published)
+  "ignore:There is no current event loop:DeprecationWarning",
+  # Remove after support for Python 3.7 is dropped
+  "ignore:After January 1, 2024, new releases of this library will drop support for Python 3.7:DeprecationWarning",
+]
diff --git a/pytest.ini b/pytest.ini
deleted file mode 100644
index 696548c..0000000
--- a/pytest.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-[pytest]
-filterwarnings =
-    # treat all warnings as errors
-    error
-    # Remove once https://github.com/pytest-dev/pytest-cov/issues/621 is fixed
-    ignore:.*The --rsyncdir command line argument and rsyncdirs config variable are deprecated:DeprecationWarning
-    # Remove once https://github.com/protocolbuffers/protobuf/issues/12186 is fixed
-    ignore:.*custom tp_new.*in Python 3.14:DeprecationWarning
-    # Remove once support for python 3.7 is dropped
-    # This warning only appears when using python 3.7
-    ignore:.*Using or importing the ABCs from.*collections:DeprecationWarning
-    # Remove once support for grpcio-gcp is deprecated
-    # See https://github.com/googleapis/python-api-core/blob/42e8b6e6f426cab749b34906529e8aaf3f133d75/google/api_core/grpc_helpers.py#L39-L45
-    ignore:.*Support for grpcio-gcp is deprecated:DeprecationWarning
-    ignore: The `compression` argument is ignored for grpc_gcp.secure_channel creation:DeprecationWarning
-    ignore:The `attempt_direct_path` argument is ignored for grpc_gcp.secure_channel creation:DeprecationWarning
-    # Remove once the minimum supported version of googleapis-common-protos is 1.62.0
-    ignore:.*pkg_resources.declare_namespace:DeprecationWarning
-    ignore:.*pkg_resources is deprecated as an API:DeprecationWarning
-    # Remove once https://github.com/grpc/grpc/issues/35086 is fixed (and version newer than 1.60.0 is published)
-    ignore:There is no current event loop:DeprecationWarning
-    # Remove after support for Python 3.7 is dropped
-    ignore:After January 1, 2024, new releases of this library will drop support for Python 3.7:DeprecationWarning
diff --git a/setup.py b/setup.py
index 2a9b3b3..168877f 100644
--- a/setup.py
+++ b/setup.py
@@ -12,97 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import io
-import os
-
 import setuptools
 
 
-# Package metadata.
-
-name = "google-api-core"
-description = "Google API client core library"
-
-# Should be one of:
-# 'Development Status :: 3 - Alpha'
-# 'Development Status :: 4 - Beta'
-# 'Development Status :: 5 - Production/Stable'
-release_status = "Development Status :: 5 - Production/Stable"
-dependencies = [
-    "googleapis-common-protos >= 1.56.2, < 2.0.dev0",
-    "protobuf>=3.19.5,<6.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5",
-    "proto-plus >= 1.22.3, < 2.0.0dev",
-    "proto-plus >= 1.25.0, < 2.0.0dev; python_version >= '3.13'",
-    "google-auth >= 2.14.1, < 3.0.dev0",
-    "requests >= 2.18.0, < 3.0.0.dev0",
-]
-extras = {
-    "async_rest": [
-        "google-auth[aiohttp] >= 2.35.0, < 3.0.dev0",
-    ],
-    "grpc": [
-        "grpcio >= 1.33.2, < 2.0dev",
-        "grpcio >= 1.49.1, < 2.0dev; python_version>='3.11'",
-        "grpcio-status >= 1.33.2, < 2.0.dev0",
-        "grpcio-status >= 1.49.1, < 2.0.dev0; python_version>='3.11'",
-    ],
-    "grpcgcp": "grpcio-gcp >= 0.2.2, < 1.0.dev0",
-    "grpcio-gcp": "grpcio-gcp >= 0.2.2, < 1.0.dev0",
-}
-
-
-# Setup boilerplate below this line.
-
-package_root = os.path.abspath(os.path.dirname(__file__))
-
-
-version = {}
-with open(os.path.join(package_root, "google/api_core/version.py")) as fp:
-    exec(fp.read(), version)
-version = version["__version__"]
-
-readme_filename = os.path.join(package_root, "README.rst")
-with io.open(readme_filename, encoding="utf-8") as readme_file:
-    readme = readme_file.read()
-
-# Only include packages under the 'google' namespace. Do not include tests,
-# benchmarks, etc.
-packages = [
-    package
-    for package in setuptools.find_namespace_packages()
-    if package.startswith("google")
-]
-
-setuptools.setup(
-    name=name,
-    version=version,
-    description=description,
-    long_description=readme,
-    author="Google LLC",
-    author_email="googleapis-packages@google.com",
-    license="Apache 2.0",
-    url="https://github.com/googleapis/python-api-core",
-    classifiers=[
-        release_status,
-        "Intended Audience :: Developers",
-        "License :: OSI Approved :: Apache Software License",
-        "Programming Language :: Python",
-        "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.7",
-        "Programming Language :: Python :: 3.8",
-        "Programming Language :: Python :: 3.9",
-        "Programming Language :: Python :: 3.10",
-        "Programming Language :: Python :: 3.11",
-        "Programming Language :: Python :: 3.12",
-        "Programming Language :: Python :: 3.13",
-        "Operating System :: OS Independent",
-        "Topic :: Internet",
-    ],
-    platforms="Posix; MacOS X; Windows",
-    packages=packages,
-    install_requires=dependencies,
-    extras_require=extras,
-    python_requires=">=3.7",
-    include_package_data=True,
-    zip_safe=False,
-)
+setuptools.setup()