Merge branch 'master' of https://lab.louiz.org/poezio/slixmpp
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
# Slixmpp: The Slick XMPP Library
|
||||
# Copyright (C) 2010 Nathanael C. Fritz
|
||||
# This file is part of Slixmpp.
|
||||
@@ -93,6 +92,7 @@ __all__ = [
|
||||
'xep_0335', # JSON Containers
|
||||
'xep_0352', # Client State Indication
|
||||
'xep_0353', # Jingle Message Initiation
|
||||
'xep_0356', # Privileged entity
|
||||
'xep_0359', # Unique and Stable Stanza IDs
|
||||
'xep_0363', # HTTP File Upload
|
||||
'xep_0369', # MIX-CORE
|
||||
|
||||
@@ -493,6 +493,8 @@ class XEP_0045(BasePlugin):
|
||||
"""
|
||||
if affiliation not in AFFILIATIONS:
|
||||
raise ValueError('%s is not a valid affiliation' % affiliation)
|
||||
if affiliation == 'outcast' and not jid:
|
||||
raise ValueError('Outcast affiliation requires a using a jid')
|
||||
if not any((jid, nick)):
|
||||
raise ValueError('One of jid or nick must be set')
|
||||
iq = self.xmpp.make_iq_set(ito=room, ifrom=ifrom)
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
import datetime as dt
|
||||
|
||||
from slixmpp.plugins import BasePlugin, register_plugin
|
||||
from slixmpp.thirdparty import tzutc, tzoffset, parse_iso
|
||||
|
||||
|
||||
# =====================================================================
|
||||
@@ -21,7 +20,10 @@ def parse(time_str):
|
||||
Arguments:
|
||||
time_str -- A formatted timestamp string.
|
||||
"""
|
||||
return parse_iso(time_str)
|
||||
try:
|
||||
return dt.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S.%f%z')
|
||||
except ValueError:
|
||||
return dt.datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S%z')
|
||||
|
||||
|
||||
def format_date(time_obj):
|
||||
@@ -52,7 +54,7 @@ def format_time(time_obj):
|
||||
if isinstance(time_obj, dt.datetime):
|
||||
time_obj = time_obj.timetz()
|
||||
timestamp = time_obj.isoformat()
|
||||
if time_obj.tzinfo == tzutc():
|
||||
if time_obj.tzinfo == dt.timezone.utc:
|
||||
timestamp = timestamp[:-6]
|
||||
return '%sZ' % timestamp
|
||||
return timestamp
|
||||
@@ -69,7 +71,7 @@ def format_datetime(time_obj):
|
||||
time_obj -- A datetime object.
|
||||
"""
|
||||
timestamp = time_obj.isoformat('T')
|
||||
if time_obj.tzinfo == tzutc():
|
||||
if time_obj.tzinfo == dt.timezone.utc:
|
||||
timestamp = timestamp[:-6]
|
||||
return '%sZ' % timestamp
|
||||
return timestamp
|
||||
@@ -128,9 +130,9 @@ def time(hour=None, min=None, sec=None, micro=None, offset=None, obj=False):
|
||||
if micro is None:
|
||||
micro = now.microsecond
|
||||
if offset in (None, 0):
|
||||
offset = tzutc()
|
||||
offset = dt.timezone.utc
|
||||
elif not isinstance(offset, dt.tzinfo):
|
||||
offset = tzoffset(None, offset)
|
||||
offset = dt.timezone(dt.timedelta(seconds=offset))
|
||||
value = dt.time(hour, min, sec, micro, offset)
|
||||
if obj:
|
||||
return value
|
||||
@@ -175,9 +177,9 @@ def datetime(year=None, month=None, day=None, hour=None,
|
||||
if micro is None:
|
||||
micro = now.microsecond
|
||||
if offset in (None, 0):
|
||||
offset = tzutc()
|
||||
offset = dt.timezone.utc
|
||||
elif not isinstance(offset, dt.tzinfo):
|
||||
offset = tzoffset(None, offset)
|
||||
offset = dt.timezone(dt.timedelta(seconds=offset))
|
||||
|
||||
value = dt.datetime(year, month, day, hour,
|
||||
min, sec, micro, offset)
|
||||
|
||||
@@ -8,7 +8,6 @@ import datetime as dt
|
||||
|
||||
from slixmpp.xmlstream import ElementBase
|
||||
from slixmpp.plugins import xep_0082
|
||||
from slixmpp.thirdparty import tzutc, tzoffset
|
||||
|
||||
|
||||
class EntityTime(ElementBase):
|
||||
@@ -87,7 +86,7 @@ class EntityTime(ElementBase):
|
||||
seconds (positive or negative) to offset.
|
||||
"""
|
||||
time = xep_0082.time(offset=value)
|
||||
if xep_0082.parse(time).tzinfo == tzutc():
|
||||
if xep_0082.parse(time).tzinfo == dt.timezone.utc:
|
||||
self._set_sub_text('tzo', 'Z')
|
||||
else:
|
||||
self._set_sub_text('tzo', time[-6:])
|
||||
@@ -111,6 +110,6 @@ class EntityTime(ElementBase):
|
||||
date = value
|
||||
if not isinstance(value, dt.datetime):
|
||||
date = xep_0082.parse(value)
|
||||
date = date.astimezone(tzutc())
|
||||
date = date.astimezone(dt.timezone.utc)
|
||||
value = xep_0082.format_datetime(date)
|
||||
self._set_sub_text('utc', value)
|
||||
|
||||
@@ -30,6 +30,10 @@ class Delay(ElementBase):
|
||||
|
||||
def set_stamp(self, value):
|
||||
if isinstance(value, dt.datetime):
|
||||
if value.tzinfo is None:
|
||||
raise ValueError(f'Datetime provided without timezone information: {value}')
|
||||
if value.tzinfo != dt.timezone.utc:
|
||||
value = value.astimezone(dt.timezone.utc)
|
||||
value = xep_0082.format_datetime(value)
|
||||
self._set_attr('stamp', value)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from slixmpp.plugins.xep_0297 import Forwarded
|
||||
|
||||
|
||||
class Privilege(ElementBase):
|
||||
namespace = "urn:xmpp:privilege:1"
|
||||
namespace = "urn:xmpp:privilege:2"
|
||||
name = "privilege"
|
||||
plugin_attrib = "privilege"
|
||||
|
||||
@@ -24,7 +24,10 @@ class Privilege(ElementBase):
|
||||
|
||||
def presence(self):
|
||||
return self.permission("presence")
|
||||
|
||||
|
||||
def iq(self):
|
||||
return self.permission("iq")
|
||||
|
||||
def add_perm(self, access, type):
|
||||
# This should only be needed for servers, so maybe out of scope for slixmpp
|
||||
perm = Perm()
|
||||
@@ -34,7 +37,7 @@ class Privilege(ElementBase):
|
||||
|
||||
|
||||
class Perm(ElementBase):
|
||||
namespace = "urn:xmpp:privilege:1"
|
||||
namespace = "urn:xmpp:privilege:2"
|
||||
name = "perm"
|
||||
plugin_attrib = "perm"
|
||||
plugin_multi_attrib = "perms"
|
||||
@@ -44,4 +47,4 @@ class Perm(ElementBase):
|
||||
def register():
|
||||
register_stanza_plugin(Message, Privilege)
|
||||
register_stanza_plugin(Privilege, Forwarded)
|
||||
register_stanza_plugin(Privilege, Perm, iterable=True)
|
||||
register_stanza_plugin(Privilege, Perm, iterable=True)
|
||||
|
||||
Reference in New Issue
Block a user