summaryrefslogtreecommitdiff
path: root/meta/model/java.py
diff options
context:
space:
mode:
authorRachel Powers <508861+Ryex@users.noreply.github.com>2023-05-10 02:38:16 -0700
committerRachel Powers <508861+Ryex@users.noreply.github.com>2023-06-16 21:15:36 -0700
commitac5171ea4411803c731ad6e5ea3d7cc8d0f49208 (patch)
treef9dd627e91cee6374cdf2ff0d442c9df207b9230 /meta/model/java.py
parent5cea5ef1e6868bb75f0d0c2583a7a394838c0e08 (diff)
downloadProject-Tick-ac5171ea4411803c731ad6e5ea3d7cc8d0f49208.tar.gz
Project-Tick-ac5171ea4411803c731ad6e5ea3d7cc8d0f49208.zip
feat: fetch java metadata
Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
Diffstat (limited to 'meta/model/java.py')
-rw-r--r--meta/model/java.py439
1 files changed, 439 insertions, 0 deletions
diff --git a/meta/model/java.py b/meta/model/java.py
new file mode 100644
index 0000000000..d4d2e00cb9
--- /dev/null
+++ b/meta/model/java.py
@@ -0,0 +1,439 @@
+from . import (
+ MetaBase,
+)
+from pydantic import Field
+from datetime import datetime
+from enum import Enum
+from typing import Optional, List, Dict, Any, Iterator, Iterable, NamedTuple
+from collections import namedtuple
+from urllib.parse import urljoin, urlencode, urlparse, urlunparse
+
+# namedtuple to match the internal signature of urlunparse
+
+
+class URLComponents(NamedTuple):
+ scheme: str
+ netloc: str
+ url: str
+ path: str
+ query: str
+ fragment: str
+
+
+class APIQuery(MetaBase):
+
+ def to_query(self):
+ set_parts: dict[str, Any] = {}
+ for key, value in self.dict().items():
+ if value is not None:
+ if isinstance(value, Enum):
+ set_parts[key] = value.value
+ elif isinstance(value, list):
+ if len(value) > 0:
+ set_parts[key] = value
+ elif isinstance(value, datetime):
+ set_parts[key] = value.isoformat()
+ else:
+ set_parts[key] = value
+ return urlencode(set_parts, doseq=True)
+
+
+class AdoptiumJvmImpl(Enum):
+ Hostspot = "hotspot"
+
+
+class AdoptiumVendor(Enum):
+ Eclipse = "eclipse"
+
+
+class AdoptiumArchitecture(Enum):
+ X64 = "x64"
+ X86 = "x86"
+ X32 = "x32"
+ Ppc64 = "ppc64"
+ Ppc64le = "ppc64le"
+ S390x = "s390x"
+ Aarch64 = "aarch64"
+ Arm = "arm"
+ Sparcv9 = "sparcv9"
+ Riscv64 = "riscv64"
+
+
+class AdoptiumReleaseType(Enum):
+ GenralAccess = "ga"
+ EarlyAccess = "ea"
+
+
+class AdoptiumSortMethod(Enum):
+ Default = "DEFAULT"
+ Date = "DATE"
+
+
+class AdoptiumSortOrder(Enum):
+ Asc = "ASC"
+ Desc = "DESC"
+
+
+class AdoptiumImageType(Enum):
+ Jdk = "jdk"
+ Jre = "jre"
+ Testimage = "testimage"
+ Debugimage = "debugimage"
+ Staticlibs = "staticlibs"
+ Sources = "sources"
+ Sbom = "sbom"
+
+
+class AdoptiumHeapSize(Enum):
+ Normal = "normal"
+ Large = "large"
+
+
+class AdoptiumProject(Enum):
+ Jdk = "jdk"
+ Valhalla = "valhalla"
+ Metropolis = "metropolis"
+ Jfr = "jfr"
+ Shenandoah = "shenandoah"
+
+
+class AdoptiumCLib(Enum):
+ Musl = "musl"
+ Glibc = "Glibc"
+
+
+class AdoptiumOs(Enum):
+ Linux = "linux"
+ Windows = "windows"
+ Mac = "mac"
+ Solaris = "solaris"
+ Aix = "aix"
+ AlpineLinux = "alpine-linux"
+
+
+ADOPTIUM_API_BASE = " https://api.adoptium.net"
+ADOPTIUM_API_FEATURE_RELEASES = f"{ADOPTIUM_API_BASE}/v3/assets/feature_releases/{{feature_version}}/{{release_type}}"
+# ?image_type={{image_type}}&heap_size={{heap_size}}&project={{project}}&vender={{vender}}&page_size={{page_size}}&page={{page}}&sort_method={{sort_method}}&sort_order={{sort_order}}
+ADOPTIUM_API_AVAILABLE_RELEASES = f"{ADOPTIUM_API_BASE}/v3/info/available_releases"
+
+
+class AdoptiumAPIFeatureReleasesQuery(APIQuery):
+ architecture: Optional[AdoptiumArchitecture] = None
+ before: Optional[datetime] = None
+ c_lib: Optional[AdoptiumCLib] = None
+ heap_size: Optional[AdoptiumHeapSize] = AdoptiumHeapSize.Normal
+ image_type: Optional[AdoptiumImageType] = None
+ jvm_impl: Optional[AdoptiumJvmImpl] = None
+ os: Optional[AdoptiumOs] = None
+ page_size: int = 10
+ page: int = 0
+ project: Optional[AdoptiumProject] = AdoptiumProject.Jdk
+ sort_method: Optional[AdoptiumSortMethod] = AdoptiumSortMethod.Default
+ sort_order: Optional[AdoptiumSortOrder] = AdoptiumSortOrder.Desc
+ vender: Optional[AdoptiumVendor] = AdoptiumVendor.Eclipse
+
+
+def adoptiumAPIFeatureReleases(
+ feature: int,
+ release_type: AdoptiumReleaseType = AdoptiumReleaseType.GenralAccess,
+ query: AdoptiumAPIFeatureReleasesQuery = AdoptiumAPIFeatureReleasesQuery()
+):
+ url = urlparse(ADOPTIUM_API_FEATURE_RELEASES.format(
+ feature_version=feature,
+ release_type=release_type.value,
+ ))
+ return urlunparse(url._replace(query=query.to_query()))
+
+
+class AdoptiumAvailableReleases(MetaBase):
+ available_releases: list[int]
+ available_lts_releases: list[int]
+ most_recent_lts: Optional[int]
+ most_recent_feature_release: Optional[int]
+ most_recent_feature_version: Optional[int]
+ tip_version: Optional[int]
+
+
+class AdoptiumFile(MetaBase):
+ name: str
+ link: str
+ size: Optional[int]
+
+
+class AdoptiumPackage(AdoptiumFile):
+ checksum: Optional[str]
+ checksum_link: Optional[str]
+ signature_link: Optional[str]
+ download_count: Optional[int]
+ metadata_link: Optional[str]
+
+
+class AdoptiumBinary(MetaBase):
+ os: str
+ architecture: AdoptiumArchitecture
+ image_type: AdoptiumImageType
+ c_lib: Optional[AdoptiumCLib]
+ jvm_impl: AdoptiumJvmImpl
+ package: Optional[AdoptiumPackage]
+ installer: Optional[AdoptiumPackage]
+ heap_size: AdoptiumHeapSize
+ download_count: Optional[int]
+ updated_at: datetime
+ scm_ref: Optional[str]
+ project: AdoptiumProject
+
+
+class AdoptiumVersion(MetaBase):
+ major: Optional[int]
+ minor: Optional[int]
+ security: Optional[int]
+ patch: Optional[int]
+ pre: Optional[str]
+ adopt_build_number: Optional[int]
+ semver: str
+ openjdk_version: str
+ build: Optional[int]
+ optional: Optional[str]
+
+
+class AdoptiumRelease(MetaBase):
+ release_id: str = Field(alias="id")
+ release_link: str
+ release_name: str
+ timestamp: datetime
+ updated_at: datetime
+ binaries: list[AdoptiumBinary]
+ download_count: Optional[int]
+ release_type: str
+ vendor: AdoptiumVendor
+ version_data: AdoptiumVersion
+ source: Optional[AdoptiumFile]
+ release_notes: Optional[AdoptiumFile]
+
+
+class AdoptiumReleasesWrap(MetaBase):
+ releases: list[AdoptiumRelease]
+
+
+class AzulProduct(Enum):
+ Zulu = "zulu"
+
+
+class AzulAvailabilityType(Enum):
+ SA = "SA"
+ CA = "CA"
+ NV = "NV"
+ _LA = "LA"
+
+
+class AzulJavaPackageType(Enum):
+ Jdk = "jdk"
+ Jre = "jre"
+
+
+class AzulReleaseType(Enum):
+ CPU = "CPU"
+ PSU = "PSU"
+ LU = "LU"
+
+
+class AzulOs(Enum):
+ Linux = "linux"
+ Macos = "macos"
+ Qnx = "qnx"
+ Windows = "windows"
+ Solaris = "solaris"
+
+
+class AzulLibCType(Enum):
+ Glibc = "glibc"
+ Uclibc = "uclibc"
+ Musl = "musl"
+
+
+class AzulCPUGen(Enum):
+ V5 = "v5"
+ V6kV6kz = "v6k_v6kz"
+ V6t2 = "v6t2"
+ V7 = "v7"
+ V8 = "v8"
+
+
+class AzulArch(Enum):
+ Arm = "arm"
+ X86 = "x86"
+ Mips = "mips"
+ Ppc = "ppc"
+ Sparcv9 = "sparcv9"
+ Sparc = "sparc"
+
+
+class AzulHwBitness(Enum):
+ X32 = 32
+ X64 = 64
+
+
+class AzulAbi(Enum):
+ HardFloat = "hard_float"
+ SoftFloat = "soft_float"
+ Spe = "spe"
+ Any = "any"
+
+
+class AzulArchiveType(Enum):
+ Deb = "deb"
+ Rpm = "rpm"
+ Dmg = "dmg"
+ Targz = "tar.gz"
+ Zip = "zip"
+ Cab = "cab"
+ Msi = "msi"
+
+
+class AzulReleaseStatus(Enum):
+ Eval = "eval"
+ Ea = "ea"
+ Ga = "ga"
+ Both = "both"
+
+
+class AzulSupportTerm(Enum):
+ Sts = "sts"
+ Mts = "mts"
+ Lts = "lts"
+
+
+class AzulCertifications(Enum):
+ Tck = "tck"
+ _Aqavit = "aqavit"
+ none = "none"
+
+
+class AzulSignatureType(Enum):
+ Openpgp = "openpgp"
+
+
+class AzulOsQueryParam(Enum):
+ Macos = "macos"
+ Windows = "windows"
+ Linux = "linux"
+ LinuxMusl = "linux-musl"
+ LinuxGlibc = "linux-glibc"
+ Qnx = "qnx"
+ Solaris = "solaris"
+
+
+class AzulArchQueryParam(Enum):
+ X86 = "x86"
+ X64 = "x64"
+ Amd64 = "amd64"
+ I686 = "i686"
+ Arm = "arm"
+ Aarch64 = "aarch64"
+ Aarch32 = "aarch32"
+ Aarch32sf = "aarch32sf"
+ Aarch32hf = "aarch32hf"
+ Ppc = "ppc"
+ Ppc64 = "ppc64"
+ Ppc64hf = "ppc64hf"
+ Ppc32 = "ppc32"
+ Ppc32spe = "ppc32spe"
+ Ppc32hf = "ppc32hf"
+ Sparc = "sparc"
+ Sparc32 = "sparc32"
+ Sparcv9 = "sparcv9"
+ Sparcv9_64 = "sparcv9-64"
+
+
+AZUL_API_BASE = "https://api.azul.com/metadata/v1"
+AZUL_API_PACKAGES = f"{AZUL_API_BASE}/zulu/packages/"
+AZUL_API_PACKAGE_DETAIL = f"{AZUL_API_BASE}/zulu/packages/{{package_uuid}}"
+
+
+class AzulApiPackagesQuery(APIQuery):
+ java_version: Optional[str] = None
+ os: Optional[AzulOsQueryParam] = None
+ arch: Optional[AzulArchQueryParam] = None
+ archive_type: Optional[AzulArchiveType] = None
+ java_package_type: Optional[AzulJavaPackageType] = None
+ javafx_bundled: Optional[bool] = None
+ crac_supported: Optional[bool] = None
+ support_term: Optional[AzulSupportTerm] = None
+ release_type: Optional[AzulReleaseType] = None
+ latest: Optional[bool] = None
+ distro_version: Optional[str] = None
+ java_package_features: list[str] = []
+ release_status: Optional[AzulReleaseStatus] = None
+ availability_types: list[AzulAvailabilityType] = None
+ certifications: list[AzulCertifications] = None
+ include_fields: list[str] = []
+ page: int = 0
+ page_size: int = 100
+
+
+def azulApiPackages(query: AzulApiPackagesQuery = AzulApiPackagesQuery()):
+ url = urlparse(AZUL_API_PACKAGES)
+ return urlunparse(url._replace(query=query.to_query()))
+
+
+def azulApiPackageDetail(package_uuid: str):
+ return AZUL_API_PACKAGE_DETAIL.format(package_uuid=package_uuid)
+
+
+class ZuluSignatureDetail(MetaBase):
+ type: AzulSignatureType
+ url: str
+ details: dict[str, Any]
+ signature_index: int
+ signature: str
+
+
+class ZuluPackageDetail(MetaBase):
+ package_uuid: str
+ name: Optional[str]
+ md5_hash: Optional[str]
+ sha256_hash: Optional[str]
+ build_date: datetime
+ last_modified: datetime
+ download_url: str
+ product: AzulProduct
+ availability_type: AzulAvailabilityType
+ java_version: list[int]
+ openjdk_build_number: Optional[int]
+ java_package_type: AzulJavaPackageType
+ javafx_bundled: bool
+ release_type: AzulReleaseType
+ os: AzulOs
+ lib_c_type: Optional[AzulLibCType]
+ cpu_gen: Optional[list[AzulCPUGen]]
+ arch: AzulArch
+ hw_bitness: AzulHwBitness
+ abi: AzulAbi
+ archive_type: AzulArchiveType
+ release_status: AzulReleaseStatus
+ support_term: AzulSupportTerm
+ certifications: Optional[list[AzulCertifications]]
+ latest: Optional[bool]
+ size: int
+ distro_version: list[int]
+ signatures: list[ZuluSignatureDetail]
+
+
+class ZuluPackageList(MetaBase):
+ package_uuid: str
+ name: Optional[str]
+ java_version: list[int]
+ openjdk_build_number: Optional[int]
+ latest: Optional[bool]
+ download_url: str
+ product: Optional[AzulProduct]
+ distro_version: list[int]
+ availability_type: Optional[AzulAvailabilityType]
+
+
+class ZuluPackagesListWrap(MetaBase):
+ packages: list[ZuluPackageList]
+
+
+class ZuluPackagesDetailListWrap(MetaBase):
+ packages: list[ZuluPackageDetail]