Untitled

4ae4d avatar
4ae4d
plain_text
02/12/2026 7:29 AM
27.5 KB
14
Indexable
179 files left unchanged
RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/city.py:26:12
   |
24 |     service = CityService(admin)
25 |     return_data = await service.get_cities(offset, limit)
26 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/city.py:34:12
   |
32 |     service = CityService(admin)
33 |     return_data = await service.get_city_by_name(name)
34 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/city.py:42:12
   |
40 |     service = CityService(admin)
41 |     return_data = await service.get_city_by_id(city_id)
42 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
   --> src/backend/app/api/v1/event.py:100:12
    |
 98 |     service = EventService(admin)
 99 |     return_data = await service.get_cities_events(city_id, offset, limit)
100 |     return return_data
    |            ^^^^^^^^^^^
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
   --> src/backend/app/api/v1/event.py:110:12
    |
108 |     service = EventService(admin)
109 |     return_data = await service.get_by_id(event_id)
110 |     return return_data
    |            ^^^^^^^^^^^
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
   --> src/backend/app/api/v1/event.py:140:12
    |
138 |     service = EventService(admin)
139 |     return_data = await service.get_users_events(user_id)
140 |     return return_data
    |            ^^^^^^^^^^^
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
   --> src/backend/app/api/v1/event.py:148:12
    |
146 |     service = EventService(admin)
147 |     return_data = await service.enter_code(body.participation_id, body.bonus_code)
148 |     return return_data
    |            ^^^^^^^^^^^
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `event` before `return` statement
   --> src/backend/app/api/v1/event.py:203:12
    |
202 |     event = await service.create_event(body)
203 |     return event
    |            ^^^^^
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/tag.py:35:12
   |
33 |     service = TagService(admin)
34 |     return_data = await service.get_app_tags(offset, limit)
35 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/tag.py:60:12
   |
58 |     service = TagService(admin)
59 |     return_data = await service.get_user_tags(messenger_id)
60 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/user.py:28:12
   |
26 |     service = UserService(admin)
27 |     return_data = await service.insert(dict_data)
28 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `return_data` before `return` statement
  --> src/backend/app/api/v1/user.py:58:12
   |
56 |         messenger_id, body.model_dump(exclude_unset=True)
57 |     )
58 |     return return_data
   |            ^^^^^^^^^^^
   |
help: Remove unnecessary assignment

C417 Unnecessary `map()` usage (rewrite using a generator expression)
  --> src/backend/app/db/models/base.py:22:49
   |
20 |         columns = {column.name: getattr(self, column.name) for column in self.__table__.columns}
21 |         return (
22 |             f"<{self.__tablename__}: {', '.join(map(lambda x: f'{x[0]}={x[1]}', columns.items()))}>"
   |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
23 |         )
   |
help: Replace `map()` with a generator expression

RET503 Missing explicit `return` at the end of function able to return non-`None` value
  --> src/backend/app/dependencies/auth/authorization.py:14:5
   |
13 |   class AuthorizationService:
14 | /     @classmethod
15 | |     async def login(
16 | |         cls, data: str | dict, role: Literal["admin"], session: AsyncSession
17 | |     ) -> TokenData | None:
18 | |         if role == "admin":
19 | |             return await cls._procces_authorization_admin(data=data, session=session)
   | |_____________________________________________________________________________________^
20 |
21 |       @classmethod
   |
help: Add explicit `return` statement

RET503 Missing explicit `return` at the end of function able to return non-`None` value
  --> src/backend/app/dependencies/auth/authorization.py:21:5
   |
19 |               return await cls._procces_authorization_admin(data=data, session=session)
20 |
21 | /     @classmethod
22 | |     async def _process_authorization_admin(cls, data: dict, session: AsyncSession):
23 | |         admin = await AdminService.get_admin_by_login(session, data["login"])
24 | |
25 | |         if Hasher.verify_password(data["password"], admin.password):
26 | |             access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
27 | |             refresh_token_expires = timedelta(minutes=settings.REFRESH_TOKEN_EXPIRE_DAYS)
28 | |
29 | |             access_token = cls.create_access_token(
30 | |                 data={"sub": admin.login, "scopes": ["admin"]}, expires_delta=access_token_expires
31 | |             )
32 | |             refresh_token = cls.create_refresh_token(
33 | |                 data={"sub": admin.login, "scopes": ["admin"]}, expires_delta=refresh_token_expires
34 | |             )
35 | |
36 | |             return TokenData(access_token=access_token, refresh_token=refresh_token)
   | |____________________________________________________________________________________^
37 |
38 |       @staticmethod
   |
help: Add explicit `return` statement

