diff --git a/MANIFEST b/MANIFEST index 3b7ebd9279582..65f111a7fa642 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,12 +1,12 @@ # file GENERATED by distutils, do NOT edit setup.cfg setup.py -O365\__init__.py -O365\attachment.py -O365\cal.py -O365\contact.py -O365\event.py -O365\group.py -O365\inbox.py -O365\message.py -O365\schedule.py +O365/__init__.py +O365/attachment.py +O365/cal.py +O365/contact.py +O365/event.py +O365/group.py +O365/inbox.py +O365/message.py +O365/schedule.py diff --git a/O365/attachment.py b/O365/attachment.py index 126a686ccbaac..633e6b5997a56 100644 --- a/O365/attachment.py +++ b/O365/attachment.py @@ -32,7 +32,7 @@ class Attachment( object ): create_url = 'https://outlook.office365.com/api/v1.0/me/messages/{0}/attachments' - def __init__(self,json=None,path=None): + def __init__(self,json=None,path=None,verify=True): ''' Creates a new attachment class, optionally from existing JSON. @@ -61,6 +61,8 @@ def __init__(self,json=None,path=None): else: self.json = {'@odata.type':'#Microsoft.OutlookServices.FileAttachment'} + self.verify = verify + def isType(self,typeString): '''Test to if the attachment is the same type as you are seeking. Do not include a period.''' return '.'+typeString.lower() in self.json['Name'].lower() @@ -99,7 +101,7 @@ def attach(self,message): data = json.dumps(self.json) - response = requests.post(self.create_url.format(mid),data,header=headers,auth=message.auth) + response = requests.post(self.create_url.format(mid),data,header=headers,auth=message.auth,verify=self.verify) log.debug('Response from server for attaching: {0}'.format(str(response))) return response diff --git a/O365/cal.py b/O365/cal.py index de54c96e10f3f..656be3372fb16 100644 --- a/O365/cal.py +++ b/O365/cal.py @@ -26,7 +26,7 @@ class Calendar( object ): events_url = 'https://outlook.office365.com/api/v1.0/me/calendars/{0}/calendarview?startDateTime={1}&endDateTime={2}&$top={3}' time_string = '%Y-%m-%dT%H:%M:%SZ' - def __init__(self, json=None, auth=None): + def __init__(self, json=None, auth=None, verify=True): ''' Wraps all the information for managing calendars. ''' @@ -39,6 +39,8 @@ def __init__(self, json=None, auth=None): self.calendarId = json['Id'] self.name = json['Name'] + self.verify = verify + def getName(self): '''Get the calendar's Name.''' return self.json['Name'] @@ -84,7 +86,7 @@ def getEvents(self,start=None,end=None, eventCount=10): end = time.strftime(self.time_string,end) # This is where the actual call to Office365 happens. - response = requests.get(self.events_url.format(self.json['Id'],start,end,eventCount) ,auth=self.auth) + response = requests.get(self.events_url.format(self.json['Id'],start,end,eventCount) ,auth=self.auth, verify=self.verify) log.info('Response from O365: %s', str(response)) #This takes that response and then parses it into individual calendar events. diff --git a/O365/contact.py b/O365/contact.py index 4188a0897f19d..122b80c375c3e 100644 --- a/O365/contact.py +++ b/O365/contact.py @@ -23,7 +23,7 @@ class Contact( object ): con_url = 'https://outlook.office365.com/api/v1.0/me/contacts/{0}' time_string = '%Y-%m-%dT%H:%M:%SZ' - def __init__(self, json=None, auth=None): + def __init__(self, json=None, auth=None, verify=True): ''' Wraps all the informaiton for managing contacts. ''' @@ -37,13 +37,15 @@ def __init__(self, json=None, auth=None): else: log.debug('there was no json, putting in some dumby info.') self.json = {'DisplayName':'Jebediah Kerman'} + + self.verify = verify def delete(self): '''delete's a contact. cause who needs that guy anyway?''' headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} log.debug('preparing to delete contact.') - response = requests.delete(self.con_url.format(str(self.contactId)),headers=headers,auth=self.auth) + response = requests.delete(self.con_url.format(str(self.contactId)),headers=headers,auth=self.auth,verify=self.verify) log.debug('response from delete attempt: {0}'.format(str(response))) return response.status_code == 204 @@ -60,7 +62,7 @@ def update(self): response = None try: - response = requests.patch(self.con_url.format(str(self.contactId)),data,headers=headers,auth=self.auth) + response = requests.patch(self.con_url.format(str(self.contactId)),data,headers=headers,auth=self.auth,verify=self.verify) log.debug('sent update request') except Exception as e: if response: @@ -85,7 +87,7 @@ def create(self): response = None try: - response = requests.post(self.con_url.format(str(self.contactId)),data,headers=headers,auth=self.auth) + response = requests.post(self.con_url.format(str(self.contactId)),data,headers=headers,auth=self.auth,verify=self.verify) log.debug('sent create request') except Exception as e: if response: diff --git a/O365/event.py b/O365/event.py index 88750cf962f6f..f3d60e7929a1a 100644 --- a/O365/event.py +++ b/O365/event.py @@ -47,7 +47,7 @@ class Event( object ): delete_url = 'https://outlook.office365.com/api/v1.0/me/events/{0}' - def __init__(self,json=None,auth=None,cal=None): + def __init__(self,json=None,auth=None,cal=None,verify=True): ''' Creates a new event wrapper. @@ -68,6 +68,8 @@ def __init__(self,json=None,auth=None,cal=None): else: self.json = {} + self.verify = verify + def create(self,calendar=None): ''' @@ -105,7 +107,7 @@ def create(self,calendar=None): response = None try: log.debug('sending post request now') - response = requests.post(self.create_url.format(calId),data,headers=headers,auth=self.auth) + response = requests.post(self.create_url.format(calId),data,headers=headers,auth=self.auth,verify=self.verify) log.debug('sent post request.') except Exception as e: if response: @@ -134,7 +136,7 @@ def update(self): response = None try: - response = requests.patch(self.update_url.format(self.json['Id']),data,headers=headers,auth=self.auth) + response = requests.patch(self.update_url.format(self.json['Id']),data,headers=headers,auth=self.auth,verify=self.verify) log.debug('sending patch request now') except Exception as e: if response: @@ -163,7 +165,7 @@ def delete(self): response = None try: log.debug('sending delete request') - response = requests.delete(self.delete_url.format(self.json['Id']),headers=headers,auth=self.auth) + response = requests.delete(self.delete_url.format(self.json['Id']),headers=headers,auth=self.auth,verify=self.verify) except Exception as e: if response: diff --git a/O365/group.py b/O365/group.py index 1f89d01cd91df..813be88c7f7e8 100644 --- a/O365/group.py +++ b/O365/group.py @@ -22,7 +22,7 @@ class Group( object ): con_folder_url = 'https://outlook.office365.com/api/v1.0/me/contactfolders/{0}/contacts' folder_url = 'https://outlook.office365.com/api/v1.0/me/contactfolders?$filter=DisplayName eq \'{0}\'' - def __init__(self, auth, folderName=None): + def __init__(self, auth, folderName=None,verify=True): ''' Creates a group class for managing all contacts associated with email+password. @@ -34,22 +34,24 @@ def __init__(self, auth, folderName=None): self.contacts = [] self.folderName = folderName + self.verify = verify + def getContacts(self): '''Begin the process of downloading contact metadata.''' if self.folderName is None: log.debug('fetching contacts.') - response = requests.get(self.con_url,auth=self.auth) + response = requests.get(self.con_url,auth=self.auth,verify=self.verify) log.info('Response from O365: %s', str(response)) else: log.debug('fetching contact folder.') - response = requests.get(self.folder_url.format(self.folderName),auth=self.auth) + response = requests.get(self.folder_url.format(self.folderName),auth=self.auth,verify=self.verify) fid = response.json()['value'][0]['Id'] log.debug('got a response of {0} and an Id of {1}'.format(response.status_code,fid)) log.debug('fetching contacts for {0}.'.format(self.folderName)) - response = requests.get(self.con_folder_url.format(fid),auth=self.auth) + response = requests.get(self.con_folder_url.format(fid),auth=self.auth,verify=self.verify) log.info('Response from O365: {0}'.format(str(response))) for contact in response.json()['value']: diff --git a/O365/inbox.py b/O365/inbox.py index e05fd54ede23a..6d0c71399b010 100644 --- a/O365/inbox.py +++ b/O365/inbox.py @@ -18,7 +18,7 @@ class Inbox( object ): #url for fetching emails. Takes a flag for whether they are read or not. inbox_url = 'https://outlook.office365.com/api/v1.0/me/messages' - def __init__(self, auth, getNow=True): + def __init__(self, auth, getNow=True, verify=True): ''' Creates a new inbox wrapper. Send email and password for authentication. @@ -35,6 +35,8 @@ def __init__(self, auth, getNow=True): self.filters = 'IsRead eq false' self.getMessages() + self.verify = verify + def getMessages(self, number = 10): ''' @@ -50,7 +52,7 @@ def getMessages(self, number = 10): ''' log.debug('fetching messages.') - response = requests.get(self.inbox_url,auth=self.auth,params={'$filter':self.filters, '$top':number}) + response = requests.get(self.inbox_url,auth=self.auth,params={'$filter':self.filters, '$top':number},verify=self.verify) log.info('Response from O365: %s', str(response)) for message in response.json()['value']: diff --git a/O365/message.py b/O365/message.py index 4a90d5ff6fb01..a0ca9314eb247 100644 --- a/O365/message.py +++ b/O365/message.py @@ -42,7 +42,7 @@ class Message(object): draft_url = 'https://outlook.office365.com/api/v1.0/me/folders/{folder_id}/messages' update_url = 'https://outlook.office365.com/api/v1.0/me/messages/{0}' - def __init__(self, json=None, auth=None): + def __init__(self, json=None, auth=None, verify=True): ''' Makes a new message wrapper for sending and recieving messages. @@ -65,6 +65,9 @@ def __init__(self, json=None, auth=None): self.attachments = [] self.reciever = None + self.verify = verify + + def fetchAttachments(self): '''kicks off the process that downloads attachments locally.''' if not self.hasAttachments: @@ -72,7 +75,7 @@ def fetchAttachments(self): return False response = requests.get(self.att_url.format( - self.json['Id']), auth=self.auth) + self.json['Id']), auth=self.auth,verify=self.verify) log.info('response from O365 for retriving message attachments: %s', str(response)) json = response.json() @@ -106,7 +109,7 @@ def sendMessage(self): return False response = requests.post( - self.send_url, data, headers=headers, auth=self.auth) + self.send_url, data, headers=headers, auth=self.auth,verify=self.verify) log.debug('response from server for sending message:' + str(response)) log.debug("respnse body: {}".format(response.text)) if response.status_code != 202: @@ -120,7 +123,7 @@ def markAsRead(self): headers = {'Content-type': 'application/json', 'Accept': 'application/json'} try: response = requests.patch(self.update_url.format( - self.json['Id']), read, headers=headers, auth=self.auth) + self.json['Id']), read, headers=headers, auth=self.auth,verify=self.verify) except: return False return True @@ -252,4 +255,4 @@ def setBodyHTML(self, val=None): except: self.json['Body'] = {} -# To the King! \ No newline at end of file +# To the King! diff --git a/O365/schedule.py b/O365/schedule.py index 522796300dbdf..585cdfdec089c 100644 --- a/O365/schedule.py +++ b/O365/schedule.py @@ -18,17 +18,19 @@ class Schedule( object ): ''' cal_url = 'https://outlook.office365.com/api/v1.0/me/calendars' - def __init__(self, auth): + def __init__(self, auth, verify=True): '''Creates a Schedule class for managing all calendars associated with email+password.''' log.debug('setting up for the schedule of the email %s',auth[0]) self.auth = auth self.calendars = [] + self.verify = verify + def getCalendars(self): '''Begin the process of downloading calendar metadata.''' log.debug('fetching calendars.') - response = requests.get(self.cal_url,auth=self.auth) + response = requests.get(self.cal_url,auth=self.auth,verify=self.verify) log.info('Response from O365: %s', str(response)) for calendar in response.json()['value']: diff --git a/setup.py b/setup.py index f6833587c9676..1ef58af4cc505 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ https://github.com/Narcolapser/python-o365''' setup(name='O365', - version='0.9.5', + version='0.9.6', description='Python library for working with Microsoft Office 365', long_description=long_desc, author='Toben Archer',