Source code for attachtags.tagmaps

"""这个模块定义了Tagmaps类型
"""
from functools import wraps
import logging

logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO)


[docs]def exist_or_not(function): # 判断是否有这个tag @wraps(function) def wrapper(self, *args, **kwargs) -> bool: if args[0] in list(self.get_map().keys()): function(self, *args, **kwargs) return True else: logging.error(f"Fail {function.__name__}:: not the \ tag: {args[0]}") # print(f"""Fail {function.__name__} # - not the tag: {args[0]}""", end="") if len(args) > 1: print(f""" for {args[1]}""") return False return wrapper
[docs]class TagMaps: def __init__(self): self.__map = dict() self.tagnames = set()
[docs] def get_map(self) -> dict: return self.__map
[docs] def create(self, new_name): if new_name not in list(self.__map.keys()): self.__map[new_name] = set() return True else: logging.error(f"Fail create:: tag {new_name} has already\ existed") # print(f"tag {new_name} has already existed") return False
[docs] @exist_or_not def delete(self, goal): del self.__map[goal]
[docs] @exist_or_not def rename(self, old_name, new_name): if not self.create(new_name): logging.info(f"{old_name} and {new_name} were merged") # print("two tags were merged") self.__map[new_name].update(self.__map[old_name]) self.delete(old_name)
[docs] def show(self, goal: str) -> set: tag_set = set() for tag in self.__map.keys(): if goal in self.__map[tag]: tag_set.add(tag) return tag_set
[docs] def search(self, tags, path): for tag in tags: if path in self.__map[tag]: return True return False
[docs] @exist_or_not def attach(self, tag, path): if path not in self.__map[tag]: self.__map[tag].add(path) else: logging.warning(f"{path} was existed")
# print(f"{path} was existed, skipping")
[docs] @exist_or_not def remove(self, tag, path): if path in self.__map[tag]: self.__map[tag].remove(path) else: logging.warning(f"{path} is not with {tag}")
# print(f"{path} is not with {tag}") if __name__ == '__main__': tag = TagMaps() if tag.create('foo'): print(tag.rename('foo', 'bar'))