cubicweb logo

Table Of Contents

Previous topic

Web side development

Next topic

Controllers

This Page

Publisher

What happens when an HTTP request is issued ?

The story begins with the CubicWebPublisher.main_publish method. We do not get upper in the bootstrap process because it is dependant on the used HTTP library. With twisted however, cubicweb.etwist.server.CubicWebRootResource.render_request is the real entry point.

What main_publish does:

  • get a controller id and a result set from the path (this is actually delegated to the urlpublisher component)
  • the controller is then selected (if not, this is considered an authorization failure and signaled as such) and called
  • then either a proper result is returned, in which case the request/connection object issues a commit and returns the result
  • or error handling must happen:
    • ValidationErrors pop up there and may lead to a redirect to a previously arranged url or standard error handling applies
    • an HTTP 500 error (Internal Server Error) is issued

Now, let’s turn to the controller. There are many of them in cubicweb.web.views.basecontrollers. We can just follow the default view controller that is selected on a view path. See the Controllers chapter for more information on controllers.

The View controller’s entry point is the publish method. It does the following:

  • compute the main view to be applied, using either the given result set or building one from a user provided rql string (rql and vid can be forced from the url GET parameters), that is:

    • compute the vid using the result set and the schema (see cubicweb.web.views.vid_from_rset)
    • handle all error cases that could happen in this phase
  • do some cache management chores

  • select a main template (typically TheMainTemplate, see chapter Templates)

  • call it with the result set and the computed view.

What happens next actually depends on the template and the view, but in general this is the rendering phase.

CubicWebPublisher API

class cubicweb.web.application.CubicWebPublisher(config, session_handler_fact=<class 'cubicweb.web.application.CookieSessionHandler'>, vreg=None)

the publisher is a singleton hold by the web frontend, and is responsible to publish HTTP request.

connect(req)
return a connection for a logged user object according to existing sessions (i.e. a new connection may be created or an already existing one may be reused
classmethod critical(msg, *args, **kwargs)

Log ‘msg % args’ with severity ‘CRITICAL’.

To pass exception information, use the keyword argument exc_info with a true value, e.g.

logger.critical(“Houston, we have a %s”, “major disaster”, exc_info=1)

classmethod debug(msg, *args, **kwargs)

Log ‘msg % args’ with severity ‘DEBUG’.

To pass exception information, use the keyword argument exc_info with a true value, e.g.

logger.debug(“Houston, we have a %s”, “thorny problem”, exc_info=1)

classmethod error(msg, *args, **kwargs)

Log ‘msg % args’ with severity ‘ERROR’.

To pass exception information, use the keyword argument exc_info with a true value, e.g.

logger.error(“Houston, we have a %s”, “major problem”, exc_info=1)

classmethod exception(msg, *args)
Convenience method for logging an ERROR with exception information.
classmethod info(msg, *args, **kwargs)

Log ‘msg % args’ with severity ‘INFO’.

To pass exception information, use the keyword argument exc_info with a true value, e.g.

logger.info(“Houston, we have a %s”, “interesting problem”, exc_info=1)

log_publish(path, req)
wrapper around _publish to log all queries executed for a given accessed path
main_publish(path, req)

method called by the main publisher to process <path>

should return a string containing the resulting page or raise a NotFound exception

Parameters:
  • path (str) – the path part of the url to publish
  • req (web.Request) – the request object
Return type:

str

Returns:

the result of the pusblished url

classmethod warning(msg, *args, **kwargs)

Log ‘msg % args’ with severity ‘WARNING’.

To pass exception information, use the keyword argument exc_info with a true value, e.g.

logger.warning(“Houston, we have a %s”, “bit of a problem”, exc_info=1)