Released on October 14th 2024, codename Gutenberg
- Added Python 3.13 support
- Re-implemented router matching algorithm in Rust
- Re-implemented multipart parsing in Rust
- Added
Response
wrap methods - Refactored
Request.files
implementation - Support iteration on
Request.body
- Added
iter
,aiter
,http
andsnippet
to routes' outputs - Testing client is now using RSGI protocol in place of ASGI
- Logger now uses stdout in place of files under default configuration
Released on March 19th 2023, codename Fermi
- Added official Python 3.11 support
- Removed support for legacy encryption stack
- Added RSGI protocol support
- Use Granian as default web server in place of uvicorn
- Added application modules groups
- Dropped Python 3.7 support
Released on January 10th 2022, codename Edison
- Added official Python 3.10 support
- Added relative path support in templates
- Added support for spatial columns in ORM
- Added support for custom/multiple primary keys in ORM
- Added support for custom/multiple foreign keys in ORM
- Added support for custom and multiple primary keys relations in ORM
- Added
watch
parameter to ORM'scompute
decorator - Added
save
method to ORM's rows and relevant callbacks - Added
destroy
method to ORM's rows and relevant callbacks - Added
refresh
method to ORM's rows - Added
before_commit
andafter_commit
ORM callbacks - Added changes tracking to ORM's rows
- Added support to call super
rowmethod
decorated methods in ORM models - Added
migrations set
command to CLI - Added
skip_callbacks
parameter to relevant methods in ORM - ORM now automatically adds appropriate indexes for
unique
fields
Released on August 12th 2021, codename Da Vinci
- Minor enhancements on request flow
- Added ORM support for PostgreSQL json/jsonb fields and operators
- Added
widget_radio
toforms.FormStyle
- Added
dict
values support forin
validations - Use optional
emmett-crypto
package for cryptographic functions - Deprecated
security.secure_dumps
andsecurity.secure_loads
in favour of new crypto package - Added
on_delete
option tobelongs_to
andrefers_to
- Added
--dry-run
option to migrationsup
anddown
commands
Released on March 11th 2021, codename Copernicus
- Slightly refactored request flow
- Added
App.command_group
decorator - Added additional arguments acceptance in
AppModule
- Added static paths customisation for
AppModule
- Added
workers
options toserve
command - Changed default logging level to
info
inserve
command - Changed default
SameSite
policy for session cookies toLax
- Added official Python 3.9 support
Released on October 17th 2020, codename Bell
- Added type hints on all major interfaces
- Deprecated
App.run
- Deprecated string signals in favour of
extensions.Signals
- Removed
libs.sanitizer
- Use
orjson
for JSON serialization - Refactored request flow internals
- Added namespaces to templater
- Added
SameSite
support to session cookies - Added HTTP/2 support
- Added
Request.push_promise
- Added Python 3.9 support (beta)
Released on May 3rd 2020, codename Archimedes
- Dropped Python 2 support, requiring Python 3.7 minimum version
- Changed package name to
emmett
- Moved from WSGI to ASGI
- Moved to async syntax
- Moved
globals
module toctx
- Added
output
optional param toroute
definition - Introduced
develop
andserve
commands in place ofrun
- Pipeline
open
andclose
flows are now handled concurrently - Rewritten router, optimized request flow
- Introduced websockets support
- Added
after_loop
signal - Decoupled templating engine
- Added
Request.files
- Added
request_max_content_length
toApp.config
- Added
request_body_timeout
toApp.config
- Added async support in
cache
module - Decoupled internationalization engine
- Added runtime migration utils in ORM
- Added
response_timeout
toApp.config
- Use default
text/plain
Content-Type header in responses - Added
namespace
toInjector
class - Added Python 3.8 support
Released on October 29th 2018, codename Nunki
- Minor bugfixes
- Added proper support for 'big' id and reference fields to ORM
- Added
url_prefix
global routing paramater toApp
- Allow to specify different
templates_encoding
for templates loading in application config - Added
migrations_folder
variable to database configuration to support migrations with multiple databases - Added support for Python 3.7
- Refactored
join
andincluding
options handling in ORM - Added
cast
method to ORMField
- Added
cast
options tohas_many
decorator - Optimized pipeline flow
- Optimized router match code
Released on October 23rd 2017, codename Merak
- Several bugfixes
- Rewritten templates parsing and generation logic
- Rewritten ORM connection pooling
- Added support for advanced transaction usage in ORM
- Refactored cache module
- Exposed
get
,set
,get_or_set
,clear
methods incache.Cache
and handlers objects - Added decorator syntax support to cache module
- Added
response
method to cache module and relevantcache
parameter inapp.App.route
,app.App.module
andapp.AppModule.route
decorators - Added
switch
method toorm.objects.Set
to allow changing model context - Rewritten sessions' managers
- Deprecated
SessionCookieManager
,SessionFSManager
andSessionRedisManager
classes insessions
module in favour of unifiedSessionManager
wrapper and itscookies
,files
andredis
methods
Released on July 17th 2017, codename Lesath
- Several bugfixes
- Removed preload cache in templater to enhance extensions behavior
- Added
routes_paths
configuration inAuth
module - Added form widget for 'decimal' fields
- Avoid to guess 'Content-Type' response header from path extension
- Allow to use classmethods on
Field
class to specify types instead of string arguments
Released on March 10th 2017, codename Izar
- Several bugfixes
- Moved routing handlers and helpers to pipeline logic
- Added support for app modules nesting and inheritance
- Added lambda notation to
Set.where
when involving just one model - Rewritten
rowattr
androwmethod
injection logic - Removed
bind_to_model
option fromrowattr
androwmethod
- Optimized rows parsing in ORM adapters
- Improved caching techniques on selected records relations
- Added automatic casting of route variables
- Added support for float variable rules in routes
- Deprecated
dal
module in favour oform
- Added support for multiple paths in routes
- Enhanced wsgi request handling performance
- Added
handle_static
boolean option toApp.config
- Enhanced language recognition from Accept-Language header
- Optimized translator initialization
- Added
now
attribute and global method which returnsrequest.now
ordatetime.now
when request context is missing - Added access to computed values within insert and update callbaks
- Deprecated
Model.form_rw
in favour ofModel.fields_rw
- Optimized json and xml serializers, added optional
json_safe
serializer for old behavior - Added
__json__
and__xml__
methods handling in serializers for custom objects serialization - Added
headers
attribute toRequest
- Replaced udatetime dependency with pendulum
weppy.globals.now
,isDatetime
validator and date route variables are nowPendulum
objects- Added support for additional separators apart from '/' between route variables route definitions
- Removed
extension
parameter inurl
- Added
anchor
parameter inurl
- Deprecated
tags
module in favour ofhtml
- Optimized escaping code for html components
- Optimized templates caching
- Lightened the request flow
- Added signals to extensions
- Added application's defined commands in cli help listing
- Enhanced the json validator
- Refactored the
tools.mailer
module - Refactored the
tools.auth
module - The
Database
instance now performs auto connection using theauto_connection
parameter or just in the cli environment if missing - Automatic migrations on the database are now turned off by default
Released on October 31st 2016, codename Hadar
- Several bugfixes
- Added readable fields handling in forms
- Enhanced HTTP errors on streaming
- Improved templater performance
- Added
dbset
option toin
validator - Ensuring
unique
validation is performed also without forms - Better implementation for nested selection when using
join
andincluding
- Updated router to allow routes override
- Changed default serialization and validation of
datetime
fields to respect RFC3339 standard - Updated postgres default adapters to latest available from pyDAL
- Changed
has_one
attributes when usingjoin
andincluding
to not be lists - Added support for 'bigint' fields in the migrator
Released on June 7th 2016, codename Girtab
- Changed CLI 'shell' command to loads the entire application context
- Added
scope
option tohas_one
andhas_many
relations - Added
where
option tohas_one
andhas_many
relations @computation
and callbacks helpers now keep definition order- Allow usage of
has_one
andhas_many
helpers as decorators to customize relations' sets generation - Added default configuration for extensions
- Added
Model.new
method - Added databse indexing support
- Added default validation for 'password' fields
- Added CLI 'routes' command
- Deprecated
@computation
,@virtualfield
and@fieldmethod
in favor of@compute
,@rowattr
and@rowmethod
- Updated
current_model_only
parameter of@virtualfield
and@fieldmethod
tobind_to_model
in@rowattr
and@rowmethod
Released on January 25th 2016, codename Fornacis
- Several bugfixes
- Added
remove
method toHasManySet
andHasManyViaSet
- Common handlers and helpers are now accessible via application object
- Introduced scopes in models
- Template reloader now checks also
include
andextend
blocks - Deprecated
expose()
in favor ofroute()
- Implemented
join
method onSet
- Reviewed
Auth
actions depending on user status - Added support facilities to
Auth
in order to manage user status - Implemented support for custom naming on
has_many
- Added
current_model_only
option tovirtualfield
andfieldmethod
decorators, default changed toTrue
- Introduced testing suite for applications
- Added
language
option tourl()
- Implemented user status resync with database in
Auth
handler - Implemented
refers_to
in dal apis - Added 'self' keyword for self-relations in dal
- Changed
has_one
return value toSet
in order to avoid n+1 queries - Added
pagination
andincluding
options toSet.select()
- Caching resultsets on
has_one
andhas_many
realtions calls for select - Added
where
,all
,first
,last
andget
methods toModel
- Changed
add
method ofHasManySet
andHasManyViaSet
- Added
create
method toHasOneSet
,HasManySet
andHasManyViaSet
- Added
clear
method to session handlers for bulk invalidation - Implemented a revision based migration engine on the database layer
- Deprecated
Request.vars
,Request.get_vars
andRequest.post_vars
in favor ofRequest.params
,Request.query_params
andRequest.body_params
- Deprecated
Form.vars
andForm.input_vars
in favor ofForm.params
andForm.input_params
- Deprecated
url(vars={})
in favor ofurl(params={})
Released on October 2nd 2015, codename Elnath
- Introduced python 3 support
- Introduced multiple inheritance support on
Model
class - Added optional keyed arguments support to
HasManyViaSet.add
for additional columns on join tables - Minor bugfixes
Released on August 3rd 2015, codename Deneb
- Intruduced a real ORM inside weppy:
- Consequent new features:
belongs_to
,has_one
andhas_many
apis for relations- Automatic joins of attributes defined with new apis
- Cleaner
Model
definition syntax - New naming convention based on singular for model and plural for tables
- Automatic tablenames based on
Model
classes' names
- Consequent changes:
- Fields are now defined as attributes of
Model
- Some
Field
types are now procesed also considering the pythonic naming ('integer' -> 'int', 'boolean' -> 'bool') Field
class doesn't accept 'name' (first) parameter anymoreModel.entity
is now the more correctModel.table
Form
andDALForm
classes now accepts dictionaries of fields instead of listsAuth
module has tablenames changed to new naming convention
- Fields are now defined as attributes of
- Consequent new features:
- Completely refactored validators
- Introduced new validation syntax using dictionaries
Auth
now includes virtualfields on sessionuser
object- Dropped python 2.6.x support
- Bugfixes in forms
- Refactored
Auth
module - Added
body
parameter toabort
helper (optional) - Updated jQuery to v1.11.3
Released on April 1st 2015, codename Caph
- Various bugfixes
- Implemented streaming of pyDAL 'blob' fields
- Better implementation of
@virtualfield
and@fieldmethod
- Added caching system to templates
- Added auto-reloader for builtin wsgi server
- Added
on_end
method toHandler
class - Updated jQuery to v1.11.2
Released on February 11th 2015, codename Bellatrix
- Several bugfixes
- JSON body parsing for incoming requests with POST method and 'application/ json' headers
widget_select()
in forms userepresent
attribute of fields to render values- Moved
Storage
class to newsdict
one - Using pyDAL instead of a separated fork inside code
- Unified
DAL
/ModelsDAL
andAuth
/ModelsAuth
into newDAL
andAuth
Model
class now has only onesetup
method instead of the old unnecessary list ofset_
methods- Updated validators nomenclature to "camelcase"
stream_file()
in helpers now accept a path relative to application, the old one is now renamed in the more consistentstream_dbfile()
- Added
SessionFSManager
to store sessions' data on filesystem Model
class inherits fields and properties on subclassing- Added
service.xml
method to serve xml contents
Released on October 21st 2014, codename Altair
First public preview release.