Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _set_item_elem(self, item_model, field_path, value):
setitemfield = create_element('t:SetItemField')
set_xml_value(setitemfield, field_path, version=self.account.version)
folderitem = create_element(item_model.request_tag())
field_elem = field_path.field.to_xml(value, version=self.account.version)
set_xml_value(folderitem, field_elem, version=self.account.version)
setitemfield.append(folderitem)
return setitemfield
def wrap(content, version, account=None):
"""
Generate the necessary boilerplate XML for a raw SOAP request. The XML is specific to the server version.
ExchangeImpersonation allows to act as the user we want to impersonate.
"""
envelope = create_element('s:Envelope', nsmap=ns_translation)
header = create_element('s:Header')
requestserverversion = create_element('t:RequestServerVersion', attrs=dict(Version=version))
header.append(requestserverversion)
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_payload(self, items):
"""Upload given items to given account
data is an iterable of tuples where the first element is a Folder
instance representing the ParentFolder that the item will be placed in
and the second element is a Data string returned from an ExportItems
call.
"""
from .properties import ParentFolderId
uploaditems = create_element('m:%s' % self.SERVICE_NAME)
itemselement = create_element('m:Items')
uploaditems.append(itemselement)
for parent_folder, data_str in items:
item = create_element('t:Item', attrs=dict(CreateAction='CreateNew'))
parentfolderid = ParentFolderId(parent_folder.id, parent_folder.changekey)
set_xml_value(item, parentfolderid, version=self.account.version)
add_xml_child(item, 't:Data', data_str)
itemselement.append(item)
return uploaditems
def _set_item_elem(self, item_model, field_path, value):
setitemfield = create_element('t:SetItemField')
set_xml_value(setitemfield, field_path, version=self.account.version)
folderitem = create_element(item_model.request_tag())
field_elem = field_path.field.to_xml(value, version=self.account.version)
set_xml_value(folderitem, field_elem, version=self.account.version)
setitemfield.append(folderitem)
return setitemfield
def get_payload(self, additional_fields, restriction, shape, depth, page_size, offset=0):
findfolder = create_element('m:%s' % self.SERVICE_NAME, attrs=dict(Traversal=depth))
foldershape = create_shape_element(
tag='m:FolderShape', shape=shape, additional_fields=additional_fields, version=self.account.version
)
findfolder.append(foldershape)
if self.account.version.build >= EXCHANGE_2010:
indexedpageviewitem = create_element(
'm:IndexedPageFolderView',
attrs=OrderedDict([
('MaxEntriesReturned', text_type(page_size)),
('Offset', text_type(offset)),
('BasePoint', 'Beginning'),
])
)
findfolder.append(indexedpageviewitem)
else:
if offset != 0:
raise ValueError('Offsets are only supported from Exchange 2010')
if restriction:
findfolder.append(restriction.to_xml(version=self.account.version))
parentfolderids = create_element('m:ParentFolderIds')
set_xml_value(parentfolderids, self.folders, version=self.account.version)
findfolder.append(parentfolderids)
def get_payload(self, items):
payload = create_element('m:%s' % self.SERVICE_NAME)
attachment_ids = create_attachment_ids_element(items=items, version=self.account.version)
payload.append(attachment_ids)
return payload
def get_payload(self, timezones, return_full_timezone_data):
payload = create_element(
'm:%s' % self.SERVICE_NAME,
attrs=dict(ReturnFullTimeZoneData='true' if return_full_timezone_data else 'false'),
)
if timezones is not None:
is_empty, timezones = peek(timezones)
if not is_empty:
tz_ids = create_element('m:Ids')
for timezone in timezones:
tz_id = set_xml_value(create_element('t:Id'), timezone.ms_id, version=self.protocol.version)
tz_ids.append(tz_id)
payload.append(tz_ids)
return payload
def _set_folder_elem(self, folder_model, field_path, value):
setfolderfield = create_element('t:SetFolderField')
set_xml_value(setfolderfield, field_path, version=self.account.version)
folder = create_element(folder_model.request_tag())
field_elem = field_path.field.to_xml(value, version=self.account.version)
set_xml_value(folder, field_elem, version=self.account.version)
setfolderfield.append(folder)
return setfolderfield
def _delete_item_elem(self, field_path):
deleteitemfield = create_element('t:DeleteItemField')
return set_xml_value(deleteitemfield, field_path, version=self.account.version)
def to_xml(self, version):
self.clean(version=version)
# WARNING: The order of addition of XML elements is VERY important. Exchange expects XML elements in a
# specific, non-documented order and will fail with meaningless errors if the order is wrong.
# Call create_element() without args, to not fill up the cache with unique attribute values.
elem = create_element(self.request_tag())
# Add attributes
for f in self.attribute_fields():
if f.is_read_only:
continue
value = getattr(self, f.name)
if value is None or (f.is_list and not value):
continue
elem.set(f.field_uri, value_to_xml_text(getattr(self, f.name)))
# Add elements and values
for f in self.supported_fields(version=version):
if f.is_read_only:
continue
value = getattr(self, f.name)
if value is None or (f.is_list and not value):