Rewriting named queries based on obfuscated releases.toml - Thanks buovjaga.
This commit is contained in:
parent
b8052e08a7
commit
7f72b1a855
|
|
@ -9,6 +9,8 @@ import requests
|
|||
import subprocess
|
||||
import shlex
|
||||
from lxml import html
|
||||
from base64 import b64decode
|
||||
import tomllib
|
||||
|
||||
# Constants
|
||||
DOWNLOADPAGE = "https://www.libreoffice.org/download/download/"
|
||||
|
|
@ -18,13 +20,21 @@ DAILY = "https://dev-builds.libreoffice.org/daily/master/"
|
|||
PRERELEASE = "https://dev-builds.libreoffice.org/pre-releases/deb/x86_64/"
|
||||
|
||||
SELECTORS = {
|
||||
'still': {
|
||||
'URL': DOWNLOADPAGE,
|
||||
'xpath': '(//span[@class="dl_version_number"])[last()]/text()'
|
||||
'latest': {
|
||||
'URL': '',
|
||||
'selector': "latestMajor"
|
||||
},
|
||||
'fresh': {
|
||||
'URL': DOWNLOADPAGE,
|
||||
'xpath': '(//span[@class="dl_version_number"])[1]/text()'
|
||||
'URL': '',
|
||||
'selector': "latestMajor"
|
||||
},
|
||||
'previous': {
|
||||
'URL': '',
|
||||
'selector': "previousMajor"
|
||||
},
|
||||
'still': {
|
||||
'URL': '',
|
||||
'selector': "previousMajor"
|
||||
},
|
||||
'prerelease': {
|
||||
'URL': DOWNLOADPAGE,
|
||||
|
|
@ -44,6 +54,13 @@ def match_xpath(url: str, xpath: str):
|
|||
parsed = html.fromstring(resource.content)
|
||||
return parsed.xpath(xpath)
|
||||
|
||||
@staticmethod
|
||||
def get_releases_as_dict() -> dict:
|
||||
"""Official releases of LO via obfuscated releses.toml."""
|
||||
RELEASE_OBFUSCATED = "https://git.libreoffice.org/infra/libreofficeorg/+/refs/heads/master/data/releases.toml?format=TEXT"
|
||||
request = requests.get(RELEASE_OBFUSCATED)
|
||||
return tomllib.loads(b64decode(request.text).decode('UTF-8'))
|
||||
|
||||
|
||||
# Classes
|
||||
class Version():
|
||||
|
|
@ -114,7 +131,7 @@ class Solver():
|
|||
solver = self
|
||||
if self.text in { 'current', 'yesterday', 'daily' }:
|
||||
solver = DailySolver(self.text, self.default_to_current)
|
||||
elif self.text in { 'still', 'fresh', 'prerelease' }:
|
||||
elif self.text in { 'still', 'fresh', 'prerelease', 'latest', 'previous' }:
|
||||
solver = NamedSolver(self.text)
|
||||
elif '.' in self.text:
|
||||
solver = NumberedSolver(self.text)
|
||||
|
|
@ -217,6 +234,14 @@ class NamedSolver(Solver):
|
|||
|
||||
def solve(self):
|
||||
"""Get versions from query."""
|
||||
|
||||
if 'selector' in SELECTORS[self.text].keys():
|
||||
# Version parsed from releases.toml.
|
||||
selector = SELECTORS[self.text]['selector']
|
||||
self.generalver = get_releases_as_dict()[selector]
|
||||
else:
|
||||
# Release searched via xpath on URL
|
||||
|
||||
xpath_query = SELECTORS[self.text]['xpath']
|
||||
results = sorted(match_xpath(self.baseurl, xpath_query))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue