Best Python code snippet using playwright-python
test_grounding.py
Source:test_grounding.py  
1#from grounding import Grounder2import grounding3from pddl.parser import Parser4from task import Operator5from pddl.pddl import Type, Predicate, Effect, Action, Domain, Problem6def assert_equal(result, expected):7    assert result == expected8def get_action(name, signature, precondition, addlist, dellist):9    effect = Effect()10    effect.addlist = set(addlist)11    effect.dellist = set(dellist)12    return Action(name, signature, precondition, effect)13"""14test domain and problem15"""16# types:17type_object = Type("object", None)18type_vehicle = Type("vehicle", type_object)19type_car = Type("car", type_vehicle)20type_truck = Type("truck", type_vehicle)21type_city = Type("city", type_object)22type_country = Type("country", type_object)23type_my_car = Type("my_car", type_vehicle)24type_color = Type("color", type_object)25types = {"object": type_object, "vehicle": type_vehicle, "car": type_car,26         "truck": type_truck, "city": type_city, "country": type_country,27         "my_car": type_my_car, "color": type_color}28# predicates:29predicate_car_orig = Predicate("at", [("car", types["car"]),30                                      ("orig", types["city"])])31predicate_car_dest = Predicate("at", [("car", types["car"]),32                                      ("dest", types["city"])])33predicate_veh_orig = Predicate("at", [("vehicle", types["vehicle"]),34                                      ("orig", types["city"])])35predicate_veh_dest = Predicate("at", [("vehicle", types["vehicle"]),36                                      ("dest", types["city"])])37predicate_in = Predicate("in", [("car", types["car"]), ("in", types["city"])])38#predicate which does not occur in any operator:39predicate_car_color = Predicate("car_color", [("car", types["car"]),40                                              ("color", types["color"])])41predicate_at = Predicate("at", [("vehicle", types["vehicle"]),42                                ("city", types["city"])])43predicates = {"at": predicate_car_dest, "in": predicate_in,44              "car_color": predicate_car_color}45# actions:46action_drive_car = get_action("DRIVE-CAR", [("car", [types["car"]]),47                         ("orig", [types["city"]]), ("dest", [types["city"]])],48                         [predicate_car_dest], [predicate_car_orig],49                         [predicate_car_dest])50actions = {"drive-car": action_drive_car}51# objects:52objects = {"red_car": types["car"], "green_car": types["car"],53           "blue_truck": types["truck"],  "freiburg": types["city"],54           "basel": types["city"], "green": types["color"],55           "yellow": types["color"]}56# initial and goal state:57initial_state = [Predicate("at", [("red_car", types["car"]),58                                  ("freiburg", types["city"])]),59                 Predicate("at", [("green_car", types["car"]),60                                  ("basel", types["city"])]),61                 Predicate("at", [("blue_truck", types["truck"]),62                                  ("freiburg", types["city"])]),63                 Predicate("at", [("yellow_truck", types["truck"]),64                                  ("basel", types["city"])])]65goal_state = [Predicate("at", [("red_car", types["car"]),66                               ("basel", types["city"])]),67                 Predicate("at", [("green_car", types["car"]),68                                  ("freiburg", types["city"])]),69                 Predicate("at", [("blue_truck", types["truck"]),70                                  ("basel", types["city"])]),71                 Predicate("at", [("yellow_truck", types["truck"]),72                                  ("freiburg", types["city"])])]73# domain and problem74standard_domain = Domain("test_domain_statics", types, predicates, actions)75standard_problem = Problem("test_problem_statics", standard_domain, objects,76                           initial_state, goal_state)77def test_statics1():78    """79    A static predicate is a predicate, which doesn't occur in an effect of an80    action.81    """82    type_object = Type("object", None)83    type_car = Type("car", type_vehicle)84    type_city = Type("city", type_object)85    type_country = Type("country", type_object)86    types = {"object": type_object, "car": type_car, "city": type_city,87             "country": type_country}88    predicate_orig = Predicate("at", [("car", types["car"]),89                                      ("dest", types["city"])])90    predicate_dest = Predicate("at", [("car", types["car"]),91                                      ("orig", types["city"])])92    predicate_in = Predicate("in", [("city", types["city"]),93                                    ("country", types["country"])])94    action_drive_car = get_action("DRIVE-CAR", [("car", [types["car"]]),95                             ("loc-orig", [types["city"]]),96                             ("loc-dest", [types["city"]])],97                             [predicate_orig], [predicate_dest],98                             [predicate_orig])99    expected = [("in", grounding._get_statics([predicate_in],100                                              [action_drive_car]), True),101                ("dest", grounding._get_statics([predicate_dest],102                                                [action_drive_car]), False),103                ("orig", grounding._get_statics([predicate_orig],104                                                [action_drive_car]), False)]105    for pre, statics, element in expected:106        yield in_statics, pre, statics, element107def test_statics2():108    type_object = Type("object", None)109    predicate_a = Predicate("a", [])110    predicate_b = Predicate("b", [])111    the_action = get_action("the-action", [], [predicate_a], [predicate_b], [])112    statics = grounding._get_statics([predicate_a, predicate_b], [the_action])113    assert predicate_a.name in statics and predicate_b.name not in statics114def in_statics(predicate, statics, element):115    if element:116        assert predicate in statics117    else:118        assert not predicate in statics119def test_type_map1():120    """type map: maps each type to a list of objects"""121    type_object = Type("object", None)122    type_vehicle = Type("vehicle", type_object)123    type_car = Type("car", type_vehicle)124    type_truck = Type("truck", type_vehicle)125    type_city = Type("city", type_object)126    objects = {"red_car": type_car, "green_car": type_car,127               "blue_truck": type_truck, "motorbike": type_vehicle,128               "freiburg": type_city, "basel": type_city}129    type_map = grounding._create_type_map(objects)130    expected = [("red_car", type_map[type_car]),131                ("green_car", type_map[type_car]),132                ("blue_truck", type_map[type_truck]),133                ("red_car", type_map[type_vehicle]),134                ("green_car", type_map[type_vehicle]),135                ("blue_truck", type_map[type_vehicle]),136                ("motorbike", type_map[type_vehicle]),137                ("freiburg", type_map[type_city]),138                ("basel", type_map[type_city]),139                ("green_car", type_map[type_object]),140                ("motorbike", type_map[type_object]),141                ("basel", type_map[type_object])]142    for object, object_list in expected:143        yield in_object_set, object, object_list144def test_type_map2():145    type_object = Type("object", None)146    objects = {"object1": type_object}147    type_map = grounding._create_type_map(objects)148    assert "object1" in type_map[type_object]149def in_object_set(object, object_list):150    assert object in object_list151def test_collect_facts():152    op1 = Operator("op1", {"var1"}, {}, {"var3"})153    op2 = Operator("op2", {"var2"}, {"var3"}, {})154    op3 = Operator("op3", {}, {"var1"}, {"var4"})155    assert {"var1", "var2", "var3", "var4"} == grounding._collect_facts(156                                                               [op1, op2, op3])157def test_operators():158    # action with signature with 2 types159    action_drive_vehicle = get_action("DRIVE-VEHICLE",160                                      [("vehicle", [types["car"],161                                                    types["truck"]]),162                                       ("orig", [types["city"]]),163                                       ("dest", [types["city"]])],164                                      [predicate_veh_orig],165                                      [predicate_veh_dest],166                                      [predicate_veh_orig])167    # action with predicate in add & delete list168    action_add_delete = get_action("STAY", [("car", [types["car"]]),169                                            ("in", [types["city"]])],170                                   [predicate_in], [predicate_in],171                                   [predicate_in])172    # action with constant input173    action_constant = get_action("CONSTANT-ACTION",174                                 [("my_car", [types["my_car"]]),175                                  ("city", [types["city"]])],176                                 [],177                                 [Predicate("in", [("basel", [types["city"]]),178                                                   ("switzerland",179                                                    [types["country"]])])], [])180    # action with only delete effects181    action_only_delete = get_action("LEAVE",182                                    [("car", [types["car"]]),183                                     ("in", [types["city"]])],184                                    [predicate_in], [], [predicate_in])185    # action with delete effect which does not occur in precondition186    action_delete = get_action("DELETE", [("car", [types["car"]]),187                                          ("orig", [types["city"]]),188                                          ("dest", [types["city"]])],189                               [], [predicate_car_orig], [predicate_car_dest])190    type_map = grounding._create_type_map(objects)191    grounded_initial_state = grounding._get_partial_state(initial_state)192    grounded_drive_car = list(193        grounding._ground_action(action_drive_car, type_map, [],194                                 grounded_initial_state))195    grounded_drive_vehicle = list(196        grounding._ground_action(action_drive_vehicle, type_map, [],197                                 grounded_initial_state))198    grounded_add_delete = list(199        grounding._ground_action(action_add_delete, type_map, [],200                                 grounded_initial_state))201    grounded_only_delete = list(202        grounding._ground_action(action_only_delete, type_map, [],203                                 grounded_initial_state))204    grounded_delete = list(205        grounding._ground_action(action_delete, type_map, [],206                                 grounded_initial_state))207    domain = Domain("test_domain", types,208                    {"in": Predicate("in", [("city", types["city"]),209                                            ("country", types["country"])])},210                    {"action-constant": action_constant},211                    {"my_car": types["car"]})212    problem = Problem("test_problem", domain, objects, initial_state,213                      goal_state)214    task = grounding.ground(problem)215    grounded_constant = task.operators216    expected = [("(DRIVE-CAR red_car freiburg basel)", grounded_drive_car),217                ("(DRIVE-VEHICLE blue_truck freiburg basel)",218                 grounded_drive_vehicle),219                ("(STAY red_car freiburg)", grounded_add_delete),220                ("(LEAVE red_car freiburg)", grounded_only_delete),221                ("(DELETE red_car freiburg basel)", grounded_delete)]222    for operator, grounded_operators in expected:223        yield operator_grounded, operator, grounded_operators224def operator_grounded(operator, grounded_operators):225    grounded = False226    for op in grounded_operators:227        if(operator == op.name):228            grounded = True229    assert grounded230def test_create_operator():231    statics = grounding._get_statics(standard_domain.predicates.values(),232                                     [action_drive_car])233    initial_state = [Predicate("at", [("ford", types["car"]),234                                      ("freiburg", types["city"])])]235    operator = grounding._create_operator(236        action_drive_car,237        {"car": "ford", "dest": "berlin", "orig": "freiburg"},238        [], initial_state)239    assert operator.name == "(DRIVE-CAR ford freiburg berlin)"240    assert operator.preconditions == {'(at ford berlin)'}241    assert operator.add_effects == {'(at ford freiburg)'}242    assert operator.del_effects == {'(at ford berlin)'}243def test_get_grounded_string():244    grounded_string = "(DRIVE-CAR ford freiburg berlin)"245    assert grounding._get_grounded_string(246        "DRIVE-CAR", ["ford", "freiburg", "berlin"]) == grounded_string247def test_ground():248    """249    predicate which does not occur in any operator: "car_color"250    -> does it occurs in a variable?251    -> does it occur in an operator?252    """253    task = grounding.ground(standard_problem)254    assert not any(var.startswith("car_color") for var in task.facts)255    for operators in task.operators:256        assert not any(pre.startswith("car_color")257                       for pre in operators.preconditions)258        assert not any(add.startswith("car_color")259                       for add in operators.add_effects)260        assert not any(dee.startswith("car_color")261                       for dee in operators.del_effects)262def test_regression():263    parser = Parser('')264    def parse_problem(domain, problem):265        parser.domInput = domain266        parser.probInput = problem267        domain = parser.parse_domain(False)268        return parser.parse_problem(domain, False)269    prob_05 = """270    ;; See domain file for description of this test.271    (define (problem regression-test-05)272      (:domain regression-test)273      (:objects y - object)274      (:init)275      (:goal (the-predicate x y)))276    """277    dom_05 = """278    ;; Expected behaviour: plan of length one found279    ;; Observed behaviour (r265): plan of length zero found280    (define (domain regression-test)281      (:requirements :typing) ;; work around problem in regression test #4.282      (:predicates (the-predicate ?v1 ?v2 - object))283      (:constants x - object)284      (:action theaction285       :parameters (?x - object)286       :precondition (and)287       :effect (the-predicate x ?x)288      )289    )290    """291    prob_06 = """292    ;; See domain file for description of this test.293    (define (problem regression-test-06)294      (:domain regression-test)295      (:objects y - object)296      (:init)297      (:goal (the-predicate y y)))298    """299    dom_06 = """300    ;; Expected behaviour: planner proves that no plan exists301    ;; Observed behaviour (r265): plan of length one found302    (define (domain regression-test)303      (:requirements :typing) ;; work around problem in regression test #4.304      (:predicates (the-predicate ?v1 ?v2 - object))305      (:constants x - object)306      (:action theaction307       :parameters (?x - object)308       :precondition (and)309       :effect (the-predicate x ?x)310      )311    )312    """313    # problem / domain 07 contains a different action compared314    # to the actions of domain 5 & 6315    prob_07 = prob_06316    dom_07 = """317    (define (domain regression-test)318      (:requirements :typing) ;; work around problem in regression test #4.319      (:predicates (the-predicate ?v1 ?v2 - object))320      (:constants y - object)321      (:action theaction322       :parameters (?x - object)323       :precondition (and)324       :effect (the-predicate y ?x)325      )326    )327    """328    # action of problem / domain 8 differs only in the variable name compared329    # to the actions of problem 5 and 6: After grounding there should be no330    # difference between the grounded actions331    prob_08 = prob_05332    dom_08 = """333    (define (domain regression-test)334      (:requirements :typing) ;; work around problem in regression test #4.335      (:predicates (the-predicate ?v1 ?v2 - object))336      (:constants x - object)337      (:action theaction338       :parameters (?z - object)339       :precondition (and)340       :effect (the-predicate x ?z)341      )342    )343    """344    parsed_problem5 = parse_problem(dom_05, prob_05)345    parsed_problem6 = parse_problem(dom_06, prob_06)346    parsed_problem7 = parse_problem(dom_07, prob_07)347    parsed_problem8 = parse_problem(dom_08, prob_08)348    #coded input:349    type_object = Type("object", None)350    types = {"object": type_object}351    predicates = {"the_predicate": Predicate("the-predicate",352                                             [("v1", type_object),353                                              ("v2", type_object)])}354    constants = {"x": type_object}355    actions = {"theaction": get_action("theaction",356                                       [("?x", [type_object])], [],357                                       [Predicate("the-predicate",358                                        [("x", type_object),359                                         ("?x", type_object)])], [])}360    domain = Domain("regression-test", types, predicates, actions, constants)361    problem5 = Problem("regression-test-05", domain, {"y": type_object}, [],362                       [Predicate("the-predicate", [("x", type_object),363                                                    ("y", type_object)])])364    problem6 = Problem("regression-test-06", domain, {"y": type_object}, [],365                       [Predicate("the-predicate", [("y", type_object),366                                                    ("y", type_object)])])367    parsed_task5 = grounding.ground(parsed_problem5)368    coded_task5 = grounding.ground(problem5)369    parsed_task6 = grounding.ground(parsed_problem6)370    coded_task6 = grounding.ground(problem6)371    parsed_task7 = grounding.ground(parsed_problem7)372    parsed_task8 = grounding.ground(parsed_problem8)373    expected = [(parsed_task5.operators, coded_task5.operators, True),374                (parsed_task6.operators, coded_task6.operators, True),375                (parsed_task5.operators, coded_task6.operators, True),376                (parsed_task5.operators, parsed_task7.operators, False),377                (parsed_task5.operators, parsed_task8.operators, True)]378    for operator1, operator2, expected_result in expected:379        yield compare_operators, operator1, operator2, expected_result380def compare_operators(operators1, operators2, expected):381    def compare_operator(operator1, operator2):382        return (operator1.name == operator2.name and383                operator1.preconditions == operator2.preconditions and384                operator1.add_effects == operator2.add_effects and385                operator1.del_effects == operator2.del_effects)386    for operator1 in operators1:387        if(not(any(compare_operator(operator1, operator2)388                   for operator2 in operators2))):389            return False == expected390    return True == expected391def test_add_del_effects():392    parser = Parser('')393    def parse_problem(domain, problem):394        parser.domInput = domain395        parser.probInput = problem396        domain = parser.parse_domain(False)397        return parser.parse_problem(domain, False)398    dom_pddl = """399    (define (domain dom)400      (:requirements :typing)401      (:predicates (ok ?v - object))402      (:action theaction403       :parameters (?x - object)404       :precondition {0}405       :effect {1}406      )407    )408    """409    prob_pddl = """410    ;; See domain file for description of this test.411    (define (problem prob)412      (:domain dom)413      (:objects y - object)414      (:init)415      (:goal (ok y)))416    """417    tests = [418        # Only add effect419        ('(and)', '(ok ?x)', set(), {'(ok y)'}, set()),420        # Only delete effect421        ('(and)', '(and (not (ok ?x)))', set(), set(), {'(ok y)'}),422        # Both add and delete effect423        ('(and)', '(and (ok ?x) (not (ok ?x)))', set(), {'(ok y)'}, set()),424        # Precondition and add effect425        ('(and (ok ?x))', '(ok ?x)', {'(ok y)'}, set(), set()),426        # Precondition and delete effect427        ('(and (ok ?x))', '(and (not (ok ?x)))', {'(ok y)'}, set(),428         {'(ok y)'}),429        # Precondition and both add and delete effect430        ('(and (ok ?x))', '(and (ok ?x) (not (ok ?x)))', {'(ok y)'}, set(),431         set()),432            ]433    for pre_in, eff_in, pre_exp, add_exp, del_exp in tests:434        dom = dom_pddl.format(pre_in, eff_in)435        problem = parse_problem(dom, prob_pddl)436        domain = problem.domain437        actions = domain.actions.values()438        predicates = domain.predicates.values()439        # Objects440        objects = problem.objects441        objects.update(domain.constants)442        # Get the names of the static predicates443        statics = grounding._get_statics(predicates, actions)444        # Create a map from types to objects445        type_map = grounding._create_type_map(objects)446        # Transform initial state into a specific447        init = grounding._get_partial_state(problem.initial_state)448        # Ground actions449        operators = grounding._ground_actions(actions, type_map, statics, init)450        yield assert_equal, len(operators), 1451        op = operators[0]452        yield assert_equal, op.preconditions, pre_exp453        yield assert_equal, op.add_effects, add_exp...entities.py
Source:entities.py  
1"""Backends for Virtuoso (graph database)2The UWKGM project3:copyright: (c) 2020 Ichise Laboratory at NII & AIST4:author: Rungsiman Nararatwong5"""6import time7from socket import timeout8from typing import Any, Dict, List, Union9from uwkgm import db10def find(graph: str, uris: List[str], language: str, query_limit: Union[int, None],11         include_incomings: bool, include_outgoings: bool) -> dict:12    """Find triples of which the given entity is a subject or an object"""13    def fetch(direction: str) -> List[dict]:14        query_main = f'?{target} ?predicate <{uri}>' if direction == 'incoming' else f'<{uri}> ?predicate ?{target}'15        query_lang = f"""16                       FILTER (!isLiteral(?predicate_label) || langMatches(lang(?predicate_label), '') || langMatches(lang(?predicate_label), '{language}'))17                       FILTER (!isLiteral(?{target}) || langMatches(lang(?{target}), '') || langMatches(lang(?{target}), '{language}'))18                       FILTER (!isLiteral(?{target}_label) || langMatches(lang(?{target}_label), '') || langMatches(lang(?{target}_label), '{language}'))19                      """20        limit_filter = f'LIMIT {int(query_limit)}' if query_limit is not None else ''21        query = f"""22                 SELECT DISTINCT ?predicate ?predicate_type ?predicate_label ?{target} ?{target}_type ?{target}_label FROM <{graph}> WHERE {{23                     {query_main}24                     OPTIONAL {{ ?predicate <{'>|<'.join(catalog_labels)}> ?predicate_label }}25                     OPTIONAL {{ ?predicate <{'>|<'.join(catalog_types)}> ?predicate_type }}26                     OPTIONAL {{ ?{target} <{'>|<'.join(catalog_labels)}> ?{target}_label }}27                     OPTIONAL {{ ?{target} <{'>|<'.join(catalog_types)}> ?{target}_type }}28                     {query_lang if language is not None else ''}29                 }}30                 {limit_filter}31                """32        db.graphs.client.setQuery(query)33        return db.graphs.client.query().convert()['results']['bindings']34    def maps() -> None:35        for item in items:36            for el in ['predicate', 'predicate_type', target, f'{target}_type']:37                if el in item and item[el]['type'] == 'uri':38                    if item[el]['value'] not in lookup:39                        lookup[item[el]['value']] = {'id': len(lookup)}40    def assign() -> None:41        for item in items:42            if item[target]['type'] == 'uri':43                if element == 'subject':44                    triples.append((lookup[uri]['id'], lookup[item['predicate']['value']]['id'], lookup[item['object']['value']]['id']))45                    if item['predicate']['value'] in catalog_types:46                        if 'types' not in lookup[uri]:47                            lookup[uri]['types'] = [lookup[item['object']['value']]['id']]48                        else:49                            lookup[uri]['types'].append(lookup[item['object']['value']]['id'])50                else:51                    triples.append((lookup[item['subject']['value']]['id'], lookup[item['predicate']['value']]['id'], lookup[uri]['id']))52            else:53                if 'xml:lang' in item[target]:54                    literal = {'value': item[target]['value'], 'language': item[target]['xml:lang']}55                else:56                    literal = {'value': item[target]['value']}57                if 'literals' not in lookup[uri]:58                    lookup[uri]['literals'] = {lookup[item['predicate']['value']]['id']: literal}59                else:60                    lookup[uri]['literals'][lookup[item['predicate']['value']]['id']] = literal61                if item['predicate']['value'] in catalog_labels:62                    lookup[uri]['label'] = item[target]['value']63            if 'predicate_label' in item:64                lookup[item['predicate']['value']]['label'] = item['predicate_label']['value']65            if f'{target}_label' in item:66                lookup[item[target]['value']]['label'] = item[f'{target}_label']['value']67            if 'predicate_type' in item:68                if 'types' not in lookup[item['predicate']['value']]:69                    lookup[item['predicate']['value']]['types'] = [lookup[item['predicate_type']['value']]['id']]70                elif lookup[item['predicate_type']['value']]['id'] not in lookup[item['predicate']['value']]['types']:71                    lookup[item['predicate']['value']]['types'].append(lookup[item['predicate_type']['value']]['id'])72            if f'{target}_type' in item:73                if 'types' not in lookup[item[target]['value']]:74                    lookup[item[target]['value']]['types'] = [lookup[item[f'{target}_type']['value']]['id']]75                elif lookup[item[f'{target}_type']['value']]['id'] not in lookup[item[target]['value']]['types']:76                    lookup[item[target]['value']]['types'].append(lookup[item[f'{target}_type']['value']]['id'])77    time_start = time.process_time()78    catalog = db.docs.catalog(graph)79    catalog_labels = [lb['uri'] for lb in catalog['predicates']['labels']]80    catalog_types = [ty['uri'] for ty in catalog['predicates']['types']]81    lookup = dict()82    triples = list()83    for i, uri in enumerate(uris):84        lookup[uri] = {'id': i}85    for uri in uris:86        if include_incomings:87            element, target = 'object', 'subject'88            items = fetch('incoming')89            maps()90            assign()91        if include_outgoings:92            element, target = 'subject', 'object'93            items = fetch('outgoing')94            maps()95            assign()96    time_end = time.process_time()97    return {'lookup': lookup, 'triples': triples, 'duration': time_end - time_start}98def candidates(graph: str, search: str, limit: Union[int, None], query_limit: [int, None], label_entities: List[str],99               type_entities: List[str], have_types_only: bool, perfect_match_only: bool) -> Dict[str, List[Dict[str, Union[str, List[str]]]]]:100    """Find candidates of entities given an entity or a partial/full label"""101    def fetch_from_label(perfect_match: bool):102        if perfect_match:103            terms = ['"%s"' % term for term in search.strip().split(' ')]104        else:105            # Each word in the search term needs at least four characters to be included in partial search106            # The asterisk (*) indicates partial search107            terms = ['"%s*"' % term.strip(',') if len(term) > 3 else '"%s"' % term108                     for term in search.strip().split(' ')]109        # Search terms are joined by 'AND' operators110        query = 'SELECT DISTINCT ?entity, ?label, ?type FROM <%s> WHERE { ' % graph111        partial_queries = []112        for label_entity in label_entities:113            labeled_query = '{ ?entity <%s> ?label . ' % label_entity114            labeled_query += '?label bif:contains \'%s\' ' % ' AND '.join(terms)115            if have_types_only:116                for type_entity in type_entities:117                    typed_query = labeled_query + '. ?entity <%s> ?type } ' % type_entity118                    partial_queries.append(typed_query)119            else:120                partial_queries.append('%s }' % labeled_query)121        122        query += ' UNION '.join(partial_queries)123        124        if not have_types_only:125            for type_entity in type_entities:126                query += 'OPTIONAL { ?entity <%s> ?type } ' % type_entity127        if perfect_match:128            query += 'FILTER (lcase(str(?label)) = "%s") ' % search.lower().strip()129        130        query += '} %s' % limit_filter131        db.graphs.client.setQuery(query)132        try:133            return db.graphs.client.query().convert()['results']['bindings']134        except timeout:135            return []136    def fetch_from_uri():137        query = 'SELECT DISTINCT ?label, ?type FROM <%s> WHERE { ' % graph138        partial_queries = []139        for label_entity in label_entities:140            labeled_query = '{ <%s> <%s> ?label ' % (search, label_entity)141            if have_types_only:142                for type_entity in type_entities:143                    typed_query = labeled_query + '. <%s> <%s> ?type } ' % (search, type_entity)144                    partial_queries.append(typed_query)145            else:146                partial_queries.append('%s }' % labeled_query)147        query += ' UNION '.join(partial_queries)148        if not have_types_only:149            for type_entity in type_entities:150                query += 'OPTIONAL { <%s> <%s> ?type } ' % (search, type_entity)151        query += '} %s' % limit_filter152        db.graphs.client.setQuery(query)153        try:154            return db.graphs.client.query().convert()['results']['bindings']155        except timeout:156            return []157    def filter_types(entries: list) -> list:158        filtered = []159        for entry in entries:160            types = [tag.lower() for tag in entry[1]['types'] if isinstance(tag, str)]161            if len(pos_type_tags):162                if all(any(pos.lower() in tag for tag in types) for pos in pos_type_tags):163                    if len(neg_type_tags):164                        if all(all(neg.lower() not in tag for tag in types) for neg in neg_type_tags):165                            filtered.append(entry)166                    else:167                        filtered.append(entry)168            elif len(neg_type_tags):169                if all(all(neg.lower() not in tag for tag in types) for neg in neg_type_tags):170                    filtered.append(entry)171            else:172                filtered.append(entry)173        return filtered174    limit_filter = "LIMIT %d" % query_limit if query_limit is not None else ''175    matches = dict()176    terms = search.split(' ')177    pos_type_tags = []178    neg_type_tags = []179    filtered_terms = []180    for term in terms:181        if term.startswith('+type:'):182            pos_type_tags += term.split(':')[1:]183        elif term.startswith('-type:'):184            neg_type_tags += term.split(':')[1:]185        else:186            filtered_terms.append(term)187    search = ' '.join(filtered_terms)188    if len(search) == 0:189        return {'exact_matches': [], 'first_matches': [], 'partial_matches': []}190    if search.startswith('http://') or search.startswith('https://'):191        response = fetch_from_uri()192    else:193        # Try searching for perfect matches first since perfect-match search is the fastest due to indexing194        response = fetch_from_label(True)195        # If not perfect matches found, try partial matches196        if len(response) == 0 and not perfect_match_only:197            response = fetch_from_label(False)198    # Convert the response into a clean dictionary-based output199    for item in response:200        uri = search if search.startswith('http://') or search.startswith('https://') else item['entity']['value']201        entity_label, entity_types = item['label']['value'], item['type']['value'] if 'type' in item else []202        if uri not in matches:203            matches[uri] = {'label': entity_label, 'types': [entity_types]}204        else:205            matches[uri]['types'].append(entity_types)206    results = {'exact_matches': [], 'first_matches': [], 'partial_matches': []}207    # Categorizes matches in to 'exact', 'first', and 'partial' lists208    for uri, data in matches.items():209        norm_search = search.lower()210        entity_label = data['label'].lower()211        if norm_search == entity_label:212            results['exact_matches'].append((len(entity_label), {'uri': uri, **data}))213        elif entity_label.startswith(norm_search):214            results['first_matches'].append((len(entity_label), {'uri': uri, **data}))215        else:216            results['partial_matches'].append((len(entity_label), {'uri': uri, **data}))217    # Return matches with shorter labels first218    results['exact_matches'].sort(key=lambda x: x[0])219    results['first_matches'].sort(key=lambda x: x[0])220    results['partial_matches'].sort(key=lambda x: x[0])221    results['exact_matches'] = filter_types(results['exact_matches'])222    results['first_matches'] = filter_types(results['first_matches'])223    results['partial_matches'] = filter_types(results['partial_matches'])224    if limit is not None:225        return {'exact_matches': [entity[1] for entity in results['exact_matches'][:limit]],226                'first_matches': [entity[1] for entity in results['first_matches'][:limit - len(results['first_matches'])]],227                'partial_matches': [entity[1] for entity in228                                    results['partial_matches'][:limit - len(results['first_matches']) - len(results['partial_matches'])]]}229    else:230        return {'exact_matches': [entity[1] for entity in results['exact_matches']],231                'first_matches': [entity[1] for entity in results['first_matches']],232                'partial_matches': [entity[1] for entity in results['partial_matches']]}233def entity(graph: str, subject: str, label_entities: List[str], type_entities: str):234    """Find objects or an attribute given subject and predicate"""235    query = """SELECT DISTINCT ?predicate ?predicate_label ?predicate_type ?object ?object_label ?object_type 236            FROM <%s> WHERE { <%s> ?predicate ?object . """ % (graph, subject)237    for label_entity in label_entities:238        query += 'OPTIONAL { ?predicate <%s> ?predicate_label . ?object <%s> ?object_label } . ' \239                 % (label_entity, label_entity)240    for type_entity in type_entities:241        query += 'OPTIONAL { ?predicate <%s> ?predicate_type . ?object <%s> ?object_type } . ' \242                 % (type_entity, type_entity)243    query += '} '244    db.graphs.client.setQuery(query)245    response = db.graphs.client.query().convert()['results']['bindings']246    results = {}247    for item in response:248        predicate_value = item['predicate']['value']249        object_value = item['object']['value']250        if predicate_value not in results:251            results[predicate_value] = {}252        predicate = results[predicate_value]253        if 'predicate_label' in item:254            label = {'value': item['predicate_label']['value']}255            if 'xml:lang' in item['predicate_label']:256                label['language'] = item['predicate_label']['xml:lang']257            if 'labels' not in predicate:258                predicate['labels'] = [label]259            elif label not in predicate['labels']:260                predicate['labels'].append(label)261        if 'predicate_type' in item:262            typ = item['predicate_type']['value']263            if 'types' not in predicate:264                predicate['types'] = [typ]265            elif typ not in predicate['types']:266                predicate['types'].append(typ)267        if item['object']['type'] == 'uri':268            if 'objects' not in predicate:269                predicate['objects'] = {object_value: {}}270            elif item['object']['value'] not in predicate['objects']:271                predicate['objects'][object_value] = {}272            obj = predicate['objects'][object_value]273            if 'object_label' in item:274                label = {'value': item['object_label']['value']}275                if 'xml:lang' in item['object_label']:276                    label['language'] = item['object_label']['xml:lang']277                if 'labels' not in obj:278                    obj['labels'] = [label]279                elif label not in obj['labels']:280                    obj['labels'].append(label)281            if 'object_type' in item:282                typ = item['object_type']['value']283                if 'types' not in obj:284                    obj['types'] = [typ]285                elif typ not in obj['types']:286                    obj['types'].append(typ)287        elif item['object']['type'] in ('literal', 'typed-literal'):288            attribute = {'value': item['object']['value']}289            if 'xml:lang' in item['object']:290                attribute['language'] = item['object']['xml:lang']291            if 'datatype' in item['object']:292                attribute['datatype'] = item['object']['datatype']293            if 'attributes' not in predicate:294                predicate['attributes'] = [attribute]295            elif attribute not in predicate['attributes']:296                predicate['attributes'].append(attribute)...test_filter.py
Source:test_filter.py  
...312        predicate.setLogLevelForNamespace("twext.web2", LogLevel.debug)313        predicate.setLogLevelForNamespace("twext.web2.dav", LogLevel.warn)314        def checkPredicate(namespace, level, expectedResult):315            event = dict(log_namespace=namespace, log_level=level)316            self.assertEqual(expectedResult, predicate(event))317        checkPredicate("", LogLevel.debug, PredicateResult.no)318        checkPredicate("", LogLevel.error, PredicateResult.maybe)319        checkPredicate("twext.web2", LogLevel.debug, PredicateResult.maybe)320        checkPredicate("twext.web2", LogLevel.error, PredicateResult.maybe)321        checkPredicate("twext.web2.dav", LogLevel.debug, PredicateResult.no)322        checkPredicate("twext.web2.dav", LogLevel.error, PredicateResult.maybe)323        checkPredicate(None, LogLevel.critical, PredicateResult.no)...exclusions.py
Source:exclusions.py  
...11import contextlib12import inspect13class skip_if(object):14    def __init__(self, predicate, reason=None):15        self.predicate = _as_predicate(predicate)16        self.reason = reason17    _fails_on = None18    def __add__(self, other):19        def decorate(fn):20            return other(self(fn))21        return decorate22    @property23    def enabled(self):24        return self.enabled_for_config(config._current)25    def enabled_for_config(self, config):26        return not self.predicate(config)27    @contextlib.contextmanager28    def fail_if(self, name='block'):29        try:30            yield31        except Exception as ex:32            if self.predicate(config._current):33                print(("%s failed as expected (%s): %s " % (34                    name, self.predicate, str(ex))))35            else:36                raise37        else:38            if self.predicate(config._current):39                raise AssertionError(40                    "Unexpected success for '%s' (%s)" %41                    (name, self.predicate))42    def __call__(self, fn):43        @decorator44        def decorate(fn, *args, **kw):45            if self.predicate(config._current):46                if self.reason:47                    msg = "'%s' : %s" % (48                            fn.__name__,49                            self.reason50                        )51                else:52                    msg = "'%s': %s" % (53                            fn.__name__, self.predicate54                        )55                raise SkipTest(msg)56            else:57                if self._fails_on:58                    with self._fails_on.fail_if(name=fn.__name__):59                        return fn(*args, **kw)60                else:61                    return fn(*args, **kw)62        return decorate(fn)63    def fails_on(self, other, reason=None):64        self._fails_on = skip_if(other, reason)65        return self66    def fails_on_everything_except(self, *dbs):67        self._fails_on = skip_if(fails_on_everything_except(*dbs))68        return self69class fails_if(skip_if):70    def __call__(self, fn):71        @decorator72        def decorate(fn, *args, **kw):73            with self.fail_if(name=fn.__name__):74                return fn(*args, **kw)75        return decorate(fn)76def only_if(predicate, reason=None):77    predicate = _as_predicate(predicate)78    return skip_if(NotPredicate(predicate), reason)79def succeeds_if(predicate, reason=None):80    predicate = _as_predicate(predicate)81    return fails_if(NotPredicate(predicate), reason)82class Predicate(object):83    @classmethod84    def as_predicate(cls, predicate):85        if isinstance(predicate, skip_if):86            return NotPredicate(predicate.predicate)87        elif isinstance(predicate, Predicate):88            return predicate89        elif isinstance(predicate, list):90            return OrPredicate([cls.as_predicate(pred) for pred in predicate])91        elif isinstance(predicate, tuple):92            return SpecPredicate(*predicate)93        elif isinstance(predicate, util.string_types):94            tokens = predicate.split(" ", 2)95            op = spec = None96            db = tokens.pop(0)97            if tokens:98                op = tokens.pop(0)99            if tokens:100                spec = tuple(int(d) for d in tokens.pop(0).split("."))101            return SpecPredicate(db, op, spec)102        elif util.callable(predicate):103            return LambdaPredicate(predicate)104        else:105            assert False, "unknown predicate type: %s" % predicate106class BooleanPredicate(Predicate):107    def __init__(self, value, description=None):108        self.value = value109        self.description = description or "boolean %s" % value110    def __call__(self, config):111        return self.value112    def _as_string(self, negate=False):113        if negate:114            return "not " + self.description115        else:116            return self.description117    def __str__(self):118        return self._as_string()119class SpecPredicate(Predicate):120    def __init__(self, db, op=None, spec=None, description=None):121        self.db = db122        self.op = op123        self.spec = spec124        self.description = description125    _ops = {126            '<': operator.lt,127             '>': operator.gt,128             '==': operator.eq,129             '!=': operator.ne,130             '<=': operator.le,131             '>=': operator.ge,132             'in': operator.contains,133             'between': lambda val, pair: val >= pair[0] and val <= pair[1],134             }135    def __call__(self, config):136        engine = config.db137        if "+" in self.db:138            dialect, driver = self.db.split('+')139        else:140            dialect, driver = self.db, None141        if dialect and engine.name != dialect:142            return False143        if driver is not None and engine.driver != driver:144            return False145        if self.op is not None:146            assert driver is None, "DBAPI version specs not supported yet"147            version = _server_version(engine)148            oper = hasattr(self.op, '__call__') and self.op \149                        or self._ops[self.op]150            return oper(version, self.spec)151        else:152            return True153    def _as_string(self, negate=False):154        if self.description is not None:155            return self.description156        elif self.op is None:157            if negate:158                return "not %s" % self.db159            else:160                return "%s" % self.db161        else:162            if negate:163                return "not %s %s %s" % (164                        self.db,165                        self.op,166                        self.spec167                    )168            else:169                return "%s %s %s" % (170                        self.db,171                        self.op,172                        self.spec173                    )174    def __str__(self):175        return self._as_string()176class LambdaPredicate(Predicate):177    def __init__(self, lambda_, description=None, args=None, kw=None):178        spec = inspect.getargspec(lambda_)179        if not spec[0]:180            self.lambda_ = lambda db: lambda_()181        else:182            self.lambda_ = lambda_183        self.args = args or ()184        self.kw = kw or {}185        if description:186            self.description = description187        elif lambda_.__doc__:188            self.description = lambda_.__doc__189        else:190            self.description = "custom function"191    def __call__(self, config):192        return self.lambda_(config)193    def _as_string(self, negate=False):194        if negate:195            return "not " + self.description196        else:197            return self.description198    def __str__(self):199        return self._as_string()200class NotPredicate(Predicate):201    def __init__(self, predicate):202        self.predicate = predicate203    def __call__(self, config):204        return not self.predicate(config)205    def __str__(self):206        return self.predicate._as_string(True)207class OrPredicate(Predicate):208    def __init__(self, predicates, description=None):209        self.predicates = predicates210        self.description = description211    def __call__(self, config):212        for pred in self.predicates:213            if pred(config):214                self._str = pred215                return True216        return False217    _str = None218    def _eval_str(self, negate=False):219        if self._str is None:220            if negate:221                conjunction = " and "222            else:223                conjunction = " or "224            return conjunction.join(p._as_string(negate=negate)225                            for p in self.predicates)226        else:227            return self._str._as_string(negate=negate)228    def _negation_str(self):229        if self.description is not None:230            return "Not " + (self.description % {"spec": self._str})231        else:232            return self._eval_str(negate=True)233    def _as_string(self, negate=False):234        if negate:235            return self._negation_str()236        else:237            if self.description is not None:238                return self.description % {"spec": self._str}239            else:240                return self._eval_str()241    def __str__(self):242        return self._as_string()243_as_predicate = Predicate.as_predicate244def _is_excluded(db, op, spec):245    return SpecPredicate(db, op, spec)(config._current)246def _server_version(engine):247    """Return a server_version_info tuple."""248    # force metadata to be retrieved249    conn = engine.connect()250    version = getattr(engine.dialect, 'server_version_info', ())251    conn.close()252    return version253def db_spec(*dbs):254    return OrPredicate(255            [Predicate.as_predicate(db) for db in dbs]256        )257def open():258    return skip_if(BooleanPredicate(False, "mark as execute"))259def closed():260    return skip_if(BooleanPredicate(True, "marked as skip"))261def fails():262    return fails_if(BooleanPredicate(True, "expected to fail"))263@decorator264def future(fn, *arg):265    return fails_if(LambdaPredicate(fn), "Future feature")266def fails_on(db, reason=None):267    return fails_if(SpecPredicate(db), reason)268def fails_on_everything_except(*dbs):269    return succeeds_if(270                OrPredicate([271                    SpecPredicate(db) for db in dbs272                    ])273            )274def skip(db, reason=None):275    return skip_if(SpecPredicate(db), reason)276def only_on(dbs, reason=None):277    return only_if(278            OrPredicate([SpecPredicate(db) for db in util.to_list(dbs)])279    )280def exclude(db, op, spec, reason=None):281    return skip_if(SpecPredicate(db, op, spec), reason)282def against(config, *queries):283    assert queries, "no queries sent!"284    return OrPredicate([285                Predicate.as_predicate(query)286                for query in queries...LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
