Skip to content

Commit f514e3e

Browse files
committed
Move packaging config to pyproject.toml
1 parent 3d43421 commit f514e3e

File tree

5 files changed

+150
-117
lines changed

5 files changed

+150
-117
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ share/python-wheels/
3232
.installed.cfg
3333
*.egg
3434
MANIFEST
35+
_version.py
3536
version.txt
3637

3738
# PyInstaller

newrelic/__init__.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,11 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from pathlib import Path
16-
17-
VERSION_FILE = Path(__file__).parent / "version.txt"
18-
1915
try:
20-
with VERSION_FILE.open() as f:
21-
version = f.read()
22-
except Exception:
23-
version = "0.0.0"
16+
from newrelic._version import __version__, __version_tuple__, version, version_tuple
17+
except ImportError: # pragma: no cover
18+
__version__ = version = "0.0.0" # pragma: no cover
19+
__version_tuple__ = version_tuple = (0, 0, 0) # pragma: no cover
2420

25-
version_info = list(map(int, version.split(".")))
21+
# Older compatibility attribute
22+
version_info = version_tuple

pyproject.toml

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,96 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
# ===========================
16+
# Project Build Configuration
17+
# ===========================
18+
19+
[project]
20+
name="newrelic"
21+
description = "New Relic Python Agent"
22+
authors = [{name = "New Relic", email = "[email protected]"}]
23+
maintainers = [{name = "New Relic", email = "[email protected]"}]
24+
readme = "README.md"
25+
# License requires setuptools>=77.0.3 for pyproject.toml, which is Python 3.9+
26+
# license = "Apache-2.0"
27+
# license-files = [
28+
# "LICENSE",
29+
# "THIRD_PARTY_NOTICES.md",
30+
# ]
31+
requires-python = ">=3.7"
32+
classifiers = [
33+
"Development Status :: 5 - Production/Stable",
34+
"Programming Language :: Python :: 3.7",
35+
"Programming Language :: Python :: 3.8",
36+
"Programming Language :: Python :: 3.9",
37+
"Programming Language :: Python :: 3.10",
38+
"Programming Language :: Python :: 3.11",
39+
"Programming Language :: Python :: 3.12",
40+
"Programming Language :: Python :: 3.13",
41+
"Programming Language :: Python :: Implementation :: CPython",
42+
"Programming Language :: Python :: Implementation :: PyPy",
43+
"Topic :: System :: Monitoring",
44+
]
45+
dynamic = ["version", "license"]
46+
47+
[project.urls]
48+
Homepage = "https://docs.newrelic.com/docs/apm/agents/python-agent/"
49+
GitHub = "https://github.com/newrelic/newrelic-python-agent"
50+
"Release Notes" = "https://docs.newrelic.com/docs/release-notes/agent-release-notes/python-release-notes/"
51+
52+
[project.optional-dependencies]
53+
infinite-tracing = ["grpcio", "protobuf"]
54+
55+
[project.scripts]
56+
newrelic-admin = "newrelic.admin:main"
57+
58+
[build-system]
59+
requires = [
60+
"setuptools>=61.2",
61+
"setuptools_scm>=3.2,<9",
62+
]
63+
build-backend = "setuptools.build_meta"
64+
65+
[tool.setuptools]
66+
zip-safe = false
67+
packages = [
68+
"newrelic",
69+
"newrelic.admin",
70+
"newrelic.api",
71+
"newrelic.bootstrap",
72+
"newrelic.common",
73+
"newrelic.core",
74+
"newrelic.extras",
75+
"newrelic.extras.framework_django",
76+
"newrelic.extras.framework_django.templatetags",
77+
"newrelic.hooks",
78+
"newrelic.network",
79+
"newrelic.packages",
80+
"newrelic.packages.isort",
81+
"newrelic.packages.isort.stdlibs",
82+
"newrelic.packages.urllib3",
83+
"newrelic.packages.urllib3.util",
84+
"newrelic.packages.urllib3.contrib",
85+
"newrelic.packages.urllib3.contrib._securetransport",
86+
"newrelic.packages.urllib3.packages",
87+
"newrelic.packages.urllib3.packages.backports",
88+
"newrelic.packages.wrapt",
89+
"newrelic.packages.opentelemetry_proto",
90+
"newrelic.samplers",
91+
]
92+
93+
[tool.setuptools.package-data]
94+
newrelic = ["newrelic.ini", "version.txt", "packages/urllib3/LICENSE.txt", "common/cacert.pem", "scripts/azure-prebuild.sh"]
95+
96+
[tool.setuptools_scm]
97+
write_to = "newrelic/_version.py"
98+
# Don't convert git_describe_command to an array, it doesn't seem to work properly on any versions of setuptools_scm.
99+
git_describe_command = 'git describe --dirty --tags --long --match "*.*.*"'
100+
101+
# ==================
102+
# Ruff Configuration
103+
# ==================
104+
15105
[tool.ruff]
16106
output-format = "grouped"
17107
line-length = 120
@@ -159,7 +249,10 @@ ignore = [
159249
"S108", # flake8-bandit (hardcoded log files are never used as input)
160250
]
161251