RET504 Unnecessary assignment to `encoded_jwt` before `return` statement
  --> src/backend/app/dependencies/auth/authorization.py:47:16
   |
45 |         encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
46 |
47 |         return encoded_jwt
   |                ^^^^^^^^^^^
48 |
49 |     @staticmethod
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `encoded_jwt` before `return` statement
  --> src/backend/app/dependencies/auth/authorization.py:58:16
   |
56 |         encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
57 |
58 |         return encoded_jwt
   |                ^^^^^^^^^^^
59 |
60 |     @classmethod
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `token_Data` before `return` statement
  --> src/backend/app/dependencies/auth/authorization.py:72:16
   |
70 |         token_Data = TokenData(access_token=new_access_token, refresh_token=new_refresh_token)
71 |
72 |         return token_Data
   |                ^^^^^^^^^^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `admin` before `return` statement
 --> src/backend/app/services/admin.py:8:16
  |
6 |     async def get_admin_by_login(cls, sesion: AsyncSession, login: str):
7 |         admin = await cls.repository.get_admin_by_login(sesion, login)
8 |         return admin
  |                ^^^^^
  |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `events` before `return` statement
  --> src/backend/app/services/event.py:32:20
   |
30 |                 city_id=city_id, offset=offset, limit=limit
31 |             )
32 |             return events
   |                    ^^^^^^
33 |
34 |     async def search_events(self, query: EventSearchQuerySchema):
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `event` before `return` statement
  --> src/backend/app/services/event.py:94:20
   |
92 |         async with self.administrator.start() as admin:
93 |             event = await admin.event.get_by_id(event_id)
94 |             return event
   |                    ^^^^^
95 |
96 |     async def enter_code(self, participation_id: UUID, bonus_code: str):
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `updated_user` before `return` statement
   --> src/backend/app/services/event.py:111:20
    |
109 |             updated_user = await admin.user.add_points(participation.user_id, event.points)
110 |
111 |             return updated_user
    |                    ^^^^^^^^^^^^
112 |
113 |     async def sign_up(self, data: EventSignUpSchema):
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `participation` before `return` statement
   --> src/backend/app/services/event.py:126:20
    |
125 |             participation = await admin.participation.insert(participation_data)
126 |             return participation
    |                    ^^^^^^^^^^^^^
127 |
128 |     async def sign_out(self, data: EventSignOutSchema):
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `deleted_participation` before `return` statement
   --> src/backend/app/services/event.py:137:20
    |
136 |             deleted_participation = await admin.participation.delete(participation.id)
137 |             return deleted_participation
    |                    ^^^^^^^^^^^^^^^^^^^^^
138 |
139 |     async def get_users_events(self, user_id: int):
    |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `user_events` before `return` statement
   --> src/backend/app/services/event.py:144:20
    |
142 |             user_events = await admin.participation.get_user_participations(user.id)
143 |
144 |             return user_events
    |                    ^^^^^^^^^^^
145 |
146 |     async def create_event(self, data: EventCreateSchema):
    |
help: Remove unnecessary assignment

SIM102 Use a single `if` statement instead of nested `if` statements
   --> src/backend/app/services/event.py:197:13
    |
195 |               tag_ids = patch.pop("app_tag_ids", None)
196 |
197 | /             if "points" in patch and patch["points"] is not None:
198 | |                 if patch["points"] <= 0 or patch["points"] >= 2**31:
    | |____________________________________________________________________^
199 |                       raise BadRequestError("Invalid points value")
    |
help: Combine `if` statements using `and`

SIM102 Use a single `if` statement instead of nested `if` statements
   --> src/backend/app/services/event.py:235:13
    |
233 |               is_admin = str(role_val) == "admin"
234 |
235 | /             if not is_admin:
236 | |                 if not event.creator_id or str(event.creator_id) != str(requester.id):
    | |______________________________________________________________________________________^
237 |                       raise BadRequestError("Access denied: only organizer can view participants")
238 |                       # TODO replace with AuthError
    |
help: Combine `if` statements using `and`

SIM102 Use a single `if` statement instead of nested `if` statements
  --> src/backend/app/services/report.py:42:13
   |
41 |               # создавать отчёт: организатор + админ
42 | /             if not is_admin:
43 | |                 if not event.creator_id or str(event.creator_id) != str(requester.id):
   | |______________________________________________________________________________________^
44 |                       raise AuthError("Access denied: only organizer or admin can create report")
   |
help: Combine `if` statements using `and`

RET504 Unnecessary assignment to `created` before `return` statement
  --> src/backend/app/services/report.py:60:20
   |
