|
|
|
@ -2,8 +2,43 @@ |
|
|
|
|
Contains Artix class |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
import re |
|
|
|
|
from datetime import datetime |
|
|
|
|
import requests |
|
|
|
|
|
|
|
|
|
from project import Project |
|
|
|
|
from shared import CSC_MIRROR |
|
|
|
|
|
|
|
|
|
def _get_date(url): |
|
|
|
|
req = requests.head(url) |
|
|
|
|
req.raise_for_status() |
|
|
|
|
return datetime.strptime(req.headers['Last-Modified'], '%a, %d %b %Y %H:%M:%S %Z') |
|
|
|
|
|
|
|
|
|
class Artix(Project): |
|
|
|
|
"""Artix class""" |
|
|
|
|
@classmethod |
|
|
|
|
def check(cls, data, project, current_time): |
|
|
|
|
csc_url = CSC_MIRROR + data[project]['csc'] |
|
|
|
|
upstream_url = data[project]['upstream'] |
|
|
|
|
|
|
|
|
|
req = requests.get(upstream_url) |
|
|
|
|
req.raise_for_status() |
|
|
|
|
index = req.text |
|
|
|
|
|
|
|
|
|
repos = re.findall(r'href="(\w+)/"', index); |
|
|
|
|
|
|
|
|
|
outdated_since = None |
|
|
|
|
for repo in repos: |
|
|
|
|
# Good enough for now, we can change it if Artix gets more arch in the future |
|
|
|
|
db_path = repo + '/os/x86_64/' + repo + '.db' |
|
|
|
|
upstream_date = _get_date(data[project]['upstream'] + db_path) |
|
|
|
|
csc_date = _get_date(CSC_MIRROR + data[project]['csc'] + db_path) |
|
|
|
|
if csc_date < upstream_date: |
|
|
|
|
if outdated_since is None or upstream_date < outdated_since: |
|
|
|
|
outdated_since = upstream_date |
|
|
|
|
|
|
|
|
|
if outdated_since is not None: |
|
|
|
|
data[project]['out_of_sync_since'] = int(outdated_since.timestamp()) |
|
|
|
|
return (datetime.now() - outdated_since).total_seconds() < data[project]['out_of_sync_interval'] |
|
|
|
|
|
|
|
|
|
return True |
|
|
|
|