162-
# Other linters and formatters
252+
# =========================
253+
# Other Tools Configuration
254+
# =========================
255+
163256
[tool.flynt]
164257
line-length = 999999
165258
aggressive = true

setup.cfg

Lines changed: 0 additions & 8 deletions
This file was deleted.

setup.py

Lines changed: 49 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -63,33 +63,7 @@
6363
from distutils.errors import CCompilerError, DistutilsExecError, DistutilsPlatformError
6464

6565

66-
def newrelic_agent_guess_next_version(tag_version):
67-
if hasattr(tag_version, "tag"): # For setuptools_scm 7.0+
68-
tag_version = tag_version.tag
69-
70-
version, _, _ = str(tag_version).partition("+")
71-
version_info = list(map(int, version.split(".")))
72-
if len(version_info) < 3:
73-
return version
74-
version_info[1] += 1
75-
version_info[2] = 0
76-
return ".".join(map(str, version_info))
77-
78-
79-
def newrelic_agent_next_version(version):
80-
if version.exact:
81-
return version.format_with("{tag}")
82-
else:
83-
return version.format_next_version(newrelic_agent_guess_next_version, fmt="{guessed}")
84-
85-
86-
script_directory = Path(__file__).parent
87-
88-
readme_file = script_directory / "README.md"
89-
with readme_file.open() as f:
90-
readme_file_contents = f.read()
91-
92-
if sys.platform == "win32" and python_version > (2, 6):
66+
if sys.platform == "win32":
9367
build_ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError, IOError)
9468
else:
9569
build_ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
@@ -113,83 +87,59 @@ def build_extension(self, ext):
11387
raise BuildExtFailed()
11488

11589

