示例#1
0
文件: utils.py 项目: openfun/richie
    def get_toolbar_for_page(page, user, edit=None, preview=None):
        """
        This method is a helper to build a request to test the toolbar in different states
        for different users
        """
        if edit is None:
            edit = random.choice([True, False])

        if preview is None:
            preview = random.choice([True, False])

        url = page.get_absolute_url()
        factory = RequestFactory()

        if edit:
            url = f"{url:s}?edit"
        else:
            url = f"{url:s}?edit_off"

        if preview:
            url = f"{url:s}&preview"

        request = factory.get(url)
        request.user = user
        request.current_page = page
        request.session = {}

        middleware = ToolbarMiddleware()
        middleware.process_request(request)

        # pylint: disable=no-member
        request.toolbar.get_left_items()
        return request.toolbar
示例#2
0
    def get_page_request(self, page, user, path=None, edit=False, lang='en'):
        """
        Createds a GET request for the given page suitable for use the
        django CMS toolbar

        :param page: current page object
        :param user: current user
        :param path: path (if different from the current page path)
        :param edit: editing mode
        :param lang: request language
        :return: request
        """
        from cms.middleware.toolbar import ToolbarMiddleware
        path = path or page and page.get_absolute_url()
        if edit:
            path += '?edit'
        request = RequestFactory().get(path)
        request.session = {}
        request.user = user
        request.LANGUAGE_CODE = lang
        if edit:
            request.GET = {'edit': None}
        else:
            request.GET = {'edit_off': None}
        request.current_page = page
        mid = ToolbarMiddleware()
        mid.process_request(request)
        return request
示例#3
0
 def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False):
     request.current_page = SimpleLazyObject(lambda: page)
     if not user:
         if self._login_context:
             user = self._login_context.user
         else:
             user = AnonymousUser()
     request.user = user
     request.session = {}
     request.cookies = SimpleCookie()
     request.errors = StringIO()
     request.LANGUAGE_CODE = lang
     # Let's use middleware in case requested, otherwise just use CMS toolbar if needed
     if use_middlewares:
         handler = BaseHandler()
         handler.load_middleware()
         for middleware_method in handler._request_middleware:
             if middleware_method(request):
                 raise Exception(u'Couldn\'t create request mock object -'
                                 u'request middleware returned a response')
     elif use_toolbar:
         from cms.middleware.toolbar import ToolbarMiddleware
         mid = ToolbarMiddleware()
         mid.process_request(request)
     return request
示例#4
0
    def get_page_request(self,
                         page,
                         user,
                         path=None,
                         edit=False,
                         lang_code='en',
                         disable=False):
        path = path or page and page.get_absolute_url()
        if edit:
            path += '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON')
        request = RequestFactory().get(path)
        request.session = {}
        request.user = user
        request.LANGUAGE_CODE = lang_code
        request.GET = request.GET.copy()

        if edit:
            request.GET['edit'] = None
        else:
            request.GET['edit_off'] = None

        if disable:
            request.GET[get_cms_setting('CMS_TOOLBAR_URL__DISABLE')] = None
        request.current_page = page
        mid = ToolbarMiddleware()
        mid.process_request(request)
        if hasattr(request, 'toolbar'):
            request.toolbar.populate()
        return request
示例#5
0
    def get_page_request(self, page, user, path=None, edit=False, lang='en'):
        """
        Createds a GET request for the given page suitable for use the
        django CMS toolbar

        :param page: current page object
        :param user: current user
        :param path: path (if different from the current page path)
        :param edit: editing mode
        :param lang: request language
        :return: request
        """
        from cms.middleware.toolbar import ToolbarMiddleware
        path = path or page and page.get_absolute_url()
        if edit:
            path += '?edit'
        request = RequestFactory().get(path)
        request.session = {}
        request.user = user
        request.LANGUAGE_CODE = lang
        if edit:
            request.GET = {'edit': None}
        else:
            request.GET = {'edit_off': None}
        request.current_page = page
        mid = ToolbarMiddleware()
        mid.process_request(request)
        return request
