Passed
Branch main (854eb5)
by Jochen
04:24
created

CategoryWithLastUpdateAndUnseenFlag.from_category_with_last_update()   A

Complexity

Conditions 1

Size

Total Lines 17
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 16
nop 3
dl 0
loc 17
ccs 2
cts 2
cp 1
crap 1
rs 9.6
c 0
b 0
f 0
1
"""
2
byceps.blueprints.site.board.models
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2021 Jochen Kupperschmidt
6
:License: Revised BSD (see `LICENSE` file for details)
7
"""
8
9 1
from __future__ import annotations
10 1
from dataclasses import dataclass
11 1
from typing import Optional
12
13 1
from ....services.board.transfer.models import CategoryWithLastUpdate
14 1
from ....services.user.transfer.models import User
15 1
from ....services.user_badge.transfer.models import Badge
16
17
18 1
@dataclass(frozen=True)
19 1
class CategoryWithLastUpdateAndUnseenFlag(CategoryWithLastUpdate):
20 1
    contains_unseen_postings: bool
21
22 1
    @classmethod
23
    def from_category_with_last_update(
24
        cls, category: CategoryWithLastUpdate, contains_unseen_postings: bool
25
    ) -> CategoryWithLastUpdateAndUnseenFlag:
26 1
        return cls(
27
            category.id,
28
            category.board_id,
29
            category.position,
30
            category.slug,
31
            category.title,
32
            category.description,
33
            category.topic_count,
34
            category.posting_count,
35
            category.hidden,
36
            category.last_posting_updated_at,
37
            category.last_posting_updated_by,
38
            contains_unseen_postings,
39
        )
40
41
42 1
@dataclass(frozen=True)
43
class Ticket:
44 1
    party_title: str
45
46
47 1
@dataclass(frozen=True)
48 1
class Creator(User):
49 1
    badges: set[Badge]
50 1
    ticket: Ticket
51
52 1
    @classmethod
53
    def from_(
54
        cls, user: User, badges: set[Badge], ticket: Optional[Ticket]
55
    ) -> Creator:
56 1
        return cls(
57
            id=user.id,
58
            screen_name=user.screen_name,
59
            suspended=user.suspended,
60
            deleted=user.deleted,
61
            locale=user.locale,
62
            avatar_url=user.avatar_url,
63
            is_orga=user.is_orga,
64
            badges=badges,
65
            ticket=ticket,
66
        )
67