50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
|
# 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
|