def makeTimeLocal(origTimeStr): """ Oct 2011, examples 1.3: display sent-time relative to local timezone; must do after decode and for header size calc too; runs: formatdate(mktime_tz(parsedate_tz(there)), localtime=True) """ from email.utils import formatdate from email._parseaddr import parsedate_tz, mktime_tz if origTimeStr in [' ', '']: return origTimeStr # common case: parser fails try: timeTuple = parsedate_tz(origTimeStr) utcTimeNum = mktime_tz(timeTuple) localTimeStr = formatdate(utcTimeNum, localtime=True) return localTimeStr except: #import traceback; traceback.print_exc() #print('Local time failed:', sys.exc_info()[0], sys.exc_info()[1]) return origTimeStr # use orig date-time text if anything fails
def makeTimeLocal(origTimeStr): """ must do after decode and for header size calc too; runs: formatdate(mktime_tz(parsedate_tz(there)), localtime=True) """ from email.utils import formatdate from email._parseaddr import parsedate_tz, mktime_tz if origTimeStr in [' ', '']: return origTimeStr # common case: parser fails try: timeTuple = parsedate_tz(origTimeStr) utcTimeNum = mktime_tz(timeTuple) localTimeStr = formatdate(utcTimeNum, localtime=True) return localTimeStr except: #import traceback; traceback.print_exc() #print('Local time failed:', sys.exc_info()[0], sys.exc_info()[1]) return origTimeStr # use orig date-time text if anything fails
def parse_Message(self, message): headers = {} if message.get('payload') is None: Dev.pprint("no payload for message: {0}".format(message)) return {} for item in message['payload']['headers']: headers[item['name']] = item['value'] tt = parsedate_tz(headers['Date']) timestamp = mktime_tz(tt) result = { 'subject': headers['Subject'], 'date': datetime.datetime.fromtimestamp(timestamp), 'date_raw': headers['Date'], 'from': headers['From'], 'id': message['id'], 'labels': message['labelIds'], 'threadId': message['threadId'], 'snippet': message['snippet'], 'size': message['sizeEstimate'], # 'headers' : headers, #'raw' : message } if message['payload']['body'].get('data'): result['body'] = base64.urlsafe_b64decode(message['payload'].get( 'body').get('data').encode('ASCII')).decode() #result['body'] = base64.decodebytes(message['payload']['body']['data'].encode()).decode() else: if message['payload'].get('parts'): for part in message['payload'].get('parts'): if part.get('body').get('data'): result['body'] = base64.urlsafe_b64decode( part.get('body').get('data').encode( 'ASCII')).decode() return result
def to_local_time(self, tweet_timestamp): """Convert rfc 5322 -like time string into a local time string in rfc 3339 -like format. """ timestamp = mktime_tz(parsedate_tz(tweet_timestamp)) return datetime.fromtimestamp(timestamp)