34 from functools
import partial
42 call_service_msg_fields = [(
True,
"service", string_types),
43 (
False,
"fragment_size", (int, type(
None))),
44 (
False,
"compression", string_types)]
50 Capability.__init__(self, protocol)
53 protocol.register_operation(
"call_service", self.
call_service)
57 cid = message.get(
"id",
None)
63 service = message[
"service"]
64 fragment_size = message.get(
"fragment_size",
None)
65 compression = message.get(
"compression",
"none")
66 args = message.get(
"args", [])
68 if CallService.services_glob
is not None and CallService.services_glob:
69 self.
protocol.log(
"debug",
"Service security glob enabled, checking service: " + service)
71 for glob
in CallService.services_glob:
72 if (fnmatch.fnmatch(service, glob)):
73 self.
protocol.log(
"debug",
"Found match with glob " + glob +
", continuing service call...")
77 self.
protocol.log(
"warn",
"No match found for service, cancelling service call for: " + service)
80 self.
protocol.log(
"debug",
"No service security glob, not checking service call.")
86 s_cb = partial(self.
_success, cid, service, fragment_size, compression)
87 e_cb = partial(self.
_failure, cid, service)
92 def _success(self, cid, service, fragment_size, compression, message):
94 "op":
"service_response",
100 outgoing_message[
"id"] = cid
102 self.
protocol.send(outgoing_message)
105 self.
protocol.log(
"error",
"call_service %s: %s" %
106 (type(exc).__name__, str(exc)), cid)
109 "op":
"service_response",
115 outgoing_message[
"id"] = cid
116 self.
protocol.send(outgoing_message)
121 return service[:service.find(
'#')]
129 return service[service.find(
'#') + 1:]