Пример #1
0
    def test_update_media_data(self):
        media_id = '12345678'
        media_title = 'Тест 1'

        new_label = 'Тест 2'

        command_data = {
            'client_id': self.test_context.admin_id,
            'kinopoisk_id': media_id,
            'label': media_title,
            'year': 1999,
            'url': 'http://test1'
        }

        self.test_context.add_test_film(self.db.session, **command_data)

        data = {
            'media_id': media_id,
            'media_type': app_enums.MediaType.FILMS,
            'upd_data': {
                'label': new_label
            }
        }

        command = app_enums.ClientCommands.UPDATE_MEDIA
        command_msg = command_message(app_enums.ComponentType.MAIN_APP,
                                      command, data, self.client_id)
        self.test_handler.handle_message(command_msg)

        media = self.db.find_media(media_id, app_enums.MediaType.FILMS)

        self.assertTrue(media.title == new_label,
                        'Наименование не изменилось.')
Пример #2
0
    def test_add_media_to_user(self):
        media_id = '12345678'
        media_title = 'Тест 1'
        client_id = 1225

        film = self.test_context.add_test_film(
            self.db.session, **{
                'client_id': self.test_context.admin_id,
                'kinopoisk_id': media_id,
                'label': media_title,
                'year': 1999,
                'url': 'http://test1'
            })

        user = self.db.add_user(client_id, '', '', '')

        data = {
            'kinopoisk_id': media_id,
            'media_type': app_enums.MediaType.FILMS,
            'season': 0
        }

        command_msg = command_message(
            app_enums.ComponentType.CLIENT,
            app_enums.ClientCommands.ADD_MEDIA_TO_USER_LIST, data, client_id)

        self.test_handler.handle_message(command_msg)

        self.assertIn(str(film.kinopoisk_id),
                      [a.kinopoisk_id for a in user.media.all()],
                      'Фильм не добавлен пользователю')
Пример #3
0
 def auth_query(cls, data: CommandData, db_manager: DbManager, config):
     """
     Query for authentication from new user/
     :param data:
     :param db_manager:
     :return:
     """
     messages = []
     session = db_manager.get_session()
     if db_manager.is_admin(data.client_id):
         messages.append(
             command_message(
                 ComponentType.COMMAND_HANDLER,
                 ClientCommands.ADD_DATA_USER,
                 {
                     'client_id': data.command_data['client_id'],
                     'name': data.command_data['name'],
                     'last_name': data.command_data['last_name'],
                     'nick': data.command_data['nick']
                 },
                 data.client_id
             )
         )
     else:
         message_text = 'У тебя нет прав на добавление пользователей.'
         messages.append(
             send_message(
                 ComponentType.COMMAND_HANDLER,
                 {
                     'user_id': data.client_id, 'message_text': message_text, 'choices': []
                 }
             )
         )
     session.close()
     return messages
Пример #4
0
    def end_chain(self, data):
        text_type = 'Фильм' if data.data[
            'media_type'].value == MediaType.FILMS.value else 'Сериал'
        title = data.data['title']
        if data.data['media_status'] != LockingStatus.ENDED:
            message_text = f'{text_type} {title} уже ищется.'
        else:
            message_text = f'Поиск {text_type}а по запросу {title} завершен.'

        self.messages.append(
            send_message(
                ComponentType.PARSER, {
                    'user_id': data.client_id,
                    'message_text': message_text,
                    'choices': []
                }))

        self.messages.append(
            command_message(
                ComponentType.PARSER,
                ClientCommands.ADD_MEDIA_TO_USER_LIST,
                {
                    'kinopoisk_id':
                    data.data['kinopoisk_id'],
                    'media_type':
                    MediaType.FILMS if 'serial' in data.data.keys()
                    and not data.data['serial'] else MediaType.SERIALS,
                    'season':
                    data.data['season'] if 'season' in data.data.keys() else 0,
                },
                data.client_id,
            ))

        return self.messages
Пример #5
0
    def end_chain(self, data: ParserData) -> list:

        command = ClientCommands.ADD_DATA_FILM if 'serial' in data.data.keys() and \
                                                  not data.data['serial'] else ClientCommands.ADD_DATA_SERIAL

        self.messages.append(
            command_message(ComponentType.PARSER, command, data.data,
                            data.client_id))
        return self.messages
Пример #6
0
    def test_command_add_serial(self):

        self.mediator.start()
        self.parser.start()
        self.test_handler.start()

        command_data = dict(text='Игра')
        command = app_enums.ClientCommands.ADD_SERIAL

        command_msg = command_message(app_enums.ComponentType.MAIN_APP,
                                      command, command_data, self.client_id)
        self.test_handler.handle_message(command_msg)
Пример #7
0
    def test_command_change_notification(self):

        notif_option = app_enums.UserOptions.NOTIFICATION

        command_data = {'option': notif_option}

        command = app_enums.ClientCommands.EDIT_SETTINGS
        command_msg = command_message(app_enums.ComponentType.MAIN_APP,
                                      command, command_data, self.client_id)
        self.test_handler.handle_message(command_msg)

        val = self.db.get_user_option(self.client_id, notif_option)
        self.assertTrue(val == 1, 'Статус не изменился')
Пример #8
0
def start_torrent_watcher_message(job, data) -> MediatorMessage:

    upd_data = {'torrent_id': data['torrent_id']}
    command_data = construct_upd_data(job, upd_data)
    data = {}
    add_media_keys(job, data)
    command_data.update({
        'next_messages': [
            crawler_message(ComponentType.COMMAND_HANDLER, job.client_id, data,
                            ActionType.ADD_TORRENT_WATCHER)
        ]
    })
    return command_message(ComponentType.CRAWLER, ClientCommands.UPDATE_MEDIA,
                           command_data, job.client_id)
Пример #9
0
    def test_add_user(self):
        new_user_id = 12345

        data = {
            'client_id': new_user_id,
            'name': 'Al',
            'last_name': 'Al',
            'nick': 'Al'
        }

        command_msg = command_message(app_enums.ComponentType.CLIENT,
                                      app_enums.ClientCommands.ADD_DATA_USER,
                                      data, self.client_id)

        self.test_handler.handle_message(command_msg)

        new_user = self.db.find_user(new_user_id)

        self.assertIsNotNone(new_user, 'Новый пользователь не создан.')
Пример #10
0
    def handle_user(self, user_id):
        try:
            client_data = self.bot.get_chat(user_id)
            data = {
                'client_id': self.user_id,
                'name': client_data.first_name,
                'last_name': client_data.last_name,
                'nick': client_data.username
            }
        except teleg_error.BadRequest:
            data = {
                'client_id': self.user_id,
                'name': '',
                'last_name': '',
                'nick': ''
            }

        self.bot.protocol.send_message(
            command_message(ComponentType.CLIENT,
                            ClientCommands.AUTHENTICATION, data, self.user_id))
Пример #11
0
    def get_callback_message(cls, cache_data, update):
        message = None
        if 'force' in cache_data.keys():
            cache_data['key_board'] = False
            message = crawler_message(ComponentType.CLIENT,
                                      update.callback_query.from_user.id,
                                      cache_data,
                                      ActionType.ADD_TORRENT_WATCHER)
        elif 'action' in cache_data.keys():
            if cache_data['action'] == 'kinopoisk':
                message = parser_message(ComponentType.CLIENT, cache_data,
                                         update.callback_query.from_user.id)
            elif cache_data['action'] == 'select_torrent':
                client_id = update.callback_query.from_user.id
                command_data = {
                    'media_id': cache_data['media_id'],
                    'media_type': cache_data['media_type'],
                }
                upd_data = {
                    'download_url': cache_data['download_url'],
                    'theam_id': cache_data['theam_id'],
                    'torrent_tracker': cache_data['torrent_tracker'],
                }

                if cache_data['media_type'].value == MediaType.SERIALS.value:
                    season = {'season': cache_data['season']}
                    command_data.update(season)

                command_data.update({
                    'upd_data':
                    upd_data,
                    'next_messages': [
                        crawler_message(ComponentType.CRAWLER, client_id,
                                        cache_data,
                                        ActionType.DOWNLOAD_TORRENT)
                    ]
                })
                message = command_message(ComponentType.CRAWLER,
                                          ClientCommands.UPDATE_MEDIA,
                                          command_data, client_id)
        return message
Пример #12
0
def film_success_message(data, job):

    dwld_data = {}
    add_media_keys(job, dwld_data)

    upd_data = {
        'download_url': data.url,
        'theam_id': data.theam_url,
        'torrent_tracker': data.tracker,
    }
    command_data = construct_upd_data(job, upd_data)

    command_data.update({
        'next_messages': [
            crawler_message(ComponentType.CRAWLER, job.client_id, dwld_data,
                            ActionType.DOWNLOAD_TORRENT)
        ],
    })

    return command_message(ComponentType.CRAWLER, ClientCommands.UPDATE_MEDIA,
                           command_data, job.client_id)
Пример #13
0
    def get_command_message(cls, command: str, data: dict, chat_id: int):
        """
        Send message to command exsecuter
        :param command:
        :param data:
        :param chat_id:
        :return:
        """

        client_command = [
            x['command'] for x in cls.message_commands()
            if x['command_text'] == command
        ]
        client_command = client_command[0] if len(client_command) else None

        if client_command is None:
            logging.error('Wrong command for execution {0}'.format(command))
            return

        return command_message(ComponentType.CLIENT, client_command, data,
                               chat_id)
Пример #14
0
    def test_command_send_messages(self):
        media_id = '12345678'
        media_title = 'Тест 1'

        self.test_context.add_test_film(
            self.db.session, **{
                'client_id': self.test_context.admin_id,
                'kinopoisk_id': media_id,
                'label': media_title,
                'year': 1999,
                'url': 'http://test1'
            })

        data = {
            'client_id': self.test_context.admin_id,
            'message_text': media_title,
            'choices': []
        }
        comm_message = command_message(app_enums.ComponentType.MAIN_APP,
                                       app_enums.ClientCommands.SEND_MESSAGES,
                                       data, self.test_context.admin_id)
        self.test_handler.handle_message(comm_message)
Пример #15
0
def watcher_messages(job, data):
    messages = []
    torrent_inform = data['torrent_information']
    if torrent_inform['progress'] == 100:
        message_text = 'Скачивание {} завершено, беги скорей на плекс.'.format(
            job.text_query)
        choices = []
        messages += [
            command_message(ComponentType.CRAWLER,
                            ClientCommands.UPDATE_PLEX_LIB, {}, job.client_id)
        ]
    else:
        message_text = 'Прогресс скачивания {0}: {1}% {2}/{3}'.format(
            job.text_query,
            torrent_inform['progress'],
            convert_size(torrent_inform['total_done']),
            convert_size(torrent_inform['total_size']),
        )
        if 'key_board' in job.crawler_data.data.keys(
        ) and not job.crawler_data.data['key_board']:
            choices = []
        else:
            data = {}
            add_media_keys(job, data)
            data.update({
                'force': True,
            })
            choices = {'action': 'download_callback', 'data': data}
    messages.append(
        send_message(
            ComponentType.CRAWLER, {
                'user_id': job.client_id,
                'message_text': message_text,
                'choices': choices
            }))
    return messages
Пример #16
0
 def handle_serial(self, query):
     message = command_message(ComponentType.CLIENT,
                               ClientCommands.ADD_SERIAL, {'text': query},
                               self.user_id)
     self.bot.protocol.send_message(message)
Пример #17
0
    def construct_messages(self, data):
        messages = []
        for torrent_data in data:
            media = self.job

            if media.media_type.value == MediaType.FILMS.value:
                message_text = 'Фильм "{0}" будет скачан, через несколько минут. \n {1}'.format(
                    media.text_query,
                    media.kinopoisk_url
                )
                status = LockingStatus.ENDED
            else:
                message_text = 'Новая серия "{0}" будет скачана, через несколько минут. \n {1}'.format(
                    media.text_query,
                    media.kinopoisk_url
                )

                if self.job.current_series == torrent_data['file_amount']:
                    return []

                if self.job.series != 0 and torrent_data['file_amount'] >= self.job.series:
                    status = LockingStatus.ENDED
                else:
                    status = LockingStatus.FIND_TORRENT

            upd_data = {
                'status': status,
                'exsists_in_plex': True,
                'current_series': 0 if media.season == '' else torrent_data['file_amount']
            }
            command_data = construct_upd_data(media, upd_data)

            send_data = {
                'choices': [],
                'message_text': message_text
            }
            add_media_keys(media, send_data)

            add_torrent_data = {
                'torrent_id': torrent_data['id'],
                'torrent_data': torrent_data['data'],
            }
            add_media_keys(media, add_torrent_data)

            messages += [
                command_message(
                    ComponentType.CRAWLER,
                    ClientCommands.UPDATE_MEDIA,
                    command_data,
                    self.job.client_id
                ),
                crawler_message(
                    ComponentType.CRAWLER,
                    media.client_id,
                    add_torrent_data,
                    ActionType.ADD_TORRENT_TO_TORRENT_CLIENT
                ),
                command_message(
                    ComponentType.CRAWLER,
                    ClientCommands.SEND_MESSAGES_BY_MEDIA,
                    send_data,
                    self.job.client_id
                )
            ]
        return messages