mirror of
https://github.com/home-assistant/core
synced 2024-10-04 07:58:43 +02:00
Use regex instead of partition to section package definition (#58278)
This commit is contained in:
parent
e38754a836
commit
2a7192167d
@ -22,7 +22,9 @@ from .model import Config, Integration
|
||||
IGNORE_PACKAGES = {
|
||||
commented.lower().replace("_", "-") for commented in COMMENT_REQUIREMENTS
|
||||
}
|
||||
PACKAGE_REGEX = re.compile(r"^(?:--.+\s)?([-_\.\w\d]+).*==.+$")
|
||||
PACKAGE_REGEX = re.compile(
|
||||
r"^(?:--.+\s)?([-_\.\w\d\[\]]+)(==|>=|<=|~=|!=|<|>|===)*(.*)$"
|
||||
)
|
||||
PIP_REGEX = re.compile(r"^(--.+\s)?([-_\.\w\d]+.*(?:==|>=|<=|~=|!=|<|>|===)?.*$)")
|
||||
SUPPORTED_PYTHON_TUPLES = [
|
||||
REQUIRED_PYTHON_VER[:2],
|
||||
@ -84,16 +86,19 @@ def validate_requirements_format(integration: Integration) -> bool:
|
||||
)
|
||||
continue
|
||||
|
||||
pkg, sep, version = req.partition("==")
|
||||
pkg, sep, version = PACKAGE_REGEX.match(req).groups()
|
||||
|
||||
if not sep and integration.core:
|
||||
if integration.core and sep != "==":
|
||||
integration.add_error(
|
||||
"requirements",
|
||||
f'Requirement {req} need to be pinned "<pkg name>==<version>".',
|
||||
)
|
||||
continue
|
||||
|
||||
if AwesomeVersion(version).strategy == AwesomeVersionStrategy.UNKNOWN:
|
||||
if (
|
||||
version
|
||||
and AwesomeVersion(version).strategy == AwesomeVersionStrategy.UNKNOWN
|
||||
):
|
||||
integration.add_error(
|
||||
"requirements",
|
||||
f"Unable to parse package version ({version}) for {pkg}.",
|
||||
|
@ -45,7 +45,7 @@ def test_validate_requirements_format_wrongly_pinned(integration: Integration):
|
||||
|
||||
def test_validate_requirements_format_ignore_pin_for_custom(integration: Integration):
|
||||
"""Test requirement ignore pinning for custom."""
|
||||
integration.manifest["requirements"] = ["test_package>=1"]
|
||||
integration.manifest["requirements"] = ["test_package>=1", "test_package"]
|
||||
integration.path = Path("")
|
||||
assert validate_requirements_format(integration)
|
||||
assert len(integration.errors) == 0
|
||||
@ -63,6 +63,9 @@ def test_validate_requirements_format_invalid_version(integration: Integration):
|
||||
|
||||
def test_validate_requirements_format_successful(integration: Integration):
|
||||
"""Test requirement with successful result."""
|
||||
integration.manifest["requirements"] = ["test_package==1.2.3"]
|
||||
integration.manifest["requirements"] = [
|
||||
"test_package==1.2.3",
|
||||
"test_package[async]==1.2.3",
|
||||
]
|
||||
assert validate_requirements_format(integration)
|
||||
assert len(integration.errors) == 0
|
||||
|
Loading…
Reference in New Issue
Block a user