Self-checking mode fixed, tags/names site filtering & ranking

This commit is contained in:
Soxoj
2021-01-11 21:42:24 +03:00
parent 29ad581597
commit 47cf6f4d81
8 changed files with 1916 additions and 1591 deletions
+10 -3
View File
@@ -128,11 +128,18 @@ class MaigretDatabase:
def sites_dict(self):
return {site.name: site for site in self._sites}
def ranked_sites_dict(self, reverse=False, top=sys.maxsize, tags=[]):
if not tags:
def ranked_sites_dict(self, reverse=False, top=sys.maxsize, tags=[], names=[]):
normalized_names = list(map(str.lower, names))
normalized_tags = list(map(str.lower, tags))
is_tags_ok = lambda x: set(x.tags).intersection(set(normalized_tags))
is_name_ok = lambda x: x.name.lower() in normalized_names
is_engine_ok = lambda x: isinstance(x.engine, str) and x.engine.lower() in normalized_tags
if not tags and not names:
filtered_list = self.sites
else:
filtered_list = [s for s in self.sites if set(s.tags).intersection(set(tags)) or s.engine in tags]
filtered_list = [s for s in self.sites if is_tags_ok(s) or is_name_ok(s) or is_engine_ok(s)]
sorted_list = sorted(filtered_list, key=lambda x: x.alexa_rank, reverse=reverse)[:top]
return {site.name: site for site in sorted_list}