示例#1
0
    def post(self, request, app_name, command):
        instance = get_command_instance(app_name, command)
        # handle from AdminCommand if has view handler
        if hasattr(instance, "view"):
            return instance.view(request=request, app_name=app_name, command=command)

        form = instance.Form(request.POST)
        context = instance.init_context(request=request, app_name=app_name, command=command)
        context["title"] = mark_safe(instance.name if instance.name else "%s" % command)
        context["app_name"] = app_name
        context["form"] = form
        if form.is_valid():
            args, options = instance.get_command_arguments(forms_data=form.cleaned_data)
            output = StringIO()
            extra_tags = ""
            try:
                call_command(command, stdout=output, no_color=True, *args, **options)
            except Exception as e:
                output.write(traceback.format_exc())
                output.seek(0)
                extra_tags = "error"
            message = colourstrip(output.getvalue().replace("\n", '<br/>')) if output.getvalue() else "Done"
            context["messages"] = [
                Message(level=0, extra_tags=extra_tags, message=message)]
            return HttpResponse(render(request, instance.template, context=context))
        context["messages"] = [Message(level=0, extra_tags="error", message="Invalid form data")]
        return HttpResponse(render(request, instance.template, context=context))
示例#2
0
    def test_multiple_messages(self):
        test_messages = [
            Message(constants.DEBUG, 'some debug message'),
            Message(constants.INFO, 'some info message')
        ]

        expected = {
            'messages': [{
                'text': 'some debug message',
                'tags': LEVEL_TAGS[constants.DEBUG]
            }, {
                'text': 'some info message',
                'tags': LEVEL_TAGS[constants.INFO]
            }]
        }
        self.assertEqual(messages(test_messages), expected)

        test_messages = [
            Message(constants.DEBUG, '[\'some debug message\']'),
            Message(constants.INFO, '[\'some info message\']')
        ]

        expected = {
            'messages': [{
                'text': 'some debug message',
                'tags': LEVEL_TAGS[constants.DEBUG]
            }, {
                'text': 'some info message',
                'tags': LEVEL_TAGS[constants.INFO]
            }]
        }

        self.assertEqual(messages(test_messages), expected)
    def test_add_message_suggest_caslogout(self):
        expected_msg_base_str = (
            "To logout of The Provider, please close your browser, or visit "
            "this <a href=\"/accounts/theid/logout/?{}\">link</a>.")

        # Defaults.
        req1 = self.request

        self.provider.add_message_suggest_caslogout(req1)

        expected_msg1 = Message(
            messages.INFO,
            expected_msg_base_str.format(urlencode({'next': '/test/'})),
        )
        self.assertIn(expected_msg1, get_messages(req1))

        # Custom arguments.
        req2 = self._get_request()

        self.provider.add_message_suggest_caslogout(req2,
                                                    next_page='/redir/',
                                                    level=messages.WARNING)

        expected_msg2 = Message(
            messages.WARNING,
            expected_msg_base_str.format(urlencode({'next': '/redir/'})),
        )
        self.assertIn(expected_msg2, get_messages(req2))
