Exemplo n.º 1
0
    def _create_td(self, header, colname, record, rc):
        attrcol = dict()
        self._apply_colclass(attrcol, header)

        if "content" in header:
            r = header["content"](record, rc)
        else:
            _colname = str(colname)
            if not table_field.match(str(_colname)):
                if "_extra" in record and _colname in record._extra:
                    r = record._extra[_colname]
                    if hasattr(colname, "represent"):
                        r = colname.represent(r)
                    return TD(r, **attrcol)
                else:
                    raise KeyError("Column %s not found (SQLTABLE)" % _colname)

            (tablename, fieldname) = _colname.split(".")
            try:
                field = self.sqlrows.db[tablename][fieldname]
            except KeyError:
                field = None

            if tablename in record and isinstance(record, Row) and isinstance(record[tablename], Row):
                r = record[tablename][fieldname]
            elif fieldname in record:
                r = record[fieldname]
            else:
                raise SyntaxError, "something wrong in Rows object"

            r_old = r
            if not field:
                pass
            elif self.linkto and field.type == "id":
                try:
                    href = self.linkto(r, "table", tablename)
                except TypeError:
                    href = "%s/%s/%s" % (self.linkto, tablename, r_old)
                r = A(r, _href=href)
            elif field.type.startswith("reference"):
                if self.linkto:
                    ref = field.type[10:]
                    try:
                        href = self.linkto(r, "reference", ref)
                    except TypeError:
                        href = "%s/%s/%s" % (self.linkto, ref, r_old)
                        if ref.find(".") >= 0:
                            tref, fref = ref.split(".")
                            if hasattr(self.sqlrows.db[tref], "_primarykey"):
                                href = "%s/%s?%s" % (self.linkto, tref, urllib.urlencode({fref: r}))
                    r = A(represent(field, r, record), _href=str(href))
                elif field.represent:
                    r = represent(field, r, record)
            elif self.linkto and hasattr(field._table, "_primarykey") and fieldname in field._table._primarykey:
                # have to test this with multi-key tables
                key = urllib.urlencode(
                    dict(
                        [
                            (
                                (tablename in record and isinstance(record, Row) and isinstance(record[tablename], Row))
                                and (k, record[tablename][k])
                            )
                            or (k, record[k])
                            for k in field._table._primarykey
                        ]
                    )
                )
                r = A(r, _href="%s/%s?%s" % (self.linkto, tablename, key))
            elif field.type.startswith("list:"):
                r = represent(field, r or [], record)
            elif field.represent:
                r = represent(field, r, record)
            elif field.type == "blob" and r:
                r = "DATA"
            elif field.type == "upload":
                if self.upload and r:
                    r = A("file", _href="%s/%s" % (self.upload, r))
                elif r:
                    r = "file"
                else:
                    r = ""
            elif field.type in ["string", "text"]:
                r = str(field.formatter(r))
                if isinstance(header, dict):
                    r = self._truncate_str(r, header.get("truncate") or self.truncate)
                else:
                    r = self._truncate_str(r, self.truncate)

        return TD(r, **attrcol)
    def render_table(self, 
              sqlrows,
              linkto=None,
              upload=None,
              orderby=True,
              headers={},
              truncate=16,
              th_link = '',
              columns=None,
              extracolumns=None,
              selectid=None,
              renderstyle=False,
              cid=None,
              **attributes):
        
        request = current.request
        
        attributes['_class'] = "table table-striped table-bordered table-condensed"
        if th_link == '':
            th_link=URL(self.ctrl, self.method)
            
        row = []    
        if not sqlrows:
            return DIV('', _class='web2py_table')
        if not columns:
            columns = sqlrows.colnames
        else:
            cols = columns[:]
            columns = []
            for c in cols:
                columns.append(str(c))
        if headers=='fieldname:capitalize':
            headers = {}
            for c in columns:
                headers[c] = c.split('.')[-1].replace('_',' ').title()
        elif headers=='labels':
            headers = {}
            for c in columns:
                if c.find('(') > -1:
                    headers[c] = c
                else:
                    (t,f) = c.split('.')
                    field = sqlrows.db[t][f]
                    headers[c] = field.label
        if headers is None:
            headers = {}
        else:
            for c in columns:#new implement dict
                if isinstance(headers.get(c, c), dict):
                    coldict = headers.get(c, c)
                    attrcol = dict()
                    if coldict['width']!="":
                        attrcol.update(_width=coldict['width'])
                    if coldict['class']!="":
                        attrcol.update(_class=coldict['class'])
                    row.append(TH(coldict['label'],**attrcol))
                elif orderby:
                    if self.next_orderby.split('~')[-1] == c:
                        u = self.next_orderby
                    else:
                        u = c
                    _href = th_link+'?orderby=' + u
                    if self.search_string != '':
                        _href = _href + '&search_string=' + self.search_string
                        
                    row.append(TH(A(headers.get(c, c), _href=_href, cid=cid)))
                else:
                    row.append(TH(headers.get(c, c)))
    
            if extracolumns:#new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    if c['width']!="":
                        attrcol.update(_width=c['width'])
                    if c['class']!="":
                        attrcol.update(_class=c['class'])
                    row.append(TH(c['label'],**attrcol))
        
        thead = THEAD(TR(*row, _class=''))
        table = TABLE(thead, **attributes)
        
        tbody = []
        for (rc, record) in enumerate(sqlrows):
            row = []

            if not selectid is None: #new implement
                if record.get('id') == selectid:
                    _class += ' rowselected'

            for colname in columns:
                if not table_field.match(colname):
                    if "_extra" in record and colname in record._extra:
                        r = record._extra[colname]
                        row.append(TD(r))
                        continue
                    else:
                        raise KeyError("Column %s not found (SQLTABLE)" % colname)
                (tablename, fieldname) = colname.split('.')
                try:
                    field = sqlrows.db[tablename][fieldname]
                except KeyError:
                    field = None
                if tablename in record \
                        and isinstance(record, Row) \
                        and isinstance(record[tablename],Row):
                    r = record[tablename][fieldname]
                elif fieldname in record:
                    r = record[fieldname]
                else:
                    raise SyntaxError, 'something wrong in Rows object'
                r_old = r
                if not field:
                    pass
                elif linkto and field.type == 'id':
                    try:
                        href = linkto(r, 'table', tablename)
                    except TypeError:
                        href = '%s/%s/%s' % (linkto, tablename, r_old)
                    r = A(r, _href=href)
                elif isinstance(field.type, str) and field.type.startswith('reference'):
                    if linkto:
                        ref = field.type[10:]
                        try:
                            href = linkto(r, 'reference', ref)
                        except TypeError:
                            href = '%s/%s/%s' % (linkto, ref, r_old)
                            if ref.find('.') >= 0:
                                tref,fref = ref.split('.')
                                if hasattr(sqlrows.db[tref],'_primarykey'):
                                    href = '%s/%s?%s' % (linkto, tref, urllib.urlencode({fref:r}))
                        r = A(represent(field,r,record), _href=str(href))
                    elif field.represent:
                        r = represent(field,r,record)
                elif linkto and hasattr(field._table,'_primarykey')\
                        and fieldname in field._table._primarykey:
                    # have to test this with multi-key tables
                    key = urllib.urlencode(dict( [ \
                                ((tablename in record \
                                      and isinstance(record, Row) \
                                      and isinstance(record[tablename], Row)) and
                                 (k, record[tablename][k])) or (k, record[k]) \
                                    for k in field._table._primarykey ] ))
                    r = A(r, _href='%s/%s?%s' % (linkto, tablename, key))
                elif isinstance(field.type, str) and field.type.startswith('list:'):
                    r = represent(field,r or [],record)
                elif field.represent:
                    r = represent(field,r,record)
                elif field.type == 'blob' and r:
                    r = 'DATA'
                elif field.type == 'boolean':
                    r = INPUT(_type='checkbox', value=r, _disabled='')                   
                elif field.type == 'upload':
                    if upload and r:
                        r = A(current.T('file'), _href='%s/%s' % (upload, r))
                    elif r:
                        r = current.T('file')
                    else:
                        r = ''
                elif field.type in ['string','text']:
                    r = str(field.formatter(r))
                    if headers!={}: #new implement dict
                        if isinstance(headers[colname],dict):
                            if isinstance(headers[colname]['truncate'], int):
                                r = truncate_string(r, headers[colname]['truncate'])
                    elif not truncate is None:
                        r = truncate_string(r, truncate)
                attrcol = dict()#new implement dict
                if headers!={}:
                    if isinstance(headers[colname],dict):
                        colclass=headers[colname]['class']
                        if headers[colname]['selected']:
                            colclass= str(headers[colname]['class'] + " colselected").strip()
                        if colclass!="":
                            attrcol.update(_class=colclass)

                row.append(TD(r,**attrcol))

            if extracolumns:#new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    colclass=c['class']
                    if c['selected']:
                        colclass= str(c['class'] + " colselected").strip()
                    if colclass!="":
                        attrcol.update(_class=colclass)
                    contentfunc = c['content']
                    row.append(TD(contentfunc(record, rc),**attrcol))
                
            if self.show_function:
                tbody.append(TR(*row, 
                                _id='%s_%s_row_%d' % (self.ctrl, self.method, record[self.field_id]),
                                _onclick='getData("%(grid_id)s", "%(url)s", %(value)s, %(detail)s); return false;' %
                                {'grid_id': self.grid_id, 
                                 'url': URL(r=request, f=self.show_function, extension='load'),
                                 'value': str(record[self.field_id]),
                                 'detail': 'true'}
                            ))
            else:
                tbody.append(TR(*row, _id='%s_%s_row_%d' % (self.ctrl, self.method, record[self.field_id])))
        table.append(TBODY(*tbody))        

        return DIV(table, _class='web2py_table')
    def render_table(
        self,
        sqlrows,
        linkto=None,
        upload=None,
        orderby=True,
        headers={},
        truncate=16,
        th_link="",
        columns=None,
        extracolumns=None,
        selectid=None,
        renderstyle=False,
        cid=None,
        **attributes
    ):
        attributes["_class"] = "table table-striped table-bordered table-condensed"
        if th_link == "":
            th_link = URL(self.ctrl, self.method)

        row = []
        if not sqlrows:
            return DIV("", _class="web2py_table")
        if not columns:
            columns = sqlrows.colnames
        else:
            cols = columns[:]
            columns = []
            for c in cols:
                columns.append(str(c))
        if headers == "fieldname:capitalize":
            headers = {}
            for c in columns:
                headers[c] = c.split(".")[-1].replace("_", " ").title()
        elif headers == "labels":
            headers = {}
            for c in columns:
                if c.find("(") > -1:
                    headers[c] = c
                else:
                    (t, f) = c.split(".")
                    field = sqlrows.db[t][f]
                    headers[c] = field.label
        if headers is None:
            headers = {}
        else:
            for c in columns:  # new implement dict
                if isinstance(headers.get(c, c), dict):
                    coldict = headers.get(c, c)
                    attrcol = dict()
                    if coldict["width"] != "":
                        attrcol.update(_width=coldict["width"])
                    if coldict["class"] != "":
                        attrcol.update(_class=coldict["class"])
                    row.append(TH(coldict["label"], **attrcol))
                elif orderby:
                    if self.next_orderby.split("~")[-1] == c:
                        u = self.next_orderby
                    else:
                        u = c
                    _href = th_link + "?orderby=" + u
                    if self.search_string != "":
                        _href = _href + "&search_string=" + self.search_string

                    row.append(TH(A(headers.get(c, c), _href=_href, cid=cid)))
                else:
                    row.append(TH(headers.get(c, c)))

            if extracolumns:  # new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    if c["width"] != "":
                        attrcol.update(_width=c["width"])
                    if c["class"] != "":
                        attrcol.update(_class=c["class"])
                    row.append(TH(c["label"], **attrcol))

        thead = THEAD(TR(*row, _class=""))
        table = TABLE(thead, **attributes)

        tbody = []
        for (rc, record) in enumerate(sqlrows):
            row = []

            if not selectid is None:  # new implement
                if record.get("id") == selectid:
                    _class += " rowselected"

            for colname in columns:
                if not table_field.match(colname):
                    if "_extra" in record and colname in record._extra:
                        r = record._extra[colname]
                        row.append(TD(r))
                        continue
                    else:
                        raise KeyError("Column %s not found (SQLTABLE)" % colname)
                (tablename, fieldname) = colname.split(".")
                try:
                    field = sqlrows.db[tablename][fieldname]
                except KeyError:
                    field = None
                if tablename in record and isinstance(record, Row) and isinstance(record[tablename], Row):
                    r = record[tablename][fieldname]
                elif fieldname in record:
                    r = record[fieldname]
                else:
                    raise SyntaxError, "something wrong in Rows object"
                r_old = r
                if not field:
                    pass
                elif linkto and field.type == "id":
                    try:
                        href = linkto(r, "table", tablename)
                    except TypeError:
                        href = "%s/%s/%s" % (linkto, tablename, r_old)
                    r = A(r, _href=href)
                elif isinstance(field.type, str) and field.type.startswith("reference"):
                    if linkto:
                        ref = field.type[10:]
                        try:
                            href = linkto(r, "reference", ref)
                        except TypeError:
                            href = "%s/%s/%s" % (linkto, ref, r_old)
                            if ref.find(".") >= 0:
                                tref, fref = ref.split(".")
                                if hasattr(sqlrows.db[tref], "_primarykey"):
                                    href = "%s/%s?%s" % (linkto, tref, urllib.urlencode({fref: r}))
                        r = A(represent(field, r, record), _href=str(href))
                    elif field.represent:
                        r = represent(field, r, record)
                elif linkto and hasattr(field._table, "_primarykey") and fieldname in field._table._primarykey:
                    # have to test this with multi-key tables
                    key = urllib.urlencode(
                        dict(
                            [
                                (
                                    (
                                        tablename in record
                                        and isinstance(record, Row)
                                        and isinstance(record[tablename], Row)
                                    )
                                    and (k, record[tablename][k])
                                )
                                or (k, record[k])
                                for k in field._table._primarykey
                            ]
                        )
                    )
                    r = A(r, _href="%s/%s?%s" % (linkto, tablename, key))
                elif isinstance(field.type, str) and field.type.startswith("list:"):
                    r = represent(field, r or [], record)
                elif field.represent:
                    r = represent(field, r, record)
                elif field.type == "blob" and r:
                    r = "DATA"
                elif field.type == "boolean":
                    r = INPUT(_type="checkbox", value=r, _disabled="")
                elif field.type == "upload":
                    if upload and r:
                        r = A(current.T("file"), _href="%s/%s" % (upload, r))
                    elif r:
                        r = current.T("file")
                    else:
                        r = ""
                elif field.type in ["string", "text"]:
                    r = str(field.formatter(r))
                    if headers != {}:  # new implement dict
                        if isinstance(headers[colname], dict):
                            if isinstance(headers[colname]["truncate"], int):
                                r = truncate_string(r, headers[colname]["truncate"])
                    elif not truncate is None:
                        r = truncate_string(r, truncate)
                attrcol = dict()  # new implement dict
                if headers != {}:
                    if isinstance(headers[colname], dict):
                        colclass = headers[colname]["class"]
                        if headers[colname]["selected"]:
                            colclass = str(headers[colname]["class"] + " colselected").strip()
                        if colclass != "":
                            attrcol.update(_class=colclass)

                row.append(TD(r, **attrcol))

            if extracolumns:  # new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    colclass = c["class"]
                    if c["selected"]:
                        colclass = str(c["class"] + " colselected").strip()
                    if colclass != "":
                        attrcol.update(_class=colclass)
                    contentfunc = c["content"]
                    row.append(TD(contentfunc(record, rc), **attrcol))

            tbody.append(TR(*row))
        table.append(TBODY(*tbody))

        return DIV(table, _class="web2py_table")
    def render_table(self, 
              sqlrows,
              linkto=None,
              upload=None,
              orderby=True,
              headers={},
              truncate=16,
              th_link = '',
              columns=None,
              extracolumns=None,
              selectid=None,
              renderstyle=False,
              cid=None,
              **attributes):
        attributes['_class'] = "table table-striped table-bordered table-condensed"
        if th_link == '':
            th_link=URL(self.ctrl, self.method)
            
        row = []    
        if not sqlrows:
            return DIV('', _class='web2py_table')
        if not columns:
            columns = sqlrows.colnames
        else:
            cols = columns[:]
            columns = []
            for c in cols:
                columns.append(str(c))
        if headers=='fieldname:capitalize':
            headers = {}
            for c in columns:
                headers[c] = c.split('.')[-1].replace('_',' ').title()
        elif headers=='labels':
            headers = {}
            for c in columns:
                if c.find('(') > -1:
                    headers[c] = c
                else:
                    (t,f) = c.split('.')
                    field = sqlrows.db[t][f]
                    headers[c] = field.label
        if headers is None:
            headers = {}
        else:
            for c in columns:#new implement dict
                if isinstance(headers.get(c, c), dict):
                    coldict = headers.get(c, c)
                    attrcol = dict()
                    if coldict['width']!="":
                        attrcol.update(_width=coldict['width'])
                    if coldict['class']!="":
                        attrcol.update(_class=coldict['class'])
                    row.append(TH(coldict['label'],**attrcol))
                elif orderby:
                    if self.next_orderby.split('~')[-1] == c:
                        u = self.next_orderby
                    else:
                        u = c
                    _href = th_link+'?orderby=' + u
                    if self.search_string != '':
                        _href = _href + '&search_string=' + self.search_string
                        
                    row.append(TH(A(headers.get(c, c), _href=_href, cid=cid)))
                else:
                    row.append(TH(headers.get(c, c)))
    
            if extracolumns:#new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    if c['width']!="":
                        attrcol.update(_width=c['width'])
                    if c['class']!="":
                        attrcol.update(_class=c['class'])
                    row.append(TH(c['label'],**attrcol))
        
        thead = THEAD(TR(*row, _class=''))
        table = TABLE(thead, **attributes)
        
        tbody = []
        for (rc, record) in enumerate(sqlrows):
            row = []

            if not selectid is None: #new implement
                if record.get('id') == selectid:
                    _class += ' rowselected'

            for colname in columns:
                if not table_field.match(colname):
                    if "_extra" in record and colname in record._extra:
                        r = record._extra[colname]
                        row.append(TD(r))
                        continue
                    else:
                        raise KeyError("Column %s not found (SQLTABLE)" % colname)
                (tablename, fieldname) = colname.split('.')
                try:
                    field = sqlrows.db[tablename][fieldname]
                except KeyError:
                    field = None
                if tablename in record \
                        and isinstance(record, Row) \
                        and isinstance(record[tablename],Row):
                    r = record[tablename][fieldname]
                elif fieldname in record:
                    r = record[fieldname]
                else:
                    raise SyntaxError, 'something wrong in Rows object'
                r_old = r
                if not field:
                    pass
                elif linkto and field.type == 'id':
                    try:
                        href = linkto(r, 'table', tablename)
                    except TypeError:
                        href = '%s/%s/%s' % (linkto, tablename, r_old)
                    r = A(r, _href=href)
                elif isinstance(field.type, str) and field.type.startswith('reference'):
                    if linkto:
                        ref = field.type[10:]
                        try:
                            href = linkto(r, 'reference', ref)
                        except TypeError:
                            href = '%s/%s/%s' % (linkto, ref, r_old)
                            if ref.find('.') >= 0:
                                tref,fref = ref.split('.')
                                if hasattr(sqlrows.db[tref],'_primarykey'):
                                    href = '%s/%s?%s' % (linkto, tref, urllib.urlencode({fref:r}))
                        r = A(represent(field,r,record), _href=str(href))
                    elif field.represent:
                        r = represent(field,r,record)
                elif linkto and hasattr(field._table,'_primarykey')\
                        and fieldname in field._table._primarykey:
                    # have to test this with multi-key tables
                    key = urllib.urlencode(dict( [ \
                                ((tablename in record \
                                      and isinstance(record, Row) \
                                      and isinstance(record[tablename], Row)) and
                                 (k, record[tablename][k])) or (k, record[k]) \
                                    for k in field._table._primarykey ] ))
                    r = A(r, _href='%s/%s?%s' % (linkto, tablename, key))
                elif isinstance(field.type, str) and field.type.startswith('list:'):
                    r = represent(field,r or [],record)
                elif field.represent:
                    r = represent(field,r,record)
                elif field.type == 'blob' and r:
                    r = 'DATA'
                elif field.type == 'boolean':
                    r = INPUT(_type='checkbox', value=r, _disabled='')                   
                elif field.type == 'upload':
                    if upload and r:
                        r = A(current.T('file'), _href='%s/%s' % (upload, r))
                    elif r:
                        r = current.T('file')
                    else:
                        r = ''
                elif field.type in ['string','text']:
                    r = str(field.formatter(r))
                    if headers!={}: #new implement dict
                        if isinstance(headers[colname],dict):
                            if isinstance(headers[colname]['truncate'], int):
                                r = truncate_string(r, headers[colname]['truncate'])
                    elif not truncate is None:
                        r = truncate_string(r, truncate)
                attrcol = dict()#new implement dict
                if headers!={}:
                    if isinstance(headers[colname],dict):
                        colclass=headers[colname]['class']
                        if headers[colname]['selected']:
                            colclass= str(headers[colname]['class'] + " colselected").strip()
                        if colclass!="":
                            attrcol.update(_class=colclass)

                row.append(TD(r,**attrcol))

            if extracolumns:#new implement dict
                for c in extracolumns:
                    attrcol = dict()
                    colclass=c['class']
                    if c['selected']:
                        colclass= str(c['class'] + " colselected").strip()
                    if colclass!="":
                        attrcol.update(_class=colclass)
                    contentfunc = c['content']
                    row.append(TD(contentfunc(record, rc),**attrcol))

            tbody.append(TR(*row))        
        table.append(TBODY(*tbody))

        return DIV(table, _class='web2py_table')
