1#

2# Copyright (C) 2019-2025 Mathieu Parent <math.parent@gmail.com>

3#

4# This program is free software: you can redistribute it and/or modify

5# it under the terms of the GNU Lesser General Public License as published by

6# the Free Software Foundation, either version 3 of the License, or

7# (at your option) any later version.

8#

9# This program is distributed in the hope that it will be useful,

10# but WITHOUT ANY WARRANTY; without even the implied warranty of

11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

12# GNU Lesser General Public License for more details.

13#

14# You should have received a copy of the GNU Lesser General Public License

15# along with this program. If not, see <http://www.gnu.org/licenses/>.

16

17 from __future__ import annotations

18

19 from dataclasses import KW_ONLY, dataclass, field

20 from typing import TYPE_CHECKING

21

22 if TYPE_CHECKING: 22 ↛ 23 line 22 didn't jump to line 23 because the condition on line 22 was never true

23 from typing import Literal

24

25

26@dataclass

27 class PackageFile:

28 url: str

29 package_type: Literal["generic", "helm", "pypi"]

30 package_name: str

31 package_version: str = "0"

32 file_name: str = ""

33 _: KW_ONLY

34 metadata: dict[str, str] = field(default_factory=dict)

35 force: bool = False

36 delete: bool = False

37

38 def __post_init__(self) -> None:

39 if not self.file_name:

40 self.file_name = self.url.split("/").pop()