示例#4
0
 def test_eq(self):
     msg_1 = Message(constants.INFO, 'Test message 1')
     msg_2 = Message(constants.INFO, 'Test message 2')
     msg_3 = Message(constants.WARNING, 'Test message 1')
     self.assertEqual(msg_1, msg_1)
     self.assertEqual(msg_1, mock.ANY)
     self.assertNotEqual(msg_1, msg_2)
     self.assertNotEqual(msg_1, msg_3)
     self.assertNotEqual(msg_2, msg_3)
 def test_bootstrap_messages_with_other_levels(self):
     messages = [Message(DEFAULT_MESSAGE_LEVELS.INFO, "hello")]
     self.assertHTMLEqual(
         self.render("{% bootstrap_messages messages %}", {"messages": messages}),
         self._html(content="hello", css_class="alert-info"),
     )
     messages = [Message(999, "hello")]
     self.assertHTMLEqual(
         self.render("{% bootstrap_messages messages %}", {"messages": messages}),
         self._html(content="hello", css_class="alert-info"),
     )
    def test_bootstrap_messages(self):
        messages = [Message(DEFAULT_MESSAGE_LEVELS.WARNING, "hello")]
        self.assertHTMLEqual(
            self.render("{% bootstrap_messages messages %}", {"messages": messages}),
            self._html(content="hello", css_class="alert-warning"),
        )

        messages = [Message(DEFAULT_MESSAGE_LEVELS.ERROR, "hello")]
        self.assertHTMLEqual(
            self.render("{% bootstrap_messages messages %}", {"messages": messages}),
            self._html(content="hello", css_class="alert-danger"),
        )
    def test_bootstrap_messages_with_other_content(self):
        messages = [Message(DEFAULT_MESSAGE_LEVELS.ERROR, "hello http://example.com")]
        self.assertHTMLEqual(
            self.render("{% bootstrap_messages messages %}", {"messages": messages}),
            self._html(content="hello http://example.com", css_class="alert-danger"),
        )

        messages = [Message(DEFAULT_MESSAGE_LEVELS.ERROR, "hello\nthere")]
        self.assertHTMLEqual(
            self.render("{% bootstrap_messages messages %}", {"messages": messages}),
            self._html(content="hello there", css_class="alert-danger"),
        )
def edit_record(request):
    """ Edit a record.

    Args:
        request:

    Returns:
    """
    try:
        data = data_api.get_by_id(request.POST['id'], request.user)
    except DoesNotExist:
        message = Message(
            messages.ERROR, "It seems a " + get_data_label() +
            " is missing. Please refresh the page.")
        return HttpResponseBadRequest(json.dumps({
            'message': message.message,
            'tags': message.tags
        }),
                                      content_type='application/json')

    # Check if the data is locked
    if lock_api.is_object_locked(data.id, request.user):
        message = Message(
            messages.ERROR,
            "The " + get_data_label() + " is locked. You can't edit it.")
        return HttpResponseBadRequest(json.dumps({
            'message': message.message,
            'tags': message.tags
        }),
                                      content_type='application/json')

    try:
        # Check if a curate data structure already exists
        curate_data_structure = curate_data_structure_api.get_by_data_id(
            data.id)
    except DoesNotExist:
        # Create a new curate data structure
        curate_data_structure = CurateDataStructure(
            user=str(request.user.id),
            template=str(data.template.id),
            name=data.title,
            form_string=data.xml_content,
            data=data)
        curate_data_structure = curate_data_structure_api.upsert(
            curate_data_structure)
    except Exception, e:
        message = Message(messages.ERROR, "A problem occurred while editing.")
        return HttpResponseBadRequest(json.dumps({
            'message': message.message,
            'tags': message.tags
        }),
                                      content_type='application/json')
示例#9
0
 def process_messages(self, obj):
     if isinstance(obj, list) and obj:
         if obj[0] == MessageEncoder.message_key:
             if len(obj) == 3:
                 # Compatibility with previously-encoded messages
                 return Message(*obj[1:])
             if obj[1]:
                 obj[3] = mark_safe(obj[3])
             return Message(*obj[2:])
         return [self.process_messages(item) for item in obj]
     if isinstance(obj, dict):
         return dict((key, self.process_messages(value))
                     for key, value in six.iteritems(obj))
     return obj
