diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 54ab072..61381f6 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,6 +1,7 @@ + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..9277599 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/Test.py b/Test.py index a25e225..c2306c2 100644 --- a/Test.py +++ b/Test.py @@ -1,5 +1,51 @@ -import Lilly +import lilly -lilly = Lilly.Lilly() +#lilly = Lilly.Lilly() -print(lilly.get_schedule()) +#print(lilly.get_schedule()) + +from group_queue import queue +queue = queue.Queue() + +queue.new_queue() + +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") + +queue.delete_person("13") +print("\nqueue.delete_position('13')") + +print("=================================================") +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") + +queue.add_person("13", 4) +print("\nqueue.add_person('13', 4)") + +print("=================================================") +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") + +queue.swap('5', '7') +print("\nqueue.swap('5', '7')") + +print("=================================================") +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") + +queue.swap('12','5') +print("\nqueue.swap('12','5')") + +print("=================================================") +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") + +print("\n=====HISTORY=====\n") +array = queue.get_queue() +for i in range(len(array)): + print(f"{i+1}. {array[i].get_name()} ({array[i].get_id()})") diff --git a/client_server/ServerClient.py b/client_server/server_client.py similarity index 100% rename from client_server/ServerClient.py rename to client_server/server_client.py diff --git a/ArrayEditor/__init__.py b/editor/__init__.py similarity index 100% rename from ArrayEditor/__init__.py rename to editor/__init__.py diff --git a/ArrayEditor/ArrayEditor.py b/editor/editor.py similarity index 100% rename from ArrayEditor/ArrayEditor.py rename to editor/editor.py diff --git a/Parse/__init__.py b/group_queue/__init__.py similarity index 100% rename from Parse/__init__.py rename to group_queue/__init__.py diff --git a/group_queue/groupList.txt b/group_queue/groupList.txt new file mode 100644 index 0000000..785d71a --- /dev/null +++ b/group_queue/groupList.txt @@ -0,0 +1,27 @@ +1 Алексеев Андрей Дмитриевич +2 Анищенко Анатолий Алексеевич +3 Атикеев Роман +4 Барышев Вадим Антонович +5 Буланов Кирилл Сергеевич +6 Гараева Рамина Раминовна +7 Гогидзе Полина Роиновна +8 Гурин Евгений Иванович +9 Давидович Даниил +10 Емельянов Григорий Владимирович +11 Ефаринов Павел Андреевич +12 Забирова Евгения Витальевна +13 Иванов Илья +14 Колоколов Артём Михайлович +15 Кульбако Артемий Юрьевич +16 Куприянов Артур Алексеевич +17 Лозовцов Владислав Владимирович +18 Максимов Александр Владимирович +19 Мосягин Иван Денисович +20 Носов Михаил Александрович +21 Очаковский Сергей Сергеевич +22 Рождественский Никита Сергеевич +23 Сидорова Алина Игоревна +24 Тарасов Александр Станиславович +25 Хлюстов Илья Алексеевич +26 Шайхатаров Артур Ринатович +27 Шаяхметов Ислам Робертович \ No newline at end of file diff --git a/group_queue/groupListWindows.txt b/group_queue/groupListWindows.txt new file mode 100644 index 0000000..38e581f --- /dev/null +++ b/group_queue/groupListWindows.txt @@ -0,0 +1,27 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 \ No newline at end of file diff --git a/group_queue/history.py b/group_queue/history.py new file mode 100644 index 0000000..e943f94 --- /dev/null +++ b/group_queue/history.py @@ -0,0 +1,32 @@ + + +class History: + + def __init__(self, filename: str="history"): + + self.filename = filename + self.history_file = open(filename, "w", encoding="UTF-8") + + def _re_open_file(self): + self.history_file = open(self.filename, "a", encoding="UTF-8") + + def write(self, history: any): + self.history_file.write(str(history)) + self.history_file.write("\n") + self.history_file.close() + + self._re_open_file() + + def clean(self): + self.history_file = open(self.filename, "w", encoding="UTF-8") + + def change_file(self, new_filename: str): + self.filename = new_filename + self.history_file = open(new_filename, "w") + + def get_history(self) -> list: + self.history_file.close() + history = open(self.filename, "r", encoding="UTF-8") + history = history.read().split("\n") + self._re_open_file() + return history diff --git a/group_queue/person.py b/group_queue/person.py new file mode 100644 index 0000000..9eb2d05 --- /dev/null +++ b/group_queue/person.py @@ -0,0 +1,16 @@ +class Person: + + def __init__(self, person_id: str, name: str): + self._person_id = person_id + self._name = name + # Прошел очередь + self.passed = False + + def set_passed(self, passed: bool): + self.passed = passed + + def get_id(self): + return self._person_id + + def get_name(self): + return self._name diff --git a/group_queue/queue.py b/group_queue/queue.py new file mode 100644 index 0000000..16e9be5 --- /dev/null +++ b/group_queue/queue.py @@ -0,0 +1,203 @@ +import os +import random +from parse.date import Date +from group_queue.person import Person +from group_queue.history import History + + +class Queue: + + def __init__(self): + self._queue_list = self._set_group_list() + self._GROUP_LIST = self._queue_list + + # Номер текущей очереди + self._queue_value = 0 + + # Работа с историей + self.history = History() + + # Для работы со временем + self.date = Date() + + @staticmethod + def _set_group_list(): + """ + Получает список группы из файла groupList.txt или groupListWindow.txt в зависимости от кодировки + :return: сгенерированный список группы с элементами Person + """ + # TODO: do with encoding on UTF-8 + if os.name == "nt": + filename = "group_queue/groupListWindows.txt" + else: + filename = "group_queue/groupList.txt" + + file = open(filename, "r") + group_list = [] + while True: + + f = file.readline().split() + if not f: + break + + group_list.append(Person(f[0], f"{f[1]} {f[2]}")) + + return group_list + + def new_queue(self, group_list: list=None) -> None: + """ + Создание новой очереди, начиная с рандомно выбранного человека + :param group_list: список группы с классами Person + :return: None + """ + if group_list is None: + group_list = self._queue_list + self._queue_list = self._create_queue(random.randint(0, 27), group_list) + + self.history.write("Создана новая очередь") + + @staticmethod + def _create_queue(start_person_id: int, group_list: list) -> list: + """ + Создает очередь с человека заданного по индексу + :param start_person_id: индекс человека с которого начинается очередь + :param group_list: список людей занимающих очередь + :return: массив с очередью + """ + queue = [] + for i in range(len(group_list)): + index = i + start_person_id - 1 + + # При переполнении + if index >= len(group_list): + index -= len(group_list) + + queue.append(group_list[index]) + + return queue + + def person_passed(self) -> None: + """ + Вызывается когда кто-то прошел очередь. Инициализирует сдвиг очереди + :return: None + """ + self._queue_value += 1 + + # При переполнении + if self._queue_value == len(self._queue_list): + self._queue_value -= len(self._queue_list) + + self.history.write(f"{self._queue_list[self._queue_value].get_id()}" + f" {self._queue_list[self._queue_value].get_name()}" + f" прошел очередь в {self.date.get_time()}") + + def get_last_person_in_queue(self) -> Person: + """ + + :return: Предыдущий в очереди + """ + # TODO: Rewrite for the queue with re-turn (Add new boolean variable) + if self._queue_value == 0: + return Person("0", "None") + else: + return self._queue_list[self._queue_value - 1] + + def get_current_person_in_queue(self) -> Person: + """ + + :return: Текущий в очереди + """ + return self._queue_list[self._queue_value] + + def get_next_person_in_queue(self) -> Person: + """ + + :return: Следующий в очереди + """ + if self._queue_value == len(self._queue_list) - 1: + return self._queue_list[0].get_name() + else: + return self._queue_list[self._queue_value + 1] + + def get_queue(self) -> list: + """ + Получение списка очереди + :return: список очереди, элементы которой типа Person + """ + return self._queue_list + + def get_person_queue_position(self, person_id: str) -> int: + """ + Возвращает текущую позицию в очереди по номеру в списке + :param person_id: номер в списке + :return: номер в очереди. 0 - если не найден в очереди + """ + for i in range(len(self._queue_list)): + if self._queue_list[i].get_id() == person_id: + return i + 1 + return 0 + + def delete_person(self, person_id: str): + person_position = self.get_person_queue_position(person_id) - 1 + del self._queue_list[person_position] + self.history.write(f"{self._queue_list[person_position].get_name()} удален из очереди в {self.date.get_time()}") + + def add_person(self, person_id: str, position: int=-1): + + new_queue_list = [] + + if position == -1: + for person in self._GROUP_LIST: + if person.get_id() == person_id: + self._queue_list.append(person) + + self.history.write(f"В конец очереди добавлен {person.get_name()} в {self.date.get_time()}") + + elif position == len(self._queue_list) + 1: + for person in self._GROUP_LIST: + if person.get_id() == person_id: + self._queue_list.append(person) + self.history.write(f"В позицию {position}" + f" добавлен {person.get_name()} в" + f" {self.date.get_time()}") + + else: + for i in range(len(self._queue_list)): + if i + 1 == position: + for person in self._GROUP_LIST: + if person.get_id() == person_id: + new_queue_list.append(person) + self.history.write(f"В позицию {position}" + f" добавлен {person.get_name()} в" + f" {self.date.get_time()}") + + new_queue_list.append(self._queue_list[i]) + + self._queue_list = new_queue_list + + def swap(self, person1_id: str, person2_id: str): + """ + Меняет местами двух людей + :param person1_id: номер ИСУ первого + :param person2_id: номер ИСУ второго + :return: None + """ + for index1 in range(len(self._queue_list)): + if self._queue_list[index1].get_id() == person1_id: + + for index2 in range(len(self._queue_list)): + if self._queue_list[index2].get_id() == person2_id: + temp = self._queue_list[index1] + self._queue_list[index1] = self._queue_list[index2] + self._queue_list[index2] = temp + + self.history.write(f"Поменялись местами: " + f"{self._queue_list[index1].get_name()} <-> " + f"{self._queue_list[index2].get_name()}" + f" в {self.date.get_time()}") + + return + + def test(self): + self.new_queue() + return self.get_queue() diff --git a/Lilly.py b/lilly.py similarity index 97% rename from Lilly.py rename to lilly.py index b970d70..4c20d2d 100644 --- a/Lilly.py +++ b/lilly.py @@ -1,11 +1,11 @@ from random import random import os -from questions.GetQuestion import GetQuestion -from Parse.Recipe import Recipe -from Parse import Parser -from schedule.ScheduleFromFile import ScheduleFromFile -from client_server import ServerClient -from Parse import Date +from questions.get_question import GetQuestion +from parse.recipe import Recipe +from parse import parser +from schedule.schedule_from_file import ScheduleFromFile +from client_server import server_client +from parse import date class Lilly: @@ -13,16 +13,16 @@ class Lilly: def __init__(self): # Для парсинга сайтов - self.parser = Parser.Parser() + self.parser = parser.Parser() self.schedule = ScheduleFromFile() # Для работы с датами - self.date = Date.Date() + self.date = date.Date() # Мобильная версия отличается тем, что команды выполниемые на компьютере посылает их через сокеты self.mobileVersion = True # Вопросы про Java OOP self.get_question_of_java = GetQuestion() # IP - адресс соединения с компьютером - self.sc = ServerClient.ServerClient('192.168.43.212', 9090) + self.sc = server_client.ServerClient('192.168.43.212', 9090) # Приветственное сообщение было отправлено во время сеанса self.WELCOME_MSG_SEND = False # Режим суперпользователя @@ -249,7 +249,7 @@ def get_schedule(self, tomorrow="no"): def get_breakfast_recipe(self, amount: int = 0) -> str: """ - Парсит рецепты с раздела завтрак с помощью класса Recipe из файла Recipe.py + Парсит рецепты с раздела завтрак с помощью класса Recipe из файла recipe.py :param amount: количество рецептов, которое нужно вывести :return: рецепты diff --git a/Lilly_Runner.py b/lilly_runner.py similarity index 98% rename from Lilly_Runner.py rename to lilly_runner.py index 7b42989..ef12ab6 100644 --- a/Lilly_Runner.py +++ b/lilly_runner.py @@ -1,5 +1,5 @@ import vk_api -from Lilly import Lilly +from lilly import Lilly from vk_api.longpoll import VkLongPoll, VkEventType import config diff --git a/main.py b/main.py new file mode 100644 index 0000000..7bbf975 --- /dev/null +++ b/main.py @@ -0,0 +1,5 @@ +import lilly_runner + +if __name__ == "__main__": + lilly = lilly_runner + lilly.run() diff --git a/groupQueue/__init__.py b/parse/__init__.py similarity index 100% rename from groupQueue/__init__.py rename to parse/__init__.py diff --git a/Parse/Date.py b/parse/date.py similarity index 92% rename from Parse/Date.py rename to parse/date.py index d140ef3..d6272fa 100644 --- a/Parse/Date.py +++ b/parse/date.py @@ -1,4 +1,4 @@ -from Parse.Parser import Parser +from parse.parser import Parser class Date(Parser): @@ -18,7 +18,7 @@ def get_day_of_week(self): return self._date[1] def get_time(self): - return self.clean_all_tag_from_str(str(self.b.select(".page")[0].findAll("h2")[1])) + return self.clean_all_tag_from_str(str(self.b.select(".page")[0].findAll("h2")[1])).split()[1] def get_week_parity(self): b_site = self.set_http("http://www.ifmo.ru/ru/schedule/0/P3112/raspisanie_zanyatiy_P3112.htm") diff --git a/Parse/Parser.py b/parse/parser.py similarity index 100% rename from Parse/Parser.py rename to parse/parser.py diff --git a/Parse/Recipe.py b/parse/recipe.py similarity index 97% rename from Parse/Recipe.py rename to parse/recipe.py index 69c86a6..573c0b4 100644 --- a/Parse/Recipe.py +++ b/parse/recipe.py @@ -1,4 +1,4 @@ -from Parse.Parser import Parser +from parse.parser import Parser class Recipe(Parser): diff --git a/Parse/Schedule.py b/parse/schedule.py similarity index 94% rename from Parse/Schedule.py rename to parse/schedule.py index 81dfb43..3ad1be1 100644 --- a/Parse/Schedule.py +++ b/parse/schedule.py @@ -1,8 +1,8 @@ import bs4 import requests -from ArrayEditor import ArrayEditor -from Parse.Parser import Parser +from editor import editor +from parse.parser import Parser class Schedule(Parser): diff --git a/questions/GetQuestion.py b/questions/get_question.py similarity index 100% rename from questions/GetQuestion.py rename to questions/get_question.py diff --git a/schedule/ScheduleFromFile.py b/schedule/schedule_from_file.py similarity index 100% rename from schedule/ScheduleFromFile.py rename to schedule/schedule_from_file.py