def start_server(self, run_once=True): logging.debug('Starting server; ' + self.server_accepted_networks_mask + ":" + str(self.port)) self.server_loop_exit_flag = run_once try: while True: with SocketServer(self.server_accepted_networks_mask, self.port) as server: received_message = server.receive() logging.debug("Received: " + '"' + received_message + '"') response_message = self.__parse_received_message( received_message) server.send(response_message) if self.server_loop_exit_flag: logging.debug("Server exited; " + self.server_accepted_networks_mask + ":" + str(self.port)) break return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_server_start, arguments=['done']) except Exception as e: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_server_start_fail, arguments=[str(e)])
def __command_get(self, args): if self.main_password is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_not_set) if len(args) < 1: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value, arguments=[]) password = None for p in self.passwords_encrypted: if p.name == args[0]: password = p if password is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value, arguments=[]) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_get_ok, arguments=[ password.name, PydesWrapper().decrypt(self.main_password, password.username), PydesWrapper().decrypt(self.main_password, password.password) ])
def __command_set(self, args): if args is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_set_wrong_id, arguments=[]) found_game_id = None try: arg_as_int = int(args[0]) except ValueError: arg_as_int = None if arg_as_int is not None: for g in self.games: if arg_as_int == g.game_id: found_game_id = g.game_id break else: for g in self.games: if args[0] == g.name: found_game_id = g.game_id break if found_game_id is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_set_wrong_id, arguments=[]) else: SharedPreferences().put('current_game_id', found_game_id) self.current_game_id = found_game_id return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_set_ok, arguments=[])
def __command_undone(self, args): try: if int(args[0]) > len(self.tasks): raise IndexError if int(args[0]) < 0: return_value = self.periodic_task_progress_handler.set_undone( self.__translate_periodic_task_id(int(args[0]))) if return_value is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue. task_done_wrong_parameter, arguments=args) else: return_name = PeriodicTaskGenerator( self.periodic_tasks_location, self.events_location).get_tasks()[ self.__translate_periodic_task_id(args[0])].name else: self.tasks[int(args[0])].status = TaskStatus.not_done self.__save_if_allowed() return_name = self.tasks[int(args[0])].name return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_undone_ok, arguments=[return_name]) except (IndexError, ValueError): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_done_wrong_parameter, arguments=args)
def __command_set(self, args): try: if int(args[0]) > len(self.tasks) or int(args[0]) < 0: raise IndexError # parsing first argument if args[1].lower() == 'None'.lower(): self.tasks[int(args[0])].date_to_finish = None else: # set is for day not hour so part of date is removed self.tasks[int(args[0])].date_to_finish = self.__get_today().replace(microsecond=0, second=0, minute=0, hour=0) + \ datetime.timedelta(days=int(args[1])) # parsing second argument if len(args) > 2: self.tasks[int(args[0])].reminder = int(args[2]) self.__save_if_allowed() return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_set_ok, arguments=[self.tasks[int(args[0])].name, args[1]]) except IndexError: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_set_incorrect_parameter, arguments=args) except ValueError: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_set_incorrect_parameter, arguments=args)
def __command_get(self, args): response = self.__get_weather_now() if response is not None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.weather_get_ok, arguments=[response]) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.weather_get_nook, arguments=['Connection failed'])
def __command_list(self, args): if self.main_password is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_not_set) return_value = [] for p in self.passwords_encrypted: return_value.append(p.name) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_list_ok, arguments=[return_value])
def __command_ls(self, args): response = self.rootfs_manager.ls(" ".join(args)) if response is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.rootfs_no_ok, arguments=["Incorrect path"]) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.rootfs_ls_ok, arguments=[response])
def add_fat(self, value): try: self.fats.append(FatFactory.get_fat(value)) except IncorrectDateFormatException: logging.warning("Fat '" + value + "' not added - incorrect date format") return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_incorrect_date_format) except IncorrectVariableTypeException: return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_add_must_be_float) logging.debug("Added '" + value + "'") self.__save() return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_added, arguments=[value])
def __command_get(self, args): try: day = int(args[0]) except ValueError: # argument is not int return MumjolandiaResponseObject(status=MumjolandiaReturnValue.planner_get_fail, arguments=['nook']) except IndexError: # argument doesn't exist day = None return_value = self.plans_handler.get(day) return MumjolandiaResponseObject(status=MumjolandiaReturnValue.planner_get_ok, arguments=[return_value])
def __command_bump(self, args): try: if int(args[0]) > len(self.tasks) or int(args[0]) < 0: raise IndexError self.tasks.append(self.tasks.pop(int(args[0]))) self.__save_if_allowed() return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_bump_ok, arguments=[str(len(self.tasks) - 1), self.tasks[-1].name]) except (IndexError, ValueError): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.task_bump_nook, arguments=args)
def __command_remove(self, args): day = None hour = None try: day = int(args[0]) hour = str(args[1]) except (ValueError, IndexError): # one of arguments doesn't exist, or int(x) failed return MumjolandiaResponseObject(status=MumjolandiaReturnValue.planner_remove_fail, arguments=['Incorrect argument: day: ' + str(day) + ' hour: ' + str(hour)]) return_value = self.plans_handler.remove(day, hour) return MumjolandiaResponseObject(status=MumjolandiaReturnValue.planner_remove_ok, arguments=[return_value])
def __command_init(self, args): if len(args) < 1: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value, arguments=[]) validation_ok = self.__create_password_validation_string(args[0]) if validation_ok: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_set_ok) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value)
def __command_update(self, args): try: s = SocketClient(ConfigLoader.get_config().server_address, int(ConfigLoader.get_config().server_port)) path = s.get_mumjolandia_update_package('mumjolandia.tar.gz') MumjolandiaUpdater.install_source(path) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_client_send_ok, arguments=['ok']) except ConnectionRefusedError: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_failed, arguments=['Can\'t connect to server'])
def __command_set(self, args): if len(args) < 2: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_set_nook, arguments=["2 parameters needed"]) if self.config_parser.set(args[0], args[1]): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_set_ok, arguments=[self.config_parser.get(args[0])]) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_set_nook, arguments=["Parameter \"" + args[0] + "\" not found"])
def __command_set(self, args): if args is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.pompejanka_message, arguments=['Parameter not provided']) if int(args[0]) > 0: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.pompejanka_message, arguments=['Value has to be <= 0']) self.start_date = DateHelper.get_today_short(args[0]) SharedPreferences().put(self.start_date_string, str(self.start_date)) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.pompejanka_message, arguments=['Set to: ' + str(DateHelper.get_today_short(args[0]))])
def delete_note(self, note_id): try: tid = int(note_id) try: self.notes.pop(tid) self.__save() return MumjolandiaResponseObject(status=MumjolandiaReturnValue.note_delete_success, arguments=[note_id, str(1)]) except IndexError: # wrong index return MumjolandiaResponseObject(status=MumjolandiaReturnValue.note_delete_incorrect_index, arguments=[note_id]) except ValueError: # parameter type is not int return MumjolandiaResponseObject(status=MumjolandiaReturnValue.note_delete_incorrect_index, arguments=[note_id])
def __command_current(self, args): if self.current_game_id is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_current_get, arguments=[None]) else: for g in self.games: if g.game_id == self.current_game_id: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_current_get, arguments=[g.name]) logging.error("Didn't found game with current_game_id!") return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_current_get, arguments=[None])
def send_message(self, message): logging.debug('Sending: "' + message + '" to ' + self.server_address + ":" + str(self.port)) try: with SocketClient(self.server_address, int(self.port)) as s: return_value = s.send(str(message)) logging.debug('Received: "' + return_value + '" from ' + self.server_address + ":" + str(self.port)) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_client_send_ok, arguments=[return_value]) except Exception as e: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_failed, arguments=['Can\'t connect to server: ' + str(e)])
def __command_set(self, args): if len(args) < 1: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value, arguments=[]) else: if self.__check_password_validation_string(args[0]): self.main_password = args[0] else: self.main_password = None return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_set_incorrect, arguments=[args[0]]) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_set_ok)
def delete_fat(self, fat_id): # parameter comes as string. If we can parse it to int then we remove by id. If not, then by name try: fid = int(fat_id) try: self.fats.pop(fid) self.__save() return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_delete_success, arguments=[fat_id, str(1)]) except IndexError: # wrong index return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_delete_incorrect_index, arguments=[fat_id]) except ValueError: # parameter type is not int return MumjolandiaResponseObject(status=MumjolandiaReturnValue.fat_delete_incorrect_index, arguments=[fat_id])
def __command_help(self, command): return_value = [] for key, value in self.command_parsers.items(): return_value.append(key) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.mumjolandia_help, arguments=return_value)
def __command_mode(self, args): if len(args) == 0: return_arguments = [] else: return_arguments = [args[0]] return MumjolandiaResponseObject( status=MumjolandiaReturnValue.cli_mode, arguments=return_arguments)
def __command_help(self, args): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_help, arguments=['set [x]\n' 'ls\n' 'clear\n' '[h]elp'])
def __command_get(self, args): try: s = SocketClient(ConfigLoader.get_config().server_address, int(ConfigLoader.get_config().server_port)) path = s.get_file(args[0]) if path is None: return_value = 'Connection ok, but received file empty' else: return_value = 'received file: ' + path return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_client_send_ok, arguments=[return_value]) except ConnectionRefusedError: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.connection_failed, arguments=['Can\'t connect to server'])
def __command_rm(self, args): if self.main_password is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_not_set) password = None for p in self.passwords_encrypted: if p.name == args[0]: password = p if password is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_incorrect_value, arguments=[]) self.passwords_encrypted.remove(password) self.password_loader.save(self.passwords_encrypted) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.password_rm_ok, arguments=['ok'])
def __command_get(self, args): try: index = int(args[0]) except (IndexError, ValueError): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.food_get_wrong_index, arguments=[str(args)]) helper = FoodDatabaseHelper(self.db_location) meal = helper.get_meal_ingredients(index) recipe = helper.get_meal(index)[0][3] ingredients_list = [] for ingredient in meal: ingredients_list.append([ingredient[1:]]) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.food_get_ok, arguments=[[str(meal[0][0]), recipe], ingredients_list])
def __command_get(self, args): # argument not provided if not len(args): return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_get_fail, arguments=["Parameter needed"]) return_value = self.config_parser.get(args[0]) if return_value is not None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_get_ok, arguments=[return_value]) else: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.config_get_fail, arguments=["Value \"" + args[0] + "\" not found"])
def test_exit(self, mock_logging): self.q1.get = MagicMock( return_value=CommandFactory.get_command('exit')) self.mt.run() self.assertEqual( self.q2.get(), MumjolandiaResponseObject( status=MumjolandiaReturnValue.mumjolandia_exit))
def __command_get(self, args): if self.start_date is None: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_get_ok, arguments=['Start date not set']) if self.__get_current_pompejanka_day() == 0: return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_get_ok, arguments=['Done :D']) return_string = 'Current day: ' return_string += str(self.__get_current_pompejanka_day()) + '\n' return_string += self.__print_pompejanka( self.__get_current_pompejanka_day()) return MumjolandiaResponseObject( status=MumjolandiaReturnValue.game_get_ok, arguments=[return_string])