コード例 #1
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class Items(VElement):
    elementName = 'items'

    items = fields.ElementNode(Item, listed=True, required=False)
    node = fields.StringAttr('node')
    max_items = fields.StringAttr('max_items', required=False)
    retracts = fields.ElementNode(Retract, listed=True, required=False)
コード例 #2
0
ファイル: vcard.py プロジェクト: rogovvladimir/twilix
class VCardQuery(Query):
    """
    Extends Query class from twilix.stanzas.
    Contains fields with nodes for personal info.
    """
    elementName = 'vCard'
    elementUri = 'vcard-temp'

    full_name = fields.StringNode('FN', required=False)
    name_ = fields.ElementNode('N', Name, required=False, listed=False)
    nickname = fields.StringNode('NICKNAME', required=False)
    url = fields.StringNode('URL', required=False)
    birthday = fields.StringNode('BDAY', required=False)
    organization = fields.ElementNode('ORG',
                                      Organization,
                                      required=False,
                                      listed=False)
    title = fields.StringNode('TITLE', required=False)
    role = fields.StringNode('ROLE', required=False)
    # telephones TODO
    # addresses TODO
    # emails TODO
    jid = fields.StringNode('JABBERID', required=False)
    description = fields.StringNode('DESC', required=False)
    photo = fields.ElementNode('PHOTO', Photo, required=False, listed=False)
コード例 #3
0
ファイル: htmlim.py プロジェクト: rogovvladimir/twilix
class XHtmlIm(VElement):
    """
    Extends VElement class from twilix.base
    Realize element according xhtml-im protocol.
    """
    elementName = 'html'
    elementUri = 'http://jabber.org/protocol/xhtml-im'

    body = fields.ElementNode(HtmlBody)
    head = fields.ElementNode(HtmlHead, required=False)
コード例 #4
0
ファイル: disco.py プロジェクト: rogovvladimir/twilix
class DiscoInfoQuery(Query):
    """
    Extends Query class.
    Contains information about features and identities.
    """
    elementUri = 'http://jabber.org/protocol/disco#info'

    identities = fields.ElementNode(Identity,
                                    required=False,
                                    listed=True,
                                    unique=True)
    features = fields.ElementNode(Feature,
                                  required=False,
                                  listed=True,
                                  unique=True)
    node = fields.StringAttr('node', required=False)
コード例 #5
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class Subscriptions(VElement):
    elementName = 'subscriptions'

    node = fields.StringAttr('node', required=False)
    subscriptions = fields.ElementNode(Subscription,
                                       listed=True,
                                       required=False)
コード例 #6
0
class Message(Stanza):
    """
    Stanza-inheritor class that implements a message transfer with
    other entities.
    Contains fields corresponding to the protocol.
    
    Attributes:
        body -- string node 'body'
        
        subject  -- string node 'subject'
        
        thread  -- string attribue 'thread'
        
        html  -- element node with XHtmlIm element
        
    """
    elementName = 'message'

    body = fields.StringNode('body', required=False)  #?
    subject = fields.StringNode('subject', required=False)
    thread = fields.StringNode('thread', required=False)
    html = fields.ElementNode(XHtmlIm, required=False)

    def clean_type_(self, value):
        """
        Filters stanzas by type. 
        Sets some correct type for invalid stanzas.        
        """
        if not value in ('normal', 'chat', 'groupchat', 'headline', 'error'):
            return 'normal'
        return value
コード例 #7
0
class FileRequest(File):
    name_ = fields.StringAttr('name')
    size = fields.IntegerAttr('size')
    hash_ = fields.StringAttr('hash', required=False)
    date = fields.DateTimeAttr('date', required=False)
    description = fields.StringNode('desc', required=False)
    range_ = fields.ElementNode(Range, required=False)
コード例 #8
0
class ErrorStanza(Stanza):
    """
    Stanza-inheritor class for any errors.
    Contains fields corresponding to the protocol.
    
    Attributes:
        error -- element node with Error element.
        
    """
    error = fields.ElementNode(Error)
コード例 #9
0
class UserItem(VElement):
    """
    VElement-inheritor class container for user info class.
    
    Attributes : 
        
        item -- UserItemInfo-type user's info class
        
    """
    elementName = 'x'
    elementUri = 'http://jabber.org/protocol/muc#user'
    
    item = fields.ElementNode(UserItemInfo, required=False)
コード例 #10
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class PubsubQuery(Query):
    elementName = 'pubsub'
    elementUri = 'http://jabber.org/protocol/pubsub'

    create_node = fields.ElementNode(CreateNodeElement, required=False)
    publish = fields.ElementNode(PublishElement, required=False)
    subscribe = fields.ElementNode(SubscribeElement, required=False)
    unsubscribe = fields.ElementNode(UnsubscribeElement, required=False)
    items = fields.ElementNode(Items, required=False)
    subscriptions = fields.ElementNode(Subscriptions, required=False)
    retract = fields.ElementNode(Retract, required=False)
コード例 #11
0
class Field(VElement):
    elementName = 'field'
    fieldType = None  # To be redefined in derived classes

    type_ = fields.StringAttr('type')
    label = fields.StringAttr('label', required=False)
    var = fields.StringAttr('var')

    required = fields.FlagNode('required', default=False, required=False)
    values = fields.StringNode('value', listed=True, required=False)
    options = fields.ElementNode(Option, listed=True, required=False)

    def __init__(self, value=None, *args, **kwargs):
        self.kwargs = kwargs
        super(Field, self).__init__(*args, **kwargs)
        self.type_ = self.fieldType
        self.value = value

    def prepare_to_submit(self):
        self.label = None
        self.options = ()
        self.required = None

    def restore_for_validation(self, kwargs):
        self.options = kwargs.get('options')

    def clean_type_(self, value):
        if value == self.fieldType:
            return value
        raise WrongElement

    def fclean(self, values):
        if self.kwargs.get('required') and not values:
            raise ElementParseError, "Form field %s %s is required" % \
                    (self.var, self.type_)
        return values

    def _get_value(self):
        return self.values

    def _set_value(self, value):
        self.values = value

    def _del_value(self, value):
        self.values = ()

    value = property(_get_value, _set_value, _del_value)
コード例 #12
0
class FTSIRequest(SIRequest):
    file_ = fields.ElementNode(FileRequest)

    @defer.inlineCallbacks
    def setHandler(self):
        reply, deferred, meta = self.make_reply(self.host.si)
        buf = yield self.host.cb(self, deferred)
        if buf is None:
            # TODO: application specific error
            raise errors.ForbiddenException
        meta.update({
            'buf': buf,
            'size': self.file_.size,
            'bytes_read': 0,
            'deferred': deferred,
        })
        defer.returnValue(reply)
コード例 #13
0
ファイル: disco.py プロジェクト: rogovvladimir/twilix
class DiscoItemsQuery(Query):
    """
    Extends Query class.
    
    Attibutes:
        items -- element node with DiscoItem
        
        node -- string attribute 'node'
            
    """
    elementUri = 'http://jabber.org/protocol/disco#items'

    items = fields.ElementNode(DiscoItem,
                               required=False,
                               listed=True,
                               unique=True)
    node = fields.StringAttr('node', required=False)
コード例 #14
0
ファイル: admin.py プロジェクト: rogovvladimir/twilix
class AdminQuery(Query):
    """
    Query-inheritor class for administrator's queries.
    These queries used for change role or affiliation of chat users.
    
    Attributes :
        
        item -- not required UserItemInfo-type element node.
    
    Methods : 
        
        makeAdminQuery -- method sends query stanza and returns result stanza.
    
    """
    
    elementUri = 'http://jabber.org/protocol/muc#admin'
    item = fields.ElementNode(UserItemInfo, required=False)
