def test_imported_class(self): test_str = ("demomod.Dup(int(age(x.c.author).total()/3), group=1)" + '.process(lambda x: {"dup": x.id})') expected = ("demomod.Dup(int(age(x.c.author).total()/ 3), group = 1)" + '.process(lambda x : {"dup":x.id}),') result = parse_query(test_str) self.assertEqual(result, expected)
def query_convert(query): """Convert query for evaluation """ import regex as re indentre = re.compile(r"\n *") namere = re.compile(r'([{,] *)([^{} "\[\]\',]+):') firstxre = re.compile(r"^(\.[a-zA-Z])") makexre = re.compile(r"([ (])(\.[a-zA-Z])") keywordunpackingre = re.compile(r"\( *\*\*x *\)") nowre = re.compile(r"NOW\(\)") logger.debug("Before conversion: %s", json.dumps(query, indent=2)) query = indentre.sub(r" ", query) logger.debug("After indent removal: %s", json.dumps(query, indent=2)) query = namere.sub(r'\1"\2":', query) logger.debug("After namere: %s", json.dumps(query, indent=2)) query = firstxre.sub(r"x\1", query) query = makexre.sub(r"\1x\2", query) logger.debug("After makex: %s", json.dumps(query, indent=2)) query = keywordunpackingre.sub("(**x.dict())", query) logger.debug("After kw-unpacking: %s", json.dumps(query, indent=2)) try: jfkwre = re.compile(r"x\.([a-z]+)") query = jfkwre.sub(r"x.__JFESCAPED__\1", query) logger.debug("Parsing: '%s'", query) query = parse_query(query).rstrip(",") except (TypeError, SyntaxError) as ex: logger.warning("Syntax error in query: %s", repr(ex.args[0])) query = colorize(ex) ijfkwre = re.compile(r"x\.__JFESCAPED__([a-z]+)") query = ijfkwre.sub(r"x.\1", query) sys.stderr.write("Error in query:\n\t%s\n\n" % query) # raise SyntaxError return logger.debug("After query parse: %s", query) query = nowre.sub(r"datetime.now(timezone.utc)", query) logger.debug("After nowre: %s", query) query = "gp(data, [" + query + "]).process()" logger.debug("Final query '%s'", query) return query
def _test_keywords(self): """Test simple query""" test_str = "map(x.id), sorted(x.id, reverse=True)" expected = "map(x.id)," + "sorted(x.id, reverse = True)," result = parse_query(test_str) self.assertEqual(result, expected)
def _test_two(self): """Test simple query""" test_str = "map(x.id), sorted(x.id)" expected = "map(x.id), sorted(x.id)," result = parse_query(test_str) self.assertEqual(result, expected)
def test_map_filter(self): """Test simple filter""" test_str = 'map({id: x.id}), filter(x.id == "123")' expected = 'map({ id:x.id }),filter(x.id == "123"),' result = parse_query(test_str) self.assertEqual(result, expected)
def test_map_shortened(self): """Test simple filter""" test_str = "{id: x.id}" expected = "map({ id:x.id })," result = parse_query(test_str) self.assertEqual(result, expected)
def test_filter_shortened(self): """Test simple filter""" test_str = '(x.id == "123")' expected = 'filter(x.id == "123"),' result = parse_query(test_str) self.assertEqual(result, expected)
def test_filter2(self): """Test simple filter""" test_str = 'filter(x.commit.committer.name == "Lasse Hyyrynen")' expected = 'filter(x.commit.committer.name == "Lasse Hyyrynen"),' result = parse_query(test_str) self.assertEqual(result, expected)
def test_module_parse(self): """Test simple filter""" test_str = "demomodule.timestamppipe()" expected = "demomodule.timestamppipe()," result = parse_query(test_str) self.assertEqual(result, expected)
def test_colorize(self): result = None query = "{x.id]" with self.assertRaises(SyntaxError) as context: parse_query(query)