Métricas do repositório
- Stars
- (2.409 stars)
- Métricas de merge de PR
- (Mesclagem média 2d) (33 fundiu PRs em 30d)
Description
Currently, Misago uses User.set_username to update username. This util also sends the username_changed signal
Instead, I would like to:
- Change
User.set_usernameto:
class User(models.Model):
...
def set_username(self, new_username: str, commit: bool = True) -> bool:
new_username = self.normalize_username(new_username)
if new_username == self.username:
return False
self.username = new_username
self.slug = slugify(new_username)
if commit:
self.save()
return True
-
Rename
misago.users.namechangestomisago.users.usernames -
In that module, create new util named
update_username_references:
def update_username_references(user: User):
...
Within that function gather username changing logic from all username_changed. Also, wrap it in a plugin.
Create a test module, test_update_username_references and in it write a test case for every updated username, eg. test_update_username_references_updates_post_poster:
def test_update_username_references_updates_post_poster(user, user_post):
user.set_username("Alice")
user.save()
update_username_references(user)
user_post.refresh_from_db()
assert user_post.poster_name == user.username
- Move
User.record_name_changeutil tomisago.users.usernames, add optionalcommitandrequestargs (look up how other functions in misago use them), wrap it in plugin hook and write two tests:
record_user_name_change(user: User, changed_by: User | str, new_username: str, old_username: str, commit: bool = True, request: HttpRequest | None = None) -> UsernameChange:
username_change = UsernameChange.objects.create(
user=user,
new_username=new_username,
old_username=old_username,
changed_by=changed_by,
changed_by_username=changed_by.username,
)
if commit:
username_change.save()
return username_change
-
Move
UsernameChangefrommisago.users.models.usertomisago.users.models.usernamechange. -
Add
plugin_datafield toUsernameChangemodel (inherit fromPluginDataModel) -
Create new
update_usernametask inmisago.users.tasks:
@shared_task(name="users.update_user_name", serializer="json")
def update_user_name(user_id: int):
user = User.objects.get(id=user_id)
update_username_references(user)
Also in scope:
Update username change logic in misago.account and misago.users.admin.