|
1 | 1 | import abc
|
2 |
| -from functools import partial |
| 2 | +from office365.runtime.http.request_options import RequestOptions |
| 3 | +from office365.runtime.client_query import ClientQuery |
3 | 4 | from office365.runtime.client_query import ReadEntityQuery
|
4 | 5 |
|
5 | 6 |
|
| 7 | + |
6 | 8 | class ClientRuntimeContext(object):
|
7 | 9 |
|
8 | 10 | def __init__(self, service_root_url, auth_context=None):
|
@@ -38,16 +40,53 @@ def load(self, client_object, properties_to_retrieve=None):
|
38 | 40 | qry = ReadEntityQuery(client_object, properties_to_retrieve)
|
39 | 41 | self.get_pending_request().add_query(qry)
|
40 | 42 |
|
41 |
| - def after_query_executed(self, action): |
| 43 | + def before_execute(self, action, once=True): |
| 44 | + """ |
| 45 | + Attach an event handler which is triggered before request is submitted to server |
| 46 | +
|
| 47 | + :param (RequestOptions) -> None action: |
| 48 | + :param bool once: |
| 49 | + :return: None |
42 | 50 | """
|
43 |
| - :param (office365.runtime.client_object.ClientObject or office365.runtime.client_result.ClientResult) -> None action: |
| 51 | + def _process_request(request): |
| 52 | + if once: |
| 53 | + self.get_pending_request().beforeExecute -= _process_request |
| 54 | + action(request) |
| 55 | + |
| 56 | + self.get_pending_request().beforeExecute += _process_request |
| 57 | + |
| 58 | + def after_execute(self, action, once=True): |
| 59 | + """ |
| 60 | + Attach an event handler which is triggered after request is submitted to server |
| 61 | +
|
| 62 | + :param (RequestOptions) -> None action: |
| 63 | + :param bool once: |
| 64 | + :return: None |
44 | 65 | """
|
45 | 66 |
|
46 |
| - def _process_response(qry, response): |
| 67 | + def _process_response(response): |
| 68 | + if once: |
| 69 | + self.get_pending_request().afterExecute -= _process_response |
| 70 | + action(response) |
| 71 | + self.get_pending_request().afterExecute += _process_response |
| 72 | + |
| 73 | + def after_execute_query(self, action, query=None): |
| 74 | + """ |
| 75 | + Attach an event handler (for a query) which is triggered once the request is submitted to server |
| 76 | +
|
| 77 | + :type action: (office365.runtime.client_object.ClientObject or office365.runtime.client_result.ClientResult) -> None |
| 78 | + :type query: ClientQuery or None |
| 79 | + """ |
| 80 | + if query is None: |
| 81 | + query = self.get_pending_request().last_query |
| 82 | + |
| 83 | + def _process_response(response): |
47 | 84 | current_qry = self.get_pending_request().current_query
|
48 |
| - if current_qry.id == qry.id: |
49 |
| - action(qry.return_type) |
50 |
| - self.get_pending_request().afterExecute += partial(_process_response, self.get_pending_request().last_query) |
| 85 | + if current_qry.id == query.id: |
| 86 | + self.get_pending_request().afterExecute -= _process_response |
| 87 | + action(query.return_type) |
| 88 | + |
| 89 | + self.get_pending_request().afterExecute += _process_response |
51 | 90 |
|
52 | 91 | def execute_request_direct(self, request):
|
53 | 92 | """
|
|
0 commit comments