diff --git a/h/migrations/versions/3bae642f2b36_add_pubid_to_user.py b/h/migrations/versions/3bae642f2b36_add_pubid_to_user.py new file mode 100644 index 00000000000..850e33d49ad --- /dev/null +++ b/h/migrations/versions/3bae642f2b36_add_pubid_to_user.py @@ -0,0 +1,16 @@ +"""Add pubid to user""" + +from alembic import op + +revision = "3bae642f2b36" +down_revision = "9c0efdf762a6" + + +def upgrade(): + op.add_column("user", sa.Column("pubid", sa.Text(), nullable=True)) + op.create_unique_constraint(op.f("uq__user__pubid"), "user", ["pubid"]) + + +def downgrade(): + op.drop_constraint(op.f("uq__user__pubid"), "user", type_="unique") + op.drop_column("user", "pubid") diff --git a/h/models/user.py b/h/models/user.py index c8981242c58..81052a597fb 100644 --- a/h/models/user.py +++ b/h/models/user.py @@ -1,11 +1,13 @@ import datetime import re +from functools import partial from typing import TYPE_CHECKING import sqlalchemy as sa from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.hybrid import Comparator, hybrid_property +from h import pubid from h.db import Base from h.exceptions import InvalidUserId from h.models import helpers @@ -158,6 +160,11 @@ def __table_args__(cls): # pylint:disable=no-self-argument id = sa.Column(sa.Integer, autoincrement=True, primary_key=True) + #: A publicly visible unique identifier for the user + pubid = sa.Column( + sa.Text(), default=partial(pubid.generate, 12), unique=True, nullable=True + ) + #: Username as chosen by the user on registration _username = sa.Column("username", sa.UnicodeText(), nullable=False)