- def get_all_files(self):
- files = []
-
- for mirror in self.get_all():
- if not mirror.state == "UP":
- continue
-
- for file in mirror.filelist:
- if not file in files:
- files.append(file)
-
- return files
-
- def get_random(self, filename=None):
- if filename:
- ret = self.db.get("SELECT * FROM mirrors WHERE state = %s \
- AND mirrors.id IN (SELECT mirror FROM mirror_files \
- WHERE filename = %s) ORDER BY RANDOM() LIMIT 1", "UP", filename)
- else:
- ret = self.db.get("SELECT * FROM mirrors WHERE state = %s \
- ORDER BY RANDOM() LIMIT 1", "UP")
-
- if ret:
- return Mirror(self.backend, ret.id, ret)
-
- def file_exists(self, filename):
- ret = self.db.get("SELECT 1 FROM mirror_files \
- WHERE filename = %s LIMIT 1", filename)
-
- if ret:
- return True
-
- return False
-
-
-class MirrorSet(Object):
- def __init__(self, backend, mirrors):
- Object.__init__(self, backend)
-
- self._mirrors = mirrors
-
- def __add__(self, other):
- mirrors = []
-
- for mirror in self._mirrors + other._mirrors:
- if mirror in mirrors:
- continue
-
- mirrors.append(mirror)
-
- return MirrorSet(self.backend, mirrors)
-
- def __sub__(self, other):
- mirrors = self._mirrors[:]
-
- for mirror in other._mirrors:
- if mirror in mirrors:
- mirrors.remove(mirror)
-
- return MirrorSet(self.backend, mirrors)