Exemple #1
0
    def get_urls_and_fields(self, context):
        include = None
        if hasattr(self, 'display_fields') and self.view_type == 'detail':
            include = getattr(self, 'display_fields')

        if hasattr(self, 'list_fields') and self.view_type == 'list':
            include = getattr(self, 'list_fields')

        context['fields'] = utils.get_fields(self.model, include=include)
        if hasattr(self, 'object') and self.object:
            for action in utils.INSTANCE_ACTIONS:
                try:
                    nurl = utils.crud_url_name(self.model, action)
                    if self.namespace:
                        nurl = self.namespace + ':' + nurl
                    url = reverse(nurl, kwargs={'pk': self.object.pk})
                except NoReverseMatch:
                    url = None
                context['url_%s' % action] = url

        for action in utils.LIST_ACTIONS:
            try:
                nurl = utils.crud_url_name(self.model, action)
                if self.namespace:
                    nurl = self.namespace + ':' + nurl
                url = reverse(nurl)
            except NoReverseMatch:
                url = None
            context['url_%s' % action] = url
Exemple #2
0
    def get_urls(self):
        pre = ""
        try:
            if self.cruds_url:
                pre = "%s/" % self.cruds_url
        except AttributeError:
            pre = ""
        base_name = "%s%s/%s" % (pre, self.model._meta.app_label,
                                 self.model.__name__.lower())

        urls = CRUDView.get_urls(self)
        urls.append(
            url(r"^%s/(?P<pk>[^/]+)/trigger_on_done$" % (base_name, ),
                self.trigger_on_done,
                name=utils.crud_url_name(self.model,
                                         'trigger_on_done',
                                         prefix=self.urlprefix)))
        urls.append(
            url(r"^%s/(?P<pk>[^/]+)/pause$" % (base_name, ),
                self.pause,
                name=utils.crud_url_name(self.model,
                                         'pause',
                                         prefix=self.urlprefix)))
        urls.append(
            url(r"^%s/(?P<pk>[^/]+)/unpause$" % (base_name, ),
                self.unpause,
                name=utils.crud_url_name(self.model,
                                         'unpause',
                                         prefix=self.urlprefix)))
        return urls
Exemple #3
0
def test_login_required(admin_client, client):
    model = Author
    app_label = model._meta.app_label
    model_lower = model.__name__.lower()

    actions = [ACTION_CREATE, ACTION_LIST]
    for a in actions:
        urlname = crud_url_name(model, a)
        url = reverse(urlname)
        r = client.get(url)
        assert r.status_code == 302
        r = admin_client.get(url)
        assert r.status_code == 200

    author = AuthorFactory.create()
    actions = [ACTION_DELETE, ACTION_DETAIL, ACTION_UPDATE]
    for a in actions:
        urlname = crud_url_name(model, a)
        url = reverse(urlname, args=[
            author.pk,
        ])
        r = client.get(url)
        assert r.status_code == 302
        r = client.post(url)
        assert r.status_code == 302
        r = admin_client.get(url)
        assert r.status_code == 200
Exemple #4
0
def test_crud_url_name():
    model = Author
    app_label = model._meta.app_label
    model_lower = model.__name__.lower()

    actions = [
        ACTION_CREATE, ACTION_DELETE, ACTION_DETAIL, ACTION_LIST, ACTION_UPDATE
    ]
    for a in actions:
        urlname = crud_url_name(model, a)
        assert urlname == "%s_%s_%s" % (app_label, model_lower, a)
        urlname = crud_url_name(model, a, 'prefix')
        assert urlname == "prefix%s_%s_%s" % (app_label, model_lower, a)
Exemple #5
0
    def get_urls(self):

        pre = ""
        try:
            if self.cruds_url:
                pre = "%s/" % self.cruds_url
        except AttributeError:
            pre = ""
        base_name = "%s%s/%s" % (pre, self.model._meta.app_label,
                                 self.model.__name__.lower())
        myurls = []
        if 'list' in self.views_available:
            myurls.append(
                url("^%s/list$" % (base_name, ),
                    self.list,
                    name=utils.crud_url_name(self.model,
                                             'list',
                                             prefix=self.urlprefix)))
        if 'create' in self.views_available:
            myurls.append(
                url("^%s/create$" % (base_name, ),
                    self.create,
                    name=utils.crud_url_name(self.model,
                                             'create',
                                             prefix=self.urlprefix)))
        if 'detail' in self.views_available:
            myurls.append(
                url('^%s/(?P<pk>[^/]+)$' % (base_name, ),
                    self.detail,
                    name=utils.crud_url_name(self.model,
                                             'detail',
                                             prefix=self.urlprefix)))
        if 'update' in self.views_available:
            myurls.append(
                url("^%s/(?P<pk>[^/]+)/update$" % (base_name, ),
                    self.update,
                    name=utils.crud_url_name(self.model,
                                             'update',
                                             prefix=self.urlprefix)))
        if 'delete' in self.views_available:
            myurls.append(
                url(r"^%s/(?P<pk>[^/]+)/delete$" % (base_name, ),
                    self.delete,
                    name=utils.crud_url_name(self.model,
                                             'delete',
                                             prefix=self.urlprefix)))

        myurls += self.add_inlines(base_name)
        return myurls
