| Total Complexity | 5 |
| Total Lines | 48 |
| Duplicated Lines | 41.67 % |
| Changes | 0 | ||
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | |||
| 2 | from typing import Union |
||
| 3 | |||
| 4 | from flask_sqlalchemy import BaseQuery |
||
| 5 | from sqlalchemy import or_ |
||
| 6 | |||
| 7 | from loglan_db.model_db.base_key import db |
||
| 8 | from loglan_db.model_db.base_event import BaseEvent |
||
| 9 | from loglan_db.model_db.base_word import BaseWord |
||
| 10 | from loglan_db.model_db.base_definition import BaseDefinition |
||
| 11 | from loglan_db.model_db.base_connect_tables import t_connect_keys |
||
| 12 | |||
| 13 | |||
| 14 | class AddonKeyGetter: |
||
| 15 | """AddonKeyGetter model""" |
||
| 16 | |||
| 17 | query: BaseQuery = None |
||
| 18 | word: db.Column = None |
||
| 19 | event_start_id: db.Column = None |
||
| 20 | event_end_id: db.Column = None |
||
| 21 | |||
| 22 | View Code Duplication | @classmethod |
|
|
|
|||
| 23 | def by_event( |
||
| 24 | cls, event_id: Union[BaseEvent, int] = None, |
||
| 25 | add_to: BaseQuery = None) -> BaseQuery: |
||
| 26 | """Query filtered by specified Event (latest by default) |
||
| 27 | |||
| 28 | Args: |
||
| 29 | event_id: Union[BaseEvent, int]: Event object or Event.id (int) (Default value = None) |
||
| 30 | add_to: |
||
| 31 | Returns: |
||
| 32 | BaseQuery |
||
| 33 | |||
| 34 | """ |
||
| 35 | if not event_id: |
||
| 36 | event_id = BaseEvent.latest().id |
||
| 37 | |||
| 38 | event_id = BaseEvent.id if isinstance(event_id, BaseEvent) else int(event_id) |
||
| 39 | |||
| 40 | request = add_to if add_to else cls.query |
||
| 41 | return cls._filter_event(event_id, request) |
||
| 42 | |||
| 43 | @classmethod |
||
| 44 | def _filter_event(cls, event_id: Union[BaseEvent, int], add_to: BaseQuery) -> BaseQuery: |
||
| 45 | return add_to.join(t_connect_keys).join(BaseDefinition).join(BaseWord) \ |
||
| 46 | .filter(BaseWord.event_start_id <= event_id) \ |
||
| 47 | .filter(or_(BaseWord.event_end_id > event_id, BaseWord.event_end_id.is_(None))) |
||
| 48 |