コード例 #1
0
    def executeMacro(self, row, field):

        try:
            for match in j.codetools.regex.getRegexMatches("\$\d*", field).matches:
                nr = int(match.founditem.replace("$", ""))
                field = field.replace(match.founditem, row[nr])
        except:
            raise RuntimeError("Cannot process macro string for row, row was %s, field was %s" % (row, field))

        field = field % row
        field = Confluence2HTML.findLinks(field)
        if field.find("{{") != -1:
            field = j.core.portal.active.macroexecutorPage.processMacrosInWikiContent(field)

        return field
コード例 #2
0
    def executeMacro(self, row, field):

        try:
            for match in j.tools.code.regex.getRegexMatches("\$\d*", field).matches:
                nr = int(match.founditem.replace("$", ""))
                field = field.replace(match.founditem, row[nr])
        except:
            raise RuntimeError("Cannot process macro string for row, row was %s, field was %s" % (row, field))

        field = field % row
        field = Confluence2HTML.findLinks(field)
        if field.find("{{") != -1:
            field = j.portal.server.active.macroexecutorPage.processMacrosInWikiContent(field)

        return field
コード例 #3
0
    def getData(self, namespace, category, key, **kwargs):
        datainfo = self.getFromCache(key)
        fieldids = datainfo['fieldids']
        fieldvalues = datainfo['fieldvalues'] or fieldids
        filters = datainfo["filters"] or dict()
        nativequery = datainfo.get('nativequery') or dict()
        nativequery = copy.deepcopy(nativequery)
        filters = filters.copy()

        client = self.getClient(namespace, category)

        #pagin
        start = kwargs['iDisplayStart']
        size = kwargs['iDisplayLength']


        #sort
        sort = dict()
        if kwargs['iSortCol_0']:
            for i in xrange(int(kwargs['iSortingCols'])):
                colidx = kwargs['iSortCol_%s' % i]
                key = 'bSortable_%s' % colidx
                if kwargs[key] == 'true':
                    colname = fieldids[int(colidx)]
                    sort[colname] = 'asc' if kwargs['sSortDir_%s' % i] == 'asc' else 'desc'

        #filters
        partials = dict()
        for x in xrange(len(fieldids)):
            svalue = kwargs.get('sSearch_%s' % x)
            if kwargs['bSearchable_%s' % x] == 'true' and svalue:
                fieldname = fieldids[x]
                if svalue.isdigit():
                    if fieldname not in filters:
                        filters[fieldname] = int(svalue)
                else:
                    partials[fieldname] = '*%s*' % svalue.lower()

        #top search field
        if 'sSearch' in kwargs and kwargs['sSearch']:
            dummyobj = client.new()
            nativequery.setdefault('query', {}).setdefault('bool', {}).setdefault('must', [])
            nativequery.setdefault('query', {}).setdefault('bool', {}).setdefault('should', [])
            for idname in fieldids:
                if isinstance(getattr(dummyobj, idname, None), basestring):
                    nativequery['query']['bool']['should'].append({'wildcard': {idname: '*%s*' % kwargs['sSearch'].lower()}})
            nativequery

        total, inn = client.simpleSearch(filters, size=size, start=start, withtotal=True, sort=sort, partials=partials, withguid=True, nativequery=nativequery)
        result = {}
        result["sEcho"] = int(kwargs.get('sEcho', 1))
        result["iTotalRecords"] = total
        result["iTotalDisplayRecords"] = total
        result["aaData"] = []
        for row in inn:
            r = []
            for field, fieldid in zip(fieldvalues, fieldids):
                if field in row:
                    r.append(row[field])
                elif j.basetype.integer.check(field):
                    r.append(row[field])
                elif j.basetype.string.check(field):
                    r.append(self.executeMacro(row, field))
                else:
                    # is function
                    field = field(row, fieldid)
                    field = field or ' '
                    field = Confluence2HTML.findLinks(field)
                    r.append(field)

            result["aaData"].append(r)

        return result
