alias.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import os
  2. import utils.constants as constants
  3. from utils.tools import get_real_path, resource_path, format_name
  4. class Alias:
  5. def __init__(self):
  6. self.primary_to_aliases: dict[str, set[str]] = {}
  7. self.alias_to_primary: dict[str, str] = {}
  8. real_path = get_real_path(resource_path(constants.alias_path))
  9. if os.path.exists(real_path):
  10. with open(real_path, "r", encoding="utf-8") as f:
  11. for line in f:
  12. if line.strip() and not line.startswith("#") and "," in line:
  13. parts = [p.strip() for p in line.split(",")]
  14. primary = parts[0]
  15. aliases = set(parts[1:])
  16. aliases.add(format_name(primary))
  17. self.primary_to_aliases[primary] = aliases
  18. for alias in aliases:
  19. self.alias_to_primary[alias] = primary
  20. self.alias_to_primary[primary] = primary
  21. def get(self, name: str):
  22. """
  23. Get the alias by name
  24. """
  25. return self.primary_to_aliases.get(name, set())
  26. def get_primary(self, name: str):
  27. """
  28. Get the primary name by alias
  29. """
  30. primary_name = self.alias_to_primary.get(name, None)
  31. if primary_name is None:
  32. alias_format_name = format_name(name)
  33. primary_name = self.alias_to_primary.get(alias_format_name, name)
  34. return primary_name
  35. def set(self, name: str, aliases: set[str]):
  36. """
  37. Set the aliases by name
  38. """
  39. if name in self.primary_to_aliases:
  40. for alias in self.primary_to_aliases[name]:
  41. self.alias_to_primary.pop(alias, None)
  42. self.primary_to_aliases[name] = set(aliases)
  43. for alias in aliases:
  44. self.alias_to_primary[alias] = name
  45. self.alias_to_primary[name] = name