116-
packages = [
117-
"newrelic",
118-
"newrelic.admin",
119-
"newrelic.api",
120-
"newrelic.bootstrap",
121-
"newrelic.common",
122-
"newrelic.core",
123-
"newrelic.extras",
124-
"newrelic.extras.framework_django",
125-
"newrelic.extras.framework_django.templatetags",
126-
"newrelic.hooks",
127-
"newrelic.network",
128-
"newrelic/packages",
129-
"newrelic/packages/isort",
130-
"newrelic/packages/isort/stdlibs",
131-
"newrelic/packages/urllib3",
132-
"newrelic/packages/urllib3/util",
133-
"newrelic/packages/urllib3/contrib",
134-
"newrelic/packages/urllib3/contrib/_securetransport",
135-
"newrelic/packages/urllib3/packages",
136-
"newrelic/packages/urllib3/packages/backports",
137-
"newrelic/packages/wrapt",
138-
"newrelic/packages/opentelemetry_proto",
139-
"newrelic.samplers",
140-
]
141-
142-
classifiers = [
143-
"Development Status :: 5 - Production/Stable",
144-
"License :: OSI Approved :: Apache Software License",
145-
"Programming Language :: Python :: 3.7",
146-
"Programming Language :: Python :: 3.8",
147-
"Programming Language :: Python :: 3.9",
148-
"Programming Language :: Python :: 3.10",
149-
"Programming Language :: Python :: 3.11",
150-
"Programming Language :: Python :: 3.12",
151-
"Programming Language :: Python :: 3.13",
152-
"Programming Language :: Python :: Implementation :: CPython",
153-
"Programming Language :: Python :: Implementation :: PyPy",
154-
"Topic :: System :: Monitoring",
155-
]
156-
15790
kwargs = dict(
15891
name="newrelic",
159-
use_scm_version={
160-
"version_scheme": newrelic_agent_next_version,
161-
"local_scheme": "no-local-version",
162-
"git_describe_command": "git describe --dirty --tags --long --match *.*.*",
163-
"write_to": "newrelic/version.txt",
164-
},
165-
setup_requires=["setuptools_scm>=3.2,<9"],
166-
description="New Relic Python Agent",
167-
long_description=readme_file_contents,
168-
long_description_content_type="text/markdown",
169-
url="https://docs.newrelic.com/docs/apm/agents/python-agent/",
170-
project_urls={"Source": "https://github.com/newrelic/newrelic-python-agent"},
171-
author="New Relic",
172-
author_email="[email protected]",
173-
maintainer="New Relic",
174-
maintainer_email="[email protected]",
92+
setup_requires=["setuptools>=61.2", "setuptools_scm>=3.2,<9"],
17593
license="Apache-2.0",
176-
zip_safe=False,
177-
classifiers=classifiers,
178-
packages=packages,
179-
python_requires=">=3.7",
180-
package_data={
181-
"newrelic": ["newrelic.ini", "version.txt", "packages/urllib3/LICENSE.txt", "common/cacert.pem", "scripts/azure-prebuild.sh"],
182-
},
183-
extras_require={"infinite-tracing": ["grpcio", "protobuf"]},
18494
)
18595

186-
if with_setuptools:
187-
kwargs["entry_points"] = {
188-
"console_scripts": ["newrelic-admin = newrelic.admin:main"],
189-
}
190-
else:
96+
if not with_setuptools:
97+
script_directory = os.path.dirname(__file__)
98+
if not script_directory:
99+
script_directory = os.getcwd()
100+
101+
readme_file = os.path.join(script_directory, "README.md")
102+
191103
kwargs["scripts"] = ["scripts/newrelic-admin"]
192104

105+
# Old config that now lives in pyproject.toml
106+
# Preserved here for backwards compatibility with distutils
107+
packages = [
108+
"newrelic",
109+
"newrelic.admin",
110+
"newrelic.api",
111+
"newrelic.bootstrap",
112+
"newrelic.common",
113+
"newrelic.core",
114+
"newrelic.extras",
115+
"newrelic.extras.framework_django",
116+
"newrelic.extras.framework_django.templatetags",
117+
"newrelic.hooks",
118+
"newrelic.network",
119+
"newrelic.packages",
120+
"newrelic.packages.isort",
121+
"newrelic.packages.isort.stdlibs",
122+
"newrelic.packages.urllib3",
123+
"newrelic.packages.urllib3.util",
124+
"newrelic.packages.urllib3.contrib",
125+
"newrelic.packages.urllib3.contrib._securetransport",
126+
"newrelic.packages.urllib3.packages",
127+
"newrelic.packages.urllib3.packages.backports",
128+
"newrelic.packages.wrapt",
129+
"newrelic.packages.opentelemetry_proto",
130+
"newrelic.samplers",
131+
]
132+
133+
kwargs.update(dict(
134+
python_requires=">=3.7",
135+
zip_safe=False,
136+
packages=packages,
137+
package_data={
138+
"newrelic": ["newrelic.ini", "version.txt", "packages/urllib3/LICENSE.txt", "common/cacert.pem", "scripts/azure-prebuild.sh"],
139+
},
140+
))
141+
142+
193143

194144
def with_librt():
195145
try:
@@ -253,9 +203,9 @@ def _run_setup():
253203

254204
with_extensions = os.environ.get("NEW_RELIC_EXTENSIONS", None)
255205
if with_extensions:
256-
if with_extensions.lower() == "true":
206+
if with_extensions.lower() in ["on", "true", "1"]:
257207
with_extensions = True
258-
elif with_extensions.lower() == "false":
208+
elif with_extensions.lower() in ["off", "false", "0"]:
259209
with_extensions = False
260210
else:
261211
with_extensions = None

0 commit comments

Comments
 (0)