Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

logginable deleting bug fix #198

Merged
merged 18 commits into from
Oct 22, 2024
Merged

logginable deleting bug fix #198

merged 18 commits into from
Oct 22, 2024

Conversation

Zimovchik
Copy link
Member

Изменения

#192

Детали реализации

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

Copy link

💩 Code linting failed, use black and isort to fix it.

Copy link

github-actions bot commented Aug 13, 2024

Code Coverage

Coverage Report
FileStmtsMissCoverMissing
auth_backend
   __main__.py330%1–5
   base.py12467%6–9
   exceptions.py39587%32, 47–49, 54
auth_backend/auth_method
   base.py63494%52, 54, 61, 143
   method_mixins.py32294%27, 50
   oauth.py561770%38, 44, 49–54, 58–69, 95–100
   outer.py1122776%27, 34, 41, 48, 99, 105, 114, 168–173, 186–192, 204–210
   userdata_mixin.py19574%32, 37–40
auth_backend/auth_plugins
   airflow.py331652%26–37, 42–65
   coder.py321650%25–34, 39–52
   email.py2521494%91, 231, 316, 318, 323, 334–340, 387, 428, 479, 489
   github.py1046339%57–116, 127–171, 178, 183, 189–201
   google.py1126443%65–124, 135–163, 170, 176–180, 184–189, 193–202
   keycloak.py1046240%53–115, 122–172, 179, 184, 190–195
   lkmsu.py1379034%59–111, 126–163, 170, 175, 181–195, 199–236, 240–249
   mailu.py341847%25–34, 39–54
   postgres.py432053%29–35, 40–46, 51–63
   telegram.py1116145%56–90, 102–120, 127, 133, 143–163, 167–181
   vk.py1288236%71–123, 134–172, 179, 184, 190–207, 214–240
   yandex.py1278335%58–128, 138–176, 184, 190, 196–222
auth_backend/cli
   group.py13130%1–17
   process.py56560%1–72
   scope.py11110%1–20
   user.py20200%1–40
   user_group.py12120%1–25
auth_backend/kafka
   kafka.py502060%30–33, 42–44, 56–59, 72–82, 85, 93, 103
   kafkameta.py9278%8, 12
auth_backend/models
   base.py83594%79, 100–102, 106
   db.py136398%52, 209, 213
   dynamic_settings.py27774%24–31
auth_backend/routes
   base.py26292%20–21
   exc_handlers.py37586%29, 54, 67, 93, 105
   groups.py84396%85, 135, 137
   scopes.py36392%24, 53–54
   user.py912770%52, 54, 56–65, 71–77, 89–109, 160, 173
   user_session.py84693%76–85, 114, 116, 174, 181
auth_backend/schemas
   models.py98397%148–150
auth_backend/schemas/types
   scopes.py24675%30–32, 37, 40, 42
auth_backend/utils
   security.py43295%36, 61
   smtp.py771877%76–79, 101–120
   string.py7186%12
   user_session_control.py33197%28
TOTAL271888268% 

Summary

Tests Skipped Failures Errors Time
59 6 💤 0 ❌ 0 🔥 10.303s ⏱️

Copy link
Member Author

@Zimovchik Zimovchik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И можно не делать такой огромный запрос в базу, а, например, сравнить длину списка ответа на запрос по всем логинейбл аутх методам с длиной списка ответа запроса, который выше(в 74 строке) кидался(это был запрос просто по данному методу)

Получилось даже с одним запросом поидее все сделать. Но возможно это не слишком читаемо очевидно, не знаю как лучше, но так точно быстрее