59 |             created = await admin.report.insert(payload)
60 |             return created
   |                    ^^^^^^^
61 |
62 |     async def get_report(
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `user_tags` before `return` statement
  --> src/backend/app/services/tag.py:34:20
   |
32 |             user_tags = await administrator.user_tag.get_user_tags(user.id)
33 |
34 |             return user_tags
   |                    ^^^^^^^^^
35 |
36 |     async def sign_up(self, data: AppTagSignUpSchema):
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `user_tag` before `return` statement
  --> src/backend/app/services/tag.py:49:20
   |
48 |             user_tag = await admin.user_tag.insert(user_tag_data)
49 |             return user_tag
   |                    ^^^^^^^^
50 |
51 |     async def sign_out(self, data: AppTagSignOutSchema):
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `leaderboard_users` before `return` statement
  --> src/backend/app/services/user.py:67:20
   |
65 |         async with self.administrator.start() as administrator:
66 |             leaderboard_users = await administrator.user.get_leaderboard(city_id)
67 |             return leaderboard_users
   |                    ^^^^^^^^^^^^^^^^^
   |
help: Remove unnecessary assignment

RUF013 PEP 484 prohibits implicit `Optional`
  --> src/backend/server/gunicorn.py:8:26
   |
 6 |     port: int = 8000,
 7 |     workers: int = 1,
 8 |     forwarded_allow_ips: str = None,
   |                          ^^^
 9 |     keepalive: int = None,
10 | ):
   |
help: Convert to `T | None`

RUF013 PEP 484 prohibits implicit `Optional`
  --> src/backend/server/gunicorn.py:9:16
   |
 7 |     workers: int = 1,
 8 |     forwarded_allow_ips: str = None,
 9 |     keepalive: int = None,
   |                ^^^
10 | ):
11 |     return {
   |
help: Convert to `T | None`

C408 Unnecessary `dict()` call (rewrite as a literal)
  --> src/bot/core/bot_kit/fsm/context.py:32:23
   |
30 |     def clear(self) -> None:
31 |         self.set_state(None)
32 |         self.set_data(dict())
   |                       ^^^^^^
   |
help: Rewrite as a literal

RET503 Missing explicit `return` at the end of function able to return non-`None` value
  --> src/bot/core/bot_kit/fsm/context.py:35:1
   |
35 | / def _get_arg(type_, args):
36 | |     for arg in args:
37 | |         if isinstance(arg, type_):
38 | |             return arg
   | |______________________^
   |
help: Add explicit `return` statement

RUF013 PEP 484 prohibits implicit `Optional`
  --> src/bot/core/bot_kit/router.py:36:32
   |
34 |         self.handlers: list[Handler] = []
35 |
36 |     def message(self, filter_: Callable[[UpdateMessage], bool] = None, state: State = None):
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
37 |         if filter_ is None:
   |
help: Convert to `T | None`

RET504 Unnecessary assignment to `bot` before `return` statement
  --> src/bot/core/config/bootstrap.py:23:12
   |
21 |     bot.di = di
22 |     bot = cast("BotWithDI", bot)
23 |     return bot
   |            ^^^
   |
help: Remove unnecessary assignment

RUF022 `__all__` is not sorted
  --> src/bot/core/dependencies/__init__.py:21:11
   |
19 |   ]
20 |
21 |   __all__ = [
   |  ___________^
22 | |     "di_factory",
23 | |     # Providers
24 | |     "PROVIDERS",
25 | |     "ReportProvider",
26 | |     "ContextProvider",
27 | |     "RegistryProvider",
28 | |     "CityProvider",
29 | |     "UserProvider",
30 | |     "EventProvider",
31 | |     "TagProvider",
32 | | ]
   | |_^
   |
help: Apply an isort-style sorting to `__all__`