Exemplo n.º 5
0
    def _create_td(self, header, colname, record, rc):
        attrcol = dict()
        self._apply_colclass(attrcol, header)

        if 'content' in header:
            r = header['content'](record, rc)
        else:
            _colname = str(colname)
            if not table_field.match(str(_colname)):
                if "_extra" in record and _colname in record._extra:
                    r = record._extra[_colname]
                    if hasattr(colname, 'represent'):
                        r = colname.represent(r)
                    return TD(r, **attrcol)
                else:
                    raise KeyError("Column %s not found (SQLTABLE)" % _colname)

            (tablename, fieldname) = _colname.split('.')
            try:
                field = self.sqlrows.db[tablename][fieldname]
            except KeyError:
                field = None

            if tablename in record and isinstance(record, Row) and isinstance(
                    record[tablename], Row):
                r = record[tablename][fieldname]
            elif fieldname in record:
                r = record[fieldname]
            else:
                raise SyntaxError, 'something wrong in Rows object'

            r_old = r
            if not field:
                pass
            elif self.linkto and field.type == 'id':
                try:
                    href = self.linkto(r, 'table', tablename)
                except TypeError:
                    href = '%s/%s/%s' % (self.linkto, tablename, r_old)
                r = A(r, _href=href, _class='w2p_trap')
            elif field.type.startswith('reference'):
                if self.linkto:
                    ref = field.type[10:]
                    try:
                        href = self.linkto(r, 'reference', ref)
                    except TypeError:
                        href = '%s/%s/%s' % (self.linkto, ref, r_old)
                        if ref.find('.') >= 0:
                            tref, fref = ref.split('.')
                            if hasattr(self.sqlrows.db[tref], '_primarykey'):
                                href = '%s/%s?%s' % (self.linkto, tref,
                                                     urllib.urlencode(
                                                         {fref: r}))
                    r = A(represent(field, r, record),
                          _href=str(href),
                          _class='w2p_trap')
                elif field.represent:
                    r = represent(field, r, record)
            elif self.linkto and hasattr(
                    field._table,
                    '_primarykey') and fieldname in field._table._primarykey:
                # have to test this with multi-key tables
                key = urllib.urlencode(dict( [ \
                            ((tablename in record \
                                  and isinstance(record, Row) \
                                  and isinstance(record[tablename], Row)) and
                             (k, record[tablename][k])) or (k, record[k]) \
                                for k in field._table._primarykey ] ))
                r = A(r,
                      _href='%s/%s?%s' % (self.linkto, tablename, key),
                      _class='w2p_trap')
            elif field.type.startswith('list:'):
                r = represent(field, r or [], record)
            elif field.represent:
                r = represent(field, r, record)
            elif field.type == 'blob' and r:
                r = 'DATA'
            elif field.type == 'upload':
                if self.upload and r:
                    r = A('file',
                          _href='%s/%s' % (self.upload, r),
                          _class='w2p_trap')
                elif r:
                    r = 'file'
                else:
                    r = ''
            elif field.type in ['string', 'text']:
                r = str(field.formatter(r))
                if isinstance(header, dict):
                    r = self._truncate_str(
                        r,
                        header.get('truncate') or self.truncate)
                else:
                    r = self._truncate_str(r, self.truncate)

        return TD(r, **attrcol)