Exemple #6
0
def crud_inline_url(obj, inline, action, namespace=None):

    all_tried_names = []
    try:
        nurl = utils.crud_url_name(type(inline),
                                   action,
                                   base_model=obj.__class__)
        if namespace:
            nurl = namespace + ':' + nurl
        if action in ['delete', 'update', 'detail']:
            url = reverse(nurl, kwargs={'model_id': obj.pk, 'pk': inline.pk})
        else:
            url = reverse(nurl, kwargs={'model_id': obj.pk})
    except NoReverseMatch as e:
        all_tried_names.append((nurl, e))

        # it could be that base_model is a child class and thus
        # the url does not exist when the inline was only defined for a
        # parent class
        no_match = True
        for base in obj.__class__.__bases__:
            try:
                nurl = utils.crud_url_name(type(inline),
                                           action,
                                           base_model=base)
                if namespace:
                    nurl = namespace + ':' + nurl
                if action in ['delete', 'update', 'detail']:
                    url = reverse(nurl,
                                  kwargs={
                                      'model_id': obj.pk,
                                      'pk': inline.pk
                                  })
                else:
                    url = reverse(nurl, kwargs={'model_id': obj.pk})
                no_match = False
            except NoReverseMatch as e:
                all_tried_names.append((nurl, e))

            if not no_match:
                break

        if no_match:
            raise NoReverseMatch('No reverse match was found for any of the following url_names: "'+\
                    '", "'.join(n[0] for n in all_tried_names) +'". These are the raised errors: ' +\
                    ", ".join("{}".format(n[1]) for n in all_tried_names)
                    )

    return url
Exemple #7
0
 def initialize_delete(self, basename):
     ODeleteView = self.get_delete_view()
     url = utils.crud_url_name(self.model, 'list', prefix=self.urlprefix)
     if self.namespace:
         url = self.namespace + ":" + url
     self.delete = self.decorator_delete(
         ODeleteView.as_view(model=self.model,
                             success_url=reverse_lazy(url),
                             template_name=basename))
Exemple #8
0
    def get_urls(self):

        base_name = "%s/%s" % (self.model._meta.app_label,
                               self.model.__name__.lower())
        myurls = []
        if 'list' in self.views_available:
            myurls.append(
                url("^%s/(?P<model_id>[^/]+)/list$" % (base_name, ),
                    self.list,
                    name=utils.crud_url_name(self.model,
                                             'list',
                                             prefix=self.urlprefix)))
        if 'create' in self.views_available:
            myurls.append(
                url("^%s/(?P<model_id>[^/]+)/create$" % (base_name, ),
                    self.create,
                    name=utils.crud_url_name(self.model,
                                             'create',
                                             prefix=self.urlprefix)))
        if 'detail' in self.views_available:
            myurls.append(
                url('^%s/(?P<model_id>[^/]+)/(?P<pk>[^/]+)$' % (base_name, ),
                    self.detail,
                    name=utils.crud_url_name(self.model,
                                             'detail',
                                             prefix=self.urlprefix)))
        if 'update' in self.views_available:
            myurls.append(
                url("^%s/(?P<model_id>[^/]+)/(?P<pk>[^/]+)/update$" %
                    (base_name, ),
                    self.update,
                    name=utils.crud_url_name(self.model,
                                             'update',
                                             prefix=self.urlprefix)))
        if 'delete' in self.views_available:
            myurls.append(
                url(r"^%s/(?P<model_id>[^/]+)/(?P<pk>[^/]+)/delete$" %
                    (base_name, ),
                    self.delete,
                    name=utils.crud_url_name(self.model,
                                             'delete',
                                             prefix=self.urlprefix)))

        return myurls
