Gistrec

YQL Generator

Mar 26th, 2022
1,178
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. def generate_yql(estimation, yt_path, users, results, factchecks, beauty_results, platforms, domains, sources):
  2.     assert estimation in {"EAv2", "Informativeness", "Beauty"}
  3.     assert yt_path
  4.  
  5.     yql = ""
  6.     yql += "USE hahn;\n"
  7.     yql += "\n"
  8.     yql += "$screenshot = ($url) -> { RETURN AsTagged(AsStruct($url as src), 'imageurl') };\n"
  9.     yql += "\n"
  10.     yql += "SELECT $screenshot(screenshot_url), t.*\n"
  11.     yql += f"FROM `{yt_path}` AS t\n"
  12.  
  13.     selectors: List[str] = []
  14.     if users:
  15.         assert set(users).issubset({"= 0", "> 0"})
  16.         selectors.append("    (" + " OR ".join(f"prizm_cnt {user}" for user in users) + ")")
  17.     if results:
  18.         assert set(results).issubset({"correct", "not_correct"})
  19.         selectors.append("    (" + " OR ".join([f"result = '{result}'" for result in results]) + ")")
  20.     if factchecks:
  21.         assert set(factchecks).issubset({"= 0", "= 1"})
  22.         selectors.append("    (" + " OR ".join(f"is_extended_factcheck {factcheck}" for factcheck in factchecks) + ")")
  23.     if platforms:
  24.         assert set(platforms).issubset({"touch", "desktop"})
  25.         selectors.append("    (" + " OR ".join([f"platform = '{platform}'" for platform in platforms]) + ")")
  26.     if domains:
  27.         # Проверяем, что домен состоит из букв
  28.         assert all(re.match(r"[a-z]+", domain) for domain in domains)
  29.         selectors.append("    (" + " OR ".join([f"tld = '{domain}'" for domain in domains]) + ")")
  30.     if sources:
  31.         # Проверяем, что название источника состоит из букв, цифр и подчеркивания
  32.         assert all(re.match(r"[a-zA-Z0-9_]+", source) for source in sources)
  33.         selectors.append("    (" + " OR ".join([f"source = '{source}'" for source in sources]) + ")")
  34.     if estimation == "Beauty" and beauty_results:
  35.         assert set(beauty_results).issubset({"is_good", "bad_picture", "bad_prefix_suffix", "bad_structure", "cutted", "dirty", "other"})
  36.         selectors.append("    (" + " OR ".join(f"Yson::LookupBool(beauty_result, '{result}')" for result in beauty_results) + ")")
  37.  
  38.     if selectors:
  39.         yql += "WHERE\n"
  40.         yql += "\n    AND\n".join(selectors)
  41.  
  42.     return yql
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment