| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- from hashlib import md5
- from os import listdir
- import pickle
- import random
- import time
- class Base:
- def __init__(self):
- self.create_time = time.localtime()
- self.str_time = time.strftime("%Y%m%d%H%M%S", self.create_time)
- self.__gene_id()
- def __gene_id(self):
- self.__id_seed: str = self.str_time + str(random.randint(10000, 99999))
- self.id: str = md5(self.__id_seed.encode("UTF-8")).hexdigest()
- class Entry(Base):
- def __init__(self):
- Base.__init__(self)
- self.title: str = "未命名事项" + self.str_time[4:8]
- Base.__gene_id(self)
- self.content: str = "在这里输入事项内容"
- self.set_priority()
- self.set_deadline()
- self.sub_entries_dict: dict = {}
- def set_priority(self, priority: float = 0):
- if priority < -10:
- print("最低优先级为-10,已自动设置为-10")
- priority = -10.0
- elif priority > 10:
- print("最高优先级为10,已自动设置为10")
- priority = 10.0
- self.priority: float = priority
- def set_deadline(self, deadline_date: time.struct_time = time.localtime()):
- if deadline_date < time.localtime():
- print("\033[1;31mERROR: Let it RIP if it's dead already\033[0m")
- return 1
- self.deadline = deadline_date
- return 0
- def set_content(self, content: str):
- self.content = content
- class Coordinate(Base):
- def __init__(self):
- Base.__init__(self)
- self.name = "未命名坐标系" + self.str_time
- # Base.__gene_id(self)
- self.entries_dict = {}
- self.entries_num = 0
- def show_entries(self):
- print(self.entries_dict)
- def add_entry(self, entry_in: Entry):
- self.entries_dict[entry_in.entry_id] = entry_in
- self.entries_num += 1
- def del_entry(self, entry_in: Entry):
- try:
- del self.entries_dict[entry_in.entry_id]
- self.entries_num -= 1
- except KeyError:
- print("\033[1;31mERROR: Entry doesn't exist\033[0m")
- def save_coord(self):
- with open("coord/" + self.name + ".crd", "wb") as f:
- pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
- def __str__(self) -> str:
- return (
- "Title: "
- + self.name
- + "\nId: "
- + self.id
- + "\nEntries number: "
- + str(self.entries_num)
- )
- class Interface:
- def __init__(self):
- self.coordinate_dict: dict = {}
- self.exit: bool = False
- self.func_dict = {
- "exit": self.__exit,
- "open": self.__open_coord,
- "ls": self.__list_coord,
- "show": self.__show_now_coord,
- "entry": self.__new_entry,
- }
- def start(self):
- print("Welcome to Jt mission manager")
- print("Please open a coordinate")
- self.__list_coord()
- coord_file = self.files[
- int(input("\033[1;32mType in the number of coordinate:\033[0m"))
- ]
- self.__open_coord("coord/" + coord_file)
- while not (self.exit):
- command = input("\033[1;32m> \033[0m").split()
- func_name = command[0]
- try:
- func = self.func_dict[func_name]
- func(command[1:])
- except KeyError:
- print("\033[1;31mERROR: Command not found\033[0m")
- def __open_coord(self, coord_file: str):
- with open(coord_file, "rb") as f:
- self.now_coord = pickle.load(f)
- def __list_coord(self):
- self.files = listdir("coord")
- if self.files:
- i = 0
- for f in self.files:
- print(i, f)
- i += 1
- def __new_coord(self, arg: list):
- c = Coordinate()
- c.name = arg[0]
- raise NotImplementedError
- def __show_now_coord(self, arg: list):
- print(self.now_coord)
- def __add_coordinate(self, c: Coordinate):
- if not c.id in self.coordinate_dict:
- self.coordinate_dict[c.id] = c
- else:
- print("\033[1;31mERROR: It's already in there\033[0m")
- def __exit(self, arg):
- self.exit = True
- def main():
- i = Interface()
- i.start()
- if __name__ == "__main__":
- main()
|