Skip to content

Commit

Permalink
Add pending_project_name_ultranormalized index
Browse files Browse the repository at this point in the history
  • Loading branch information
twm committed Sep 22, 2024
1 parent 11d37c5 commit e52ad63
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 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.
"""
Index ultranormalized pending project_name
Revision ID: f7720656a33c
Revises: 26455e3712a2
Create Date: 2024-08-20 06:07:46.546659
"""

from alembic import op

revision = "f7720656a33c"
down_revision = "a8050411bc65"

# Note: It is VERY important to ensure that a migration does not lock for a
# long period of time and to ensure that each individual migration does
# not break compatibility with the *previous* version of the code base.
# This is because the migrations will be ran automatically as part of the
# deployment process, but while the previous version of the code is still
# up and running. Thus backwards incompatible changes must be broken up
# over multiple migrations inside of multiple pull requests in order to
# phase them in over multiple deploys.
#
# By default, migrations cannot wait more than 4s on acquiring a lock
# and each individual statement cannot take more than 5s. This helps
# prevent situations where a slow migration takes the entire site down.
#
# If you need to increase this timeout for a migration, you can do so
# by adding:
#
# op.execute("SET statement_timeout = 5000")
# op.execute("SET lock_timeout = 4000")
#
# To whatever values are reasonable for this migration as part of your
# migration.


def upgrade():
op.execute(
"""
CREATE INDEX pending_project_name_ultranormalized
ON pending_oidc_publishers (ultranormalize_name(project_name));
"""
)


def downgrade():
op.execute("DROP INDEX pending_project_name_ultranormalized")
8 changes: 7 additions & 1 deletion warehouse/oidc/models/_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import sentry_sdk

from sigstore.verify.policy import VerificationPolicy
from sqlalchemy import ForeignKey, String, orm
from sqlalchemy import ForeignKey, Index, String, func, orm
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column

Expand Down Expand Up @@ -414,6 +414,12 @@ class PendingOIDCPublisher(OIDCPublisherMixin, db.Model):
)
added_by: Mapped[User] = orm.relationship(back_populates="pending_oidc_publishers")

__table_args__ = (
Index(
"pending_project_name_ultranormalized",
func.ultranormalize_name(project_name),
),
)
__mapper_args__ = {
"polymorphic_identity": "pending_oidc_publishers",
"polymorphic_on": OIDCPublisherMixin.discriminator,
Expand Down
2 changes: 1 addition & 1 deletion warehouse/oidc/models/activestate.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ class ActiveStatePublisher(ActiveStatePublisherMixin, OIDCPublisher):
class PendingActiveStatePublisher(ActiveStatePublisherMixin, PendingOIDCPublisher):
__tablename__ = "pending_activestate_oidc_publishers"
__mapper_args__ = {"polymorphic_identity": "pending_activestate_oidc_publishers"}
__table_args__ = (
__table_args__ = ( # type: ignore[assignment]
UniqueConstraint(
"organization",
"activestate_project_name",
Expand Down
2 changes: 1 addition & 1 deletion warehouse/oidc/models/github.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ def verify_url(self, url: str):
class PendingGitHubPublisher(GitHubPublisherMixin, PendingOIDCPublisher):
__tablename__ = "pending_github_oidc_publishers"
__mapper_args__ = {"polymorphic_identity": "pending_github_oidc_publishers"}
__table_args__ = (
__table_args__ = ( # type: ignore[assignment]
UniqueConstraint(
"repository_name",
"repository_owner",
Expand Down
2 changes: 1 addition & 1 deletion warehouse/oidc/models/gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ def verify_url(self, url: str):
class PendingGitLabPublisher(GitLabPublisherMixin, PendingOIDCPublisher):
__tablename__ = "pending_gitlab_oidc_publishers"
__mapper_args__ = {"polymorphic_identity": "pending_gitlab_oidc_publishers"}
__table_args__ = (
__table_args__ = ( # type: ignore[assignment]
UniqueConstraint(
"namespace",
"project",
Expand Down
2 changes: 1 addition & 1 deletion warehouse/oidc/models/google.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class GooglePublisher(GooglePublisherMixin, OIDCPublisher):
class PendingGooglePublisher(GooglePublisherMixin, PendingOIDCPublisher):
__tablename__ = "pending_google_oidc_publishers"
__mapper_args__ = {"polymorphic_identity": "pending_google_oidc_publishers"}
__table_args__ = (
__table_args__ = ( # type: ignore[assignment]
UniqueConstraint(
"email",
"sub",
Expand Down

0 comments on commit e52ad63

Please sign in to comment.