Source code for slixmpp.plugins.xep_0446.stanza

from datetime import datetime
from typing import Optional

from slixmpp.plugins.xep_0082 import format_datetime, parse
from slixmpp.plugins.xep_0300 import Hash
from slixmpp.plugins.xep_0264.stanza import Thumbnail
from slixmpp.xmlstream import ElementBase, register_stanza_plugin

NS = "urn:xmpp:file:metadata:0"


[docs] class File(ElementBase): name = "file" namespace = NS plugin_attrib = "file" interfaces = sub_interfaces = { "media-type", "name", "date", "size", "desc", "width", "height", "length" }
[docs] def set_width(self, width: int): self.__set_if_positive("width", width)
[docs] def get_width(self) -> Optional[int]: return _positive_int_or_none(self._get_sub_text("width"))
[docs] def set_height(self, height: int): self.__set_if_positive("height", height)
[docs] def get_height(self) -> Optional[int]: return _positive_int_or_none(self._get_sub_text("height"))
[docs] def set_length(self, length: int): self.__set_if_positive("length", length)
[docs] def get_length(self) -> Optional[int]: return _positive_int_or_none(self._get_sub_text("length"))
[docs] def set_size(self, size: int): self.__set_if_positive("size", size)
[docs] def get_size(self) -> Optional[int]: return _positive_int_or_none(self._get_sub_text("size"))
[docs] def get_date(self) -> Optional[datetime]: try: return parse(self._get_sub_text("date")) except ValueError: return
[docs] def set_date(self, stamp: datetime): try: self._set_sub_text("date", format_datetime(stamp)) except ValueError: pass
def __set_if_positive(self, key: str, value: int): if value <= 0: raise ValueError(f"Invalid value for element {key}: {value}") self._set_sub_text(key, str(value))
def _positive_int_or_none(v: str) -> Optional[int]: try: return int(v) except ValueError: return None
[docs] def register_plugins(): register_stanza_plugin(File, Hash) register_stanza_plugin(File, Thumbnail)