RUF022 `__all__` is not sorted
   --> src/bot/core/handlers/__init__.py:70:11
    |
 68 |   from .volunteer_home import points_leaderboard_handler, volunteer_home_handler
 69 |
 70 |   __all__ = [
    |  ___________^
 71 | |     "start_handler",
 72 | |     "main_menu_handler",
 73 | |     "volunteer_home_handler",
 74 | |     "my_profile_handler",
 75 | |     "ai_assistant_handler",
 76 | |     "update_user_menu_handler",
 77 | |     "update_user_name_start",
 78 | |     "update_user_region_start",
 79 | |     "update_user_interests_start",
 80 | |     "profile_tags_toggle_handler",
 81 | |     "points_menu_handler",
 82 | |     "points_leaderboard_handler",
 83 | |     "events_menu_handler",
 84 | |     "points_page_handler",
 85 | |     "points_event_open_handler",
 86 | |     "points_rt",
 87 | |     "view_by_uuid_start_handler",
 88 | |     "moderation_menu_handler",
 89 | |     "all_events_handler",
 90 | |     "all_events_page_handler",
 91 | |     "all_events_open_handler",
 92 | |     "create_event_start_handler",
 93 | |     "event_tags_toggle_handler",
 94 | |     "event_view_by_id_start",
 95 | |     "admin_menu_handler",
 96 | |     "event_menu_sign_up_handler",
 97 | |     "event_menu_sign_out_handler",
 98 | |     "event_menu_enter_code_start_handler",
 99 | |     "event_menu_delete_handler",
100 | |     "event_menu_edit_handler",
101 | |     "event_menu_edit_field_handler",
102 | |     "event_participants_open_handler",
103 | |     "user_events_page_handler",
104 | |     "user_events_open_handler",
105 | |     "event_user_sign_up_handler",
106 | |     "event_user_sign_out_handler",
107 | |     "event_user_enter_code_start_handler",
108 | |     "noop_handler",
109 | |     "reports_export_handler",
110 | |     "report_create_start_handler",
111 | |     "report_view_handler",
112 | |     "my_events_handler",
113 | |     "my_events_page_handler",
114 | |     "my_events_open_handler",
115 | |     "events_filters_apply_handler",
116 | |     "events_filters_back_handler",
117 | |     "events_filters_not_implemented_handler",
118 | |     "events_filters_open_handler",
119 | |     "events_filters_reset_handler",
120 | |     "events_filters_tags_open_handler",
121 | |     "events_filters_tags_toggle_handler",
122 | |     "events_filters_city_open_handler",
123 | |     "events_filters_city_select_handler",
124 | |     "events_filters_mode_open_handler",
125 | |     "events_filters_mode_select_handler",
126 | |     "part_events_menu_handler",
127 | |     "part_events_page_handler",
128 | |     # Routers
129 | |     "user_events_rt",
130 | |     "enter_code_rt",
131 | |     "update_user_rt",
132 | |     "events_rt",
133 | |     "view_by_uuid_rt",
134 | |     "report_rt",
135 | | ]
    | |_^
    |
help: Apply an isort-style sorting to `__all__`

SIM102 Use a single `if` statement instead of nested `if` statements
    --> src/bot/core/handlers/moderation.py:1050:5
     |
1048 |                   return
1049 |
1050 | /     if field == "bonus_code" and value is not None:
1051 | |         if not re.fullmatch(r"^[A-Za-zА-Яа-я0-9]{1,16}$", str(value)):
     | |______________________________________________________________________^
1052 |               bot.messaging.send_message(
1053 |                   peer=message.peer,
     |
help: Combine `if` statements using `and`

SIM108 Use ternary operator `name = t.get("name") if isinstance(t, dict) else getattr(t, "name", None)` instead of `if`-`else`-block
  --> src/bot/core/markups/tags.py:37:9
   |
35 |       for t in tags or []:
36 |           name = None
37 | /         if isinstance(t, dict):
38 | |             name = t.get("name")
39 | |         else:
40 | |             name = getattr(t, "name", None)
   | |___________________________________________^
41 |           if name:
42 |               out.append(TagChoice(key=str(name), label=str(name)))
   |
help: Replace `if`-`else`-block with `name = t.get("name") if isinstance(t, dict) else getattr(t, "name", None)`

RET504 Unnecessary assignment to `r` before `return` statement
  --> utils/seed_demo_users.py:71:12
   |
69 |     url = f"{BASE}{path}"
70 |     r = requests.request(method, url, timeout=TIMEOUT, **kwargs)
71 |     return r
   |            ^
   |
help: Remove unnecessary assignment

RET504 Unnecessary assignment to `body` before `return` statement
   --> utils/seed_demo_users.py:109:16
    |
107 |         # при желании можно обновлять firstname/employee_number, но employee_number уникален;
108 |         # лучше не трогать существующего пользователя автоматически.
109 |         return body
    |                ^^^^
110 |
111 |     if r.status_code != 404:
    |
help: Remove unnecessary assignment

RUF046 Value being cast to `int` is already an integer
   --> utils/seed_demo_users.py:214:20
    |
212 |     n_events = len(event_ids)
213 |
214 |     min_k = max(1, int(round(n_events * MIN_PCT)))
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
215 |     max_k = max(1, int(n_events * MAX_PCT))  # floor
216 |     if max_k > n_events:
    |
help: Remove unnecessary `int` call

Found 45 errors.
No fixes available (41 hidden fixes can be enabled with the `--unsafe-fixes` option).
Editor is loading...
Leave a Comment