def register(self, *args, **kwargs):
        """
        Register a crud.

        Two unordered arguments are accepted, at least one should be passed:
        - a model,
        - a crudbuilder class
        """

        assert len(args) <= 2, 'register takes at most 2 args'
        assert len(args) > 0, 'register takes at least 1 arg'

        model, crudbuilder = self.__class__.extract_args(*args)

        if not issubclass(model, models.Model):
            msg = "First argument should be Django Model"
            raise NotModelException(msg)

        key = self._model_key(model, crudbuilder)

        if key in self:
            msg = "Key '{key}' has already been registered.".format(
                key=key
            )
            raise AlreadyRegistered(msg)

        self.__setitem__(key, crudbuilder)
        return crudbuilder
Register a crud.

        Two unordered arguments are accepted, at least one should be passed:
        - a model,
        - a crudbuilder class