v0.151.1

plain-passwords changelog

0.26.4 (2026-06-08)

What's changed

  • Internal: a commented-out example in PasswordSignupView.form_valid updated from form.save() to form.create() to track the plain.postgres ModelForm API change. No functional change. (66634f5af9)

Upgrade instructions

  • No changes required.

0.26.3 (2026-06-03)

What's changed

  • Internal: the password-rehash setter in check_user_password and PasswordSetForm.save now write via user.update(...) instead of user.save(...). (f75deb3ba2)

Upgrade instructions

  • No changes required. Your User model must be on plain.postgres>=0.106.0 (which provides update()).

0.26.2 (2026-05-22)

What's changed

  • Internal: PasswordField.pre_save no longer references Field.attname (removed in plain.postgres 0.104.0); the immediate re-set of the hashed value back on the instance now uses self.name. (6a462a874c)

Upgrade instructions

  • No changes required.

0.26.1 (2026-05-12)

What's changed

  • CreateView and FormView imports moved from plain.views to plain.templates.views to match the plain.templates carve-out. The end-user PasswordLoginView/PasswordResetView/etc. API is unchanged. (19b622a7ca)
  • Pins plain>=0.143.0 and plain.templates>=0.1.0.

Upgrade instructions

  • No code changes required if you upgrade plain to 0.143.0 in the same step.

0.26.0 (2026-05-05)

What's changed

  • The PasswordField admin display now uses admin-muted color tokens (so it adapts to dark mode) and renders an explicit "Not set" indicator for empty values instead of a blank cell. (feabbe4a)
  • Exposes __version__ from importlib.metadata on plain.passwords. (c6cf6edb)

Upgrade instructions

  • No changes required.

0.25.2 (2026-04-13)

What's changed

  • Updated internal references to use the fixed app.users.models.User convention. (0861c9915cb6)
  • Updated password login view to use the generic FormView[FormClass]. (8dbe9e413d30)
  • Migrated type suppression comments to ty: ignore for the new ty checker version. (4ec631a7ef51)

Upgrade instructions

  • No changes required — but see the plain 0.132.0 notes if you haven't moved your User model to app/users/models.py.

0.25.1 (2026-04-01)

What's changed

  • Moved the PasswordField admin display template here from plain-admin, co-locating it with the field definition. (811ce65f4cda)

Upgrade instructions

  • No changes required.

0.25.0 (2026-03-28)

What's changed

  • PasswordField now extends TextField instead of CharField (5062ee4dd1fd)

Upgrade instructions

  • Requires plain-postgres>=0.90.0
  • If you subclass PasswordField, no changes needed — the API is unchanged

0.24.1 (2026-03-27)

What's changed

  • Switched password reset token signing from signing.dumps/signing.loads to TimestampSigner directly (99b0e57bc175)
  • Updated form fields from CharField to TextField (4e29f5d6cade)

Upgrade instructions

  • Requires plain>=0.129.0. No other changes required.

0.24.0 (2026-03-12)

What's changed

  • Updated all imports from plain.models to plain.postgres in forms, models, types, views, and README examples.

Upgrade instructions

  • Update imports: from plain.models to from plain.postgres, from plain import models to from plain import postgres.

0.23.6 (2026-03-10)

What's changed

  • Typed user parameters as Model instead of Any in password reset forms and views (8b2f42444f01)
  • Adopted PEP 695 type parameter syntax (aa5b2db6e8ed)

Upgrade instructions

  • No changes required.

0.23.5 (2026-03-10)

What's changed

  • Updated README code examples to use typed fields (types.EmailField with type annotations) (772345d4e1f1)

Upgrade instructions

  • No changes required.

0.23.4 (2026-02-26)

What's changed

  • Auto-formatted config files with updated linter configuration (028bb95c3ae3)

Upgrade instructions

  • No changes required.

0.23.3 (2026-02-12)

What's changed

  • Updated README examples to use UniqueConstraint instead of unique=True on email fields (9db8e0aa5d43)
  • Updated login form template example to use headless form rendering instead of csrf_input and as_elements() (9db8e0aa5d43)

Upgrade instructions

  • No changes required.

0.23.2 (2026-02-04)

What's changed

  • Removed @internalcode decorator from utility functions (urlsafe_base64_encode, urlsafe_base64_decode, unicode_ci_compare) (e7164d3891b2)

Upgrade instructions

  • No changes required.

0.23.1 (2026-01-28)

