def fix(item: model.television.TvBase) -> Iterable[api.Fix]: title = None # For logging only _src, _src_key = None, None # Lookup IMDB if title is None: imdb_id = item.first_claim(wp.IMDB_ID.pid) title = imdb_title(imdb_id) _src, _src_key = "IMDB", imdb_id # Lookup tv.com if title is None: tv_com_id = item.first_claim(wp.TV_COM_ID.pid) title = tv_com_title(tv_com_id) _src, _src_key = "TV.com", tv_com_id # Lookup label if title is None: title = item.label _src, _src_key = "label", "en" # Did not find a title from any source if title is None: return [] print(f"Fetched title='{title}' from {_src} using {_src_key}") new_claim = Claim(item.repo, wp.TITLE.pid) new_claim.setTarget(WbMonolingualText(title, "en")) summary = f"Setting {wp.TITLE} to {title}" return [api.ClaimFix(new_claim, summary, item.itempage)]
def fix(item: model.television.Series) -> Iterable[api.ClaimFix]: if wp.IMDB_ID.pid not in item.claims: return [] number_of_episodes = no_of_episodes(item.first_claim(wp.IMDB_ID.pid)) if number_of_episodes is None: return [] claim = Claim(item.repo, wp.NUMBER_OF_EPISODES.pid) claim.setTarget(WbQuantity(number_of_episodes, site=item.repo)) summary = f"Setting {wp.NUMBER_OF_EPISODES} to {number_of_episodes}" return [api.ClaimFix(claim, summary=summary, itempage=item.itempage)]
def fix(item: model.television.Season) -> Iterable[api.Fix]: claim_fixes = [] for ordinal, episode in item.parts: qualifier = Claim(item.repo, wp.SERIES_ORDINAL.pid) qualifier.setTarget(str(ordinal)) new_claim = Claim(item.repo, wp.HAS_PART.pid) new_claim.setTarget(episode.itempage) new_claim.addQualifier(qualifier) summary = f"Adding {episode.qid} to {wp.HAS_PART.pid} ({wp.HAS_PART.name})" claim_fixes.append(api.ClaimFix(new_claim, summary, item.itempage)) return claim_fixes
def copy_delayed( src_item: ItemPage, dest_item: ItemPage, props: Iterable[wp.WikidataProperty] ) -> Iterable[api.Fix]: repo = Site().data_repository() src_item.get() dest_item.get() claims = [] for prop in props: src_claims = src_item.claims.get(prop.pid, []) if len(src_claims) > 1: print( f"Cannot copy {prop} from {format(src_item)} to {format(dest_item)}. Only scalar properties can be copied" ) continue if prop.pid in dest_item.claims: print(f"{prop} already has a value in {format(dest_item)}") continue targets = [claim.getTarget() for claim in src_claims] for target in targets: target.get() target_str = printable_target_value(target) print( f"Creating claim to copy {prop}={target_str} from {format(src_item)} to {format(dest_item)}" ) new_claim = Claim(repo, prop.pid) new_claim.setTarget(target) summary = f"Setting {prop.pid} ({prop.name})" claims.append(api.ClaimFix(new_claim, summary, dest_item)) return claims