Total Complexity | 2 |
Total Lines | 73 |
Duplicated Lines | 0 % |
Changes | 0 |
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 |