コード例 #4
0
    def getData(self, namespace, category, key, **kwargs):
        datainfo = self.getFromCache(key)
        fieldids = datainfo['fieldids']
        fieldvalues = datainfo['fieldvalues'] or fieldids
        filters = datainfo["filters"] or dict()
        nativequery = datainfo.get('nativequery') or dict()
        nativequery = copy.deepcopy(nativequery)
        filters = filters.copy()
        nativequery.update(filters)
        client = self.getClient(namespace, category)

        # pagin
        start = int(kwargs['iDisplayStart']) if "iDisplayStart" in kwargs else 0
        size = int(kwargs['iDisplayLength']) if "isDisplayLength" in kwargs else 200

        qs = client.find(nativequery)
        qs = qs.limit(size)

        # filters
        partials = dict()

        for x in range(len(fieldids)):
            svalue = kwargs.get('sSearch_%s' % x)
            if kwargs['bSearchable_%s' % x] == 'true' and svalue:
                partials['%s__contains' % fieldids[x]] = int(svalue) if svalue.isdigit() else svalue
        if partials:
            query = Q()
            query.query = partials
            qs = qs.filter(query)

        # sort
        sort = []
        if kwargs['iSortCol_0']:
            for i in range(int(kwargs['iSortingCols'])):
                colidx = kwargs['iSortCol_%s' % i]
                key = 'bSortable_%s' % colidx
                if kwargs[key] == 'true':
                    colname = fieldids[int(colidx)]
                    sort.append('%s%s' % ("+" if kwargs['sSortDir_%s' % i] == 'asc' else "-", colname))
        if sort:
            qs = qs.order_by(*sort)

        def _getRegexQuery(fieldname, value, client):
            if not value.isdigit() and isinstance(getattr(client, fieldname), mongoengine.fields.IntField):
                return
            query = Q()
            query.query['%s__contains' % fieldname] = int(value) if value.isdigit() else value
            return query

        # top search field
        orquery = []
        if 'sSearch' in kwargs and kwargs['sSearch']:
            orquery = list()
            for idname in fieldids:
                orquery.append(_getRegexQuery(idname, kwargs['sSearch'], client))
            orquery = [orq for orq in orquery if orq]
            filters = list()
            filters = orquery[0]
            for query in orquery[1:]:
                if query:
                    filters = filters | query
            qs = qs.filter(filters)

        if start:
            qs = qs.skip(start)

        total = qs.count()
        inn = qs.all()
        result = {}
        result["sEcho"] = int(kwargs.get('sEcho', 1))
        result["iTotalRecords"] = total
        result["iTotalDisplayRecords"] = total
        result["aaData"] = []
        for row in inn:
            r = []
            for field, fieldid in zip(fieldvalues, fieldids):
                if str(field) in row:
                    r.append(row[field])
                elif j.data.types.string.check(field):
                    r.append(self.executeMacro(row, field))
                else:
                    # is function
                    field = field(row, fieldid)
                    field = field or ' '
                    field = Confluence2HTML.findLinks(field)
                    r.append(field)

            result["aaData"].append(r)

        return result
コード例 #5
0
    def getData(self, namespace, category, key, **kwargs):
        try:
            datainfo = self.getFromCache(key)
        except:
            raise exceptions.Gone('Table is not available anymore. Please refresh')
        fields = datainfo['fields']
        filters = datainfo.get("filters") or dict()
        nativequery = datainfo.get('nativequery') or dict()
        nativequery = copy.deepcopy(nativequery)
        filters = filters.copy()
        nativequery.update(filters)
        fullquery = {'$query': nativequery}

        client = self.getClient(namespace, category)

        # pagin
        start = int(kwargs['iDisplayStart'])
        size = int(kwargs['iDisplayLength'])

        # sort
        sort = []
        if kwargs['iSortCol_0']:
            for i in range(int(kwargs['iSortingCols'])):
                colidx = kwargs['iSortCol_%s' % i]
                key = 'bSortable_%s' % colidx
                if kwargs[key] == 'true':
                    colname = fields[int(colidx)]['id']
                    sort.append((colname,  1 if kwargs['sSortDir_%s' % i] == 'asc' else -1))
        if sort:
            fullquery['$orderby'] = sort

        def getRegexQuery(value):
            regextmpl = '%s'
            if value.startswith('!'):
                value = value[1:]
                if value:
                    regextmpl = '^(?!.*%s).*$'
            query = {'$regex': regextmpl % value, '$options': 'i'}
            return query

        # filters
        for x in range(len(fields)):
            svalue = kwargs.get('sSearch_%s' % x)
            if kwargs.get('bSearchable_%s' % x) == 'true' and svalue:
                x += 1
                fieldname = fields[x]['id']
                fieldtype = fields[x].get('type', 'auto')
                if svalue.isdigit() and fieldtype != 'text':
                    if fieldname not in filters:
                        nativequery[fieldname] = int(svalue)
                else:
                    try:
                        q = json.loads(svalue)
                        if isinstance(q, dict):
                            nativequery[fieldname] = q
                        else:
                            nativequery[fieldname] = getRegexQuery(svalue)
                    except:
                        nativequery[fieldname] = getRegexQuery(svalue)

        # top search field
        if 'sSearch' in kwargs and kwargs['sSearch']:
            orquery = []
            nativequery['$or'] = orquery
            for field in fields:
                orquery.append({field['id']: getRegexQuery(kwargs['sSearch'])})

        queryresult = client.search(fullquery, size=size, start=start)
        total = queryresult[0]
        inn = queryresult[1:]
        result = {}
        result["sEcho"] = int(kwargs.get('sEcho', 1))
        result["iTotalRecords"] = total
        result["iTotalDisplayRecords"] = total
        result["data"] = []
        for row in inn:
            r = []
            for fieldobj in fields:
                field = fieldobj['value']
                fieldid = fieldobj['id']
                if field in row or j.basetype.integer.check(field):
                    value = row[field]
                    if isinstance(value, basestring):
                        value = cgi.escape(value)
                    r.append(value)
                elif j.basetype.string.check(field):
                    r.append(self.executeMacro(row, field))
                else:
                    # is function
                    field = field(row, fieldid)
                    field = field or ' '
                    field = Confluence2HTML.findLinks(field)
                    r.append(field)

            result["data"].append(r)

        return result
