Les choses sérieuses commencent
This commit is contained in:
parent
7a9fe18463
commit
c63f62721b
41 changed files with 1270 additions and 0 deletions
45
erminig/controllers/evezh/parsers/http.py
Normal file
45
erminig/controllers/evezh/parsers/http.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import re
|
||||
import requests
|
||||
from erminig.controllers.evezh.abstract import UpstreamSource
|
||||
from erminig.system.retry import retry_on_failure
|
||||
|
||||
|
||||
class HttpSource(UpstreamSource):
|
||||
|
||||
@retry_on_failure()
|
||||
def get_latest(self):
|
||||
base_url = self.config["url"]
|
||||
pattern = self.config["pattern"]
|
||||
file_pattern = self.config.get("file")
|
||||
|
||||
response = requests.get(
|
||||
base_url, timeout=10
|
||||
) # timeout pour éviter de bloquer éternellement
|
||||
response.raise_for_status()
|
||||
html = response.text
|
||||
|
||||
matches = re.findall(pattern, html)
|
||||
if not matches:
|
||||
print(f"[{self.name}] Aucun match avec pattern : {pattern}")
|
||||
return None
|
||||
|
||||
latest_dir = sorted(set(matches), key=self.version_key)[-1]
|
||||
version = self.extract_version(latest_dir)
|
||||
|
||||
if file_pattern:
|
||||
filename = file_pattern.replace("${version}", version)
|
||||
url = f"{base_url}{latest_dir}{filename}"
|
||||
else:
|
||||
url = f"{base_url}{latest_dir}"
|
||||
|
||||
print(url)
|
||||
|
||||
return {"name": self.name, "version": version, "url": url}
|
||||
|
||||
def extract_version(self, path):
|
||||
match = re.search(r"([0-9]+\.[0-9]+(?:\.[0-9]+)?)", path)
|
||||
return match.group(1) if match else path
|
||||
|
||||
def version_key(self, ver):
|
||||
nums = re.findall(r"\d+", ver)
|
||||
return list(map(int, nums))
|
||||
Loading…
Add table
Add a link
Reference in a new issue