def crud_url(obj, action, namespace=None):
    try:
        nurl = utils.crud_url_name(type(obj), action)
        if namespace:
            nurl = namespace + ':' + nurl
        if action in utils.LIST_ACTIONS:
            url = reverse(nurl)
        else:
            url = reverse(nurl, kwargs={'pk': obj.pk})
    except NoReverseMatch:
        url = None
    return url
Exemple #10
0
def crud_inline_url(obj, inline, action, namespace=None):
    try:
        nurl = utils.crud_url_name(type(inline), action)
        if namespace:
            nurl = namespace + ':' + nurl
        if action in ['delete', 'update']:
            url = reverse(nurl, kwargs={'model_id': obj.pk, 'pk': inline.pk})
        else:
            url = reverse(nurl, kwargs={'model_id': obj.pk})
    except NoReverseMatch:
        url = None
    return url
Exemple #11
0
 def initialize_update(self, basename):
     OUpdateView = self.get_update_view()
     url = utils.crud_url_name(self.model, 'list', prefix=self.urlprefix)
     if self.namespace:
         url = self.namespace + ":" + url
     fields = self.fields
     if self.update_form:
         fields = None
     self.update = self.decorator_update(
         OUpdateView.as_view(model=self.model,
                             fields=fields,
                             success_url=reverse_lazy(url),
                             template_name=basename))
Exemple #12
0
    def get_urls(self):
        pre = ""
        try:
            if self.cruds_url:
                pre = "%s/" % self.cruds_url
        except AttributeError:
            pre = ""
        base_name = "%s%s/%s" % (pre, self.model._meta.app_label,
                                 self.model.__name__.lower())

        urls = CRUDView.get_urls(self)
        urls.append(
            url(r"^%s/(?P<pk>[^/]+)/clearlock$" % (base_name, ),
                self.clearlock,
                name=utils.crud_url_name(self.model,
                                         'clearlock',
                                         prefix=self.urlprefix)))
        return urls
Exemple #13
0
    def initialize_create(self, basename):
        OCreateView = self.get_create_view()
        url = utils.crud_url_name(
            self.model, 'list', prefix=self.urlprefix)
        if self.namespace:
            url = self.namespace + ":" + url

        fields = self.fields
        if self.add_form:
            fields = None
        print('>>> create_view = ' + str(OCreateView))
        ocv = OCreateView.as_view(
            model=self.model,
            fields=fields,
            success_url=reverse_lazy(url),
            template_name=basename
        )
        self.create = self.decorator_create(ocv)
    def get_context_data(self, **kwargs):
        """
        Adds available urls and names.
        """

        context = super(CRUDMixin, self).get_context_data(**kwargs)
        context.update({
            'model_verbose_name': self.model._meta.verbose_name,
            'model_verbose_name_plural': self.model._meta.verbose_name_plural,
            'namespace': self.namespace
        })
        include = None
        if hasattr(self, 'display_fields') and self.view_type == 'detail':
            include = getattr(self, 'display_fields')

        if hasattr(self, 'list_fields') and self.view_type == 'list':
            include = getattr(self, 'list_fields')

        context['fields'] = utils.get_fields(self.model, include=include)
        if hasattr(self, 'object') and self.object:
            for action in utils.INSTANCE_ACTIONS:
                try:
                    nurl = utils.crud_url_name(self.model, action)
                    if self.namespace:
                        nurl = self.namespace + ':' + nurl
                    url = reverse(nurl, kwargs={'pk': self.object.pk})
                except NoReverseMatch:
                    url = None
                context['url_%s' % action] = url

        for action in utils.LIST_ACTIONS:
            try:
                nurl = utils.crud_url_name(self.model, action)
                if self.namespace:
                    nurl = self.namespace + ':' + nurl
                url = reverse(nurl)
            except NoReverseMatch:
                url = None
            context['url_%s' % action] = url

        try:
            context['search'] = self.search_fields
        except AttributeError:
            context['search'] = False
        if self.view_type == 'list' and 'q' in self.request.GET:
            context['q'] = self.request.GET.get('q', '')

        if self.view_type in ['update', 'detail']:
            context['inlines'] = self.inlines

        if 'object' not in context:
            context['object'] = self.model
        context['views_available'] = self.views_available

        user = self.request.user
        available_perms = {}
        for perm in self.all_perms:
            if self.check_perms:
                if perm in self.views_available:
                    available_perms[perm] = all(
                        [user.has_perm(x) for x in self.all_perms[perm]])

                else:
                    available_perms[perm] = False
            else:
                available_perms[perm] = True

        context['crud_perms'] = available_perms
        context['template_father'] = self.template_father

        context.update(self.context_rel)
        context['getparams'] = self.getparams
        return context