コード例 #6
0
    def getData(self, namespace, category, key, **kwargs):
        try:
            datainfo = self.getFromCache(key)
        except:
            raise exceptions.Gone(
                'Table is not available anymore. Please refresh')
        fieldids = datainfo['fieldids']
        fieldvalues = datainfo['fieldvalues'] or fieldids
        filters = datainfo["filters"] or dict()
        nativequery = datainfo.get('nativequery') or dict()
        nativequery = copy.deepcopy(nativequery)
        filters = filters.copy()
        nativequery.update(filters)
        fullquery = {'$query': nativequery}

        client = self.getClient(namespace, category)

        #pagin
        start = kwargs['iDisplayStart']
        size = kwargs['iDisplayLength']

        #sort
        sort = []
        if kwargs['iSortCol_0']:
            for i in range(int(kwargs['iSortingCols'])):
                colidx = kwargs['iSortCol_%s' % i]
                key = 'bSortable_%s' % colidx
                if kwargs[key] == 'true':
                    colname = fieldids[int(colidx)]
                    sort.append(
                        (colname,
                         1 if kwargs['sSortDir_%s' % i] == 'asc' else -1))
        if sort:
            fullquery['$orderby'] = sort

        def getRegexQuery(value):
            regextmpl = '%s'
            if value.startswith('!'):
                value = value[1:]
                if value:
                    regextmpl = '^(?!.*%s).*$'
            query = {'$regex': regextmpl % value, '$options': 'i'}
            return query

        #filters
        partials = dict()
        for x in range(len(fieldids)):
            svalue = kwargs.get('sSearch_%s' % x)
            if kwargs.get('bSearchable_%s' % x) == 'true' and svalue:
                fieldname = fieldids[x]
                if svalue.isdigit():
                    if fieldname not in filters:
                        nativequery[fieldname] = int(svalue)
                else:
                    nativequery[fieldname] = getRegexQuery(svalue)

        #top search field
        if 'sSearch' in kwargs and kwargs['sSearch']:
            orquery = []
            nativequery['$or'] = orquery
            for idname in fieldids:
                orquery.append({idname: getRegexQuery(kwargs['sSearch'])})

        queryresult = client.search(fullquery, size=size, start=start)
        total = queryresult[0]
        inn = queryresult[1:]
        result = {}
        result["sEcho"] = int(kwargs.get('sEcho', 1))
        result["iTotalRecords"] = total
        result["iTotalDisplayRecords"] = total
        result["data"] = []
        for row in inn:
            r = [row.get('id', 'NA')]
            for field, fieldid in zip(fieldvalues, fieldids):
                if field in row:
                    r.append(row[field])
                elif j.basetype.integer.check(field):
                    r.append(row[field])
                elif j.basetype.string.check(field):
                    r.append(self.executeMacro(row, field))
                else:
                    # is function
                    field = field(row, fieldid)
                    field = field or ' '
                    field = Confluence2HTML.findLinks(field)
                    r.append(field)

            result["data"].append(r)

        return result