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

CH-167 Async support on Django user attach middleware #789

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

filippomc
Copy link
Collaborator

@filippomc filippomc commented Dec 17, 2024

Closes CH-167

Implemented solution

Changed the middleware to conform with this: https://docs.djangoproject.com/en/5.1/topics/http/middleware/#async-middleware

Refactored most of the code related to users sync to use asyncio apis

How to test this PR

Run any django based application using this branch (I have tested it locally on a django Ninja app)

Sanity checks:

  • The pull request is explicitly linked to the relevant issue(s)
  • The issue is well described: clearly states the problem and the general proposed solution(s)
  • In this PR it is explicitly stated how to test the current change
  • The labels in the issue set the scope and the type of issue (bug, feature, etc.)
  • The relevant components are indicated in the issue (if any)
  • All the automated test checks are passing
  • All the linked issues are included in one Sprint
  • All the linked issues are in the Review state
  • All the linked issues are assigned

Breaking changes (select one):

  • The present changes do not change the preexisting api in any way
  • This PR and the issue are tagged as a breaking-change and the migration procedure is well described above

Possible deployment updates issues (select one):

  • There is no reason why deployments based on CloudHarness may break after the current update
  • This PR and the issue are tagged as alert:deployment

Test coverage (select one):

  • Tests for the relevant cases are included in this pr
  • The changes included in this pr are out of the current test coverage scope

Documentation (select one):

  • The documentation has been updated to match the current changes
  • The changes included in this PR are out of the current documentation scope

Nice to have (if relevant):

  • Screenshots of the changes
  • Explanatory video/animated gif

# add a user from the group/team
group = Group.objects.get(name=team_name)
group = Group.objects.aget(name=team_name)
Copy link
Contributor

Choose a reason for hiding this comment

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

await missing

team = Team.objects.create(
owner=superusers[0], # one of the superusers will be the default team owner
try:
superuser = User.objects.filter(is_superuser=True).afirst()
Copy link
Contributor

Choose a reason for hiding this comment

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

await missing

user.save()
user_groups += [await Group.objects.aget(name=kc_group["name"])]
await user.groups.aset(user_groups)
user.asave()
Copy link
Contributor

Choose a reason for hiding this comment

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

Required

Another missing await here

print(client.consume_all('my-group'))
# delete the topic
# print(client.delete_topic())
if __name__ == "__main__":
Copy link
Contributor

Choose a reason for hiding this comment

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

Query
This has all been indented to be inline with the async_consume body (i.e. this will be part of the async_consume method, is that intended, or should the indentation be removed to be at the module level?

@@ -31,8 +45,8 @@ def has_delete_permission(self, request, obj=None):
return settings.DEBUG or settings.USER_CHANGE_ENABLED

@button()
def sync_keycloak(self, request):
get_user_service().sync_kc_users_groups()
async def sync_keycloak(self, request):
Copy link
Contributor

Choose a reason for hiding this comment

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

Query

Do these sync_keycloak methods need to be coroutines? They don't await anything, so looks like they could be normal methods, right?

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.

3 participants