Publisher — CubicWeb 3.10.1

### Navigation

- index
- modules |
- next |
- previous |
- CubicWeb 3.10.1 »
- Web side development »

# 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)

### Navigation

- index
- modules |
- next |
- previous |
- CubicWeb 3.10.1 »
- Web side development »