+
    Dfj!                         ^ RI HtHt  ! R R]4      t ! R R]4      t ! R R]4      t ! R R	]4      t ! R
 R]4      t. ROtR# )    )	Attribute	Interfacec                   :   a  ] tR t^t o Rt]! R4      tR tRtV t	R# )IProtocolPluginz?Interface for plugins providing an interface to a Words servicezHA single word describing what kind of interface this is (eg, irc or web)c                    R# )a:  Retrieve a C{twisted.internet.interfaces.IServerFactory} provider

@param realm: An object providing C{twisted.cred.portal.IRealm} and
L{IChatService}, with which service information should be looked up.

@param portal: An object providing C{twisted.cred.portal.IPortal},
through which logins should be performed.
N )realmportals   &&6/usr/lib/python3/dist-packages/twisted/words/iwords.py
getFactoryIProtocolPlugin.getFactory           r   N)
__name__
__module____qualname____firstlineno____doc__r   namer   __static_attributes____classdictcell____classdict__s   @r   r   r      s     IRD r   r   c                   X   a  ] tR t^t o ]! R4      tR tR
R ltR tR t	R t
R tR	tV tR# )IGroupz$A short string, unique among groups.c                    R# )z<Include the given user in this group.

@type user: L{IUser}
Nr   )users   &r   add
IGroup.add   r   r   Nc                    R# )zVRemove the given user from this group.

@type user: L{IUser}
@type reason: C{unicode}
Nr   )r   reasons   &&r   removeIGroup.remove#   r   r   c                     R# )zReturn the number of participants in this group.

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with an C{int} representing the
number of participants in this group.
Nr   r   r   r   sizeIGroup.size*   r   r   c                    R# )a  
Broadcast the given message from the given sender to other
users in group.

The message is not re-transmitted to the sender.

@param sender: L{IUser}

@type recipient: L{IGroup}
@param recipient: This is probably a wart.  Maybe it will be removed
in the future.  For now, it should be the group object the message
is being delivered to.

@param message: C{dict}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with None when delivery has been
attempted for all users.
Nr   sender	recipientmessages   &&&r   receiveIGroup.receive2   r   r   c                    R# )zEChange the metadata associated with this group.

@type meta: C{dict}
Nr   )metas   &r   setMetadataIGroup.setMetadataG   r   r   c                     R# )z.Return an iterator of all users in this group.Nr   r   r   r   	iterusersIGroup.iterusersM   r   r   r   N)r   r   r   r   r   r   r   r"   r%   r,   r0   r3   r   r   r   s   @r   r   r      s3     ;<D*= =r   r   c                   P   a  ] tR t^Qt o Rt]! R4      tR tR tR t	R	R lt
RtV tR# )
IChatClientz<Interface through which IChatService interacts with clients.z[A short string, unique among users.  This will be set by the L{IChatService} at login time.c                    R# )a  
Callback notifying this user of the given message sent by the
given user.

This will be invoked whenever another user sends a message to a
group this user is participating in, or whenever another user sends
a message directly to this user.  In the former case, C{recipient}
will be the group to which the message was sent; in the latter, it
will be the same object as the user who is receiving the message.

@type sender: L{IUser}
@type recipient: L{IUser} or L{IGroup}
@type message: C{dict}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires when the message has been delivered,
or which fails in some way.  If the Deferred fails and the message
was directed at a group, this user will be removed from that group.
Nr   r(   s   &&&r   r,   IChatClient.receiveX   r   r   c                    R# )z
Callback notifying this user that the metadata for the given
group has changed.

@type group: L{IGroup}
@type meta: C{dict}

@rtype: L{twisted.internet.defer.Deferred}
Nr   )groupr/   s   &&r   groupMetaUpdateIChatClient.groupMetaUpdatem   r   r   c                    R# )z
Callback notifying this user that the given user has joined
the given group.

@type group: L{IGroup}
@type user: L{IUser}

@rtype: L{twisted.internet.defer.Deferred}
Nr   )r;   r   s   &&r   
userJoinedIChatClient.userJoinedx   r   r   Nc                    R# )z
Callback notifying this user that the given user has left the
given group for the given reason.

@type group: L{IGroup}
@type user: L{IUser}
@type reason: C{unicode}

@rtype: L{twisted.internet.defer.Deferred}
Nr   )r;   r   r!   s   &&&r   userLeftIChatClient.userLeft   r   r   r   r5   )r   r   r   r   r   r   r   r,   r<   r?   rB   r   r   r   s   @r   r7   r7   Q   s.     FeD*		
 
r   r7   c                      a  ] tR t^t o Rt]! R4      t]! R4      t]! R4      t]! R4      t	]! R4      t
R tR tR	 tR
 tR tRtV tR# )IUserz;Interface through which clients interact with IChatService.z_A reference to the Realm to which this user belongs.  Set if and only if the user is logged in.z`A reference to the mind which logged in to this user.  Set if and only if the user is logged in.z#A short string, unique among users.zRA POSIX timestamp indicating the time of the last message received from this user.zBA POSIX timestamp indicating this user's most recent sign on time.c                    R# )zInvoked by the associated L{IChatService} when login occurs.

@param realm: The L{IChatService} through which login is occurring.
@param mind: The mind object used for cred login.
Nr   )r	   minds   &&r   loggedInIUser.loggedIn   r   r   c                    R# )zySend the given message to the given user or group.

@type recipient: Either L{IUser} or L{IGroup}
@type message: C{dict}
Nr   )r*   r+   s   &&r   send
IUser.send   r   r   c                    R# )zdAttempt to join the given group.

@type group: L{IGroup}
@rtype: L{twisted.internet.defer.Deferred}
Nr   r;   s   &r   join
IUser.join   r   r   c                    R# )zqDiscontinue participation in the given group.

@type group: L{IGroup}
@rtype: L{twisted.internet.defer.Deferred}
Nr   rN   s   &r   leaveIUser.leave   r   r   c                     R# )zB
Return an iterator of all groups of which this user is a
member.
Nr   r   r   r   
itergroupsIUser.itergroups   r   r   r   N)r   r   r   r   r   r   r	   rG   r   lastMessagesignOnrH   rK   rO   rR   rU   r   r   r   s   @r   rE   rE      sk     EiE jD :;D\K LF r   rE   c                   t   a  ] tR t^t o ]! R4      t]! R4      t]! R4      tR tR t	R t
R tR tR	 tR
tV tR# )IChatServicez=A short string identifying this chat service (eg, a hostname)zxA boolean indicating whether L{getGroup} should implicitly create groups which are requested but which do not yet exist.zvA boolean indicating whether L{getUser} should implicitly create users which are requested but which do not yet exist.c                     R# )zReturn all groups available on this service.

@rtype: C{twisted.internet.defer.Deferred}
@return: A Deferred which fires with a list of C{IGroup} providers.
Nr   r   r   r   rU   IChatService.itergroups   r   r   c                    R# )aZ  Retrieve the group by the given name.

@type name: C{str}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with the group with the given
name if one exists (or if one is created due to the setting of
L{IChatService.createGroupOnRequest}, or which fails with
L{twisted.words.ewords.NoSuchGroup} if no such group exists.
Nr   r   s   &r   getGroupIChatService.getGroup   r   r   c                    R# )a  Create a new group with the given name.

@type name: C{str}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with the created group, or
with fails with L{twisted.words.ewords.DuplicateGroup} if a
group by that name exists already.
Nr   r^   s   &r   createGroupIChatService.createGroup   r   r   c                    R# )a  Retrieve a group by name.

Unlike C{getGroup}, this will never implicitly create a group.

@type name: C{str}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with the group by the given
name, or which fails with L{twisted.words.ewords.NoSuchGroup}.
Nr   r^   s   &r   lookupGroupIChatService.lookupGroup   r   r   c                    R# )aU  Retrieve the user by the given name.

@type name: C{str}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with the user with the given
name if one exists (or if one is created due to the setting of
L{IChatService.createUserOnRequest}, or which fails with
L{twisted.words.ewords.NoSuchUser} if no such user exists.
Nr   r^   s   &r   getUserIChatService.getUser   r   r   c                    R# )zCreate a new user with the given name.

@type name: C{str}

@rtype: L{twisted.internet.defer.Deferred}
@return: A Deferred which fires with the created user, or
with fails with L{twisted.words.ewords.DuplicateUser} if a
user by that name exists already.
Nr   r^   s   &r   
createUserIChatService.createUser  r   r   r   N)r   r   r   r   r   r   createGroupOnRequestcreateUserOnRequestrU   r_   rb   re   rh   rk   r   r   r   s   @r   rZ   rZ      sW     TUD$	H
 $	G

	

	 	r   rZ   N)r   r7   rE   rZ   )	zope.interfacer   r   r   r   r7   rE   rZ   __all__r   r   r   <module>rq      sS   
 0i $4=Y 4=n<) <~2I 2jL9 L^r   