auth_backend/auth_method/base.py Outdated Show resolved Hide resolved
.filter(
AuthMethod.user_id == user.id,
AuthMethod.auth_method.in_(
[cls.get_name()] + [method.get_name() for method in AUTH_METHODS.values() if method.loginable]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не совсем понимаю, что ты хотел этой строчкой сделать
сложно читаемо, в любом случае

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну такой запрос тут сделан он сам по себе довольно абстрактен, там ниже в проверке его просто использую, но я и написал, что возможно это ге очень читаемо, и стоит сделать 2 запроса, но код будет более читаем

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я не совсем понимаю, что ты хочешь этим запросом получить

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хотя, вроде понял, а зачем туда добавлять cls.get_name() его разве там не будет в запросе?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хотя, вроде понял, а зачем туда добавлять cls.get_name() его разве там не будет в запросе?

Потому что я хочу чтобы там удаляемый метод даже если он не loginable, а такое возможно

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Типа ситуация, когда это последний метод и он не логинейбл? Ну со стороны пользователя мы такое никогда не увидим, так как доступа к удалению последнего логинейбл нет
Тут просто тогда может возникнуть проблема, когда это будет логинейбл, и тогда длина списка будет на 1 больше, и, возможно, получится удалить. Я так вижу

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Теоретически ты прав я думаю да, не подумал об этом, сейчас потестим

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Типа ситуация, когда это последний метод и он не логинейбл? Ну со стороны пользователя мы такое никогда не увидим, так как доступа к удалению последнего логинейбл нет Тут просто тогда может возникнуть проблема, когда это будет логинейбл, и тогда длина списка будет на 1 больше, и, возможно, получится удалить. Я так вижу

Ты был прав ничего не меняется, перемудрил)

@@ -74,13 +75,15 @@ async def _delete_auth_methods(cls, user: User, *, db_session) -> list[AuthMetho
AuthMethod.query(session=db_session)
.filter(
AuthMethod.user_id == user.id,
AuthMethod.auth_method == cls.get_name(),
AuthMethod.auth_method.in_([method.get_name() for method in AUTH_METHODS.values() if method.loginable]),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так зачем ты старую реализацию поменял, теперь нельзя будет удалить не логинейбл

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так, давай еще раз разберемся
допустим у меня 3 метода, из которых 1 логинейбл, а один не логинейбл
Я пытаюсь удалить логинейбл. Тогда нужно получить все логинейбл методы мои, увидеть там список из 1 объекта, а затем сравнить со списком, который просто прокидывается через поиск по cls.get_name() в данный момент.

@grigoriev-semyon
Copy link
Member

grigoriev-semyon commented Aug 21, 2024

@Zimovchik

➜  ~ python3.11
Python 3.11.9 (main, Apr  2 2024, 08:25:04) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class X:
...     pass
... 
>>> class Y:
...     pass
... 
>>> class Z(X, Y):
...     pass
... 
>>> issubclass(Z, X)
True
>>> issubclass(Z, Y)
True

@Zimovchik
Copy link
Member Author

Zimovchik commented Aug 26, 2024

@Zimovchik

➜  ~ python3.11
Python 3.11.9 (main, Apr  2 2024, 08:25:04) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class X:
...     pass
... 
>>> class Y:
...     pass
... 
>>> class Z(X, Y):
...     pass
... 
>>> issubclass(Z, X)
True
>>> issubclass(Z, Y)
True

@grigoriev-semyon я знаю что так можно делать, но не очень понимаю к чему этот тут

@Zimovchik
Copy link
Member Author

@Temmmmmo я поменял вообще немного логику чека, да теперь мы делаем 2 query запроса, но зато код как по мне теперь намного более читаемый и прозрачный

@grigoriev-semyon
Copy link
Member

@Zimovchik

➜ ~ python3.11

Python 3.11.9 (main, Apr 2 2024, 08:25:04) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

class X:

... pass

...

class Y:

... pass

...

class Z(X, Y):

... pass

...

issubclass(Z, X)

True

issubclass(Z, Y)

True

@grigoriev-semyon я знаю что так можно делать, но не очень понимаю к чему этот тут

issubclass(cls, LoginableMixin)

Вот так это делается, определить можно в абстрактном классе каком нибудь

@Temmmmmo

This comment has been minimized.

@Zimovchik
Copy link
Member Author

@grigoriev-semyon
Ты хочешь определить отдельный класс для логинейблов, от которых их наследовать?

@Temmmmmo Я посмотрел, там уже есть такой класс, так что да нет смысла добавлять эту переменную в классы, перепишу сегодня

Copy link

github-actions bot commented Oct 3, 2024

💩 Code linting failed, use black and isort to fix it.

auth_backend/auth_method/oauth.py Show resolved Hide resolved
auth_backend/auth_method/outer.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/email.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/github.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/google.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/physics.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/telegram.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/vk.py Outdated Show resolved Hide resolved
auth_backend/auth_plugins/yandex.py Outdated Show resolved Hide resolved
auth_backend/auth_method/oauth.py Outdated Show resolved Hide resolved
@Temmmmmo Temmmmmo merged commit a7cc0db into main Oct 22, 2024
2 checks passed
@Temmmmmo Temmmmmo deleted the zimovchik branch October 22, 2024 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Запрет на отвязывание последнего аутх метода
4 participants