Add simple parse_delay() method

The XEP is pretty strict on Delay tags so we can make a simple
method.
This commit is contained in:
Philipp Hörist 2017-07-24 02:14:25 +02:00
parent 06d890eea7
commit 89367a83ec
1 changed files with 34 additions and 4 deletions

View File

@ -43,11 +43,13 @@ import shlex
from common import caps_cache
import socket
import time
import datetime
from datetime import datetime, timedelta
from encodings.punycode import punycode_encode
from string import Template
import nbxmpp
from common.i18n import Q_
from common.i18n import ngettext
@ -589,16 +591,45 @@ def datetime_tuple(timestamp):
tim = time.strptime(date + 'T' + tim, '%Y%m%dT%H:%M:%S')
if zone:
zone = zone.replace(':', '')
tim = datetime.datetime.fromtimestamp(time.mktime(tim))
tim = datetime.fromtimestamp(time.mktime(tim))
if len(zone) > 2:
zone = time.strptime(zone, '%H%M')
else:
zone = time.strptime(zone, '%H')
zone = datetime.timedelta(hours=zone.tm_hour, minutes=zone.tm_min)
zone = timedelta(hours=zone.tm_hour, minutes=zone.tm_min)
tim += zone * sign
tim = tim.timetuple()
return tim
def parse_delay(timestamp):
'''
Parse a timestamp
https://xmpp.org/extensions/xep-0203.html
Note: Not all delay tags should be parsed with this method
see https://xmpp.org/extensions/xep-0082.html for more information
:param timestamp: a XEP-0203 fomated timestring string or a delay Node
Examples:
'2017-11-05T01:41:20Z'
'2017-11-05T01:41:20.123Z'
return epoch UTC timestamp
'''
if isinstance(timestamp, nbxmpp.protocol.Node):
timestamp = timestamp.getAttr('stamp')
timestamp += '+0000'
try:
datetime_ = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%SZ%z')
except ValueError:
try:
datetime_ = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%fZ%z')
except ValueError:
log.error('Could not parse delay timestamp: %s', timestamp)
raise
return datetime_.timestamp()
from common import gajim
if gajim.HAVE_PYCURL:
import pycurl
@ -1280,7 +1311,6 @@ def prepare_and_validate_gpg_keyID(account, jid, keyID):
return keyID
def update_optional_features(account = None):
import nbxmpp
if account:
accounts = [account]
else: