Skip to content

Commit bdcf2e8

Browse files
Updated Packaging (#1480)
* Remove unused linters from pyproject.toml * Move packaging config to pyproject.toml * Update setuptools_scm requirement * Add exclude for version file --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 568eb0a commit bdcf2e8

File tree

6 files changed

+151
-171
lines changed

6 files changed

+151
-171
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: 93 additions & 55 deletions
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 = "support@newrelic.com"}]
23+
maintainers = [{name = "New Relic", email = "support@newrelic.com"}]
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>=6.4,<10",
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,61 +249,9 @@ ignore = [
159249
"S108", # flake8-bandit (hardcoded log files are never used as input)
160250
]
161251

162-
# Alternate linters and formatters
163-
[tool.black]
164-
line-length = 120
165-
include = '\.pyi?$'
166-
167-
[tool.isort]
168-
profile = "black"
169-
170-
[tool.pylint.messages_control]
171-
disable = [
172-
"C0103",
173-
"C0114",
174-
"C0115",
175-
"C0116",
176-
"C0209",
177-
"C0302",
178-
"C0415",
179-
"E0401",
180-
"E1120",
181-
"R0205",
182-
"R0401",
183-
"R0801",
184-
"R0902",
185-
"R0903",
186-
"R0904",
187-
"R0911",
188-
"R0912",
189-
"R0913",
190-
"R0914",
191-
"R0915",
192-
"R1705",
193-
"R1710",
194-
"R1725",
195-
"W0201",
196-
"W0212",
197-
"W0223",
198-
"W0402",
199-
"W0603",
200-
"W0612",
201-
"W0613",
202-
"W0702",
203-
"W0703",
204-
"W0706",
205-
"line-too-long",
206-
"redefined-outer-name",
207-
]
208-
209-
[tool.pylint.format]
210-
max-line-length = "120"
211-
212-
[tool.pylint.basic]
213-
good-names = "exc,val,tb"
214-
215-
[tool.bandit]
216-
skips = ["B110", "B101", "B404"]
252+
# =========================
253+
# Other Tools Configuration
254+
# =========================
217255

218256
[tool.flynt]
219257
line-length = 999999

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="support@newrelic.com",
173-
maintainer="New Relic",
174-
maintainer_email="support@newrelic.com",
92+
setup_requires=["setuptools>=61.2", "setuptools_scm>=6.4,<10"],
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

tox.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,8 @@ usefixtures =
587587
branch = True
588588
disable_warnings = couldnt-parse
589589
source = newrelic
590+
omit =
591+
**/_version.py
590592

591593
[coverage:paths]
592594
source =

0 commit comments

Comments
 (0)