def new_item(self, labels, descriptions) -> ItemPage: item = ItemPage(self.repo) if labels: item.editLabels(labels, summary="Setting label") if descriptions: item.editDescriptions(descriptions, summary="Setting description") return item
def create_season(series_id, label, descr, ordinal, dry): dry_str = "[DRY-RUN] " if dry else "" repoutil = RepoUtils(Site().data_repository()) print( f"{dry_str}Creating season with\n\tlabel='{label}'\n\tdescription='{descr}'" ) if not dry: season = ItemPage(repoutil.repo) season.editLabels({"en": label}, summary="Setting label") season.editDescriptions({"en": descr}, summary="Setting description") print(f"Created a new Item: {season.getID()}") print(f"{dry_str}Setting {wp.INSTANCE_OF}={wp.TELEVISION_SERIES_SEASON}") if not dry: instance_claim = repoutil.new_claim(wp.INSTANCE_OF.pid) instance_claim.setTarget( ItemPage(repoutil.repo, wp.TELEVISION_SERIES_SEASON)) season.addClaim(instance_claim, summary=f"Setting {wp.INSTANCE_OF.pid}") print( f"{dry_str}Setting {wp.PART_OF_THE_SERIES}={series_id}, with {wp.SERIES_ORDINAL.pid}={ordinal}" ) if not dry: series_claim = repoutil.new_claim(wp.PART_OF_THE_SERIES.pid) series_claim.setTarget(ItemPage(repoutil.repo, series_id)) season_ordinal = repoutil.new_claim(wp.SERIES_ORDINAL.pid) season_ordinal.setTarget(str(ordinal)) series_claim.addQualifier(season_ordinal) season.addClaim(series_claim, summary=f"Setting {wp.PART_OF_THE_SERIES.pid}")
def create_episode(series_id, season_id, title, ordinal, dry): dry_str = "[DRY-RUN] " if dry else "" print(f"{dry_str}Creating episode with label='{title}'") if not dry: repoutil = RepoUtils(Site().data_repository()) episode = ItemPage(repoutil.repo) episode.editLabels({"en": title}, summary="Setting label") print(f"Created a new Item: {episode.getID()}") print(f"{dry_str}Setting {wp.INSTANCE_OF}={wp.TELEVISION_SERIES_EPISODE}") if not dry: instance_claim = repoutil.new_claim(wp.INSTANCE_OF.pid) instance_claim.setTarget( ItemPage(repoutil.repo, wp.TELEVISION_SERIES_EPISODE)) episode.addClaim(instance_claim, summary=f"Setting {wp.INSTANCE_OF.pid}") print(f"{dry_str}Setting {wp.PART_OF_THE_SERIES}={series_id}") if not dry: series_claim = repoutil.new_claim(wp.PART_OF_THE_SERIES.pid) series_claim.setTarget(ItemPage(repoutil.repo, series_id)) episode.addClaim(series_claim, summary=f"Setting {wp.PART_OF_THE_SERIES.pid}") print( f"{dry_str}Setting {wp.SEASON}={season_id}, with {wp.SERIES_ORDINAL}={ordinal}" ) if not dry: season_claim = repoutil.new_claim(wp.SEASON.pid) season_claim.setTarget(ItemPage(repoutil.repo, season_id)) season_ordinal = repoutil.new_claim(wp.SERIES_ORDINAL.pid) season_ordinal.setTarget(ordinal) season_claim.addQualifier(season_ordinal) episode.addClaim(season_claim, summary=f"Setting {wp.SEASON.pid}")
def main(dry=False): dry_str = "" if dry: print("Running in dry-run mode, will not implement any changes") dry_str = "[DRY-RUN MODE] " repo = Site().data_repository() for episode_id, title, series_label in episodes_with_titles_and_missing_labels( ): print(f"{dry_str}Fixing {series_label}:{title} ({episode_id})") if not dry: episode_item = ItemPage(repo, episode_id) episode_item.get() episode_item.editLabels({"en": title})
def main(dry=False): dry_str = "" if dry: print("Running in dry-run mode, will not implement any changes") dry_str = "[DRY-RUN MODE] " repo = Site().data_repository() for movie_id, title in movies_with_missing_labels_with_title(): print( f"{dry_str}Setting label='{title}' for {movie_id} ( https://www.wikidata.org/wiki/{movie_id} )" ) if not dry: movie_item = ItemPage(repo, movie_id) movie_item.get() movie_item.editLabels({"en": title})
def main(dry=False): dry_str = "" if dry: print("Running in dry-run mode, will not implement any changes") dry_str = "[DRY-RUN MODE] " repo = Site().data_repository() for item_link, item_id, title in items_with_missing_labels_with_title(): print( f"{dry_str} ( {str(item_link).ljust(40, ' ')} ) Fixing {str(item_id).ljust(9, ' ')}: {title}" ) if dry: continue # Labels have a character limit, so ignore if trying to add it will result in an error if len(title) >= 250: continue item = ItemPage(repo, item_id) item.get() try: item.editLabels({"en": title}) except (APIError, OtherPageSaveError) as e: print(f"An error occurred while adding label for {item_id}: {e}")
def main(dry=False): dry_str = "" if dry: print("Running in dry-run mode, will not implement any changes") dry_str = "[DRY-RUN MODE] " repo = Site().data_repository() seen = set() for board_game_id, bgg_id in board_games_with_missing_labels(): if board_game_id in seen: continue seen.add(board_game_id) board_game_name = utils.bgg_title(bgg_id) if board_game_name is None: print(f"Unable to fetch name for {board_game_id}.") continue wiki_url = f"https://www.wikidata.org/wiki/{board_game_id}" print( f"{dry_str}Setting label='{board_game_name}' for {board_game_id} ( {wiki_url} )" ) if not dry: bg_item = ItemPage(repo, board_game_id) bg_item.get() bg_item.editLabels({"en": board_game_name})
def create_episode(series_id, season_id, title, series_ordinal, season_ordinal, dry): """Creates a season item on WikiData Arguments --------- series_id: str The Wiki ID of the series ItemPage season_id: str The Wiki ID of the season ItemPage title: str The title of this episode. This is used to set the label. series_ordinal: int The ordinal of this episode, within the series season_ordinal: int The ordinal of this episode, within the season dry: bool Whether or not this function should run in dry-run mode. In dry-run mode, no real changes are made to WikiData, they are only logged to stdout. Returns ------- episode_id: str The Wiki ID of the episode item """ dry_str = "[DRY-RUN] " if dry else "" print(f"{dry_str}Creating episode with label='{title}'") episode = None if not dry: repoutil = RepoUtils(Site().data_repository()) season = ItemPage(repoutil.repo, season_id) season.get() # Check if season has part_of_the_series set to series_id if wp.PART_OF_THE_SERIES.pid not in season.claims: raise ValueError( f"The season {season_id} does not have a PART_OF_THE_SERIES ({wp.PART_OF_THE_SERIES.pid} property). Check the input series and season IDs for correctness." ) actual_series_id = str( season.claims[wp.PART_OF_THE_SERIES.pid][0].getTarget().getID()) if actual_series_id != series_id: raise ValueError( f"The season {season_id} has PART_OF_THE_SERIES={actual_series_id} but expected={series_id}. Check the input series and season IDs for correctness." ) episode = ItemPage(repoutil.repo) episode.editLabels({"en": title}, summary="Setting label") print(f"Created a new Item: {episode.getID()}") print(f"{dry_str}Setting {wp.INSTANCE_OF}={wp.TELEVISION_SERIES_EPISODE}") if not dry: instance_claim = repoutil.new_claim(wp.INSTANCE_OF.pid) instance_claim.setTarget( ItemPage(repoutil.repo, wp.TELEVISION_SERIES_EPISODE)) episode.addClaim(instance_claim, summary=f"Setting {wp.INSTANCE_OF.pid}") print( f"{dry_str}Setting {wp.PART_OF_THE_SERIES}={series_id}, with {wp.SERIES_ORDINAL}={series_ordinal}" ) if not dry: series_claim = repoutil.new_claim(wp.PART_OF_THE_SERIES.pid) series_claim.setTarget(ItemPage(repoutil.repo, series_id)) series_ordinal_claim = repoutil.new_claim(wp.SERIES_ORDINAL.pid) series_ordinal_claim.setTarget(series_ordinal) series_claim.addQualifier(series_ordinal_claim) episode.addClaim(series_claim, summary=f"Setting {wp.PART_OF_THE_SERIES.pid}") print( f"{dry_str}Setting {wp.SEASON}={season_id}, with {wp.SERIES_ORDINAL}={season_ordinal}" ) if not dry: season_claim = repoutil.new_claim(wp.SEASON.pid) season_claim.setTarget(ItemPage(repoutil.repo, season_id)) season_ordinal_claim = repoutil.new_claim(wp.SERIES_ORDINAL.pid) season_ordinal_claim.setTarget(season_ordinal) season_claim.addQualifier(season_ordinal_claim) episode.addClaim(season_claim, summary=f"Setting {wp.SEASON.pid}") return episode.getID() if episode is not None else "Q-1"