Loading ccserver/handlers.py +1 −2 Original line number Diff line number Diff line Loading @@ -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: Loading ccserver/tql.py +32 −29 Original line number Diff line number Diff line Loading @@ -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 = [] Loading @@ -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 Loading Loading @@ -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) Loading @@ -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): Loading @@ -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 Loading
ccserver/handlers.py +1 −2 Original line number Diff line number Diff line Loading @@ -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: Loading
ccserver/tql.py +32 −29 Original line number Diff line number Diff line Loading @@ -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 = [] Loading @@ -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 Loading Loading @@ -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) Loading @@ -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): Loading @@ -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