def _create_label_if_needed(self, reposlug: str, repo: Repository,
                             name: str, desc: str, color: str) -> Label:
     try:
         label = repo.get_label("devsecops")
     except UnknownObjectException:
         if self._verbose:
             print("[I] Creating label {}:{}".format(reposlug, name))
         label = repo.create_label(name, color, desc)
     return label
def update_labels(repository: Repository, new: Dict[str, Dict[str, str]]):
    logging.info(f'Working on {repository.name}')

    # Edit or delete existing labels
    for old in repository.get_labels():

        # Edit labels
        if fmt(old.name) in new:

            # Edit only if there is a difference
            if (old.name, old.color, old.description) != tuple(new[fmt(old.name)].values()):
                logging.info(f'Editing {old.name}')
                old.edit(*new[fmt(old.name)].values())
        else:
            logging.info(f'Deleting {old.name}')
            old.delete()

    # Create new labels
    existing_labels = {fmt(x.name) for x in repository.get_labels()}
    for new_label in new.values():
        if fmt(new_label['name']) not in existing_labels:
            logging.info(f'Creating {new_label["name"]}')
            repository.create_label(*[x for x in new_label.values() if x is not None])
 def _create_label(self, repo: Repository, label: Label) -> bool:
     try:
         github_label = repo.get_label(label.name)
         if self._verbose:
             print("[I] Edit existing label: {}".format(label.name))
         github_label.edit(name=label.name,
                           color=label.color,
                           description=label.description)
     except UnknownObjectException:
         try:
             if self._verbose:
                 print("[I] Creating label {}".format(label.name))
             label = repo.create_label(label.name, label.color,
                                       label.description)
         except Exception as e:
             print("[E] Error creating label {}".format(label.name), str(e))
             return False
     return True