Exemplo n.º 6
0
 def _create_td(self, header, colname, record, rc):
     attrcol = dict()
     self._apply_colclass(attrcol, header)
          
     if 'content' in header:
         r = header['content'](record, rc)
     else:
         _colname = str(colname)
         if not table_field.match(str(_colname)):
             if "_extra" in record and _colname in record._extra:
                 r = record._extra[_colname]
                 if hasattr(colname, 'represent'):
                     r = colname.represent(r)
                 return TD(r, **attrcol)
             else:
                 raise KeyError("Column %s not found (SQLTABLE)" % _colname)
         
         (tablename, fieldname) = _colname.split('.')
         try:
             field = self.sqlrows.db[tablename][fieldname]
         except KeyError:
             field = None
             
         if tablename in record and isinstance(record, Row) and isinstance(record[tablename], Row):
             r = record[tablename][fieldname]
         elif fieldname in record:
             r = record[fieldname]
         else:
             raise SyntaxError, 'something wrong in Rows object'
             
         r_old = r
         if not field:
             pass
         elif self.linkto and field.type == 'id':
             try:
                 href = self.linkto(r, 'table', tablename)
             except TypeError:
                 href = '%s/%s/%s' % (self.linkto, tablename, r_old)
             r = A(r, _href=href)
         elif field.type.startswith('reference'):
             if self.linkto:
                 ref = field.type[10:]
                 try:
                     href = self.linkto(r, 'reference', ref)
                 except TypeError:
                     href = '%s/%s/%s' % (self.linkto, ref, r_old)
                     if ref.find('.') >= 0:
                         tref,fref = ref.split('.')
                         if hasattr(self.sqlrows.db[tref],'_primarykey'):
                             href = '%s/%s?%s' % (self.linkto, tref, urllib.urlencode({fref:r}))
                 r = A(represent(field, r, record), _href=str(href))
             elif field.represent:
                 r = represent(field, r, record)
         elif self.linkto and hasattr(field._table,'_primarykey') and fieldname in field._table._primarykey:
             # have to test this with multi-key tables
             key = urllib.urlencode(dict( [ \
                         ((tablename in record \
                               and isinstance(record, Row) \
                               and isinstance(record[tablename], Row)) and
                          (k, record[tablename][k])) or (k, record[k]) \
                             for k in field._table._primarykey ] ))
             r = A(r, _href='%s/%s?%s' % (self.linkto, tablename, key))
         elif field.type.startswith('list:'):
             r = represent(field, r or [], record)
         elif field.represent:
             r = represent(field, r, record)
         elif field.type == 'blob' and r:
             r = 'DATA'
         elif field.type == 'upload':
             if self.upload and r:
                 r = A('file', _href='%s/%s' % (self.upload, r))
             elif r:
                 r = 'file'
             else:
                 r = ''
         elif field.type in ['string','text']:
             r = str(field.formatter(r))
             if isinstance(header, dict):
                 r = self._truncate_str(r, header.get('truncate') or self.truncate)
             else:
                 r = self._truncate_str(r, self.truncate)
                 
     return TD(r,**attrcol)