示例#6
0
    def get_toolbar_for_page(page, user, edit, preview):
        """
        This method is a helper to build a request to test the toolbar in different states
        for different users
        """
        url = page.get_absolute_url()
        factory = RequestFactory()

        if edit:
            url = "{:s}?edit".format(url)
        else:
            url = "{:s}?edit_off".format(url)

        if preview:
            url = "{:s}&preview".format(url)

        request = factory.get(url)
        request.user = user
        request.current_page = page
        request.session = {}

        middleware = ToolbarMiddleware()
        middleware.process_request(request)

        # pylint: disable=no-member
        request.toolbar.get_left_items()
        return request.toolbar
示例#7
0
 def _process_request_by_toolbar_middleware(self, request, obj=None):
     midleware = ToolbarMiddleware()
     midleware.process_request(request)
     if hasattr(request, 'toolbar'):
         if obj:
             request.toolbar.set_object(obj)
         request.toolbar.populate()
         request.resolver_match = resolve(request.path)
         request.toolbar.post_template_populate()
     return request
 def _get_page_request(self, page, user):
     request = RequestFactory().get("/")
     request.session = {}
     request.user = user
     request.current_page = page
     mid = ToolbarMiddleware()
     mid.process_request(request)
     if hasattr(request, "toolbar"):
         request.toolbar.populate()
     return request
示例#9
0
 def test_get_page_by_pk_arg_edit_mode(self):
     control = self._getfirst()
     request = self.get_request('/')
     request.GET = {"edit": ''}
     user = self._create_user("admin", True, True)
     request.current_page = control
     request.user = user
     middleware = ToolbarMiddleware()
     middleware.process_request(request)
     page = _get_page_by_untyped_arg(control.pk, request, 1)
     self.assertEqual(page, control.publisher_draft)
示例#10
0
 def test_get_page_by_pk_arg_edit_mode(self):
     control = self._getfirst()
     request = self.get_request('/')
     request.GET = {"edit": ''}
     user = self._create_user("admin", True, True)
     request.current_page = control
     request.user = user
     middleware = ToolbarMiddleware()
     middleware.process_request(request)
     page = _get_page_by_untyped_arg(control.pk, request, 1)
     self.assertEqual(page, control.publisher_draft)
示例#11
0
 def test_get_page_by_pk_arg_edit_mode(self):
     control = self._getfirst()
     request = self.get_request('/')
     request.GET = {"edit": ''}
     user = User(username="******", password="******", is_superuser=True, is_staff=True, is_active=True)
     user.save()
     request.current_page = control
     request.user = user
     middleware = ToolbarMiddleware()
     middleware.process_request(request)
     page = _get_page_by_untyped_arg(control.pk, request, 1)
     self.assertEqual(page, control.publisher_draft)
 def test_get_page_by_pk_arg_edit_mode(self):
     control = self._getfirst()
     request = self.get_request('/')
     request.GET = {"edit": ''}
     user = User(username="******",
                 password="******",
                 is_superuser=True,
                 is_staff=True,
                 is_active=True)
     user.save()
     request.current_page = control
     request.user = user
     middleware = ToolbarMiddleware()
     middleware.process_request(request)
     page = _get_page_by_untyped_arg(control.pk, request, 1)
     self.assertEqual(page, control.publisher_draft)
示例#13
0
def get_page_request(page, user=None, path=None, edit=False, language='en'):
    path = path or page and page.get_absolute_url()
    if edit:
        path += '?edit'
    request = RequestFactory().get(path)
    request.session = {}
    request.user = user or AnonymousUser()
    request.LANGUAGE_CODE = language
    if edit:
        request.GET = {'edit': None}
    else:
        request.GET = {'edit_off': None}
    request.current_page = page
    mid = ToolbarMiddleware()
    mid.process_request(request)
    return request
