Repository navigation
Releases: jpsca/proper
Release list
0.44.0
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0440
Full Changelog: 0.42.1...0.44.0
0.43.0
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0430
Full Changelog: 0.42.1...0.43.0
0.42.1
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0421
Full Changelog: 0.42.0...0.42.1
0.42.0
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0410
Full Changelog: 0.41.0...0.42.0
0.41.0
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0410
Full Changelog: 0.40.0...0.41.0
0.40.0
See https://github.com/jpsca/proper/blob/main/CHANGELOG.md#0400
Full Changelog: 0.34...0.40.0
0.34
Added
app.around_request(func): registers a function that wraps the whole run
of every request, called asfunc(request, response, call_next). If the
request failed,response.errorhas the exception, even after the error
page was rendered. Meant for monitoring integrations (timing, tracing,
error reporting).
Full Changelog: 0.33...0.34
0.33
⚠️ Upgrading: move the uploaded files
The Disk storage service now stores each file at
<root>/<id[:2]>/<id[2:4]>/<id>/<filename> instead of
<root>/<id[:2]>/<id[2:4]>/<filename>.
The files saved by older versions stay at the old path, and this version
doesn't look for them there: until they are moved, every existing upload
of the app is "not found". Run this once, right after upgrading, in every
app that uses Disk storage:
from myapp.models import Attachment
for attachment in Attachment.select():
service = attachment.service
if hasattr(service, "move_from_legacy_path"):
service.move_from_legacy_path(attachment)move_from_legacy_path skips the files already moved, so it can run again.
Apps that only use S3 storage don't need it.
Fixed
Disk: two attachments with the same filename whose ids start with the
same four characters shared a file, and one overwrote the other. Every
variant was namedvariant.<ext>, so it happened often with variants and
pages showed the wrong images. The full id is now part of the path (see
above), andpurgealso removes the empty folders.- A request whose
Acceptheader lists other formats before*/*(e.g.
application/json, text/plain, */*, what many HTTP libraries send) failed
with a 500 when the action only had an HTML template.*/*now falls back
to the default format after the listed ones. - When an action has a template but none in a format the client accepts,
the response is now406 Not Acceptablewith an empty body, instead of a
500. An error page keeps its status (e.g. a 404 stays a 404). An action
without a template in the default format still raises
ComponentNotFoundError, because that's a missing view. - The blueprint's
public/index,public/not_foundandpublic/error
templates have format-less names (.jx, not.html.jx), so new apps
render them whatever the client accepts. - Pagination: a missing page number no longer logs an
"invalid page number: None" warning.
Changed
- Image variants are named after the original file
(<original name>.<ext>) instead ofvariant.<ext>.
Added
Disk.move_from_legacy_path(attachment), to move a file stored by an
older version to its current path.
Full Changelog: 0.32...0.33
0.32
Breaking
- "assets" folder moved to the same level as the "storage" and "db" folder
Changes
- Fix generators: a controller that works without a model, with partial actons and in a namespace
- Fix storage: the file inputs don't fail after an upload that didn't validate
- Blueprint: read the .env file of the project, fix the assets of the nginx config, and raise the body limit
- SqliteCache: each cache has its own model
- Test client: send the name of an uploaded file, not its path
Full Changelog: 0.31...0.32
0.31
Changes
db preparemigrates every database- Add
proper jx compileand use the compiled views at startup - Auth: save the upgraded password hash, and only hash when needed
- Blueprint:
- compile the views when the image is built
- fix the assets of the nginx config, and raise the body limit
- read the .env file of the project
- Generators: a controller that works without a model, with partial actions and in a namespace
- Rich text: sanitize the documents when they are rendered
- Skill: the template of an email doesn't have the
_emailsuffix - SqliteCache:
- creates its table when it's missing
- don't fail with "database is locked" under concurrent use
- each cache has its own model
- Storage: the file inputs don't fail after an upload that didn't validate
- Test client: send the name of an uploaded file, not its path
Full Changelog: 0.30...0.31