示例#10
0
def core_cache_all_files(request):
    """Function that cache all files under the selected node.

    Args:
        request:

    Returns:

    """
    try:
        # cache all the files from the current node
        root_node_id = request.POST.get("node_id", None)
        root_node = Navigation.get_by_id(root_node_id)
        active_ontology = query_ontology_api.get_active()
        # get the navigation from the cache
        nav_key = str(active_ontology.id)
        # get id of the navigation root
        if nav_key in navigation_cache:
            navigation = navigation_cache.get(nav_key)
            nav_root_id = navigation.id
        dico_list = {}
        for navigation_id in root_node.children:
            leaves_nodes = []
            # Get all children leaves from the node
            get_leafs_nodes(navigation_id, leaves_nodes)
            dico_list[navigation_id] = leaves_nodes
        # Cache all includes files under the node
        if dico_list:
            for k, v in list(dico_list.items()):
                for leaf_id in v:
                    cache_docs_from_leaf(leaf_id, request, nav_root_id)
        else:
            cache_docs_from_leaf(root_node_id, request, nav_root_id)
        message = Message(messages.SUCCESS, "Documents cached with success.")
        return HttpResponse(
            json.dumps({
                "message": message.message,
                "tags": message.tags
            }),
            content_type="application/json",
        )
    except:
        message = Message(messages.ERROR,
                          "An error occurred while caching the files.")
        return HttpResponseBadRequest(message,
                                      content_type="application/javascript")
示例#11
0
 def process_messages(self, obj):
     if isinstance(obj, list) and obj:
         if obj[0] == MessageEncoder.message_key:
             if len(obj) == 3:
                 # Compatibility with previously-encoded messages
                 return Message(*obj[1:])
             if obj[1]:
                 obj[3] = mark_safe(obj[3])
             return Message(constants.DEFAULT_LEVELS[obj[2].upper()],
                            *obj[3:])
         return [self.process_messages(item) for item in obj]
     if isinstance(obj, dict):
         return {
             key: self.process_messages(value)
             for key, value in obj.items()
         }
     return obj
 def test_bootstrap_messages_with_safe_message(self):
     messages = [Message(DEFAULT_MESSAGE_LEVELS.INFO, mark_safe("Click <a href='https://www.github.com/'>here</a>"))]
     html = self.render("{% bootstrap_messages messages %}", {"messages": messages})
     print(html)
     self.assertHTMLEqual(
         self.render("{% bootstrap_messages messages %}", {"messages": messages}),
         self._html(content="Click <a href='https://www.github.com/'>here</a>", css_class="alert-info"),
     )
示例#13
0
文件: cookie.py 项目: tjktyler/django
 def process_messages(self, obj):
     if isinstance(obj, list) and obj:
         if obj[0] == MessageEncoder.message_key:
             return Message(*obj[1:])
         return [self.process_messages(item) for item in obj]
     if isinstance(obj, dict):
         return dict([(key, self.process_messages(value))
                      for key, value in obj.iteritems()])
     return obj
示例#14
0
 def test_default_hashing_algorithm(self):
     messages = Message(constants.DEBUG, ['this', 'that'])
     with self.settings(DEFAULT_HASHING_ALGORITHM='sha1'):
         storage = self.get_storage()
         encoded = storage._encode(messages)
         decoded = storage._decode(encoded)
         self.assertEqual(decoded, messages)
     storage_default = self.get_storage()
     self.assertNotEqual(encoded, storage_default._encode(messages))
示例#15
0
 def test_safedata(self):
     """
     A message containing SafeData keeps its safe status when retrieved from
     the message storage.
     """
     storage = self.get_storage()
     message = Message(constants.DEBUG, mark_safe("<b>Hello Django!</b>"))
     set_session_data(storage, [message])
     self.assertIsInstance(list(storage)[0].message, SafeData)
示例#16
0
 def process_messages(self, obj):
     if isinstance(obj, list) and obj:
         if obj[0] == MessageEncoder.message_key:
             if obj[1]:
                 obj[3] = mark_safe(obj[3])
             return Message(*obj[2:])
         return [self.process_messages(item) for item in obj]
     if isinstance(obj, dict):
         return {key: self.process_messages(value) for key, value in obj.items()}
     return obj