示例#14
0
def get_page_request(page, user=None, path=None, edit=False, language='en'):
    path = path or page and page.get_absolute_url()
    if edit:
        path += '?edit'
    request = RequestFactory().get(path)
    request.session = {}
    request.user = user or AnonymousUser()
    request.LANGUAGE_CODE = language
    if edit:
        request.GET = {'edit': None}
    else:
        request.GET = {'edit_off': None}
    request.current_page = page
    mid = ToolbarMiddleware()
    mid.process_request(request)
    return request
示例#15
0
 def get_page_request(self, page, user, path=None, edit=False, lang_code="en"):
     path = path or page and page.get_absolute_url()
     if edit:
         path += "?edit"
     request = RequestFactory().get(path)
     request.session = {}
     request.user = user
     request.LANGUAGE_CODE = lang_code
     if edit:
         request.GET = {"edit": None}
     else:
         request.GET = {"edit_off": None}
     request.current_page = page
     mid = ToolbarMiddleware()
     mid.process_request(request)
     return request
示例#16
0
def get_page_request(page, user):
    """
    Helper method to get the current page request object
    :param page: A page object
    :param user: The user requesting the page request object
    :return: A page request object
    """
    request = RequestFactory().get("/")
    request.session = {}
    request.user = user
    request.current_page = page
    mid = ToolbarMiddleware(request)
    mid.process_request(request)
    if hasattr(request, "toolbar"):
        request.toolbar.populate()
    return request
示例#17
0
 def get_page_request(self, page, user, path=None, edit=False, lang_code='en'):
     from cms.middleware.toolbar import ToolbarMiddleware
     path = path or page and page.get_absolute_url(lang_code)
     if edit:
         path += '?edit'
     request = RequestFactory().get(path)
     request.session = {}
     request.user = user
     request.LANGUAGE_CODE = lang_code
     if edit:
         request.GET = {'edit': None}
     else:
         request.GET = {'edit_off': None}
     request.current_page = page
     mid = ToolbarMiddleware()
     mid.process_request(request)
     return request
示例#18
0
 def setUp(self):
     self.create_request()
     self.user.is_staff = self.user.is_superuser = True
     self.user.save()
     self.client.force_login(self.user)
     self.request.current_page = create_page('foo', 'default.html', 'en', published=True)
     ToolbarMiddleware().process_request(self.request)
     self.toolbar = self.request.toolbar
示例#19
0
    def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False,
                         secure=False):
        from django.contrib.auth.models import AnonymousUser
        try:
            from importlib import import_module
        except ImportError:
            from django.utils.importlib import import_module

        engine = import_module(settings.SESSION_ENGINE)

        request.current_page = SimpleLazyObject(lambda: page)
        if not user:
            if self._login_context:
                user = self._login_context.user
            else:
                user = AnonymousUser()
        if user.is_authenticated():
            session_key = user._meta.pk.value_to_string(user)
        else:
            session_key = 'session_key'

        request.user = user
        request._cached_user = user
        request.session = engine.SessionStore(session_key)
        if secure:
            request.environ['SERVER_PORT'] = str('443')
            request.environ['wsgi.url_scheme'] = str('https')
        request.cookies = SimpleCookie()
        request.errors = StringIO()
        request.LANGUAGE_CODE = lang
        if request.method == 'POST':
            request._dont_enforce_csrf_checks = True
        # Let's use middleware in case requested, otherwise just use CMS toolbar if needed
        if use_middlewares:
            handler = BaseHandler()
            handler.load_middleware()
            for middleware_method in handler._request_middleware:
                if middleware_method(request):
                    raise Exception('Couldn\'t create request mock object -'
                                    'request middleware returned a response')
        elif use_toolbar:
            from cms.middleware.toolbar import ToolbarMiddleware
            mid = ToolbarMiddleware()
            mid.process_request(request)
        return request