What's changed

Upgrade instructions

  • No changes required.

0.23.0 (2026-01-22)

What's changed

  • Removed db_column, db_collation, and db_comment parameters from PasswordField type stubs to match upstream plain-models changes (eed1bb6, 49b362d)

Upgrade instructions

  • No changes required.

0.22.0 (2026-01-13)

What's changed

  • Expanded README documentation with comprehensive coverage of password hashing, validation, views, and forms (da37a78)

Upgrade instructions

  • No changes required

0.21.0 (2026-01-13)

What's changed

  • Updated BadRequestError400 import to use new location in plain.http instead of plain.exceptions (b61f909)

Upgrade instructions

  • No changes required

0.20.0 (2026-01-13)

What's changed

  • Updated to use renamed RedirectResponse class (previously ResponseRedirect) (fad5bf2)
  • Updated to use renamed BadRequestError400 exception (previously BadRequest) (5a1f020)

Upgrade instructions

  • No changes required

0.19.1 (2025-12-22)

What's changed

  • Updated type annotations for improved type checker compatibility (539a706)

Upgrade instructions

  • No changes required

0.19.0 (2025-12-04)

What's changed

  • Improved type annotations for CommonPasswordValidator and password views (ac1eeb0)

Upgrade instructions

  • No changes required

0.18.0 (2025-11-24)

What's changed

  • Password views now inherit from AuthView instead of using AuthViewMixin for better type checking support (569afd6)

Upgrade instructions

  • No changes required

0.17.1 (2025-11-20)

What's changed

  • Improved type annotations for better compatibility with type checkers (a43145e)

Upgrade instructions

  • No changes required

0.17.0 (2025-11-13)

What's changed

  • Added typed PasswordField for better IDE and type checker support when using type annotations in model definitions (dc1f9c4)

Upgrade instructions

  • No changes required

0.16.0 (2025-11-12)

What's changed

  • BasePasswordHasher now inherits from ABC and uses @abstractmethod decorators for better type checking and enforcement (4f2d1d4)
  • Improved type annotations and fixed type checker warnings throughout the package (f4dbcef)

Upgrade instructions

  • No changes required

0.15.1 (2025-10-31)

What's changed

  • Added BSD-3-Clause license metadata to package configuration (8477355)

Upgrade instructions

  • No changes required

0.15.0 (2025-10-07)

What's changed

  • Updated internal model metadata access to use _model_meta instead of _meta (73ba469)

Upgrade instructions

  • No changes required

0.14.0 (2025-10-06)

What's changed

  • Removed unused password hashers (PBKDF2SHA1PasswordHasher, Argon2PasswordHasher, BCryptSHA256PasswordHasher, BCryptPasswordHasher, and ScryptPasswordHasher) - only PBKDF2PasswordHasher remains (a9acb74)
  • Added comprehensive type annotations throughout the package for better IDE support and type checking (a9acb74)

Upgrade instructions

  • If you were using a non-default password hasher (pbkdf2_sha1, argon2, bcrypt_sha256, bcrypt, or scrypt), you'll need to implement your own custom hasher class or migrate existing passwords to use the default PBKDF2PasswordHasher
  • If you have custom code that referenced the removed hasher classes, you'll need to update those imports

0.13.0 (2025-10-02)

What's changed

  • Password views now inherit from AuthViewMixin and use self.user and self.session properties instead of accessing them through self.request (154ee10)

Upgrade instructions

  • If you have custom views that inherit from PasswordResetView, PasswordChangeView, or PasswordLoginView, update any references to self.request.user to use self.user and self.request.session to use self.session

0.12.0 (2025-09-19)

What's changed

  • Replaced custom constant_time_compare utility with Python's built-in hmac.compare_digest for better security and performance (55f3f55)

Upgrade instructions

  • No changes required

0.11.0 (2025-09-12)

What's changed

  • Database queries now use .query instead of .objects (037a239)
  • Minimum Python version updated to 3.13 (d86e307)
  • Updated package description and README formatting (4ebecd1)

Upgrade instructions

  • Update any custom code that references User.objects to use User.query instead

0.10.0 (2025-07-22)

What's changed

  • Updated password reset token generation and validation to use user.id instead of user.pk (4b8fa6a)

Upgrade instructions

  • No changes required

0.9.2 (2025-06-24)

What's changed

  • Added an initial CHANGELOG.md to the package so future updates are easier to track (82710c3)

Upgrade instructions

  • No changes required