Upstream changes:
0.5 Version
Fix OneToOne result object not be cached bug
When access reversed OneToOne property, if OneToOne record not existed, it'll auto create a blank object automatically. And if delete one record, it'll delete reversed onetoone record also.
Add lock protect when creating request and response local instance in _open() function
Add ORM Model migrate support
Refactor SortedDict with dict base class
Add model_config app, to support dynamic create model
Add model ipython notebook support
Refact sqldot
Add environ variables passing in uliweb shell command
Change app_url syntax to {'suffix':} to {'prefix':} only for dict data type
Add URL route option in settings, it is [URL_ROUTE], format is
[URL_ROUTE]
any_key_1 = ('mapping_str', 'replacement')
any_key_2 = ('mapping_str', 'replacement')
Change uliweb jupyter extension load mechanism from automatically to %load_ext uliweb
Upstream changes:
0.4.1 Version 2014-11-22
Add new app sequence, you can use it to create sequence value.
Fix generic version parameter passing to obj.save() bug, only when version is not False will be passed
Improve nginx and supervisor config content for deployment
Fix multi expose expose('/') and expose('') for the same URL bug
Add strict_slashes=False to Map instance.
Add Reference() with reference_class is None, it can replace SelfReference
Add ManyToMany() with reference_class is None, it can implements self manytomany relationship.
Fix ManyToMany() with through model references to the same model bug
Add #{appname} support in settings.ini
Add support for head.js
Fix template try bug
0.4 Version 2014-9-17
Refactor template with tornado
Fix Pickle default value process bug, will not convert empty value to ''
Add staticize command
Resume DEBUG_TEMPLATE option for template
Fix count implement when there is group_by, limit, join, it'll use select count(*) from (select * from table)
Add debug parameter for tracing i18n language
ORM add duplication support, so you can set it in CONNECTIONS options, it'll make definition of Model engine simple
Add set_session() function to orm
Add fieldname parameter to Property, and fix column mapping process between property and table field
Add -z paramter to load and loadtable command, thanks for linuxr
Fix uliweb load for csv format bug, thanks for taogeT
Fix tmp/templates_temp creation
Upstream changes:
0.3.1 Version
-----------------
* Add qqmail mail server backend support, thanks to Yubin Wang <harry198344 AT gmail.com>
* Add `yes` option, remove `--force` of makeapp,makeproject command
* Remove `has_options` attribute in Command class
* Fix `include` bug in ini
* Fix condition test bug of orm.get()
* Add `sqlshell` command
* Add `having` and `join` support to ORM
* Add whole database dump and load support #33
* Add NotFound to __all__ of orm
* Fix recorder bug
0.3 Version
-----------------
* Fix pyini "key=" for raw output bug
* Fix objcache for Lazy field bug, it'll refresh first if found Lazy field
* Fix executing orm command raise Exception not be thrown bug
* Refact multidb support
* Change UserWarn to DeprecationWarning
* Fix syncdb for different table name between `Model.__tablename__` and settings bug
* Remove `get_cached()` and add `cache` parameter to `Model.get()`
* Add `get_local_cache()` and `clear_local_cache()` in order to compatiable
with SimpleFrame implementation
* ORM `Property.to_str()` will return string but not unicode for CHAR and VARCHAR.
* Simplify server_default, if integer given, it'll be convert to `text(n)`
* `ManyResult.all()` can receive a `cache` parameter
* Improve `dump()` and `load()`, add PickleType , ManyToMany support
* Refact objcache app implementation and add `exclude` config option
* Remove primary_key detect, because multi primary_key columns can make composite primary key,
add partition support for mysql
* add None patch process, you can set '', 'empty, 'exception'.
* move uliweb/orm/middle*.py to uliweb/contrib/orm
* move uliweb/i18n/middle_i18n.py to uliweb/contrib/i18n
* move storage from core to utils directory
* improve count process
* Fix Reference and ManyToMany dump and load bug
* Add `is_in_web()` funciton, so you can test if current frame is in web executation
* Add `--gevent` support to call command
* Add `any` to Model, Result, ManyResult
* Add `clear_prefix()` to redis_cli APP, this feature need redis 2.6+ version
* Add version check to redis_cli APP, default is disabled
* Add `clear_table()` to objcache APP
* Add 'id' parameter to `get()` and `get_object()` and `get_cached_object()` functions,
so that if the ID can't be found in cache, condition (old parameter) will be used.
And when id and condition given both, only when id is not integer or valid expression
condition will be used. So in most cases, you don't need pass condition.
* If not set url option for session of database type, it'll automatically use ORM settings if exists
* Add settings and local_settings env variables support
* Fix count bug
* Change orm requirement.txt, add uliweb-alembic package
* generic app add avalon and mmgrid support
* Model.put() not is deprecated, you should use save
* `generic.py` add version support when saving, and add `save` callback parameter.
0.2.6 Version
-----------------
* Add warning output for Reference class parameter of relation properties definition.
* Fix manual and total process bug in ListView and SelectListView
* Fix rawsql bug
* Add `get_object()` support in Generic ListView
* Fix `get_cached()` bug
* Fix process_files in generic add and edit functions bug
* Add `import readline` before enter shell environment
* change occ name to version
* Improve autocomplete in shell command
* Fix manytomany cached value is not used when do the save, because of not stored
in `_old_values`
* If you've already define primary key in Model, then it'll not create id property
for you, just like:
```
user_id = Field(int, primary_key=True, autoincrement=True)
```
* Fix sqldot bug and improve sqlhtml generation
* Eanble colored log output by default.
* Add recorder app, you can use it to record the visit url, and test it later
0.2.5 Version
-----------------
* Fix config template and add `uwsgi` shell support
* Add environment variables support in `settings.ini`. For example, there is a
`MYSQL_PORT` defined in environment, so you can defined something in settings.ini:
```
[DEFAULT]
port = $MYSQL_PORT
port_str = '${MYSQL_PORT}'
```
`$MYSQL_PORT` is the same as `${MYSQL_PORT}`. Just when the variable follows
identifier, so `${}` can easily separate between them.
* Add `STATIC_COMBINE_CONFIG` configuration, you can toggle static combination with it.
Default is False. The configuration is:
```
[STATIC_COMBINE_CONFIG]
enabled = False
```
* Fix objcache app bug, if not fields defined in settings, it'll use all columns of table
* Add `get_table` function to `functions`, you can use it to get table object. Used
in `uliweb.contrib.tables` app.
* Add `local_cache` to local in SimpleFrame, and it can be used to store require relative
cache values, and it'll be empty after each require process.
* Improve `get_object()` function in ORM, add `use_local` parameter, so the cached
value will be checked in `local_cache` first, and also save it in local_cache when
get a value from cache or database.
* Improve objcache config format, you can also define table like this:
```
user = {'fields':['username'], 'expire':expire_time, 'key':callable(instance)|key_field}
#or
user = ['username', 'nickname']
#or
user =
```
If no fields defined, it'll use all fields of Model. And if expire is 0 or
not defined, it'll not expired at all.
`key` will be used to replace `id`, if you want another key value, and it
can be also a callable object, it'll receive an instance of Model parameter,
so you can create any key value as you want.
* Add Optimistic Concurrency Control support for ORM, so you should defined `version`
Field first in Model, then when you save the object, you should use:
```
obj.save(occ=True)
```
If there is already other operation saved the record, it'll raise an `SaveError`
Exception by default, because the version has been changed. You can also pass:
* `occ_fieldname` used to defined the version fieldname, default is `version`
* `occ_exception` used to enabled Exception raised, default is `True`, if you
set it `False` it'll return False, but not raise an Exception.
0.2.4 Version
-----------------
* Fix ORM is not compatible with SQLAlchemy 0.9.1.
* add `__contains__` to functions, so you can test if an API is already defined, just
use:
```
'flash' in functions
```
* Refact generic.py, remove `functions.flash` and `functions.get_fileserving` dependencies by default.
* Fix `yield` support in view function, you can also used in gevent environment.
* Fix `rawsql()` bug for different database engine
* Fix `jsonp()` dumps Chinese characters bug
* Add `trim_path()` function to `utils/common.py`, it can trim a file path to
limited length, for example:
```
>>> a = '/project/apps/default/settings.ini'
>>> trim_path(a, 30)
'.../apps/default/settings.ini'
```
Default limited length is 30.
* Add ORM connection information output when given `-v` option in command line. And
the password will be replace with `'*'`.
* Add multiple apps support for `makeapp` command.
* Refactor `save_file()` process, add `headers` and `convertors` parameter.
* Fix `call_view()` invoke `wrap_result` bug. Missing pass `handler` parameter to wrap_result.
Uliweb is a full-stacked Python based web framework. It has three
main design goals, they are: reusability, configurability, and
replaceability. All the functionalities revolve around these goals.