示例#20
0
    def _prepare_request(self,
                         request,
                         page,
                         user,
                         lang,
                         use_middlewares,
                         use_toolbar=False,
                         secure=False):
        from django.contrib.auth.models import AnonymousUser
        from importlib import import_module

        engine = import_module(settings.SESSION_ENGINE)

        request.current_page = SimpleLazyObject(lambda: page)
        if not user:
            if self._login_context:
                user = self._login_context.user
            else:
                user = AnonymousUser()
        if user.is_authenticated:
            session_key = user._meta.pk.value_to_string(user)
        else:
            session_key = 'session_key'

        request.user = user
        request._cached_user = user
        request.session = engine.SessionStore(session_key)
        if secure:
            request.environ['SERVER_PORT'] = str('443')
            request.environ['wsgi.url_scheme'] = str('https')
        request.cookies = SimpleCookie()
        request.errors = StringIO()
        request.LANGUAGE_CODE = lang
        if request.method == 'POST':
            request._dont_enforce_csrf_checks = True
        # Let's use middleware in case requested, otherwise just use CMS toolbar if needed
        if use_middlewares:
            self._apply_middlewares(request)
        elif use_toolbar:
            from cms.middleware.toolbar import ToolbarMiddleware
            mid = ToolbarMiddleware()
            mid.process_request(request)
        return request
示例#21
0
    def _prepare_request(self,
                         request,
                         page,
                         user,
                         lang,
                         use_middlewares,
                         use_toolbar=False,
                         secure=False):
        from django.contrib.auth.models import AnonymousUser

        request.current_page = SimpleLazyObject(lambda: page)
        if not user:
            if self._login_context:
                user = self._login_context.user
            else:
                user = AnonymousUser()
        request.user = user
        request._cached_user = user
        request.session = {}
        if secure:
            request.environ['SERVER_PORT'] = str('443')
            request.environ['wsgi.url_scheme'] = str('https')
        if user.is_authenticated():
            request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
        request.cookies = SimpleCookie()
        request.errors = StringIO()
        request.LANGUAGE_CODE = lang
        if request.method == 'POST':
            request._dont_enforce_csrf_checks = True
        # Let's use middleware in case requested, otherwise just use CMS toolbar if needed
        if use_middlewares:
            handler = BaseHandler()
            handler.load_middleware()
            for middleware_method in handler._request_middleware:
                if middleware_method(request):
                    raise Exception('Couldn\'t create request mock object -'
                                    'request middleware returned a response')
        elif use_toolbar:
            from cms.middleware.toolbar import ToolbarMiddleware
            mid = ToolbarMiddleware()
            mid.process_request(request)
        return request
示例#22
0
    def get_request(self):
        page = create_page(u'page one', 'fullwidth.html', language='en')
        page.publish('en')

        path = page.get_absolute_url()

        admin_user = create_user('admin',
                                 '*****@*****.**',
                                 'admin',
                                 is_staff=True,
                                 is_superuser=True)

        request = RequestFactory().get(path)
        request.current_page = page
        request.user = admin_user
        request.session = {}

        mid = ToolbarMiddleware()
        mid.process_request(request)
        return request
示例#23
0
 def get_page_request(self, page, user, path=None, edit=False, lang_code='en', disable=False):
     path = path or page and page.get_absolute_url()
     if edit:
         path += '?%s' % get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON')
     request = RequestFactory().get(path)
     request.session = {}
     request.user = user
     request.LANGUAGE_CODE = lang_code
     if edit:
         request.GET = {'edit': None}
     else:
         request.GET = {'edit_off': None}
     if disable:
         request.GET[get_cms_setting('CMS_TOOLBAR_URL__DISABLE')] = None
     request.current_page = page
     mid = ToolbarMiddleware()
     mid.process_request(request)
     if hasattr(request, 'toolbar'):
         request.toolbar.populate()
     return request
