Les choses sérieuses commencent
This commit is contained in:
parent
7a9fe18463
commit
c63f62721b
41 changed files with 1270 additions and 0 deletions
122
erminig/controllers/evezh/check.py
Normal file
122
erminig/controllers/evezh/check.py
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
import json
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
|
||||
|
||||
from erminig.controllers.evezh.parsers.github import GitHubSource
|
||||
from erminig.controllers.evezh.parsers.http import HttpSource
|
||||
from erminig.controllers.evezh.parsers.sourceforge import SourceForgeRSS
|
||||
from erminig.handlers.versions import handle_new_version
|
||||
from erminig.models.db import ErminigDB
|
||||
from erminig.models import upstreams, versions
|
||||
|
||||
|
||||
def load_state(path):
|
||||
if Path(path).exists():
|
||||
return json.loads(Path(path).read_text())
|
||||
return {}
|
||||
|
||||
|
||||
def save_state(path, state):
|
||||
Path(path).write_text(json.dumps(state, indent=2))
|
||||
|
||||
|
||||
def sync_db(config_path):
|
||||
config = get_config(config_path)
|
||||
print(config)
|
||||
|
||||
with ErminigDB() as db:
|
||||
for proj in config:
|
||||
name = proj["name"]
|
||||
type_ = "http"
|
||||
if "github" in proj:
|
||||
type_ = "github"
|
||||
url = proj["github"]
|
||||
elif "sourceforge" in proj:
|
||||
type_ = "sourceforge"
|
||||
url = proj["sourceforge"]
|
||||
else:
|
||||
url = proj.get("url", "")
|
||||
|
||||
pattern = proj.get("pattern", "")
|
||||
file = proj.get("file", None)
|
||||
upstreams.upsert_upstream(db, name, type_, url, pattern, file)
|
||||
|
||||
print("Synchronisation terminée.")
|
||||
|
||||
|
||||
def make_source(name, config):
|
||||
if "github" in config:
|
||||
return GitHubSource(name, config)
|
||||
elif "sourceforge" in config:
|
||||
return SourceForgeRSS(name, config)
|
||||
else:
|
||||
return HttpSource(name, config)
|
||||
|
||||
|
||||
def apply_template(name, template_name, templates):
|
||||
tpl = templates.get(template_name)
|
||||
if not tpl:
|
||||
raise ValueError(f"Template '{template_name}' non trouvé.")
|
||||
return {
|
||||
"url": tpl["url"].replace("@NAME@", name),
|
||||
"pattern": tpl["pattern"].replace("@NAME@", name),
|
||||
}
|
||||
|
||||
|
||||
def get_config(path):
|
||||
with open(path) as f:
|
||||
full = yaml.safe_load(f)
|
||||
|
||||
templates = full.get("templates", {})
|
||||
projects = full.get("projects", [])
|
||||
|
||||
resolved = []
|
||||
|
||||
for proj in projects:
|
||||
name = proj["name"]
|
||||
new_proj = proj.copy()
|
||||
|
||||
if "template" in proj:
|
||||
tpl = apply_template(name, proj["template"], templates)
|
||||
new_proj["url"] = tpl["url"]
|
||||
new_proj["pattern"] = tpl["pattern"]
|
||||
|
||||
resolved.append(new_proj)
|
||||
|
||||
return resolved
|
||||
|
||||
|
||||
def check_versions(config_path, state=None):
|
||||
results = []
|
||||
with ErminigDB() as db:
|
||||
for row in upstreams.get_all_upstreams(db):
|
||||
proj = dict(row)
|
||||
if proj["type"] == "github":
|
||||
proj["github"] = proj["url"]
|
||||
elif proj["type"] == "sourceforge":
|
||||
proj["sourceforge"] = proj["url"]
|
||||
else:
|
||||
proj["url"] = proj["url"]
|
||||
upstream_id = proj["id"]
|
||||
name = proj["name"]
|
||||
source = make_source(name, proj)
|
||||
latest = source.get_latest()
|
||||
if latest:
|
||||
results.append(latest)
|
||||
version = latest["version"]
|
||||
url = latest["url"]
|
||||
handle_new_version(db, upstream_id, name, version, url)
|
||||
elif state and name in state:
|
||||
print(f"[{name}] Serveur HS. On garde l’ancienne version.")
|
||||
results.append(
|
||||
{
|
||||
"name": name,
|
||||
"version": state[name]["version"],
|
||||
"url": state[name]["url"],
|
||||
}
|
||||
)
|
||||
else:
|
||||
print(f"[{name}] Aucune version détectée.")
|
||||
|
||||
return results
|
||||
Loading…
Add table
Add a link
Reference in a new issue