Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _get_soap_payload(cls, response, **parse_opts):
root = to_xml(response.iter_content())
body = root.find('{%s}Body' % SOAPNS)
if body is None:
raise MalformedResponseError('No Body element in SOAP response')
response = body.find(cls._response_tag())
if response is None:
fault = body.find('{%s}Fault' % SOAPNS)
if fault is None:
raise SOAPError('Unknown SOAP response: %s' % xml_to_str(body))
cls._raise_soap_errors(fault=fault) # Will throw SOAPError or custom EWS error
response_messages = response.find(cls._response_messages_tag())
if response_messages is None:
# Result isn't delivered in a list of FooResponseMessages, but directly in the FooResponse. Consumers expect
# a list, so return a list
return [response]
return response_messages.findall(cls._response_message_tag())
if account:
if account.access_type == IMPERSONATION:
exchangeimpersonation = create_element('t:ExchangeImpersonation')
connectingsid = create_element('t:ConnectingSID')
add_xml_child(connectingsid, 't:PrimarySmtpAddress', account.primary_smtp_address)
exchangeimpersonation.append(connectingsid)
header.append(exchangeimpersonation)
timezonecontext = create_element('t:TimeZoneContext')
timezonedefinition = create_element('t:TimeZoneDefinition', attrs=dict(Id=account.default_timezone.ms_id))
timezonecontext.append(timezonedefinition)
header.append(timezonecontext)
envelope.append(header)
body = create_element('s:Body')
body.append(content)
envelope.append(body)
return xml_to_str(envelope, encoding=DEFAULT_ENCODING, xml_declaration=True)
def _get_soap_messages(cls, body, **parse_opts):
response = body.find(cls._response_tag())
if response is None:
fault = body.find('{%s}Fault' % SOAPNS)
if fault is None:
raise SOAPError('Unknown SOAP response: %s' % xml_to_str(body))
cls._raise_soap_errors(fault=fault) # Will throw SOAPError or custom EWS error
response_messages = response.find(cls._response_messages_tag())
if response_messages is None:
# Result isn't delivered in a list of FooResponseMessages, but directly in the FooResponse. Consumers expect
# a list, so return a list
return [response]
return response_messages.findall(cls._response_message_tag())
try:
response = self._get_response_xml(payload=payload_func(**kwargs))
except ErrorServerBusy as e:
self._handle_backoff(e)
continue
# Collect a tuple of (rootfolder, total_items) tuples
parsed_pages = [self._get_page(message) for message in response]
if len(parsed_pages) != 1:
# We can only query one folder, so there should only be one element in response
raise MalformedResponseError("Expected single item in 'response', got %s" % len(parsed_pages))
rootfolder, total_items = parsed_pages[0]
if rootfolder is not None:
container = rootfolder.find(self.element_container_name)
if container is None:
raise MalformedResponseError('No %s elements in ResponseMessage (%s)' % (
self.element_container_name, xml_to_str(rootfolder)))
for elem in self._get_elements_in_container(container=container):
item_count += 1
yield elem
if max_items and item_count >= max_items:
log.debug("'max_items' count reached")
break
if total_items <= 0 or item_count >= total_items:
log.debug('Got all items in view')
break
def _get_exception(cls, code, text, msg_xml):
if not code:
return TransportError('Empty ResponseCode in ResponseMessage (MessageText: %s, MessageXml: %s)' % (
text, msg_xml))
if msg_xml is not None:
# If this is an ErrorInvalidPropertyRequest error, the xml may contain a specific FieldURI
for tag_name in ('FieldURI', 'IndexedFieldURI', 'ExtendedFieldURI', 'ExceptionFieldURI'):
field_uri_elem = msg_xml.find('{%s}%s' % (TNS, tag_name))
if field_uri_elem is not None:
text += ' (field: %s)' % xml_to_str(field_uri_elem)
try:
# Raise the error corresponding to the ResponseCode
return vars(errors)[code](text)
except KeyError:
# Should not happen
return TransportError('Unknown ResponseCode in ResponseMessage: %s (MessageText: %s, MessageXml: %s)' % (
code, text, msg_xml))
if container is None:
raise MalformedResponseError('No %s elements in ResponseMessage (%s)' % (name, xml_to_str(message)))
return container
if response_code == 'NoError':
return True
# Raise any non-acceptable errors in the container, or return the container or the acceptable exception instance
if response_class == 'Warning':
try:
raise self._get_exception(code=response_code, text=msg_text, msg_xml=msg_xml)
except self.WARNINGS_TO_CATCH_IN_RESPONSE as e:
return e
except self.WARNINGS_TO_IGNORE_IN_RESPONSE as e:
log.warning(str(e))
container = message.find(name)
if container is None:
raise MalformedResponseError('No %s elements in ResponseMessage (%s)' % (name, xml_to_str(message)))
return container
# rspclass == 'Error', or 'Success' and not 'NoError'
try:
raise self._get_exception(code=response_code, text=msg_text, msg_xml=msg_xml)
except self.ERRORS_TO_CATCH_IN_RESPONSE as e:
return e
def _get_payload(email):
# Builds a full Autodiscover XML request
payload = create_element('Autodiscover', attrs=dict(xmlns=REQUEST_NS))
request = create_element('Request')
add_xml_child(request, 'EMailAddress', email)
add_xml_child(request, 'AcceptableResponseSchema', RESPONSE_NS)
payload.append(request)
return xml_to_str(payload, encoding=DEFAULT_ENCODING, xml_declaration=True)
if container is None:
raise MalformedResponseError('No %s elements in ResponseMessage (%s)' % (name, xml_to_str(message)))
return container
if response_code == 'NoError':
return True
# Raise any non-acceptable errors in the container, or return the container or the acceptable exception instance
if response_class == 'Warning':
try:
raise self._get_exception(code=response_code, text=msg_text, msg_xml=msg_xml)
except self.WARNINGS_TO_CATCH_IN_RESPONSE as e:
return e
except self.WARNINGS_TO_IGNORE_IN_RESPONSE as e:
log.warning(str(e))
container = message.find(name)
if container is None:
raise MalformedResponseError('No %s elements in ResponseMessage (%s)' % (name, xml_to_str(message)))
return container
# rspclass == 'Error', or 'Success' and not 'NoError'
try:
raise self._get_exception(code=response_code, text=msg_text, msg_xml=msg_xml)
except self.ERRORS_TO_CATCH_IN_RESPONSE as e:
return e