Пример #1
0
 def test_truncate_string(self):
     # Ascii text
     self.assertEqual(truncate_string('Lorem ipsum dolor sit amet, consectetur adipiscing elit, '
                                      'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
                                      length=30), 'Lorem ipsum dolor sit amet,...')
     # French text
     self.assertEqual(truncate_string('Un texte en français avec des accents et des caractères bizarre.', length=30),
                      'Un texte en français avec d...')
Пример #2
0
 def test_truncate_string(self):
     # Ascii text
     self.assertEqual(
         truncate_string(
             "Lorem ipsum dolor sit amet, consectetur adipiscing elit, "
             "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
             length=30,
         ),
         "Lorem ipsum dolor sit amet,...",
     )
     self.assertEqual(
         truncate_string("Short text shorter than the length parameter.", length=100),
         "Short text shorter than the length parameter.",
     )
     # French text
     self.assertEqual(
         truncate_string("Un texte en français avec des accents et des caractères bizarre.", length=30),
         "Un texte en français avec d...",
     )
    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')