plugin XEP-0277: change affiliations for comments + fixes:

- mbGet now use client instead of profile_key
    - fixed max_items handling
    - for whitelist access model, if a comments node is created, "member" affiliations are transformed to "publisher"
      This is because most of time we want that somebody is able to read a private blog but not write on it, and be able to write a comment.
This commit is contained in:
Goffi 2017-06-29 20:45:54 +02:00
commit 80afa4654c

View file

@ -536,8 +536,14 @@ class XEP_0277(object):
else:
if access == self._p.ACCESS_WHITELIST:
# for whitelist access we need to copy affiliations from parent item
parent_affiliations = yield self._p.getNodeAffiliations(client, service, node)
yield self._p.setNodeAffiliations(client, comments_service, comments_node, parent_affiliations)
comments_affiliations = yield self._p.getNodeAffiliations(client, service, node)
# …except for "member", that we transform to publisher
# because we wants members to be able to write to comments
for jid_, affiliation in comments_affiliations.items():
if affiliation == 'member':
comments_affiliations[jid_] == 'publisher'
yield self._p.setNodeAffiliations(client, comments_service, comments_node, comments_affiliations)
if comments_service is None:
comments_service = client.jid.userhostJID()
@ -595,30 +601,30 @@ class XEP_0277(object):
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
@param item_ids (list[unicode]): list of item IDs
"""
client = self.host.getClient(profile_key)
service = jid.JID(service) if service else None
max_items = None if max_items == C.NO_LIMIT else max_items
extra = self._p.parseExtra(extra_dict)
return self.mbGet(service, node or None, max_items or None, item_ids, extra.rsm_request, extra.extra, profile_key)
return self.mbGet(client, service, node or None, None if max_items==C.NO_LIMIT else None, item_ids, extra.rsm_request, extra.extra)
@defer.inlineCallbacks
def mbGet(self, service=None, node=None, max_items=None, item_ids=None, rsm_request=None, extra=None, profile_key=C.PROF_KEY_NONE):
def mbGet(self, client, service=None, node=None, max_items=10, item_ids=None, rsm_request=None, extra=None):
"""Get some microblogs
@param service(jid.JID, None): jid of the publisher
None to get profile's PEP
@param node(unicode, None): node to get (or microblog node if None)
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
@param max_items(int): maximum number of item to get, None for no limit
@param item_ids (list[unicode]): list of item IDs
@param rsm_request (rsm.RSMRequest): RSM request data
@param extra (dict): extra data
@param profile_key: %(doc_profile_key)s
@return: a deferred couple with the list of items and metadatas.
"""
if node is None:
node = NS_MICROBLOG
items_data = yield self._p.getItems(service, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra, profile_key=profile_key)
items_data = yield self._p.getItems(service, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra, profile_key=client.profile)
serialised = yield self._p.serItemsDataD(items_data, self.item2mbdata)
defer.returnValue(serialised)
@ -798,7 +804,7 @@ class XEP_0277(object):
max_items = None if max_items == C.NO_LIMIT else max_items
publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
extra = self._p.parseExtra(extra_dict)
return self.mbGetFromMany(publishers_type, publishers, max_items or None, extra.rsm_request, extra.extra, profile_key)
return self.mbGetFromMany(publishers_type, publishers, None if max_items==C.NO_LIMIT else max_items, extra.rsm_request, extra.extra, profile_key)
def mbGetFromMany(self, publishers_type, publishers, max_items=None, rsm_request=None, extra=None, profile_key=C.PROF_KEY_NONE):
"""Get the published microblogs for a list of groups or jids
@ -855,7 +861,7 @@ class XEP_0277(object):
publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
extra = self._p.parseExtra(extra_dict)
extra_comments = self._p.parseExtra(extra_comments_dict)
return self.mbGetFromManyWithComments(publishers_type, publishers, max_items or None, max_comments or None,
return self.mbGetFromManyWithComments(publishers_type, publishers, None if max_items==C.NO_LIMIT else max_items, max_comments or None,
extra.rsm_request,
extra.extra,
extra_comments.rsm_request,