Exemple #1
0
def test_2path_greater_quantity():
    hs_filter = 'siteRef->temp >= 55400°'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 10, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {
               'customer_id': 'customer',
               'start_datetime': {'$lte': FAKE_NOW},
               'end_datetime': {'$gt': FAKE_NOW}}},
               {'$replaceRoot': {'newRoot': '$entity'}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'siteRef_entity_',
                   'let': {'siteRef_id_': '$siteRef'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$siteRef_id_']}]}}}]}},
               {'$set': {'siteRef_entity_': {'$arrayElemAt': ['$siteRef_entity_.entity', 0]}}},
               {'$match': {'$expr': {'$gte': [
                   {'$let': {'vars': {'siteRef_regex_': {
                       '$regexFind': {'input': '$siteRef_entity_.temp',
                                      'regex': 'n:([-+]?([0-9]*[.])?[0-9]+([eE][-+]?\\d+)?)'}}},
                       'in': {'$toDouble': {'$arrayElemAt': ['$$siteRef_regex_.captures', 0]}}}}, 55400.0]}}},
               {'$replaceRoot': {'newRoot': '$$ROOT'}},
               {'$limit': 10}]
Exemple #2
0
def test_path_and():
    hs_filter = 'equipRef->siteRef and equipRef->siteRef'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 10, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [
               {'$match': {
                   'customer_id': 'customer',
                   'start_datetime': {'$lte': FAKE_NOW},
                   'end_datetime': {'$gt': FAKE_NOW}}},
               {'$replaceRoot': {'newRoot': '$entity'}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'equipRef_entity_',
                   'let': {'equipRef_id_': '$equipRef'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$equipRef_id_']}]}}}]}},
               {'$set': {'equipRef_entity_': {'$arrayElemAt': ['$equipRef_entity_.entity', 0]}}},
               {'$match': {'$expr': {'$and': [
                   {'$ne': [{'$type': '$equipRef_entity_.siteRef'}, 'missing']},
                   {'$ne': [{'$type': '$equipRef_entity_.siteRef'}, 'missing']}]}}},
               {'$replaceRoot': {'newRoot': '$$ROOT'}},
               {'$limit': 10}]
Exemple #3
0
def test_equal_float():
    hs_filter = 'a == 1.0'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}},
            {'$match': {'$expr': {'$eq': ['$a', 'n:1.000000']}}}, {'$limit': 1}]
Exemple #4
0
def test_not_tag():
    hs_filter = 'not site'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}},
            {'$match': {'$expr': {'$eq': [{'$type': '$site'}, 'missing']}}}, {'$limit': 1}]
Exemple #5
0
def test_equal_xstr():
    hs_filter = 'a == hex("deadbeef")'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}},
            {'$match': {'$expr': {'$eq': ['$a', 'x:hex:deadbeef']}}}, {'$limit': 1}]
Exemple #6
0
def test_equal_ref():
    hs_filter = 'id == @id_site'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {'$match': {
               '$expr': {'$eq': [{'$let': {
                   'vars': {'id_regex_': {'$regexFind': {'input': '$id', 'regex': 'r:([:.~a-zA-Z0-9_-]+)'}}},
                   'in': {'$arrayElemAt': ['$$id_regex_.captures', 0]}}}, 'id_site']}}}, {'$limit': 1}]
Exemple #7
0
def test_and_ltag_rtag():
    hs_filter = 'site and ref'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    # noinspection PyPep8
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {'$match': {
               '$expr': {'$and': [{'$ne': [{'$type': '$site'}, 'missing']}, {'$ne': [{'$type': '$ref'}, 'missing']}]}}},
            {'$limit': 1}]
Exemple #8
0
def test_combine_and():
    hs_filter = '(a==1 and b==1) or (c==2 and d==3)'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    # noinspection PyPep8
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {'$match': {
               '$expr': {'$or': [{'$and': [{'$eq': ['$a', 'n:1.000000']}, {'$eq': ['$b', 'n:1.000000']}]},
                                 {'$and': [{'$eq': ['$c', 'n:2.000000']}, {'$eq': ['$d', 'n:3.000000']}]}]}}},
            {'$limit': 1}]
Exemple #9
0
def test_select_with_id():
    hs_filter = 'id==@p:demo:r:23a44701-3a62fd7a'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    # noinspection PyPep8
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {'$match': {
               '$expr': {'$eq': [{'$let': {
                   'vars': {'id_regex_': {'$regexFind': {'input': '$id', 'regex': 'r:([:.~a-zA-Z0-9_-]+)'}}},
                   'in': {'$arrayElemAt': ['$$id_regex_.captures', 0]}}}, 'p:demo:r:23a44701-3a62fd7a']}}},
            {'$limit': 1}]
Exemple #10
0
def test_greater_or_equal_quantity():
    hs_filter = 'temp >= 55400°'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 1, "customer")
    _check_mongodb(hs_filter, mongo_request)
    # noinspection PyPep8
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {'$lte': FAKE_NOW},
                        'end_datetime': {'$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {'$match': {
               '$expr': {'$gte': [{'$let': {'vars': {'temp_regex_': {
                   '$regexFind': {'input': '$temp', 'regex': 'n:([-+]?([0-9]*[.])?[0-9]+([eE][-+]?\\d+)?)'}}},
                   'in': {'$toDouble': {'$arrayElemAt': ['$$temp_regex_.captures', 0]}}}},
                   55400.0]}}}, {'$limit': 1}]
