Source code for slixmpp.plugins.xep_0292.stanza

import datetime
from typing import Optional

from slixmpp import ElementBase, Iq, register_stanza_plugin

NS = "urn:ietf:params:xml:ns:vcard-4.0"


class _VCardElementBase(ElementBase):
    namespace = NS


[docs] class VCard4(_VCardElementBase): name = plugin_attrib = "vcard" interfaces = {"full_name", "given", "surname", "birthday"}
[docs] def set_full_name(self, full_name: str): self["fn"]["text"] = full_name
[docs] def get_full_name(self): return self["fn"]["text"]
[docs] def set_given(self, given: str): self["n"]["given"] = given
[docs] def get_given(self): return self["n"]["given"]
[docs] def set_surname(self, surname: str): self["n"]["surname"] = surname
[docs] def get_surname(self): return self["n"]["surname"]
[docs] def set_birthday(self, birthday: datetime.date): self["bday"]["date"] = birthday
[docs] def get_birthday(self): return self["bday"]["date"]
[docs] def add_tel(self, number: str, name: Optional[str] = None): tel = Tel() if name: tel["parameters"]["type_"]["text"] = name tel["uri"] = f"tel:{number}" self.append(tel)
[docs] def add_address( self, country: Optional[str] = None, locality: Optional[str] = None ): adr = Adr() if locality: adr["locality"] = locality if country: adr["country"] = country self.append(adr)
[docs] def add_nickname(self, nick: str): el = Nickname() el["text"] = nick self.append(el)
[docs] def add_note(self, note: str): el = Note() el["text"] = note self.append(el)
[docs] def add_impp(self, impp: str): el = Impp() el["uri"] = impp self.append(el)
[docs] def add_url(self, url: str): el = Url() el["uri"] = url self.append(el)
[docs] def add_email(self, email: str): el = Email() el["text"] = email self.append(el)
class _VCardTextElementBase(_VCardElementBase): interfaces = {"text"} sub_interfaces = {"text"}
[docs] class Fn(_VCardTextElementBase): name = plugin_attrib = "fn"
[docs] class Nickname(_VCardTextElementBase): name = plugin_attrib = "nickname"
[docs] class Note(_VCardTextElementBase): name = plugin_attrib = "note"
class _VCardUriElementBase(_VCardElementBase): interfaces = {"uri"} sub_interfaces = {"uri"}
[docs] class Url(_VCardUriElementBase): name = plugin_attrib = "url"
[docs] class Impp(_VCardUriElementBase): name = plugin_attrib = "impp"
[docs] class Email(_VCardTextElementBase): name = plugin_attrib = "email"
[docs] class N(_VCardElementBase): name = "n" plugin_attrib = "n" interfaces = sub_interfaces = {"given", "surname", "additional"}
[docs] class BDay(_VCardElementBase): name = plugin_attrib = "bday" interfaces = {"date"}
[docs] def set_date(self, date: datetime.date): d = Date() d.xml.text = date.strftime("%Y-%m-%d") self.append(d)
[docs] def get_date(self): for elem in self.xml: try: return datetime.date.fromisoformat(elem.text) except ValueError: return None
[docs] class Date(_VCardElementBase): name = "date"
[docs] class Tel(_VCardUriElementBase): name = plugin_attrib = "tel"
[docs] class Parameters(_VCardElementBase): name = plugin_attrib = "parameters"
[docs] class Type(_VCardTextElementBase): name = "type" plugin_attrib = "type_"
[docs] class Adr(_VCardElementBase): name = plugin_attrib = "adr" interfaces = sub_interfaces = {"locality", "country"}
register_stanza_plugin(Parameters, Type) register_stanza_plugin(Tel, Parameters) for p in N, Fn, Nickname, Note, Url, Impp, Email, BDay, Tel, Adr: register_stanza_plugin(VCard4, p, iterable=True) register_stanza_plugin(Iq, VCard4)