plugin XEP-0277: Make MbData a Pydantic model:
- MbData is now a Pydantic based model. - Bridge method has been updated to use `service` and `node` from MbData instead of using separate fields. - Added `In-Reply-To` to MbData. - Adapted code using XEP-0277 to work with the changes. rel 462
This commit is contained in:
parent
b1e0e336c2
commit
cab460152c
5 changed files with 828 additions and 492 deletions
|
|
@ -17,9 +17,12 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from twisted.words.xish import domish
|
||||
from libervia.backend.core.core_types import SatXMPPClient
|
||||
from libervia.backend.core.i18n import _
|
||||
from libervia.backend.core.constants import Const as C
|
||||
from libervia.backend.core.log import getLogger
|
||||
from libervia.backend.plugins.plugin_xep_0277 import MbData
|
||||
|
||||
log = getLogger(__name__)
|
||||
from twisted.internet import defer
|
||||
|
|
@ -102,18 +105,31 @@ class GroupBlog(object):
|
|||
config_form = data_form.findForm(item_elt, NS_PUBSUB_ITEM_CONFIG)
|
||||
if config_form is None:
|
||||
return
|
||||
# FIXME: Legacy code, need to be adapted to new MbData model.
|
||||
log.warning(
|
||||
"Item config is temporarily not supported, it needs to be moved to "
|
||||
"adapted to new model"
|
||||
)
|
||||
return
|
||||
access_model = config_form.get(self._p.OPT_ACCESS_MODEL, self._p.ACCESS_OPEN)
|
||||
if access_model == self._p.ACCESS_PUBLISHER_ROSTER:
|
||||
opt = self._p.OPT_ROSTER_GROUPS_ALLOWED
|
||||
microblog_data["groups"] = config_form.fields[opt].values
|
||||
|
||||
def _data_2_entry_trigger(self, client, mb_data, entry_elt, item_elt):
|
||||
def _data_2_entry_trigger(
|
||||
self,
|
||||
client: SatXMPPClient,
|
||||
mb_data: MbData,
|
||||
entry_elt: domish.Element,
|
||||
item_elt: domish.Element
|
||||
) -> None:
|
||||
"""Build fine access permission if needed
|
||||
|
||||
This trigger check if "group*" key are present,
|
||||
and create a fine item config to restrict view to these groups
|
||||
"""
|
||||
groups = mb_data.get("groups", [])
|
||||
# FIXME: Model_dump is temporarily used while converting MbData to Pydantic model.
|
||||
groups = mb_data.model_dump().get("groups", [])
|
||||
if not groups:
|
||||
return
|
||||
if not client.server_groupblog_available:
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -29,6 +29,7 @@ from libervia.backend.core.i18n import _
|
|||
from libervia.backend.core.log import getLogger
|
||||
from libervia.backend.core.core_types import SatXMPPEntity
|
||||
from libervia.backend.core import exceptions
|
||||
from libervia.backend.plugins.plugin_xep_0277 import MbData
|
||||
from libervia.backend.tools.common import uri, data_format, date_utils
|
||||
from libervia.backend.tools.utils import as_deferred, xmpp_date
|
||||
|
||||
|
|
@ -43,7 +44,7 @@ PLUGIN_INFO = {
|
|||
C.PI_TYPE: C.PLUG_TYPE_XEP,
|
||||
C.PI_MODES: C.PLUG_MODE_BOTH,
|
||||
C.PI_PROTOCOLS: [],
|
||||
C.PI_DEPENDENCIES: ["XEP-0060"],
|
||||
C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0277"],
|
||||
C.PI_MAIN: "PubsubAttachments",
|
||||
C.PI_HANDLER: "yes",
|
||||
C.PI_DESCRIPTION: _("""Pubsub Attachments implementation"""),
|
||||
|
|
@ -152,14 +153,12 @@ class PubsubAttachments:
|
|||
async def on_mb_send(
|
||||
self,
|
||||
client: SatXMPPEntity,
|
||||
service: jid.JID,
|
||||
node: str,
|
||||
item: domish.Element,
|
||||
data: dict,
|
||||
data: MbData,
|
||||
) -> bool:
|
||||
"""trigger to create attachment node on each publication"""
|
||||
await self.create_attachments_node(
|
||||
client, service, node, item["id"], autocreate=True
|
||||
client, data.service, data.node, item["id"], autocreate=True
|
||||
)
|
||||
return True
|
||||
|
||||
|
|
|
|||
|
|
@ -313,6 +313,7 @@ class BlogPublishCommon:
|
|||
|
||||
if metadata already exist, it will be overwritten
|
||||
"""
|
||||
extra = mb_data.setdefault("extra", {})
|
||||
if self.args.comments is not None:
|
||||
mb_data["allow_comments"] = self.args.comments
|
||||
if self.args.tag:
|
||||
|
|
@ -324,13 +325,13 @@ class BlogPublishCommon:
|
|||
if self.args.no_id_suffix:
|
||||
mb_data["user_friendly_id_suffix"] = False
|
||||
if self.args.alt_links:
|
||||
mb_data.setdefault("extra", {})["alt_links"] = self.args.alt_links
|
||||
extra["alt_links"] = self.args.alt_links
|
||||
if self.args.encrypt:
|
||||
mb_data["encrypted"] = True
|
||||
extra["encrypted"] = True
|
||||
if self.args.sign:
|
||||
mb_data["signed"] = True
|
||||
extra["signed"] = True
|
||||
if self.args.encrypt_for:
|
||||
mb_data["encrypted_for"] = {"targets": self.args.encrypt_for}
|
||||
extra["encrypted_for"] = {"targets": self.args.encrypt_for}
|
||||
self.handle_attachments(mb_data)
|
||||
|
||||
|
||||
|
|
@ -352,7 +353,11 @@ class Set(base.CommandBase, BlogPublishCommon):
|
|||
async def start(self):
|
||||
self.current_syntax = await self.get_current_syntax()
|
||||
self.pubsub_item = self.args.item
|
||||
mb_data = {}
|
||||
mb_data = {
|
||||
"service": self.args.service or None,
|
||||
}
|
||||
if self.args.node:
|
||||
mb_data["node"] = self.args.node
|
||||
self.set_mb_data_from_args(mb_data)
|
||||
if self.pubsub_item:
|
||||
mb_data["id"] = self.pubsub_item
|
||||
|
|
@ -361,8 +366,6 @@ class Set(base.CommandBase, BlogPublishCommon):
|
|||
|
||||
try:
|
||||
item_id = await self.host.bridge.mb_send(
|
||||
self.args.service,
|
||||
self.args.node,
|
||||
data_format.serialise(mb_data),
|
||||
self.profile,
|
||||
)
|
||||
|
|
@ -708,6 +711,9 @@ class Edit(base.CommandBase, BlogPublishCommon, common.BaseEdit):
|
|||
await asyncio.gather(*coroutines)
|
||||
|
||||
async def publish(self, content, mb_data):
|
||||
mb_data["service"] = self.pubsub_service or None
|
||||
if self.pubsub_node:
|
||||
mb_data["node"] = self.pubsub_node
|
||||
await self.set_mb_data_content(content, mb_data)
|
||||
|
||||
if self.pubsub_item:
|
||||
|
|
@ -715,9 +721,7 @@ class Edit(base.CommandBase, BlogPublishCommon, common.BaseEdit):
|
|||
|
||||
mb_data = data_format.serialise(mb_data)
|
||||
|
||||
await self.host.bridge.mb_send(
|
||||
self.pubsub_service, self.pubsub_node, mb_data, self.profile
|
||||
)
|
||||
await self.host.bridge.mb_send(mb_data, self.profile)
|
||||
self.disp("Blog item published")
|
||||
|
||||
def get_tmp_suff(self):
|
||||
|
|
|
|||
|
|
@ -294,9 +294,9 @@ class Entry(EntriesManager):
|
|||
if self.blog.new_message_target == C.GROUP:
|
||||
mb_data["groups"] = list(self.blog.targets)
|
||||
|
||||
mb_data["service"] = self.service
|
||||
mb_data["node"] = self.node
|
||||
self.blog.host.bridge.mb_send(
|
||||
str(self.service or ""),
|
||||
self.node or "",
|
||||
data_format.serialise(mb_data),
|
||||
profile=self.blog.profile,
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in a new issue