Commit 19be065b authored by shadMod's avatar shadMod 💬

added UbuntuRelease() to get list of all versions

replaced CompileVersion().get_list_version with self.list_version
parent 077430d8
......@@ -13,16 +13,64 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import traceback
import toml
import json
import requests
from lxml import html
from urllib.request import urlopen
from urllib.error import HTTPError
class UbuntuRelease:
def __init__(self, path_url=None, ignore_lts=None, ignore_interim=None):
self.path_url = path_url
self.ignore_lts = ignore_lts
self.ignore_interim = ignore_interim
@property
def row_list(self) -> list:
# get requests
res = requests.get(self.path_url)
# check requests status code
status = res.status_code
if status != 200:
raise Exception(f"Error requests - status: {status}")
# get all table rows
table_rows = html.fromstring(res.content).xpath('//pre//text()')
# init clean row and row_list
row = []
row_list = []
# get table_rows without header
for val in table_rows[8:]:
val = val.strip()
if val:
if 'Ubuntu ' not in val:
row.append(val.replace("/", ""))
else:
row.append(val)
row_list.append(row)
row = []
return row_list
@property
def get_list_version(self) -> dict:
data = {"latest": [], "lts": []}
for row in self.row_list:
if not row[0].split(".")[0].isnumeric():
continue
if 'LTS' in row[1]:
name = row[1].split("(")[1].replace(")", "")
short = name.split()[0].lower()
data['lts'].append((row[0], short, name))
else:
name = row[1].split("(")[1].replace(")", "")
short = name.split()[0].lower()
data['latest'].append((row[0], short, name))
return data
class CompileVersion:
"""
:param ARM64: set distro with arm64 architecture
......@@ -46,7 +94,7 @@ class CompileVersion:
def __init__(
self,
path_url: str = "https://releases.ubuntu.com/?C=M;O=A",
path_url: str = "https://releases.ubuntu.com/",
path_out: str = "../../data/downloads.toml",
constants: str = "./assets/costants.json",
ignore_interim: list = None,
......@@ -58,6 +106,12 @@ class CompileVersion:
self.ignore_interim = ignore_interim if ignore_interim else []
self.ignore_lts = ignore_lts if ignore_lts else []
self.list_version = UbuntuRelease(
path_url=self.path_url,
ignore_lts=self.ignore_lts,
ignore_interim=self.ignore_interim,
).get_list_version
@property
def data_sources(self) -> list:
return [
......@@ -89,36 +143,11 @@ class CompileVersion:
@property
def ver_lts_list(self) -> list:
return self.get_list_version["lts"]
return self.list_version["lts"]
@property
def ver_interim_list(self) -> list:
return self.get_list_version["latest"]
@property
def get_list_version(self) -> dict:
res = requests.get(self.path_url)
status = res.status_code
if status != 200:
raise Exception(f"Error requests - status: {status}")
ver_list = {"latest": [], "lts": []}
table_rows = res.text.split('<img src="/icons/folder.gif" alt="[DIR]"> ')[1:]
for val in table_rows:
row = val.split('/">')
version = row[0].replace('<a href="', "")
if "Ubuntu " in row[1] and "." in version:
_version, name = row[1].split("Ubuntu ")[1].split("(")
name = name.replace(")\n", "")
codename = name.split(" ")[0].lower()
ver, release_type = _version.split(" ")[0:2]
if release_type == "LTS":
if codename not in self.ignore_lts:
ver_list["lts"].append((version, codename, name))
else:
if codename not in self.ignore_interim:
ver_list["latest"].append((version, codename, name))
return ver_list
return self.list_version["latest"]
def compile_download(self) -> None:
# put constants in empty data
......@@ -192,7 +221,7 @@ class CompileVersion:
def populate_archs_releases(self, distro: str, arch: str) -> dict:
rels = {}
for key, data in self.get_list_version.items():
for key, data in self.list_version.items():
rels[key] = self.get_releases(data, distro, arch, key)
if not rels:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment