site.models   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 53
dl 0
loc 73
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A CategoryWithLastUpdateAndUnseenFlag.from_category_with_last_update() 0 19 1
A Creator.from_() 0 19 1
1
"""
2
byceps.services.board.blueprints.site.models
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2014-2025 Jochen Kupperschmidt
6
:License: Revised BSD (see `LICENSE` file for details)
7
"""
8
9
from dataclasses import dataclass
10
from typing import Self
11
12
from byceps.services.board.models import BoardCategoryWithLastUpdate
13
from byceps.services.user.models.user import User, UserID
14
from byceps.services.user_badge.models import Badge
15
16
17
@dataclass(frozen=True)
18
class CategoryWithLastUpdateAndUnseenFlag(BoardCategoryWithLastUpdate):
19
    contains_unseen_postings: bool
20
21
    @classmethod
22
    def from_category_with_last_update(
23
        cls,
24
        category: BoardCategoryWithLastUpdate,
25
        contains_unseen_postings: bool,
26
    ) -> Self:
27
        return cls(
28
            category.id,
29
            category.board_id,
30
            category.position,
31
            category.slug,
32
            category.title,
33
            category.description,
34
            category.topic_count,
35
            category.posting_count,
36
            category.hidden,
37
            category.last_posting_updated_at,
38
            category.last_posting_updated_by,
39
            contains_unseen_postings,
40
        )
41
42
43
@dataclass(frozen=True)
44
class Ticket:
45
    party_title: str
46
47
48
@dataclass(frozen=True)
49
class Creator(User):
50
    is_orga: bool
51
    badges: set[Badge]
52
    ticket: Ticket | None
53
54
    @classmethod
55
    def from_(
56
        cls,
57
        user: User,
58
        orga_ids: set[UserID],
59
        badges: set[Badge],
60
        ticket: Ticket | None,
61
    ) -> Self:
62
        return cls(
63
            id=user.id,
64
            screen_name=user.screen_name,
65
            initialized=user.initialized,
66
            suspended=user.suspended,
67
            deleted=user.deleted,
68
            locale=user.locale,
69
            avatar_url=user.avatar_url,
70
            is_orga=user.id in orga_ids,
71
            badges=badges,
72
            ticket=ticket,
73
        )
74