Esempio n. 1
0
 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)
Esempio n. 2
0
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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)
Esempio n. 8
0
 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)
Esempio n. 9
0
 def test_module_parse(self):
     """Test simple filter"""
     test_str = "demomodule.timestamppipe()"
     expected = "demomodule.timestamppipe(),"
     result = parse_query(test_str)
     self.assertEqual(result, expected)
Esempio n. 10
0
 def test_colorize(self):
     result = None
     query = "{x.id]"
     with self.assertRaises(SyntaxError) as context:
         parse_query(query)