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

Rendering postgresql dialect DOMAIN field #1360

Open
ovangle opened this issue Nov 16, 2023 · 1 comment
Open

Rendering postgresql dialect DOMAIN field #1360

ovangle opened this issue Nov 16, 2023 · 1 comment

Comments

@ovangle
Copy link

ovangle commented Nov 16, 2023

Describe the bug

I have the following postgres domain in my model

# adapted from html5 standard
# https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#basic_validation
_POSTGRES_EMAIL_RE = (
    r"^"
    r"[a-z0-9.!#$%&''*+/=?^_`{|}~-]+"
    r"@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?"
    r"(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*"
    r"$"
)

EMAIL_DOMAIN = pg_dialect.DOMAIN(
    'email',
    pg_dialect.CITEXT(),
    check=rf"value ~ '{_POSTGRES_EMAIL_RE}'"
) 

class Base(DeclarativeBase):
    pass

class Contact(Base):
    __tablename__ = 'contacts'
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    email: Mapped[str] = mapped_column(EMAIL_DOMAIN)

When autogenerating the field, the column corresponding to the email field is rendered as:

    sa.Column('email', postgresql.DOMAIN('email', CITEXT()), nullable=False),

The rendered output is

  • missing the check constraint on the model column; and
  • not importing the data_type in the generated migration.

Expected behavior
The column should be rendered as

    sa.Column('email', postgresql.DOMAIN('email', postgresql.CITEXT(), check=rf"value ~ '^my_.*$'"), nullable=False),

To Reproduce
Please try to provide a Minimal, Complete, and Verifiable example, with the migration script and/or the SQLAlchemy tables or models involved.
See also Reporting Bugs on the website.

# Insert code here

Error

# Copy error here. Please include the full stack trace.

Versions.

  • OS: Ubuntu 22.04.3 LTS
  • Python: 3.11.2
  • Alembic: 1.12.0
  • SQLAlchemy: 2.0.21
  • Database: 15.4
  • DBAPI: psycopg[c]==3.1.12

Additional context

Split from issue #1357

Have a nice day!

@ovangle ovangle added the requires triage New issue that requires categorization label Nov 16, 2023
@CaselIT CaselIT added bug Something isn't working autogenerate - rendering postgresql PRs (with tests!) welcome and removed requires triage New issue that requires categorization labels Nov 18, 2023
@CaselIT
Copy link
Member

CaselIT commented Nov 18, 2023

I'm not 100% sure the issue here is in the alembic side or in sqlalchemy (since the type is defined there). At worst we can move the issue to the other repo.

Care to try sending a PR?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants