def _show_commentary_list(self, commentary_list, information_message=None):
        ViewPartition().border_logo()
        print(self.displayed_post)
        ViewPartition().border_divisory()

        if_list_is_empty_message = 'Este Post não possui Comentários'

        if commentary_list:
            print("Todos os Comentários:\n")

        List(commentary_list,
             if_list_is_empty_message=if_list_is_empty_message,
             separator='\n',
             index_left_list_element=False,
             word_before_index='Comentário ').run()

        ViewPartition().border_divisory()

        print(
            'Caso deseje visualizar algum comentário, selecione ele pelo número ao acima dele'
        )
        print(
            'Caso deseje escrever um novo comentário digite \'C\' e pressione Enter'
        )
        print("(Caso deseje retornar, deixe o campo em branco)")

        ViewPartition().border_information_message(information_message)

        return self._filter_selected_value(InputField().show('>>'))
예제 #2
0
    def _show_notifications_list(self,
                                 notifications_list,
                                 information_message=None):
        ViewPartition().border_logo()
        print("Central de Notificações")
        ViewPartition().border_divisory()

        if_list_is_empty_message = 'Você não possui Notificações'

        List(notifications_list,
             if_list_is_empty_message=if_list_is_empty_message,
             separator='\n',
             index_left_list_element=False,
             word_before_index='Notificação ').run()

        ViewPartition().border_divisory()

        if notifications_list:
            print(
                'Caso deseje acessar alguma Notificação, selecione ela pelo número acima dela'
            )
        print("(Caso deseje retornar, deixe o campo em branco)")

        ViewPartition().border_information_message(information_message)

        return self._filter_selected_value(InputField().show('>>'))
    def _show_selected_post(self, post, information_message=None):
        ViewPartition().border_logo()
            
        print('@' + str(post.author_id) + ' - ' + str(post.date))

        ViewPartition().border_divisory()

        if post.image:
            Dialog().show_image(post.image)

        if not self._is_empty_field(post.text):
            print(str(post.text))
            ViewPartition().border_divisory()

        print("O que gostaria de fazer? Digite uma das opcoes abaixo:")
        print(" 1 - Ver Comentários")
        
        if self._post_belongs_to_logged_user():
            print(" 2 - Deletar esse Post")

        print(" R - Retornar para Lista de Posts")

        ViewPartition().border_information_message(information_message)

        return self._filter_selected_value(InputField().show('>>'))         
예제 #4
0
    def show(self, information_message=None):
        ViewPartition().border_logo()

        print("Gostaria de adicionar uma imagem à Postagem? Digite: \n" ,
              "S - Para sim                                         \n" , 
              "N - Para não                                           " )

        image_add_choice = InputField().show('>>')

        if image_add_choice and image_add_choice.upper() == "S":
            image_path = Dialog().browsing_image()
        else:
            image_path = None
        
        if not image_path or image_path.isspace() or not image_add_choice.upper() == "S":
            image_message_text = "Nenhuma imagem escolhida"
        else:
            image_message_text = image_path

        ViewPartition().border_logo()

        print("Imagem da Postagem>>", image_message_text)
        text = InputField().show('Texto da Postagem>>', show_divisory=False)

        if not image_add_choice and not text:
            return None
        
        post = Post.create_instance(text, image_path, self.logged_user)
예제 #5
0
    def show(self, information_message=None):
        ViewPartition().border_logo()
        
        if self.displayed_post:
            print(self.displayed_post)
            ViewPartition().border_divisory()

        text = InputField().show('Texto do Comentário>>', show_divisory=False)

        if self._is_empty_field(text):
            return None
        else:
            Commentary.create_instance(self.displayed_post, text, self.logged_user)
    def _show_post_list(self, post_list, information_message=None):
        ViewPartition().border_logo()
        
        if_list_is_empty_message = 'Você não possui Posts' if self._displayed_user_is_logged_user else 'Este usuário não possui Posts'

        List(post_list, if_list_is_empty_message=if_list_is_empty_message).run()

        ViewPartition().border_divisory()
               
        print('Caso deseje visualizar algum post, selecione ele pelo número ao lado')
        print("(Caso deseje retornar, deixe o campo em branco)")

        ViewPartition().border_information_message(information_message)

        return self._filter_selected_value(InputField().show('>>'))
예제 #7
0
    def outside_account(self):
        Menus().show_start_menu()

        while True:
            user_input = InputField().show(">> ").lower()

            if user_input in ['login', '1']:
                try:
                    self.current_logged_user = Login().show()
                    return 'home_logged_perfil'

                except EmptyFieldException:
                    Menus().show_start_menu()
                    continue

            elif user_input in ['registrar', '2']:
                try:
                    self.current_logged_user = Register().show()
                    return 'home_logged_perfil'

                except EmptyFieldException:
                    Menus().show_start_menu()
                    continue

            elif user_input in ['sair', '3']:
                ViewPartition().clear_console()
                return 'exit'
            else:
                Menus().show_start_menu(
                    information_message="Escolha inválida, tente novamente")
    def _show_selected_commentary(self, commentary, information_message=None):
        ViewPartition().border_logo()
        print(self.displayed_post)
        ViewPartition().border_divisory()
        print(commentary)
        ViewPartition().border_divisory()

        print("O que gostaria de fazer? Digite uma das opcoes abaixo:")

        if self._post_belongs_to_logged_user():
            print(" 1 - Deletar esse Comentário")

        print(" R - Retornar para Lista de Comentários")

        ViewPartition().border_information_message(information_message)

        return self._filter_selected_value(InputField().show('>>'))
예제 #9
0
    def _show_follow_list(self, follow_list, follow_type='followers'):
        ViewPartition().border_logo()

        emtpy_message_subject = 'Seguidores' if follow_type == 'followers' else 'Usuários que está Seguindo'

        List(follow_list,
             if_list_is_empty_message='Não há ' + emtpy_message_subject +
             ' para serem exibidos').run()

        ViewPartition().border_divisory()

        print(
            'Caso deseje visualizar algum usuário, selecione ele pelo número ao lado'
        )
        print('Para retornar basta manter o campo vazio e pressionar Enter')

        return InputField().show('>>')
예제 #10
0
    def show_start_menu(self, information_message=None):
        ViewPartition().border_logo()

        print("O que gostaria de fazer? Digite uma das opcoes abaixo:\n" \
              " 1 - Para Login                               \n" \
              " 2 - Para Registrar-se                        \n" \
              " 3 - Para Sair                                  " )

        self._show_information_message(information_message)
예제 #11
0
    def show(self):
        ViewPartition().border_dialog(
            "Preencha os campos de Registro (deixe-os vazio caso queira retornar ao menu)"
        )

        while True:
            try:
                complete_name = InputField().show("Nome Completo> ")
                complete_name = Validator().validate_empty_field(
                    complete_name, "Nome Completo")

                user_name = InputField().show("Nome de Usuário> ",
                                              show_divisory=False)
                user_name = Validator().validate_empty_field(
                    user_name, "Nome de Usuário")
                user_name = Validator().validate_user_name_characters(
                    user_name)

                password = InputField().show("Senha> ", show_divisory=False)
                password = Validator().validate_empty_field(password, "Senha")

                user = Accounts().register_user(user_name, complete_name,
                                                password)

                return user

            except EmptyFieldException as exception:
                raise EmptyFieldException(exception.field_name)

            except RepeatedPrimaryKeyException:
                ViewPartition().border_dialog("Nome de Usuário já existe")

            except InvalidUsernameException as e:
                ViewPartition().border_dialog(
                    "O nome de usuário apenas pode conter letras, números e o underline"
                )

            except ValueError:
                ViewPartition().border_dialog(
                    "Alguns dos caracteres não são permitidos")

            except Exception:
                ViewPartition().border_dialog(
                    "Algo deu errado, tente novamente")
예제 #12
0
    def show(self, topic_list=[], information_message=None):
        ViewPartition().border_logo()

        if not topic_list:
            print(
                "Para pesquisar determinado tópico, basta digitar uma palavra abaixo"
            )
        else:
            print("Sua pesquisa resultou em", len(topic_list), "tópicos:")
            List(topic_list, separator='\n').run()

            ViewPartition().border_divisory()
            print(
                "Selecione o tópico que você deseja visualizar pelo número ao lado"
            )

        print("(Caso deseje retornar, deixe o campo em branco)")

        ViewPartition().border_information_message(information_message)

        return InputField().show('>>')
예제 #13
0
    def show(self, users_list=[], information_message=None):
        ViewPartition().border_logo()

        if not users_list:
            print(
                "Para pesquisar determinado usuário, basta digitar seu nome abaixo"
            )
        else:
            print("Sua pesquisa resultou em", len(users_list), "usuários:")
            List(users_list).run()

            ViewPartition().border_divisory()
            print(
                "Selecione o usuário que você deseja visualizar pelo número ao lado"
            )

        print("(Caso deseje retornar, deixe o campo em branco)")

        ViewPartition().border_information_message(information_message)

        return InputField().show('>>')
예제 #14
0
    def run(self):
        ViewPartition().clear_console()

        return_command = 'outside_account'

        while True:
            if return_command == 'outside_account':
                return_command = self.outside_account()

            elif return_command == 'home_logged_perfil':
                return_command = Perfil(self.current_logged_user).run()

            elif return_command == 'exit':
                break
예제 #15
0
    def show(self):
        ViewPartition().border_dialog(
            "Preencha os campos de Login (deixe-os vazio caso queira retornar ao menu)"
        )

        while True:
            try:
                user_name = InputField().show("Nome de Usuário> ")
                user_name = Validator().validate_empty_field(
                    user_name, "Nome de Usuário")

                password = InputField().show("Senha> ", show_divisory=False)
                password = Validator().validate_empty_field(password, "Senha")

                user = Accounts().login_user(user_name, password)

                if not user:
                    ViewPartition().border_dialog(
                        "Está conta não existe, tente novamente")
                    continue
                else:
                    return user

            except WrongPasswordException:
                ViewPartition().border_dialog(
                    "Senha incorreta, por favor, tente novamente")

            except EmptyFieldException as exception:
                raise EmptyFieldException(exception.field_name)

            except ValueError:
                ViewPartition().border_dialog(
                    "Alguns dos caracteres não são permitidos")

            except Exception:
                ViewPartition().border_dialog(
                    "Algo deu errado, tente novamente")
예제 #16
0
    def show_logged_menu(self, user=None, information_message=None):
        ViewPartition().border_logo()

        if not user:
            user = User(None)

        print("Usuário: " + str(user.user_name) + "                 \n\n" \
              "O que gostaria de fazer? Escolha uma das opcoes abaixo:\n" \
              " 1 - Visualizar Perfil                                 \n" \
              " 2 - Ver Usuários que Segue                            \n" \
              " 3 - Ver Seguidores                                    \n" \
              " 4 - Buscar Usuários                                   \n" \
              " 5 - Sair da Conta                                     \n" )

        self._show_information_message(information_message)
예제 #17
0
    def _show_selected_notification(self,
                                    notification,
                                    information_message=None):
        ViewPartition().border_logo()
        print(notification)
        ViewPartition().border_divisory()

        if notification.notification_type == 'follow':
            if self.logged_user.privacy:
                print("Você aceitará o pedido dele?: \n",
                      "S - Para sim                \n",
                      "N - Para não                  ")

                choice = self._filter_selected_value(InputField().show('>>'))

                if choice not in ['S', 'N']:
                    return None

                follow_relationship = Follow.get_follow_instance(
                    notification.id_follow_follower,
                    notification.id_follow_followed)
                follow_relationship.set_confirmation(True if choice ==
                                                     'S' else False)
                Notification.delete_instance(notification.notification_id)

                return {
                    'command':
                    'access_user',
                    'object':
                    User.get_user_instance(notification.id_follow_follower)
                }
            else:
                return {
                    'command':
                    'access_user',
                    'object':
                    User.get_user_instance(notification.id_follow_follower)
                }

        elif notification.notification_type == 'follow confirmation':
            Follow.delete_instance(
                User.get_user_instance(notification.id_follow_follower),
                User.get_user_instance(notification.id_follow_followed))
            Notification.delete_instance(notification.notification_id)

        elif notification.notification_type == 'post markup':
            return {
                'command': 'access_post',
                'object':
                Post.get_post_instance(notification.id_postmarkup_post)
            }

        elif notification.notification_type == 'commentary markup':
            commentary = Commentary.get_commentary_instance(
                notification.id_commentarymarkup_commentary)
            post = Post.get_post_instance(commentary.post_id)

            return {'command': 'access_post', 'object': post}

        else:
            return None
예제 #18
0
 def _show_information_message(self, information_message=None):
     if information_message:
         ViewPartition().border_divisory()
         print(information_message)
예제 #19
0
    def show(self, perfil_user, information_message=None):
        ViewPartition().border_logo()

        if not perfil_user:
            return {'command': 'home_logged_perfil', 'object': None}

        perfil_belongs_to_logged_user = True if self.logged_user.user_name == perfil_user.user_name else False
        permission_to_access_privacy = perfil_belongs_to_logged_user or not perfil_user.privacy or (
            Follow.follow_exist(self.logged_user, perfil_user) and
            (Follow.get_follow_instance(self.logged_user.user_name,
                                        perfil_user.user_name).confirmation))

        if perfil_belongs_to_logged_user:
            print("Bem-vindo,", perfil_user.user_name)
            ViewPartition().border_divisory()
        elif Follow.follow_exist(
                perfil_user, self.logged_user) and (Follow.get_follow_instance(
                    perfil_user.user_name,
                    self.logged_user.user_name).confirmation == True):
            print("@" + perfil_user.user_name + " segue você")
            ViewPartition().border_divisory()

        privacy_status = 'Privado' if perfil_user.privacy else 'Público'

        print("Informações do Perfil " + privacy_status)
        print("Nome de Usuário: " + str(perfil_user.user_name)     + "\n" \
              "Nome Real: "       + str(perfil_user.complete_name) + "\n" \
              "Biografia: "       + str(perfil_user.biography)     + "  " )

        ViewPartition().border_divisory()

        print("O que gostaria de fazer? Digite uma das opcoes abaixo:")

        if permission_to_access_privacy:
            print(" 1 - Ver Linha do Tempo    \n" \
                  " 2 - Ver Seguidores        \n" \
                  " 3 - Ver Aqueles que Segue   " )


        print(" 4 - Buscar Perfil         \n" \
              " 5 - Buscar Tópico           " )

        if perfil_belongs_to_logged_user:
            option_nova_postagem = " C - Para Criar uma Nova Postagem  \n"
            option_notificacoes = " N - Para Notificações             \n"
            option_privacidade = " P - Para tornar seu Perfil Privado\n" if not self.logged_user.privacy else " P - Para tornar seu Perfil Público\n"
            option_deslogar = " D - Para sair da Conta              "

            extra_options = option_nova_postagem + option_notificacoes + option_privacidade + option_deslogar
        else:
            if Follow.follow_exist(self.logged_user, perfil_user):
                follow = Follow.get_follow_instance(self.logged_user.user_name,
                                                    perfil_user.user_name)

                option_seguir = '' if follow.confirmation == False else ' S - Para deixar de Seguir\n'
            else:
                option_seguir = ' S - Para Seguir\n'

            option_bloquear = ' B - Para Bloquear\n'
            option_retornar = ' R - Para retornar para seu Perfil'

            extra_options = option_seguir + option_bloquear + option_retornar

        print(extra_options)

        ViewPartition().border_information_message(information_message)

        return InputField().show('>>')