Check whether our mirror packages are up to date.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mirror-checker/projects/artix.py

44 lines
1.3 KiB

"""
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