Skip to content

Commit 46233bc

Browse files
committed
Switch version in Package to Version with conversion from string
and add pydantic to mypy plugins
1 parent 4f39517 commit 46233bc

File tree

4 files changed

+29
-18
lines changed

4 files changed

+29
-18
lines changed

exasol/toolbox/util/dependencies/poetry_dependencies.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class PoetryDependencies(BaseModel):
8383
def _extract_from_line(line: str) -> Package:
8484
pattern = r"\s+(\d+(?:\.\d+)*)\s+"
8585
match = re.split(pattern, line)
86-
return Package(name=match[0], version=match[1])
86+
return Package(name=match[0], version=match[1]) #
8787

8888
def _extract_from_poetry_show(self, output_text: str) -> list[Package]:
8989
return [self._extract_from_line(line) for line in output_text.splitlines()]

exasol/toolbox/util/dependencies/shared_models.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
from __future__ import annotations
22

3-
from pydantic import BaseModel
3+
from packaging.version import Version
4+
from pydantic import (
5+
BaseModel,
6+
field_validator,
7+
)
48

59

610
class Package(BaseModel):
711
name: str
8-
version: str
12+
version: Version
913

1014
class Config:
1115
frozen = True
16+
arbitrary_types_allowed = True
17+
18+
@field_validator("version", mode="before")
19+
def convert_version(cls, v: str) -> Version:
20+
return Version(v)
1221

1322
@property
1423
def normalized_name(self) -> str:

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ fail-under = 7.5
102102
max-line-length = 88
103103
max-module-lines = 800
104104

105+
[tool.mypy]
106+
plugins = ['pydantic.mypy']
105107

106108
[[tool.mypy.overrides]]
107109
module = [

test/unit/util/dependencies/licenses_test.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class TestPackageLicense:
2020
@staticmethod
2121
def test_package_link_map_unknown_to_none():
2222
result = PackageLicense(
23-
name="dummy", version="dummy", package_link="UNKNOWN", license="dummy"
23+
name="dummy", version="0.1.0", package_link="UNKNOWN", license="dummy"
2424
)
2525
assert result.package_link is None
2626

@@ -34,7 +34,7 @@ def test_package_link_map_unknown_to_none():
3434
)
3535
def test_license_link(license, expected):
3636
result = PackageLicense(
37-
name="dummy", version="dummy", package_link="dummy", license=license
37+
name="dummy", version="0.1.0", package_link="dummy", license=license
3838
)
3939
assert result.license_link == expected
4040

@@ -74,26 +74,26 @@ def test_normalize(licenses, expected):
7474
"License": "license1",
7575
"Name": "name1",
7676
"URL": "link1",
77-
"Version": "version1"
77+
"Version": "0.1.0"
7878
},
7979
{
8080
"License": "license2",
8181
"Name": "name2",
8282
"URL": "UNKNOWN",
83-
"Version": "version2"
83+
"Version": "0.2.0"
8484
}
8585
]
8686
""",
8787
[
8888
PackageLicense(
8989
name="name1",
90-
version="version1",
90+
version="0.1.0",
9191
package_link="link1",
9292
license="license1",
9393
),
9494
PackageLicense(
9595
name="name2",
96-
version="version2",
96+
version="0.2.0",
9797
package_link=None,
9898
license="license2",
9999
),
@@ -112,28 +112,28 @@ def test_packages_from_json(json, expected):
112112
(
113113
{
114114
MAIN_GROUP.name: [
115-
Package(name="package1", version="version1"),
116-
Package(name="package3", version="version3"),
115+
Package(name="package1", version="0.1.0"),
116+
Package(name="package3", version="0.1.0"),
117117
],
118-
DEV_GROUP.name: [Package(name="package2", version="version2")],
118+
DEV_GROUP.name: [Package(name="package2", version="0.2.0")],
119119
},
120120
[
121121
PackageLicense(
122122
name="package1",
123123
package_link="package_link1",
124-
version="version1",
124+
version="0.1.0",
125125
license="GPLv1",
126126
),
127127
PackageLicense(
128128
name="package2",
129129
package_link="package_link2",
130-
version="version2",
130+
version="0.2.0",
131131
license="GPLv2",
132132
),
133133
PackageLicense(
134134
name="package3",
135135
package_link="UNKNOWN",
136-
version="version3",
136+
version="0.3.0",
137137
license="license3",
138138
),
139139
],
@@ -148,13 +148,13 @@ def test_packages_to_markdown(dependencies, packages):
148148
## Main Dependencies
149149
|Package|Version|License|
150150
|---|---|---|
151-
|[package1](package_link1)|version1|[GPLv1](https://www.gnu.org/licenses/old-licenses/gpl-1.0.html)|
152-
|package3|version3|license3|
151+
|[package1](package_link1)|0.1.0|[GPLv1](https://www.gnu.org/licenses/old-licenses/gpl-1.0.html)|
152+
|package3|0.3.0|license3|
153153
154154
## Dev Dependencies
155155
|Package|Version|License|
156156
|---|---|---|
157-
|[package2](package_link2)|version2|[GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)|
157+
|[package2](package_link2)|0.2.0|[GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)|
158158
159159
"""
160160
)

0 commit comments

Comments
 (0)