aboutsummaryrefslogtreecommitdiff
path: root/utils/aur/AURUtils/types.py
diff options
context:
space:
mode:
author67au <[email protected]>2021-12-11 03:03:14 +0800
committerKunoi Sayami <[email protected]>2021-12-11 18:42:40 +0800
commitdcbf7ce789edce4042c674ab71fa89a25141084b (patch)
tree90e60440cd65b13d6ea46e32959b6d14e6b21724 /utils/aur/AURUtils/types.py
parent84a71e61c3a8674c9cee6f30240fb4d86cc1dc04 (diff)
feat(script): add new aur check
Signed-off-by: 67au <[email protected]>
Diffstat (limited to 'utils/aur/AURUtils/types.py')
-rw-r--r--utils/aur/AURUtils/types.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/utils/aur/AURUtils/types.py b/utils/aur/AURUtils/types.py
new file mode 100644
index 0000000..9830b08
--- /dev/null
+++ b/utils/aur/AURUtils/types.py
@@ -0,0 +1,78 @@
+from dataclasses import dataclass
+from datetime import datetime
+from collections.abc import Iterator
+from typing import Union
+
+from .aur_deps import depends_strip
+
+UrlParameterType = Union[str, list[str]]
+
+
+@dataclass()
+class Package:
+
+ ID: int
+ Name: str
+ PackageBaseID: int
+ PackageBase: str
+ Version: str
+ Description: str
+ URL: str
+ NumVotes: int
+ Popularity: float
+ OutOfDate: int
+ Maintainer: str
+ FirstSubmitted: int
+ LastModified: int
+ URLPath: str
+ Conflicts: list[str] = None
+ Provides: list[str] = None
+ Depends: list[str] = None
+ MakeDepends: list[str] = None
+ OptDepends: list[str] = None
+ License: list[str] = None
+ Keywords: list[str] = None
+
+ @property
+ def depends(self) -> list[str]:
+ return list(map(depends_strip, self.Depends))
+
+ @property
+ def makedepends(self) -> list[str]:
+ return list(map(depends_strip, self.MakeDepends))
+
+ @property
+ def optdepends(self) -> list[str]:
+ return list(self.OptDepends)
+
+ @property
+ def first_submitted(self) -> datetime:
+ return datetime.fromtimestamp(self.FirstSubmitted)
+
+ @property
+ def last_modified(self) -> datetime:
+ return datetime.fromtimestamp(self.LastModified)
+
+ def get_version(self) -> str:
+ return self.Version
+
+
+@dataclass
+class Results:
+
+ resultcount: int
+ results: list
+ type: str
+ version: int
+
+ @classmethod
+ def parse(cls, json_response: dict):
+ return Results(**json_response)
+
+ def empty(self) -> bool:
+ return self.resultcount == 0
+
+ def packages(self) -> Iterator[Package]:
+ if self.type in {'multiinfo', 'search'}:
+ return [Package(**i) for i in self.results]
+ return []