Commit b2a6a09e authored by Antoine Millet's avatar Antoine Millet
Browse files

Fixed SI prefixes.

parent bf42ae59
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -121,8 +121,7 @@ class ClientHandler(OnlineCCHandler):
        tags = query.req_tags
        uniq_objects = {}
        if tags is not None:
            tags.add('id')
            tags.add('role')
            tags += ('id', 'role')
        for obj in objects:
            for key in obj.keys():
                if tags is not None and key not in tags:
+32 −29
Original line number Diff line number Diff line
@@ -5,11 +5,12 @@ import re
from fnmatch import fnmatch
from itertools import izip

MULTIPLICATOR_TABLE = {'B': 1, 'b': 1, 'o': 1,
                       'K': 100, 'k': 100,
                       'M': 1000, 'm': 1000,
                       'G': 10000, 'g': 10000,
                       'T': 100000, 't': 100000}
PREFIXES = {'b': 1, 'o': 1,
            'k': 1000, 'ki': 1024,
            'm': 1000**2, 'mi': 1024**2,
            'g': 1000**3, 'gi': 1024**3,
            't': 1000**4, 'ti': 1024**4,
            'p': 1000**5, 'pi': 1024**5}

def gen_all_operators(operators):
    ops = []
@@ -17,19 +18,20 @@ def gen_all_operators(operators):
    ops += ['!' + o for o in operators]
    return '|'.join(ops)


def multiplicator(number):
    number = str(number)
def prefix(number):
    number = str(number).lower()
    for sym, mul in PREFIXES.items():
        if number.endswith(sym):
            num = number.rstrip(sym)
            try:
        if len(number) > 1 and number[-1] in MULTIPLICATOR_TABLE:
            integer = int(number[:-1]) * MULTIPLICATOR_TABLE[number[-1]]
                return float(num) * mul
            except ValueError:
                return number
    else:
            integer = int(number)
        try:
            return float(number)
        except ValueError:
        return 0

    return integer
    
            return number

class TqlParsingError(Exception):
    pass
@@ -200,7 +202,7 @@ class TqlQuery(object):
        is specified.
        '''

        return None if self._catchall else self.tags
        return None if self._catchall else tuple(self.tags)

    req_tags = property(_get_requested_tags)

@@ -210,23 +212,23 @@ class TqlQuery(object):
        return fnmatch(str(value), str(pattern))

    def op_lt(self, lvalue, rvalue):
        lvalue = multiplicator(lvalue)
        rvalue = multiplicator(rvalue)
        lvalue = prefix(lvalue)
        rvalue = prefix(rvalue)
        return lvalue < rvalue
        
    def op_lte(self, lvalue, rvalue):
        lvalue = multiplicator(lvalue)
        rvalue = multiplicator(rvalue)
        lvalue = prefix(lvalue)
        rvalue = prefix(rvalue)
        return lvalue <= rvalue
        
    def op_gt(self, lvalue, rvalue):
        lvalue = multiplicator(lvalue)
        rvalue = multiplicator(rvalue)
        lvalue = prefix(lvalue)
        rvalue = prefix(rvalue)
        return lvalue > rvalue
        
    def op_gte(self, lvalue, rvalue):
        lvalue = multiplicator(lvalue)
        rvalue = multiplicator(rvalue)
        lvalue = prefix(lvalue)
        rvalue = prefix(rvalue)
        return lvalue >= rvalue

    def op_regex(self, value, pattern):
@@ -238,10 +240,11 @@ class TqlQuery(object):
            raise TqlParsingError('Error in your regex pattern: %s' % pattern)

    def op_equal(self, lvalue, rvalue):
        lvalue, rvalue = str(lvalue), str(rvalue)
        if lvalue is None:
            return False
        if lvalue.isdigit() and rvalue.isdigit(): # Integer comparison:
            lvalue = multiplicator(lvalue)
            rvalue = multiplicator(rvalue)
            lvalue = prefix(lvalue)
            rvalue = prefix(rvalue)

        return lvalue == rvalue