Skip to content

EWSWrapper provides wrapper python functions for easy usage of Microsoft Exchange Web Services (EWS)

License

Notifications You must be signed in to change notification settings

dougzor/EWSWrapper_py

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

'''
/* EWSWrapper_py README file
 * ====================================================
 * @author Michal Korzeniowski <mko_san@lafiel.net>
 * @version 0.2
 * @date 04-2012
 * @website http://ewswrapper.lafiel.net/
 * ==================================================*/
'''

 EWSWrapper provides wrapper functions for easy usage of 
 Microsoft Exchange Web Services. EWSWrapper utilzes some 
 code written by Erik Cederstrand <erik@cederstrand.dk>
 
 Currently EWSWrapper provides following functionality:
 - Operations on Calendar Events: 
	- add, 
	- update, 
	- delete, 
	- list
	- synch
 - Operations on Tasks:
 	- add,
	- update, 
	- delete, 
	- list
- Operations of Folders:
	- list
	- synch

Documentaion can be found @ http://ewswrapper.lafiel.net/ 

Please see test.py for example usages of EWSWrapper.


Note:
For suds to work with EWS you may need to patch file caching system in SUDS.
Big thanks go to Sean DiZazzo <half.italian@gmail.com> for providing the 
necessary changes:

--- suds/cache.py	2011-05-31 09:57:26.000000000 -0700
***************
*** 191,197 ****
          try:
              fn = self.__fn(id)
              f = self.open(fn, 'w')
!             f.write(bfr)
              f.close()
              return bfr
          except:
--- 191,197 ----
          try:
              fn = self.__fn(id)
              f = self.open(fn, 'w')
!             f.write(str(bfr))          # Cast the bfr object to a string
              f.close()
              return bfr
          except:

--- suds/reader.py	2011-05-31 09:57:26.000000000 -0700
***************
*** 78,83 ****
--- 78,86 ----
          if d is None:
              d = self.download(url)
              cache.put(id, d)
+         else:                                # add these three lines.
+             sax = Parser()
+             d = sax.parse(string=d)
          self.plugins.document.parsed(url=url, document=d.root())
          return d
      
***************


Another patch needed for SUDS has to do with UTF8 encoding. If soap is 
returning proper UTF8 suds will most likely fail, so here’s another fix 
that we came up with after some hours of debbuging:

*** parser.py   2011-11-08 11:44:35.951341300 +0100
***************
*** 132,138 ****
              return handler.nodes[0]
          if string is not None:
              source = InputSource(None)
!             source.setByteStream(StringIO(string.encode('utf8')))
              #set the encoding if known
              pos = string.find('encoding="')
              if(pos>0):
--- 132,141 ----
              return handler.nodes[0]
          if string is not None:
              source = InputSource(None)
!             try:
!                 source.setByteStream(StringIO(string.encode(‘utf8’)))
!             except UnicodeDecodeError:
!                 source.setByteStream(StringIO(string))
              #set the encoding if known
              pos = string.find('encoding="')
              if(pos>0):
	      

Here's yet another fix for suds, this time when you are getting wring DST 
offset. MSEx will return dates in UTC, and while SUDS will use your 
local timezone on date conversion it WON'T respect DST offset. Here's a
fix for that pesky problem:

***\suds\sax\date.py 2011-10-04 07:31:39.000000000 +0200
***************
*** 302,313 ****
--- 302,316 ----
          """
          Adjust for TZ offset.
          """
          if not hasattr(self, 'offset'):
              return
          delta = self.tz.adjustment(self.offset)
+         #check for DST
+         ltime = time.localtime(int(time.mktime(self.datetime.timetuple())))
+         delta += dt.timedelta(hours=ltime.tm_isdst)
          try:
              d = ( self.datetime + delta )
              self.datetime = d
              self.date = d.date()
              self.time = d.time()
          except OverflowError:

About

EWSWrapper provides wrapper python functions for easy usage of Microsoft Exchange Web Services (EWS)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%