示例#17
0
    def test_error(self):
        class TestView(MessageMixin, View):
            def get(self, request):
                self.messages.error("test")
                return HttpResponse('OK')

        request, _ = self.get_request_response(TestView.as_view())
        msg = list(request._messages)
        self.assertEqual(len(msg), 1)
        self.assertEqual(msg[0], Message(messages.ERROR, 'test'))
示例#18
0
 def test_json_encoder_decoder(self):
     """
     Tests that a complex nested data structure containing Message
     instances is properly encoded/decoded by the custom JSON
     encoder/decoder classes.
     """
     messages = [
         {
             'message': Message(constants.INFO, 'Test message'),
             'message_list': [Message(constants.INFO, 'message %s') \
                              for x in xrange(5)] + [{'another-message': \
                              Message(constants.ERROR, 'error')}],
         },
         Message(constants.INFO, 'message %s'),
     ]
     encoder = MessageEncoder(separators=(',', ':'))
     value = encoder.encode(messages)
     decoded_messages = json.loads(value, cls=MessageDecoder)
     self.assertEqual(messages, decoded_messages)
示例#19
0
    def test_error(self):
        """Messages should able to be set as ERROR"""
        class TestView(MessageMixin, View):
            def get(self, request):
                self.messages.error("test")
                return HttpResponse("OK")

        request, _ = self.get_request_response(TestView.as_view())
        msg = list(request._messages)
        self.assertEqual(len(msg), 1)
        self.assertEqual(msg[0], Message(messages.ERROR, "test"))
示例#20
0
    def test_message_on_logout(self):
        """
        Message is sent to propose user to logout of CAS.
        """
        r = self.client.post('/accounts/logout/')
        r_messages = get_messages(r.wsgi_request)

        expected_msg = Message(messages.WARNING, self.expected_msg_str)

        self.assertIn(expected_msg, r_messages)
        self.assertTemplateUsed(r, 'cas_account/messages/logged_out.txt')
示例#21
0
    def test_no_message_on_visit(self):
        """Clear out messages from django-allauth on sign up."""
        user = self.make_user()
        self.client.cookies["messages"] = CookieStorage(request=None)._encode(
            [Message(messages.INFO, "Find me")])

        with self.login(user):
            response = self.get("core:start")

        self.assertResponseNotContains("Find me", response)
        assert response.cookies["messages"].value == ""
示例#22
0
    def test_set_level(self):
        class TestView(MessageMixin, View):
            def get(self, request):
                self.messages.set_level(messages.WARNING)
                self.messages.add_message(messages.SUCCESS, 'success')
                self.messages.add_message(messages.WARNING, 'warning')
                return HttpResponse('OK')

        request, _ = self.get_request_response(TestView.as_view())
        msg = list(request._messages)
        self.assertEqual(msg, [Message(messages.WARNING, 'warning')])
示例#23
0
    def test_set_level(self):
        """Should be able to set message levels"""
        class TestView(MessageMixin, View):
            def get(self, request):
                self.messages.set_level(messages.WARNING)
                self.messages.add_message(messages.SUCCESS, "success")
                self.messages.add_message(messages.WARNING, "warning")
                return HttpResponse("OK")

        request, _ = self.get_request_response(TestView.as_view())
        msg = list(request._messages)
        self.assertEqual(msg, [Message(messages.WARNING, "warning")])
示例#24
0
    def test_message_on_logout(self):
        """
        Message is sent to propose user to logout of CAS.
        """
        r = self.client.post('/accounts/logout/?next=/redir/')
        r_messages = get_messages(r.wsgi_request)

        expected_msg = Message(messages.WARNING, self.expected_msg_str)

        self.assertIn(expected_msg, r_messages)
        self.assertTemplateUsed(
            r, 'socialaccount/messages/suggest_caslogout.html')