コード例 #15
0
class UserPresence(Presence):
    """
    Presence-inheritor class for multi user chat occupant's info.
    Also handles user online/offline presences.
    
    Attributes :
        
        user -- UserItem-type node for information about user.
        
    Methods : 
        
        anyHandler -- handles all of this type presences.
        
    """   
        
    user = fields.ElementNode(UserItem, required=False)
    
    def anyHandler(self):
        """
        Changes list of info about users in chat.
        There is addition in roster for 'available'-type presences and 
        deletion from roster for 'unavailable'-type.
        Also sends 'user_available'/'user_unavailbale' signals for dispatcher 
        (from pydispatch module).
        
        """
                
        if self.user is None:
            return
        
        room_jid = self.from_.bare()
        if room_jid not in self.host.roster:
            return
        
        self.host.roster[room_jid] = filter(lambda el: el.from_.resource != self.from_.resource, self.host.roster[room_jid])
        
        if self.type_ == 'unavailable':
            dispatcher.send(self.host.user_unavailable, user=self)
        else:
            self.host.roster[room_jid].append(self)
            dispatcher.send(self.host.user_available, user=self)
コード例 #16
0
ファイル: __init__.py プロジェクト: rogovvladimir/twilix
class RosterQuery(Query):
    """
    Class for xml roster queries. Inheritor of Query.
    
    Class attributes:

        items -- list of RosterItem instances (i.e. list of contacts)
    
    """
    elementUri = 'jabber:iq:roster'

    items = fields.ElementNode(RosterItem,
                               listed=True,
                               unique=True,
                               required=False)

    def __init__(self, **kwargs):
        super(RosterQuery, self).__init__(**kwargs)

    def setHandler(self):
        """
        Update roster when server pushes some changes. 
        """
        self.iq.from_ = None
        self.host.updateRoster(self)
        return self.iq.makeResult()

    def getHandler(self):
        """
        Method for handle get-type roster queries.
        Not acceptable. Raise error stanza.
        
        :raises: NotAcceptableException
        
        """
        self.iq.from_ = None
        raise errors.NotAcceptableException()
コード例 #17
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class Retract(VElement):
    elementName = 'retract'

    node = fields.StringAttr('node')
    items = fields.ElementNode(Item, listed=True)
コード例 #18
0
class StreamHostUsedQuery(Socks5QueryWithSid):
    streamhost_used = fields.ElementNode(StreamHostUsed)
コード例 #19
0
class SIElement(Query):
    elementName = 'si'
    elementUri = 'http://jabber.org/protocol/si'

    feature = fields.ElementNode(Feature)
コード例 #20
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class PublishElement(VElement):
    elementName = 'publish'

    node = fields.StringAttr('node')
    item = fields.ElementNode(Item)
コード例 #21
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class IncomingEvent(Message):
    event = fields.ElementNode(Event, required=False)
コード例 #22
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class Event(VElement):
    elementName = 'event'
    elementUri = 'http://jabber.org/protocol/pubsub#event'

    items = fields.ElementNode(Items, required=False)
コード例 #23
0
ファイル: base.py プロジェクト: rogovvladimir/twilix
class PubsubOwnerQuery(PubsubQuery):
    elementUri = 'http://jabber.org/protocol/pubsub#owner'

    delete_node = fields.ElementNode(DeleteNodeElement, required=False)
    configure_node = fields.ElementNode(ConfigureNode, required=False)
コード例 #24
0
class StreamHostQuery(Socks5QueryWithSid):
    result_class = StreamHostUsedQuery

    streamhosts = fields.ElementNode(StreamHost, listed=True)
コード例 #25
0
class GotStreamHost(Socks5Query):
    streamhost = fields.ElementNode(StreamHost)
コード例 #26
0
class Feature(VElement):
    elementName = 'feature'
    elementUri = 'http://jabber.org/protocol/feature-neg'

    methods = fields.ElementNode(FeatureForm)