spcli.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. """
  2. Командный интерфейc для доступа к генератору сообщений.
  3. Author: Milinuri Nirvalen
  4. Ver: 1.4.1 (sp 5.7)
  5. """
  6. import argparse
  7. from typing import Optional
  8. from sp.counters import (cl_counter, days_counter, group_counter_res,
  9. index_counter)
  10. from sp.intents import Intent
  11. from sp.messages import SPMessages, send_counter, send_search_res, send_update
  12. def get_parser() -> argparse.ArgumentParser:
  13. parser = argparse.ArgumentParser()
  14. parser.add_argument("-v", "--version", help="Информация о парсере",
  15. action="store_true")
  16. parser.add_argument("--set-class", help="Изменить класс пользователя")
  17. parser.add_argument("-i", "--intents", type=str,
  18. help="Набор намерений для генератора сообщений")
  19. subparsers = parser.add_subparsers(dest="cmd", metavar="command")
  20. sp = subparsers.add_parser("sc", help="Расписание уроков")
  21. sp = subparsers.add_parser("updates", help="Изменения в расписании")
  22. sp = subparsers.add_parser("search", help="Поиск в расписании")
  23. sp.add_argument("-c", "--cabinets", help="Поиск по кабинетам",
  24. action="store_true")
  25. sp.add_argument("target", help="Цель для поиска: урок, кабинет")
  26. sp = subparsers.add_parser("counter", help="Счётчик уроков/кабинетов")
  27. sp.add_argument("counter", help="Тип Счётчика", default="lessons",
  28. choices=["cl", "days", "lessons", "cabinets"])
  29. sp.add_argument("target", help="Вторичный ключ для отображения",
  30. default=None,
  31. choices=["cl", "days", "lessons", "cabinets", "main"])
  32. return parser
  33. def main() -> None:
  34. sp = SPMessages("Console")
  35. parser = get_parser()
  36. args = parser.parse_args()
  37. if not sp.user["set_class"]:
  38. print("[+] Please select your class!")
  39. print("[?] Run: --set-class CLASS for set your class let")
  40. # Статус генератора сообщений
  41. if args.version:
  42. print(sp.send_status())
  43. # Смена класса пользователя
  44. if args.set_class is not None:
  45. status = sp.set_class(args.set_class)
  46. if status:
  47. print(f"[*] User class let = {args.set_class}")
  48. else:
  49. print(f"[*] Class let: {', '.join(sorted(sp.sc.lessons))}")
  50. # Получение намерений для расписания
  51. if args.intents is not None:
  52. intent = Intent.parse(sp.sc, args.intents.split())
  53. else:
  54. intent = Intent()
  55. # Получить расписание уроков
  56. if args.cmd == "sc":
  57. if intent.days:
  58. print(sp.send_lessons(intent))
  59. else:
  60. print(sp.send_today_lessons(intent))
  61. # Просмотреть обновления в расписании
  62. elif args.cmd == "updates":
  63. for u in sp.sc.get_updates(intent):
  64. print(send_update(u))
  65. # Поиск в расписании
  66. elif args.cmd == "search":
  67. res = sp.sc.search(args.target, intent, args.cabinets)
  68. print(send_search_res(intent, res))
  69. # Работа с счётчиками расписания
  70. elif args.cmd == "counter":
  71. header = "✨ Счётчик"
  72. if args.counter == "cl":
  73. header += " по классам:"
  74. res = cl_counter(sp.sc, intent)
  75. elif args.counter == "days":
  76. header += " по дням:"
  77. res = days_counter(sp.sc, intent)
  78. elif args.counter == "lessons":
  79. header += " по урокам:"
  80. res = index_counter(sp.sc, intent)
  81. elif args.counter == "cabinets":
  82. header += " по кабинетам:"
  83. res = index_counter(sp.sc, intent, cabinets_mode=True)
  84. groups = group_counter_res(res)
  85. print(header)
  86. print(send_counter(groups, target=args.target))
  87. else:
  88. print(sp.send_today_lessons(intent))
  89. # Запуск скрипта
  90. # ==============
  91. if __name__ == '__main__':
  92. main()