From 80e676afb188b90030e84933c7822337385232db Mon Sep 17 00:00:00 2001 From: "Ernest W. Durbin III" Date: Fri, 27 Mar 2020 21:31:02 -0400 Subject: [PATCH 1/2] Roles: db migration to make role_name not nullable Depends on #7689, fixes #7688 --- .../checks/package_turnover/test_check.py | 14 +++++--- ...2_role_role_name_should_not_be_nullable.py | 32 +++++++++++++++++++ warehouse/packaging/models.py | 2 +- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py diff --git a/tests/unit/malware/checks/package_turnover/test_check.py b/tests/unit/malware/checks/package_turnover/test_check.py index 4215b89d0d66..1eb02c57d766 100644 --- a/tests/unit/malware/checks/package_turnover/test_check.py +++ b/tests/unit/malware/checks/package_turnover/test_check.py @@ -21,7 +21,7 @@ from .....common.db.accounts import UserFactory from .....common.db.malware import MalwareCheckFactory -from .....common.db.packaging import ProjectFactory, ReleaseFactory +from .....common.db.packaging import ProjectFactory, ReleaseFactory, RoleFactory def test_initializes(db_session): @@ -90,7 +90,8 @@ def test_user_posture_verdicts_has_2fa(db_session): def test_user_turnover_verdicts(db_session): user = UserFactory.create() - project = ProjectFactory.create(users=[user]) + project = ProjectFactory.create() + RoleFactory.create(user=user, project=project, role_name="Owner") project.record_event( tag="project:role:add", @@ -117,7 +118,8 @@ def test_user_turnover_verdicts(db_session): def test_user_turnover_verdicts_no_turnover(db_session): user = UserFactory.create() - project = ProjectFactory.create(users=[user]) + project = ProjectFactory.create() + RoleFactory.create(user=user, project=project, role_name="Owner") MalwareCheckFactory.create( name="PackageTurnoverCheck", state=MalwareCheckState.Enabled, @@ -130,7 +132,8 @@ def test_user_turnover_verdicts_no_turnover(db_session): def test_scan(db_session, monkeypatch): user = UserFactory.create() - project = ProjectFactory.create(users=[user]) + project = ProjectFactory.create() + RoleFactory.create(user=user, project=project, role_name="Owner") for _ in range(3): ReleaseFactory.create(project=project) @@ -157,7 +160,8 @@ def test_scan(db_session, monkeypatch): def test_scan_too_few_releases(db_session, monkeypatch): user = UserFactory.create() - project = ProjectFactory.create(users=[user]) + project = ProjectFactory.create() + RoleFactory.create(user=user, project=project, role_name="Owner") ReleaseFactory.create(project=project) MalwareCheckFactory.create( diff --git a/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py b/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py new file mode 100644 index 000000000000..f3b1613bc329 --- /dev/null +++ b/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py @@ -0,0 +1,32 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Role.role_name should not be nullable + +Revision ID: 6af76ffb9612 +Revises: aaa60e8ea12e +Create Date: 2020-03-28 01:20:30.453875 +""" + +from alembic import op +import sqlalchemy as sa + +revision = "6af76ffb9612" +down_revision = "aaa60e8ea12e" + + +def upgrade(): + op.alter_column("roles", "role_name", existing_type=sa.TEXT(), nullable=False) + + +def downgrade(): + op.alter_column("roles", "role_name", existing_type=sa.TEXT(), nullable=True) diff --git a/warehouse/packaging/models.py b/warehouse/packaging/models.py index 19dc84dcd627..1bd05ac0cea9 100644 --- a/warehouse/packaging/models.py +++ b/warehouse/packaging/models.py @@ -64,7 +64,7 @@ class Role(db.Model): __repr__ = make_repr("role_name") - role_name = Column(Text) + role_name = Column(Text, nullable=False) user_id = Column( ForeignKey("users.id", onupdate="CASCADE", ondelete="CASCADE"), nullable=False ) From e68641a446185939ec5d645c8f767b0ba4249383 Mon Sep 17 00:00:00 2001 From: "Ernest W. Durbin III" Date: Mon, 30 Mar 2020 08:46:06 -0400 Subject: [PATCH 2/2] lint --- .../6af76ffb9612_role_role_name_should_not_be_nullable.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py b/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py index f3b1613bc329..4b408f173412 100644 --- a/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py +++ b/warehouse/migrations/versions/6af76ffb9612_role_role_name_should_not_be_nullable.py @@ -17,9 +17,10 @@ Create Date: 2020-03-28 01:20:30.453875 """ -from alembic import op import sqlalchemy as sa +from alembic import op + revision = "6af76ffb9612" down_revision = "aaa60e8ea12e"