Exemple #11
0
def test_complex():
    hs_filter = '(a->b or c->d) and e or (f and g->h)'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 10, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {
               'customer_id': 'customer',
               'start_datetime': {'$lte': FAKE_NOW},
               'end_datetime': {'$gt': FAKE_NOW}}},
               {'$replaceRoot': {'newRoot': '$entity'}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'a_entity_',
                   'let': {'a_id_': '$a'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$a_id_']}]}}}]}},
               {'$set': {'a_entity_': {'$arrayElemAt': ['$a_entity_.entity', 0]}}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'c_entity_',
                   'let': {'c_id_': '$c'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$c_id_']}]}}}]}},
               {'$set': {'c_entity_': {'$arrayElemAt': ['$c_entity_.entity', 0]}}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'g_entity_',
                   'let': {'g_id_': '$g'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$g_id_']}]}}}]}},
               {'$set': {'g_entity_': {'$arrayElemAt': ['$g_entity_.entity', 0]}}},
               {'$match': {'$expr': {'$or': [
                   {'$and': [{'$or': [
                       {'$ne': [{'$type': '$a_entity_.b'}, 'missing']},
                       {'$ne': [{'$type': '$c_entity_.d'}, 'missing']}]},
                       {'$ne': [{'$type': '$e'}, 'missing']}]},
                   {'$and': [
                       {'$ne': [{'$type': '$f'}, 'missing']},
                       {'$ne': [{'$type': '$g_entity_.h'}, 'missing']}]}]}}},
               {'$replaceRoot': {'newRoot': '$$ROOT'}},
               {'$limit': 10}]
Exemple #12
0
def test_path_or():
    hs_filter = 'siteRef->geoPostalCode or siteRef->geoCountry'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 10, "customer")
    _check_mongodb(hs_filter, mongo_request)
    # noinspection PyPep8
    assert mongo_request == \
           [{'$match': {'customer_id': 'customer', 'start_datetime': {
               '$lte': FAKE_NOW}, 'end_datetime': {
               '$gt': FAKE_NOW}}}, {'$replaceRoot': {'newRoot': '$entity'}}, {
                '$lookup': {
                    'from': 'haystack',
                    'as': 'siteRef_entity_',
                    'let': {'siteRef_id_': '$siteRef'},
                    'pipeline': [{
                        '$match': {
                            '$expr': {
                                '$and': [
                                    {
                                        '$eq': [
                                            '$customer_id',
                                            'customer']},
                                    {
                                        '$lte': [
                                            '$start_datetime',
                                            FAKE_NOW]}, {
                                        '$gt': ['$end_datetime', FAKE_NOW]}, {
                                        '$eq': ['$entity.id', '$$siteRef_id_']}]}}}]}}, {'$set': {
               'siteRef_entity_': {'$arrayElemAt': ['$siteRef_entity_.entity', 0]}}},
            {
                '$lookup': {
                    'from': 'haystack', 'as': 'siteRef_entity_',
                    'let': {'siteRef_id_': '$siteRef'},
                    'pipeline': [{'$match': {'$expr': {'$and': [
                        {'$eq': ['$customer_id', 'customer']}, {
                            '$lte': ['$start_datetime',
                                     FAKE_NOW]}, {
                            '$gt': ['$end_datetime', FAKE_NOW]}, {
                            '$eq': ['$entity.id', '$$siteRef_id_']}]}}}]}},
            {'$set': {
                'siteRef_entity_': {'$arrayElemAt': ['$siteRef_entity_.entity', 0]}}},
            {'$match': {'$expr': {
                '$or': [{'$ne': [{'$type': '$siteRef_entity_.geoPostalCode'}, 'missing']},
                        {'$ne': [{'$type': '$siteRef_entity_.geoCountry'}, 'missing']}]}}},
            {
                '$replaceRoot': {'newRoot': '$$ROOT'}},
            {'$limit': 10}]
Exemple #13
0
def test_path_equal_quantity():
    hs_filter = 'siteRef->curVal == 55400°'
    mongo_request = mongo_filter(hs_filter, FAKE_NOW, 10, "customer")
    _check_mongodb(hs_filter, mongo_request)
    assert mongo_request == \
           [{'$match': {
               'customer_id': 'customer',
               'start_datetime': {'$lte': FAKE_NOW},
               'end_datetime': {'$gt': FAKE_NOW}}},
               {'$replaceRoot': {'newRoot': '$entity'}},
               {'$lookup': {
                   'from': 'haystack',
                   'as': 'siteRef_entity_',
                   'let': {'siteRef_id_': '$siteRef'},
                   'pipeline': [{'$match': {'$expr': {'$and': [
                       {'$eq': ['$customer_id', 'customer']},
                       {'$lte': ['$start_datetime', FAKE_NOW]},
                       {'$gt': ['$end_datetime', FAKE_NOW]},
                       {'$eq': ['$entity.id', '$$siteRef_id_']}]}}}]}},
               {'$set': {'siteRef_entity_': {'$arrayElemAt': ['$siteRef_entity_.entity', 0]}}},
               {'$match': {'$expr': {'$eq': ['$siteRef_entity_.curVal', 'n:55400.000000 \\u00b0']}}},
               {'$replaceRoot': {'newRoot': '$$ROOT'}},
               {'$limit': 10}]