mail/populate/discuss/mail_message.py

50 lines
2.1 KiB
Python
Raw Permalink Normal View History

2024-05-03 12:40:35 +03:00
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
from odoo import models
from odoo.tools import populate
_logger = logging.getLogger(__name__)
class Message(models.Model):
_inherit = "mail.message"
@property
def _populate_dependencies(self):
return super()._populate_dependencies + ["discuss.channel", "discuss.channel.member"]
def _populate(self, size):
res = super()._populate(size)
admin = self.env.ref("base.user_admin").partner_id
random = populate.Random("mail.message in discuss")
channels = self.env["discuss.channel"].browse(self.env.registry.populated_models["discuss.channel"])
messages = []
big_done = 0
for channel in channels.filtered(lambda channel: channel.channel_member_ids):
big = {"small": 80, "medium": 150, "large": 300}[size]
small_big_ratio = {"small": 10, "medium": 150, "large": 1000}[size]
max_messages = big if random.randint(1, small_big_ratio) == 1 else 60
admin_is_member = admin in channel.channel_member_ids.partner_id
number_messages = 500 if big_done < 2 and admin_is_member else random.randrange(max_messages)
if number_messages >= 500 and admin_is_member:
big_done += 1
for counter in range(number_messages):
messages.append(
{
"author_id": random.choice(channel.channel_member_ids.partner_id).id,
"body": f"message_body_{counter}",
"message_type": "comment",
"model": "discuss.channel",
"res_id": channel.id,
}
)
batches = [messages[i : i + 1000] for i in range(0, len(messages), 1000)]
count = 0
for batch in batches:
count += len(batch)
_logger.info("Batch of mail.message for discuss.channel: %s/%s", count, len(messages))
res += self.env["mail.message"].create(batch)
return res