Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def generate_yql(estimation, yt_path, users, results, factchecks, beauty_results, platforms, domains, sources):
- assert estimation in {"EAv2", "Informativeness", "Beauty"}
- assert yt_path
- yql = ""
- yql += "USE hahn;\n"
- yql += "\n"
- yql += "$screenshot = ($url) -> { RETURN AsTagged(AsStruct($url as src), 'imageurl') };\n"
- yql += "\n"
- yql += "SELECT $screenshot(screenshot_url), t.*\n"
- yql += f"FROM `{yt_path}` AS t\n"
- selectors: List[str] = []
- if users:
- assert set(users).issubset({"= 0", "> 0"})
- selectors.append(" (" + " OR ".join(f"prizm_cnt {user}" for user in users) + ")")
- if results:
- assert set(results).issubset({"correct", "not_correct"})
- selectors.append(" (" + " OR ".join([f"result = '{result}'" for result in results]) + ")")
- if factchecks:
- assert set(factchecks).issubset({"= 0", "= 1"})
- selectors.append(" (" + " OR ".join(f"is_extended_factcheck {factcheck}" for factcheck in factchecks) + ")")
- if platforms:
- assert set(platforms).issubset({"touch", "desktop"})
- selectors.append(" (" + " OR ".join([f"platform = '{platform}'" for platform in platforms]) + ")")
- if domains:
- # Проверяем, что домен состоит из букв
- assert all(re.match(r"[a-z]+", domain) for domain in domains)
- selectors.append(" (" + " OR ".join([f"tld = '{domain}'" for domain in domains]) + ")")
- if sources:
- # Проверяем, что название источника состоит из букв, цифр и подчеркивания
- assert all(re.match(r"[a-zA-Z0-9_]+", source) for source in sources)
- selectors.append(" (" + " OR ".join([f"source = '{source}'" for source in sources]) + ")")
- if estimation == "Beauty" and beauty_results:
- assert set(beauty_results).issubset({"is_good", "bad_picture", "bad_prefix_suffix", "bad_structure", "cutted", "dirty", "other"})
- selectors.append(" (" + " OR ".join(f"Yson::LookupBool(beauty_result, '{result}')" for result in beauty_results) + ")")
- if selectors:
- yql += "WHERE\n"
- yql += "\n AND\n".join(selectors)
- return yql
Advertisement