The AppObject class#

In general:

  • we do not inherit directly from this class but from a more specific class such as AnyEntity, EntityView, AnyRsetView, Action

  • to be recordable, a subclass has to define its own register (attribute __registry__) and its identifier (attribute id). Usually we do not have to take care of the register, only the identifier id.

We can find a certain number of attributes and methods defined in this class and common to all the application objects.

At the recording, the following attributes are dynamically added to the subclasses:

  • vreg, the vregistry of the application

  • schema, the application schema

  • config, the application configuration

We also find on instances, the following attributes:

  • req, Request instance

  • rset, the result set associated to the object if necessary

  • cursor, rql cursor on the session

URL handling
  • build_url(method=None, **kwargs), returns an absolute URL based on the given arguments. The controller supposed to handle the response, can be specified through the special parameter method (the connection is theoretically done automatically :).

  • datadir_url(), returns the directory of the application data (contains static files such as images, css, js…)

  • base_url(), shortcut to req.base_url()

  • url_quote(value), version unicode safe of the function urllib.quote

Data manipulation
  • etype_rset(etype, size=1), shortcut to vreg.etype_rset()

  • eid_rset(eid, rql=None, descr=True), returns a result set object for the given eid

  • entity(row, col=0), returns the entity corresponding to the data position in the result set associated to the object

  • complete_entity(row, col=0, skip_bytes=True), is equivalent to entity but also call the method complete() on the entity before returning it

Data formatting
  • format_date(date, date_format=None, time=False) returns a string for a mx date time according to application’s configuration

  • format_time(time) returns a string for a mx date time according to application’s configuration

And more…
  • external_resource(rid, default=_MARKER), access to a value defined in the configuration file external_resource

  • tal_render(template, variables), renders a precompiled page template with variables in the given dictionary as context

Note

When we inherit from AppObject (even not directly), you always have to use super() to get the methods and attributes of the superclasses, and not use the class identifier. For example, instead of writting:

class Truc(PrimaryView):
    def f(self, arg1):
        PrimaryView.f(self, arg1)

You’d better write:

class Truc(PrimaryView):
    def f(self, arg1):
        super(Truc, self).f(arg1)