forked from public/mirror-checker
commit
c05702bd2c
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains AlmaLinux class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class AlmaLinux(Distro): |
||||
"""AlmaLinux class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Alpine class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Alpine(Distro): |
||||
"""Alpine class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Apache class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Apache(Distro): |
||||
"""Apache class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Arch class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Arch(Distro): |
||||
"""Arch class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains CentOS class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class CentOS(Distro): |
||||
"""CentOS class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Ceph class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Ceph(Distro): |
||||
"""Ceph class""" |
@ -1,17 +0,0 @@ |
||||
""" |
||||
Contains CPAN class |
||||
""" |
||||
|
||||
import requests |
||||
from distro import Distro |
||||
from shared import CSC_MIRROR |
||||
|
||||
class CPAN(Distro): |
||||
"""CPAN class""" |
||||
@staticmethod |
||||
def check(data, distro, current_time): |
||||
res_json = requests.get("http://mirrors.cpan.org/cpan-json.txt").json() |
||||
for mirror in res_json: |
||||
if mirror["url"] == f"{CSC_MIRROR}CPAN/": |
||||
return current_time - int(mirror["age"]) <= data[distro]["out_of_sync_interval"] |
||||
return False |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Cygwin class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Cygwin(Distro): |
||||
"""Cygwin class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Debian class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Debian(Distro): |
||||
"""Debian class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains DebianCD class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class DebianCD(Distro): |
||||
"""DebianCD class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains DebianMultimedia class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class DebianMultimedia(Distro): |
||||
"""DebianMultimedia class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains DebianPorts class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class DebianPorts(Distro): |
||||
"""DebianPorts class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains DebianSecurity class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class DebianSecurity(Distro): |
||||
"""DebianSecurity class""" |
@ -1,16 +0,0 @@ |
||||
""" |
||||
Contains abstract class for a distro |
||||
""" |
||||
|
||||
from abc import ABC |
||||
import requests |
||||
from shared import CSC_MIRROR |
||||
|
||||
class Distro(ABC): |
||||
"""Abstract class for a distro""" |
||||
@staticmethod |
||||
def check(data, distro): |
||||
"""Check if distro packages are up-to-date""" |
||||
csc_url = CSC_MIRROR + data[distro]["csc"] + data[distro]["file"] |
||||
upstream_url = data[distro]["upstream"] + data[distro]["file"] |
||||
return requests.get(csc_url).text == requests.get(upstream_url).text |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Eclipse class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Eclipse(Distro): |
||||
"""Eclipse class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Fedora class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Fedora(Distro): |
||||
"""Fedora class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains FreeBSD class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class FreeBSD(Distro): |
||||
"""FreeBSD class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains GentooDistfiles class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class GentooDistfiles(Distro): |
||||
"""GentooDistfiles class""" |
@ -1,29 +0,0 @@ |
||||
""" |
||||
Contains GentooPortage class |
||||
""" |
||||
|
||||
import os |
||||
from distro import Distro |
||||
|
||||
class GentooPortage(Distro): |
||||
"""GentooPortage class""" |
||||
@staticmethod |
||||
def check(data, distro): |
||||
rsync_command = "rsync -q {}{} {}" |
||||
os.system(rsync_command.format(data[distro]["csc"], |
||||
data[distro]["file"], |
||||
"csc_manifest")) |
||||
os.system(rsync_command.format(data[distro]["upstream1"], |
||||
data[distro]["file"], |
||||
"upstream_manifest1")) |
||||
os.system(rsync_command.format(data[distro]["upstream2"], |
||||
data[distro]["file"], |
||||
"upstream_manifest2")) |
||||
stream1 = os.popen("diff csc_manifest upstream_manifest1") |
||||
output1 = stream1.read() |
||||
stream2 = os.popen("diff csc_manifest upstream_manifest2") |
||||
output2 = stream2.read() |
||||
os.system("rm csc_manifest") |
||||
os.system("rm upstream_manifest1") |
||||
os.system("rm upstream_manifest2") |
||||
return 0 in [len(output1), len(output2)] |
@ -1,40 +0,0 @@ |
||||
""" |
||||
Contains GNOME class |
||||
""" |
||||
|
||||
import re |
||||
import requests |
||||
from distro import Distro |
||||
from shared import CSC_MIRROR |
||||
|
||||
class GNOME(Distro): |
||||
"""GNOME class""" |
||||
@staticmethod |
||||
def check(data, distro): |
||||
file = data[distro]["file1"] |
||||
csc_versions = requests.get(CSC_MIRROR + data[distro]["csc"] + file).text |
||||
upstream_versions = requests.get(data[distro]["upstream1"] + file).text |
||||
csc_latest = re.findall(r"\"\d+\.?\d*", csc_versions)[-1].lstrip('"') |
||||
upstream_latest = re.findall(r"\"\d+\.?\d*", upstream_versions)[-1].lstrip('"') |
||||
if csc_latest != upstream_latest: |
||||
return False |
||||
file += csc_latest + "/" |
||||
csc_versions = requests.get(CSC_MIRROR + data[distro]["csc"] + file).text |
||||
upstream_versions = requests.get(data[distro]["upstream1"] + file).text |
||||
csc_latest = re.findall(r"\"\d+\.?\w*\.?\w*", csc_versions)[-1].lstrip('"') |
||||
upstream_latest = re.findall(r"\"\d+\.?\w*\.?\w*", upstream_versions)[-1].lstrip('"') |
||||
if csc_latest != upstream_latest: |
||||
return False |
||||
file += csc_latest + "/" |
||||
csc_text = requests.get(CSC_MIRROR + data[distro]["csc"] + file |
||||
+ data[distro]["file2"]).text |
||||
try: |
||||
ret = csc_text == requests.get(data[distro]["upstream2"] + file |
||||
+ data[distro]["file2"]).text |
||||
except requests.exceptions.RequestException: |
||||
ret = False |
||||
try: |
||||
return ret or csc_text == requests.get(data[distro]["upstream3"] + file |
||||
+ data[distro]["file2"]).text |
||||
except requests.exceptions.RequestException: |
||||
return False |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains GNU class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class GNU(Distro): |
||||
"""GNU class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Gutenberg class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Gutenberg(Distro): |
||||
"""Gutenberg class""" |
@ -1,14 +0,0 @@ |
||||
""" |
||||
Contains IPFire class |
||||
""" |
||||
|
||||
import requests |
||||
from distro import Distro |
||||
|
||||
class IPFire(Distro): |
||||
"""IPFire class""" |
||||
@staticmethod |
||||
def check(data, distro): |
||||
ipfire_url = "https://mirrors.ipfire.org/mirrors/mirror.csclub.uwaterloo.ca" |
||||
ipfire_text = requests.get(ipfire_url).text |
||||
return ipfire_text.find("The mirror is up") != -1 |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains KDE class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class KDE(Distro): |
||||
"""KDE class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains KDEApplicationData class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class KDEApplicationData(Distro): |
||||
"""KDEApplicationData class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains Kernel class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class Kernel(Distro): |
||||
"""Kernel class""" |
@ -1,8 +0,0 @@ |
||||
""" |
||||
Contains OpenBSD class |
||||
""" |
||||
|
||||
from distro import Distro |
||||
|
||||
class OpenBSD(Distro): |
||||
"""OpenBSD class""" |
@ -0,0 +1,20 @@ |
||||
""" |
||||
Contains abstract class for a mirrored project |
||||
""" |
||||
|
||||
from abc import ABC |
||||
|
||||
import requests |
||||
|
||||
from shared import CSC_MIRROR |
||||
|
||||
|
||||
class Project(ABC): |
||||
"""Abstract class for a mirrored project""" |
||||
|
||||
@staticmethod |
||||
def check(data, project): |
||||
"""Check if project packages are up-to-date""" |
||||
csc_url = CSC_MIRROR + data[project]["csc"] + data[project]["file"] |
||||
upstream_url = data[project]["upstream"] + data[project]["file"] |
||||
return requests.get(csc_url).text == requests.get(upstream_url).text |
@ -0,0 +1,20 @@ |
||||
[ |
||||
[ |
||||
"OpenBSD", |
||||
"https://mirror.csclub.uwaterloo.ca/OpenBSD/", |
||||
"https://ftp.openbsd.org/pub/OpenBSD/", |
||||
"timestamp" |
||||
], |
||||
[ |
||||
"kernel", |
||||
"http://mirror.csclub.uwaterloo.ca/kernel.org/linux/kernel/next/", |
||||
"https://mirrors.edge.kernel.org/pub/linux/kernel/next/", |
||||
"sha256sums.asc" |
||||
], |
||||
[ |
||||
"debian", |
||||
"http://mirror.csclub.uwaterloo.ca/debian/project/trace/", |
||||
"https://ftp-master.debian.org/debian/project/trace/", |
||||
"master" |
||||
] |
||||
] |
@ -0,0 +1,21 @@ |
||||
""" |
||||
This file automatically imports all Classes in this directory |
||||
""" |
||||
|
||||
from inspect import isclass |
||||
from pkgutil import iter_modules |
||||
from pathlib import Path |
||||
from importlib import import_module |
||||
|
||||
# iterate through the modules in the current package |
||||
package_dir = Path(__file__).resolve().parent |
||||
for (_, module_name, _) in iter_modules([package_dir]): |
||||
|
||||
# import the module and iterate through its attributes |
||||
module = import_module(f"{__name__}.{module_name}") |
||||
for attribute_name in dir(module): |
||||
attribute = getattr(module, attribute_name) |
||||
|
||||
if isclass(attribute): |
||||
# Add the class to this package's variables |
||||
globals()[attribute_name] = attribute |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains AlmaLinux class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class AlmaLinux(Project): |
||||
"""AlmaLinux class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Alpine class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Alpine(Project): |
||||
"""Alpine class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Apache class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Apache(Project): |
||||
"""Apache class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Arch class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Arch(Project): |
||||
"""Arch class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains CentOS class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class CentOS(Project): |
||||
"""CentOS class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Ceph class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Ceph(Project): |
||||
"""Ceph class""" |
@ -0,0 +1,20 @@ |
||||
""" |
||||
Contains CPAN class |
||||
""" |
||||
|
||||
import requests |
||||
|
||||
from project import Project |
||||
from shared import CSC_MIRROR |
||||
|
||||
|
||||
class CPAN(Project): |
||||
"""CPAN class""" |
||||
|
||||
@staticmethod |
||||
def check(data, project, current_time): |
||||
res_json = requests.get("http://mirrors.cpan.org/cpan-json.txt").json() |
||||
for mirror in res_json: |
||||
if mirror["url"] == f"{CSC_MIRROR}CPAN/": |
||||
return current_time - int(mirror["age"]) <= data[project]["out_of_sync_interval"] |
||||
return False |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Cygwin class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Cygwin(Project): |
||||
"""Cygwin class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Debian class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Debian(Project): |
||||
"""Debian class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains DebianCD class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class DebianCD(Project): |
||||
"""DebianCD class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains DebianMultimedia class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class DebianMultimedia(Project): |
||||
"""DebianMultimedia class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains DebianPorts class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class DebianPorts(Project): |
||||
"""DebianPorts class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains DebianSecurity class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class DebianSecurity(Project): |
||||
"""DebianSecurity class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Eclipse class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Eclipse(Project): |
||||
"""Eclipse class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Fedora class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Fedora(Project): |
||||
"""Fedora class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains FreeBSD class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class FreeBSD(Project): |
||||
"""FreeBSD class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains GentooDistfiles class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class GentooDistfiles(Project): |
||||
"""GentooDistfiles class""" |
@ -0,0 +1,32 @@ |
||||
""" |
||||
Contains GentooPortage class |
||||
""" |
||||
|
||||
import os |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class GentooPortage(Project): |
||||
"""GentooPortage class""" |
||||
|
||||
@staticmethod |
||||
def check(data, project): |
||||
rsync_command = "rsync -q {}{} {}" |
||||
os.system(rsync_command.format(data[project]["csc"], |
||||
data[project]["file"], |
||||
"csc_manifest")) |
||||
os.system(rsync_command.format(data[project]["upstream1"], |
||||
data[project]["file"], |
||||
"upstream_manifest1")) |
||||
os.system(rsync_command.format(data[project]["upstream2"], |
||||
data[project]["file"], |
||||
"upstream_manifest2")) |
||||
stream1 = os.popen("diff csc_manifest upstream_manifest1") |
||||
output1 = stream1.read() |
||||
stream2 = os.popen("diff csc_manifest upstream_manifest2") |
||||
output2 = stream2.read() |
||||
os.system("rm csc_manifest") |
||||
os.system("rm upstream_manifest1") |
||||
os.system("rm upstream_manifest2") |
||||
return 0 in [len(output1), len(output2)] |
@ -0,0 +1,44 @@ |
||||
""" |
||||
Contains GNOME class |
||||
""" |
||||
|
||||
import re |
||||
|
||||
import requests |
||||
|
||||
from project import Project |
||||
from shared import CSC_MIRROR |
||||
|
||||
|
||||
class GNOME(Project): |
||||
"""GNOME class""" |
||||
|
||||
@staticmethod |
||||
def check(data, project): |
||||
file = data[project]["file1"] |
||||
csc_versions = requests.get(CSC_MIRROR + data[project]["csc"] + file).text |
||||
upstream_versions = requests.get(data[project]["upstream1"] + file).text |
||||
csc_latest = re.findall(r"\"\d+\.?\d*", csc_versions)[-1].lstrip('"') |
||||
upstream_latest = re.findall(r"\"\d+\.?\d*", upstream_versions)[-1].lstrip('"') |
||||
if csc_latest != upstream_latest: |
||||
return False |
||||
file += csc_latest + "/" |
||||
csc_versions = requests.get(CSC_MIRROR + data[project]["csc"] + file).text |
||||
upstream_versions = requests.get(data[project]["upstream1"] + file).text |
||||
csc_latest = re.findall(r"\"\d+\.?\w*\.?\w*", csc_versions)[-1].lstrip('"') |
||||
upstream_latest = re.findall(r"\"\d+\.?\w*\.?\w*", upstream_versions)[-1].lstrip('"') |
||||
if csc_latest != upstream_latest: |
||||
return False |
||||
file += csc_latest + "/" |
||||
csc_text = requests.get(CSC_MIRROR + data[project]["csc"] + file |
||||
+ data[project]["file2"]).text |
||||
try: |
||||
ret = csc_text == requests.get(data[project]["upstream2"] + file |
||||
+ data[project]["file2"]).text |
||||
except requests.exceptions.RequestException: |
||||
ret = False |
||||
try: |
||||
return ret or csc_text == requests.get(data[project]["upstream3"] + file |
||||
+ data[project]["file2"]).text |
||||
except requests.exceptions.RequestException: |
||||
return False |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains GNU class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class GNU(Project): |
||||
"""GNU class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Gutenberg class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Gutenberg(Project): |
||||
"""Gutenberg class""" |
@ -0,0 +1,17 @@ |
||||
""" |
||||
Contains IPFire class |
||||
""" |
||||
|
||||
import requests |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class IPFire(Project): |
||||
"""IPFire class""" |
||||
|
||||
@staticmethod |
||||
def check(data, project): |
||||
ipfire_url = "https://mirrors.ipfire.org/mirrors/mirror.csclub.uwaterloo.ca" |
||||
ipfire_text = requests.get(ipfire_url).text |
||||
return ipfire_text.find("The mirror is up") != -1 |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains KDE class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class KDE(Project): |
||||
"""KDE class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains KDEApplicationData class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class KDEApplicationData(Project): |
||||
"""KDEApplicationData class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains Kernel class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class Kernel(Project): |
||||
"""Kernel class""" |
@ -0,0 +1,9 @@ |
||||
""" |
||||
Contains OpenBSD class |
||||
""" |
||||
|
||||
from project import Project |
||||
|
||||
|
||||
class OpenBSD(Project): |
||||
"""OpenBSD class""" |
@ -0,0 +1,4 @@ |
||||
requests~=2.26.0 |
||||
datefinder~=0.7.1 |
||||
|
||||
dateparser~=1.0.0 |
Loading…
Reference in new issue