示例#25
0
 def test_json_encoder_decoder(self):
     """
     A complex nested data structure containing Message
     instances is properly encoded/decoded by the custom JSON
     encoder/decoder classes.
     """
     messages = [
         {
             "message":
             Message(constants.INFO, "Test message"),
             "message_list":
             [Message(constants.INFO, "message %s") for x in range(5)] +
             [{
                 "another-message": Message(constants.ERROR, "error")
             }],
         },
         Message(constants.INFO, "message %s"),
     ]
     encoder = MessageEncoder()
     value = encoder.encode(messages)
     decoded_messages = json.loads(value, cls=MessageDecoder)
     self.assertEqual(messages, decoded_messages)
示例#26
0
    def test_messages(self):

        for tag in self.tags:
            txt = f"some message with {repr(tag)}"

            test_messages = [Message(tag, txt)]
            self.assertEqual(
                messages(test_messages),
                {"messages": [{
                    "text": txt,
                    "tags": LEVEL_TAGS[tag]
                }]})  # clean one

            txt = f"['some dirty message with {repr(tag)}']"
            txt_altered = txt.replace("['", "").replace("']", "")
            test_messages = [Message(tag, txt)]
            self.assertEqual(
                messages(test_messages),
                {"messages": [{
                    "text": txt_altered,
                    "tags": LEVEL_TAGS[tag]
                }]})  # dirty one
示例#27
0
    def test_multiple_messages(self):
        test_messages = [
            Message(constants.DEBUG, "some debug message"),
            Message(constants.INFO, "some info message")
        ]

        expected = {
            "messages": [
                {
                    "text": "some debug message",
                    "tags": LEVEL_TAGS[constants.DEBUG]
                },
                {
                    "text": "some info message",
                    "tags": LEVEL_TAGS[constants.INFO]
                },
            ]
        }
        self.assertEqual(messages(test_messages), expected)

        test_messages = [
            Message(constants.DEBUG, "['some debug message']"),
            Message(constants.INFO, "['some info message']"),
        ]

        expected = {
            "messages": [
                {
                    "text": "some debug message",
                    "tags": LEVEL_TAGS[constants.DEBUG]
                },
                {
                    "text": "some info message",
                    "tags": LEVEL_TAGS[constants.INFO]
                },
            ]
        }

        self.assertEqual(messages(test_messages), expected)
示例#28
0
    def test_messages(self):

        for tag in self.tags:
            txt = 'some message with {}'.format(repr(tag))

            test_messages = [Message(tag, txt)]
            self.assertEqual(
                messages(test_messages),
                {'messages': [{
                    'text': txt,
                    'tags': LEVEL_TAGS[tag]
                }]})  # clean one

            txt = '[\'some dirty message with {}\']'.format(repr(tag))
            txt_altered = txt.replace('[\'', '').replace('\']', '')
            test_messages = [Message(tag, txt)]
            self.assertEqual(
                messages(test_messages),
                {'messages': [{
                    'text': txt_altered,
                    'tags': LEVEL_TAGS[tag]
                }]})  # dirty one
 def _get(self, *args, **kwargs):
     """
     Retrieves a list of messages assigned to the User.  This backend never
     stores anything, so all_retrieved is assumed to be False.
     """
     queryset = self._get_messages_queryset()
     if queryset is None:
         # This is a read-only and optional storage, so to ensure other
         # storages will also be read if used with FallbackStorage an empty
         # list is returned rather than None.
         return [], False
     messages = []
     for user_message in queryset:
         messages.append(Message(constants.INFO, user_message.message))
     return messages, False
示例#30
0
    def add_unique_message(self, level, message, **kwargs):
        """ Add a message, but only after first making sure it's not already been emitted.

        This helps guard against any message generator adding the same message
        multiple times before the next time the messages are displayed. Once messages
        are displayed, `used` is set on the storage object returned by
        `get_messages()` and the queue is cleared.

        Returns True if message was sent for the first time.
        """
        expected = Message(message=message, level=level, **kwargs)
        if any(msg == expected for msg in messages.get_messages(self.request)):
            return False

        messages.add_message(self.request, level, message, **kwargs)
        return True