示例#24
0
    def _prepare_request(self, request, page, user, lang, use_middlewares, use_toolbar=False,
                         secure=False):
        from django.contrib.auth.models import AnonymousUser
        from importlib import import_module

        engine = import_module(settings.SESSION_ENGINE)

        request.current_page = SimpleLazyObject(lambda: page)
        if not user:
            if self._login_context:
                user = self._login_context.user
            else:
                user = AnonymousUser()
        if callable(user.is_authenticated):
            authenticated = user.is_authenticated()
        else:
            authenticated = user.is_authenticated
        if authenticated:
            session_key = user._meta.pk.value_to_string(user)
        else:
            session_key = 'session_key'

        request.user = user
        request._cached_user = user
        request.session = engine.SessionStore(session_key)
        if secure:
            request.environ['SERVER_PORT'] = str('443')
            request.environ['wsgi.url_scheme'] = str('https')
        request.cookies = SimpleCookie()
        request.errors = StringIO()
        request.LANGUAGE_CODE = lang
        if request.method == 'POST':
            request._dont_enforce_csrf_checks = True
        # Let's use middleware in case requested, otherwise just use CMS toolbar if needed
        if use_middlewares:
            self._apply_middlewares(request)
        elif use_toolbar:
            from cms.middleware.toolbar import ToolbarMiddleware
            mid = ToolbarMiddleware()
            mid.process_request(request)
        return request
示例#25
0
    def test_02_toolbar_middleware_show_toolbar(self):
        class Mock:
            pass

        middle = ToolbarMiddleware()

        request = Mock()
        response = Mock()

        # if request.is_ajax():
        setattr(request, 'is_ajax', lambda: True)
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, False)

        #if response.status_code != 200:
        setattr(request, 'is_ajax', lambda: False)
        setattr(response, 'status_code', 201)
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, False)
        setattr(response, 'status_code', 200)

        #if not response['Content-Type'].split(';')[0] in HTML_TYPES:
        setattr(response, '__getitem__', lambda _: 'Whatever')
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, False)
        setattr(response, '__getitem__', lambda _: 'text/html')

        #if is_media_request(request):
        setattr(request, 'path', '/media/')
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, False)

        setattr(request, 'path', '')

        #if "edit" in request.GET:
        setattr(request, 'GET', ["edit"])
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, True)
        setattr(request, 'GET', [])

        #if not hasattr(request, "user"):
        result = middle.show_toolbar(request, response)
        self.assertEqual(result, False)
        setattr(request, 'user', 'test-user')
示例#26
0
    def setup_toolbar(self, page, user, is_edit_mode=True):
        page.set_publisher_state('en', state=PUBLISHER_STATE_DIRTY)  # make page dirty

        if is_edit_mode:
            edit_mode = get_cms_setting('CMS_TOOLBAR_URL__EDIT_ON')
        else:
            edit_mode = get_cms_setting('CMS_TOOLBAR_URL__EDIT_OFF')

        request = RequestFactory().get('{}?{}'.format(page.get_absolute_url('en'), edit_mode))
        request.current_page = page
        request.user = user
        request.session = self.client.session
        ToolbarMiddleware().process_request(request)
        self.toolbar = request.toolbar
        self.toolbar.populate()
        self.toolbar.post_template_populate()
        self.toolbar_left_items = self.toolbar.get_left_items()
        self.toolbar_right_items = self.toolbar.get_right_items()
示例#27
0
 def test_02_toolbar_middleware_show_toolbar(self):
     class Mock:
         pass
     
     middle = ToolbarMiddleware()
     
     request = Mock()
     response = Mock()
     
     # if request.is_ajax(): 
     setattr(request,'is_ajax', lambda : True)
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, False)
     
     #if response.status_code != 200: 
     setattr(request,'is_ajax', lambda : False)
     setattr(response, 'status_code', 201)
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, False)
     setattr(response, 'status_code', 200)
     
     #if not response['Content-Type'].split(';')[0] in HTML_TYPES:
     setattr(response, '__getitem__', lambda _: 'Whatever')
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, False)
     setattr(response, '__getitem__', lambda _: 'text/html')
     
     #if is_media_request(request):
     setattr(request, 'path', '/media/')
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, False)
     
     setattr(request, 'path', '')
     
     #if "edit" in request.GET: 
     setattr(request, 'GET', ["edit"])
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, True)
     setattr(request, 'GET', [])
     
     #if not hasattr(request, "user"):
     result = middle.show_toolbar(request, response)
     self.assertEqual(result, False)
     setattr(request, 'user', 'test-user')