@classmethod
    def get_data_elem(self, name):
        c = self._constants.get(name, None)
        if c is not None:
            return c
        #~ return self.virtual_fields.get(name,None)
        vf = self.virtual_fields.get(name, None)
        if vf is not None:
            #~ logger.info("20120202 Actor.get_data_elem found vf %r",vf)
            return vf

        a = getattr(self, name, None)
        if isinstance(a, actions.Action):
            return a
        if isinstance(a, fields.DummyField):
            return a

        #~ logger.info("20120307 lino.core.coretools.get_data_elem %r,%r",self,name)
        s = name.split('.')
        if len(s) == 1:
            #~ app_label = model._meta.app_label
            m = settings.SITE.modules[self.app_label]
            if m is None:
                raise Exception("No module %s" % self.app_label)
                return None
            rpt = getattr(m, name, None)
            # if rpt is None and name != name.lower():
            #     raise Exception("20140920 No %s in %s" % (name, m))
        elif len(s) == 2:
            m = settings.SITE.modules.get(s[0], None)
            if m is None:
                # return fields.DummyField()
                # 20130422 Yes it was a nice idea to silently
                # ignore non installed app_labels, but mistakenly
                # specifying "person.first_name" instead of
                # "person__first_name" did not raise an error...
                # raise Exception("No module %s" % s[0])
                return None
            rpt = getattr(m, s[1], None)
        else:
            raise Exception("Invalid data element name %r" % name)
        return rpt
If the response headers indicate the response body is encoded with the
dataset/ETHPy150Open lsaffre/lino/lino/core/actors.py/Actor.get_data_elem--crossover with--dataset/ETHPy150Open twisted/twisted/twisted/web/test/test_newclient.py/HTTPClientParserTests.test_chunkedResponseBody