MobileBlur

Hex Artifact Content
Login

Artifact 6434318c110515969fbc4b1c5eceab295f78df69:


0000: 23 23 20 49 4e 53 54 41 4c 4c 41 54 49 4f 4e 20  ## INSTALLATION 
0010: 49 4e 53 54 52 55 43 54 49 4f 4e 20 2d 20 49 4d  INSTRUCTION - IM
0020: 50 4f 52 54 41 4e 54 0a 0a 54 6f 20 73 74 61 72  PORTANT..To star
0030: 74 20 77 65 62 32 70 79 20 74 68 65 72 65 20 69  t web2py there i
0040: 73 20 4e 4f 20 4e 45 45 44 20 74 6f 20 69 6e 73  s NO NEED to ins
0050: 74 61 6c 6c 20 69 74 2e 20 4a 75 73 74 20 75 6e  tall it. Just un
0060: 7a 69 70 20 61 6e 64 20 64 6f 3a 0a 0a 3e 20 70  zip and do:..> p
0070: 79 74 68 6f 6e 20 77 65 62 32 70 79 2e 70 79 0a  ython web2py.py.
0080: 0a 54 68 61 74 73 20 69 73 20 69 74 21 21 21 0a  .Thats is it!!!.
0090: 0a 23 23 20 77 65 62 32 70 79 20 66 69 6c 65 20  .## web2py file 
00a0: 73 74 72 75 63 74 75 72 65 0a 0a 73 74 61 72 74  structure..start
00b0: 20 77 65 62 32 70 79 20 77 69 74 68 3a 0a 20 0a   web2py with:. .
00c0: 20 20 20 70 79 74 68 6f 6e 20 77 65 62 32 70 79     python web2py
00d0: 2e 70 79 0a 0a 60 60 0a 20 20 20 20 5c 70 72 6f  .py..``.    \pro
00e0: 6a 65 63 74 0a 09 52 45 41 44 4d 45 0a 09 4c 49  ject..README..LI
00f0: 43 45 4e 53 45 0a 20 20 20 20 20 20 20 20 54 4f  CENSE.        TO
0100: 44 4f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  DO              
0110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0120: 20 0a 20 20 20 20 20 20 20 20 4d 61 6b 65 66 69   .        Makefi
0130: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  le              
0140: 20 20 20 20 20 23 23 20 6d 61 6b 65 20 61 6c 6c       ## make all
0150: 20 61 6e 64 20 6d 61 6b 65 20 61 70 70 0a 09 77   and make app..w
0160: 65 62 32 70 79 2e 70 79 20 20 20 20 20 20 20 20  eb2py.py        
0170: 20 20 20 20 20 20 20 20 20 20 23 23 20 74 68 65            ## the
0180: 20 73 74 61 72 74 75 70 20 73 63 72 69 70 74 20   startup script 
0190: 28 2a 29 0a 20 20 20 20 20 20 20 20 70 61 72 61  (*).        para
01a0: 6d 65 74 65 72 73 2e 70 79 20 20 20 20 20 20 20  meters.py       
01b0: 20 20 20 20 20 20 20 23 23 20 63 72 65 61 74 65         ## create
01c0: 64 20 61 74 20 73 74 61 72 74 75 70 20 0a 20 20  d at startup .  
01d0: 20 20 20 20 20 20 61 64 6d 69 6e 2e 74 61 72 20        admin.tar 
01e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01f0: 20 23 23 20 74 68 65 20 61 64 6d 69 6e 20 61 70   ## the admin ap
0200: 70 20 28 2a 29 0a 20 20 20 20 20 20 20 20 65 78  p (*).        ex
0210: 61 6d 70 6c 65 73 2e 74 61 72 20 20 20 20 20 20  amples.tar      
0220: 20 20 20 20 20 20 20 20 20 23 23 20 65 78 61 6d           ## exam
0230: 70 6c 65 73 20 61 6e 64 20 64 6f 63 75 6d 65 6e  ples and documen
0240: 74 61 74 69 6f 6e 20 61 70 70 20 28 2a 29 0a 20  tation app (*). 
0250: 20 20 20 20 20 20 20 77 65 6c 63 6f 6d 65 2e 74         welcome.t
0260: 61 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ar              
0270: 20 20 23 23 20 74 68 65 20 77 65 6c 63 6f 6d 65    ## the welcome
0280: 20 61 70 70 20 28 65 6e 74 72 79 20 70 6f 69 6e   app (entry poin
0290: 74 29 20 28 2a 29 0a 09 5c 67 6c 75 6f 6e 20 20  t) (*)..\gluon  
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02b0: 20 20 20 23 23 20 74 68 65 20 63 6f 72 65 20 6c     ## the core l
02c0: 69 62 72 61 72 69 65 73 20 28 2a 29 0a 20 20 20  ibraries (*).   
02d0: 20 20 20 20 20 5c 64 65 70 6f 73 69 74 20 20 20       \deposit   
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 23 23 20 75 73 65 64 20 66 6f 72 20 7a 69 70 20  ## used for zip 
0300: 61 6e 64 20 69 6e 73 74 61 6c 6c 20 61 70 70 73  and install apps
0310: 0a 20 20 20 20 20 20 20 20 73 65 74 75 70 5f 61  .        setup_a
0320: 70 70 2e 70 79 20 20 20 20 20 20 20 20 20 20 20  pp.py           
0330: 20 20 20 20 23 23 20 75 73 65 64 20 62 79 20 70      ## used by p
0340: 79 32 61 70 70 20 74 6f 20 6d 61 6b 65 20 4f 53  y2app to make OS
0350: 58 20 65 78 65 63 75 74 61 62 6c 65 0a 20 20 20  X executable.   
0360: 20 20 20 20 20 73 65 74 75 70 5f 65 78 65 2e 70       setup_exe.p
0370: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y               
0380: 23 23 20 75 73 65 64 20 62 79 20 70 79 32 61 70  ## used by py2ap
0390: 70 20 74 6f 20 6d 61 6b 65 20 57 69 6e 6f 77 73  p to make Winows
03a0: 20 65 78 65 63 75 74 62 6c 65 0a 20 20 20 20 20   executble.     
03b0: 20 20 20 77 73 67 69 68 61 6e 64 6c 65 72 2e 70     wsgihandler.p
03c0: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 23 23  y             ##
03d0: 20 74 6f 20 75 73 65 20 47 6c 75 6f 6e 20 77 69   to use Gluon wi
03e0: 74 68 20 6d 6f 64 5f 77 73 67 69 0a 20 20 20 20  th mod_wsgi.    
03f0: 20 20 20 20 5c 64 69 73 74 20 20 20 20 20 20 20      \dist       
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
0410: 23 20 75 73 65 64 20 62 79 20 70 79 32 61 70 70  # used by py2app
0420: 2c 20 70 79 32 65 78 65 0a 20 20 20 20 20 20 20  , py2exe.       
0430: 20 5c 62 75 69 6c 64 20 20 20 20 20 20 20 20 20   \build         
0440: 20 20 20 20 20 20 20 20 20 20 20 20 23 23 20 75              ## u
0450: 73 65 64 20 62 79 20 70 79 32 61 70 70 2c 20 70  sed by py2app, p
0460: 79 32 65 78 65 0a 20 20 20 20 20 20 20 20 5c 74  y2exe.        \t
0470: 65 73 74 73 20 20 20 20 20 20 20 20 20 20 20 20  ests            
0480: 20 20 20 20 20 20 20 20 20 23 23 20 75 6e 64 65           ## unde
0490: 72 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 73 74  r development st
04a0: 75 66 66 0a 20 20 20 20 20 20 20 20 5c 64 6f 63  uff.        \doc
04b0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
04c0: 20 20 20 20 20 20 20 23 23 20 69 6e 20 70 72 6f         ## in pro
04d0: 67 72 65 73 73 20 64 6f 63 75 6d 65 6e 74 61 74  gress documentat
04e0: 69 6f 6e 0a 09 5c 61 70 70 6c 69 63 61 74 69 6f  ion..\applicatio
04f0: 6e 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ns              
0500: 23 23 20 61 72 65 20 74 68 65 20 61 70 70 73 0a  ## are the apps.
0510: 09 09 5c 77 65 6c 63 6f 6d 65 20 20 20 20 20 20  ..\welcome      
0520: 20 20 20 20 20 23 23 20 61 70 70 6c 69 63 61 74       ## applicat
0530: 69 6f 6e 20 77 65 6c 63 6f 6d 65 2c 20 66 6f 72  ion welcome, for
0540: 20 65 78 61 6d 70 6c 65 0a 09 09 09 5c 6d 6f 64   example....\mod
0550: 65 6c 73 0a 09 09 09 5c 76 69 65 77 73 0a 09 09  els....\views...
0560: 09 5c 63 6f 6e 74 72 6f 6c 6c 65 72 73 0a 09 09  .\controllers...
0570: 09 5c 73 65 73 73 69 6f 6e 73 0a 09 09 09 5c 65  .\sessions....\e
0580: 72 72 6f 72 73 0a 09 09 09 5c 63 61 63 68 65 0a  rrors....\cache.
0590: 09 09 09 5c 73 74 61 74 69 63 0a 20 20 20 20 20  ...\static.     
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05b0: 20 20 20 5c 75 70 6c 6f 61 64 73 0a 20 20 20 20     \uploads.    
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 5c 6d 6f 64 75 6c 65 73 0a 60 60 0a      \modules.``.
05e0: 0a 23 23 20 45 57 46 20 76 31 2e 35 20 2d 3e 20  .## EWF v1.5 -> 
05f0: 76 31 2e 36 20 0a 2d 20 6c 6f 61 64 20 61 6e 64  v1.6 .- load and
0600: 20 73 61 76 65 20 2e 70 79 20 69 6e 20 61 73 63   save .py in asc
0610: 69 69 2c 20 61 76 6f 69 64 73 20 70 72 6f 62 6c  ii, avoids probl
0620: 65 6d 20 77 69 74 68 20 4c 46 2b 43 52 20 6f 6e  em with LF+CR on
0630: 20 77 69 6e 64 6f 77 73 0a 2d 20 61 64 64 65 64   windows.- added
0640: 20 70 61 74 68 2e 6a 6f 69 6e 20 69 6e 20 63 6f   path.join in co
0650: 6d 70 69 6c 65 61 70 70 2c 20 66 69 78 65 64 20  mpileapp, fixed 
0660: 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 57 69 6e  problem with Win
0670: 64 6f 77 73 20 63 6f 6d 70 69 6c 65 61 70 70 0a  dows compileapp.
0680: 0a 23 23 20 45 57 46 20 76 31 2e 36 20 2d 3e 20  .## EWF v1.6 -> 
0690: 76 31 2e 37 0a 2d 20 69 6e 20 70 61 74 68 73 20  v1.7.- in paths 
06a0: 72 65 70 6c 61 63 65 20 27 5c 27 20 77 69 74 68  replace '\' with
06b0: 20 27 2f 27 20 74 6f 20 66 69 78 20 70 72 6f 62   '/' to fix prob
06c0: 6c 65 6d 20 77 69 74 68 20 77 69 6e 64 6f 77 73  lem with windows
06d0: 20 70 61 74 68 73 0a 2d 20 75 73 69 6e 67 20 6c   paths.- using l
06e0: 69 6d 69 74 62 79 20 69 6e 20 64 61 74 61 62 61  imitby in databa
06f0: 73 65 20 61 64 6d 69 6e 69 73 74 72 61 74 69 6f  se administratio
0700: 6e 0a 2d 20 72 65 70 6c 61 63 65 64 20 6d 69 6d  n.- replaced mim
0710: 65 2f 6d 69 6c 74 75 70 61 72 74 20 77 69 74 68  e/miltupart with
0720: 20 6d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d   multipart/form-
0730: 64 61 74 61 20 74 6f 20 66 69 78 20 61 20 77 69  data to fix a wi
0740: 6e 64 6f 77 73 20 70 72 6f 62 6c 65 6d 0a 0a 23  ndows problem..#
0750: 23 20 45 57 46 20 76 31 2e 37 20 2d 3e 20 47 6c  # EWF v1.7 -> Gl
0760: 75 6f 6e 20 76 31 2e 30 0a 2d 20 4e 61 6d 65 20  uon v1.0.- Name 
0770: 63 68 61 6e 67 65 20 0a 2d 20 49 6d 70 72 6f 76  change .- Improv
0780: 65 64 20 6c 61 79 6f 75 74 2e 68 74 6d 6c 0a 0a  ed layout.html..
0790: 23 23 20 47 6c 75 6f 6e 20 76 31 2e 30 20 2d 3e  ## Gluon v1.0 ->
07a0: 20 76 31 2e 31 0a 2d 20 62 75 67 20 69 6e 20 73   v1.1.- bug in s
07b0: 71 6c 68 74 6d 6c 20 77 69 74 68 20 4a 4f 49 4e  qlhtml with JOIN
07c0: 53 20 71 75 65 72 69 65 73 0a 0a 23 23 20 47 6c  S queries..## Gl
07d0: 75 6f 6e 20 76 31 2e 31 20 2d 3e 20 76 31 2e 32  uon v1.1 -> v1.2
07e0: 0a 2d 20 66 69 78 65 64 20 73 6f 6d 65 20 74 79  .- fixed some ty
07f0: 70 6f 73 20 69 6e 20 65 78 61 6d 70 6c 65 73 0a  pos in examples.
0800: 2d 20 49 53 5f 49 4e 5f 53 45 54 20 6e 6f 77 20  - IS_IN_SET now 
0810: 73 75 70 70 6f 72 74 73 20 6c 61 62 65 6c 73 0a  supports labels.
0820: 2d 20 63 6c 65 61 6e 75 70 20 69 6e 20 73 71 6c  - cleanup in sql
0830: 2e 70 79 20 64 6f 65 73 20 6e 6f 74 20 63 6c 65  .py does not cle
0840: 61 6e 75 70 2c 20 6a 75 73 74 20 63 68 65 63 6b  anup, just check
0850: 73 20 76 61 6c 69 64 20 66 69 65 6c 64 20 61 6e  s valid field an
0860: 64 20 74 61 62 6c 65 20 6e 61 6d 65 73 0a 0a 23  d table names..#
0870: 23 20 47 6c 75 6f 6e 20 76 31 2e 33 0a 2d 20 61  # Gluon v1.3.- a
0880: 64 64 65 64 20 49 53 5f 49 4e 5f 44 42 2c 20 49  dded IS_IN_DB, I
0890: 53 5f 4e 4f 54 5f 49 4e 5f 44 42 20 61 6e 64 20  S_NOT_IN_DB and 
08a0: 75 70 64 61 74 65 64 20 65 78 61 6d 70 6c 65 73  updated examples
08b0: 20 61 63 63 6f 72 64 69 6e 67 6c 79 0a 0a 23 23   accordingly..##
08c0: 20 47 6c 75 6f 6e 20 76 31 2e 34 0a 2d 20 66 69   Gluon v1.4.- fi
08d0: 78 65 64 20 70 72 6f 62 6c 65 6d 20 77 69 74 68  xed problem with
08e0: 20 49 53 5f 49 4e 54 5f 49 4e 5f 52 41 4e 47 45   IS_INT_IN_RANGE
08f0: 20 61 6e 64 20 49 53 5f 46 4c 4f 41 54 5f 49 4e   and IS_FLOAT_IN
0900: 5f 52 41 4e 47 45 2e 20 4e 6f 77 20 61 6e 20 65  _RANGE. Now an e
0910: 72 72 6f 72 20 69 6e 20 61 20 76 61 6c 69 64 61  rror in a valida
0920: 74 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 20  tor is reported 
0930: 61 73 20 61 20 74 69 63 6b 65 74 2e 20 47 6f 6f  as a ticket. Goo
0940: 64 20 76 61 6c 69 64 61 74 6f 72 73 20 73 68 6f  d validators sho
0950: 75 6c 64 20 6e 6f 74 20 72 61 69 73 65 20 45 78  uld not raise Ex
0960: 63 65 70 74 69 6f 6e 73 2e 0a 2d 20 49 53 5f 49  ceptions..- IS_I
0970: 4e 5f 44 42 20 64 69 73 70 6c 61 79 73 20 22 6c  N_DB displays "l
0980: 61 62 65 6c 20 28 69 64 29 22 0a 2d 20 69 74 20  abel (id)".- it 
0990: 63 61 6e 20 75 70 6c 6f 61 64 20 66 69 6c 65 73  can upload files
09a0: 20 77 69 74 68 6f 75 74 20 65 78 74 65 6e 73 69   without extensi
09b0: 6f 6e 0a 2d 20 6d 69 67 72 61 74 69 6f 6e 20 69  on.- migration i
09c0: 73 20 6e 6f 77 20 6f 70 74 69 6f 6e 61 6c 20 28  s now optional (
09d0: 64 65 66 69 6e 65 5f 74 61 62 6c 65 20 68 61 73  define_table has
09e0: 20 6d 69 67 72 61 74 65 3d 46 61 6c 73 65 20 6f   migrate=False o
09f0: 70 74 69 6f 6e 29 0a 0a 23 23 20 47 6c 75 6f 6e  ption)..## Gluon
0a00: 20 76 31 2e 35 0a 2d 20 3c 66 6f 72 6d 3e 20 2d   v1.5.- <form> -
0a10: 3e 20 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 3d 22  > <form method="
0a20: 70 6f 73 74 22 3e 20 69 6e 20 65 72 72 6f 72 73  post"> in errors
0a30: 2e 68 74 6d 6c 0a 2d 20 72 65 70 6c 61 63 65 28  .html.- replace(
0a40: 27 2f 2f 27 2c 27 2f 2f 2f 2f 27 29 20 69 6e 20  '//','////') in 
0a50: 73 75 62 20 69 6e 20 74 65 6d 70 6c 61 74 65 2e  sub in template.
0a60: 70 79 0a 0a 23 23 20 47 6c 75 6f 6e 20 76 31 2e  py..## Gluon v1.
0a70: 38 0a 2d 20 6e 6f 20 6d 6f 72 65 20 63 68 64 69  8.- no more chdi
0a80: 72 20 28 74 68 72 65 61 64 20 75 6e 73 61 66 65  r (thread unsafe
0a90: 29 0a 2d 20 6e 6f 20 6d 6f 72 65 20 73 79 73 2e  ).- no more sys.
0aa0: 73 74 64 6f 75 74 20 28 74 68 72 65 61 64 20 75  stdout (thread u
0ab0: 6e 73 61 66 65 29 0a 2d 20 72 65 73 70 6f 6e 73  nsafe).- respons
0ac0: 65 2e 62 6f 64 79 20 69 73 20 53 74 72 69 6e 67  e.body is String
0ad0: 49 4f 28 29 0a 2d 20 61 64 6d 69 6e 2f 64 65 66  IO().- admin/def
0ae0: 61 75 6c 74 2f 73 69 74 65 20 69 6e 66 6f 72 6d  ault/site inform
0af0: 73 20 61 62 6f 75 74 20 75 70 67 72 61 64 65 0a  s about upgrade.
0b00: 2d 20 72 65 73 70 6f 6e 73 65 2e 6c 6f 63 6b 65  - response.locke
0b10: 72 20 28 6f 70 74 69 6f 6e 61 6c 29 0a 0a 23 23  r (optional)..##
0b20: 20 47 6c 75 6f 6e 20 76 31 2e 39 0a 2d 20 61 6c   Gluon v1.9.- al
0b30: 6c 6f 77 20 22 63 6f 75 6e 74 28 2a 29 22 20 69  low "count(*)" i
0b40: 6e 20 73 65 6c 65 63 74 0a 2d 20 64 62 2e 65 78  n select.- db.ex
0b50: 65 63 75 74 65 28 29 0a 2d 20 66 69 78 65 64 20  ecute().- fixed 
0b60: 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 63 6f 6e  problem with con
0b70: 74 69 6e 75 65 20 61 6e 64 20 72 65 74 75 72 6e  tinue and return
0b80: 20 69 6e 20 74 65 6d 70 6c 61 74 65 0a 2d 20 72   in template.- r
0b90: 65 6d 6f 76 65 64 20 74 72 79 3a 20 2e 2e 2e 20  emoved try: ... 
0ba0: 65 78 63 65 70 74 20 69 6e 20 73 71 6c 2e 70 79  except in sql.py
0bb0: 0a 2d 20 66 69 78 65 64 20 27 5c 74 27 0a 0a 23  .- fixed '\t'..#
0bc0: 23 20 47 6c 75 6f 6e 20 76 31 2e 31 30 0a 2d 20  # Gluon v1.10.- 
0bd0: 66 69 78 65 64 20 63 6f 6e 63 75 72 72 65 6e 63  fixed concurrenc
0be0: 79 20 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 20  y problems with 
0bf0: 53 51 4c 44 42 2e 5f 69 6e 73 74 61 6e 63 65 73  SQLDB._instances
0c00: 20 61 6e 64 20 53 51 4c 44 42 2e 5f 66 6f 6c 64   and SQLDB._fold
0c10: 65 72 73 2c 20 6e 6f 77 20 75 73 65 20 6c 6f 63  ers, now use loc
0c20: 6b 0a 2d 20 6e 6f 77 2c 20 62 79 20 64 65 66 61  k.- now, by defa
0c30: 75 6c 74 2c 20 65 64 69 74 20 53 51 4c 46 4f 52  ult, edit SQLFOR
0c40: 4d 73 20 72 65 74 61 69 6e 20 75 70 6c 6f 61 64  Ms retain upload
0c50: 65 64 20 66 69 6c 65 73 0a 0a 23 23 20 47 6c 75  ed files..## Glu
0c60: 6f 6e 20 76 31 2e 31 31 0a 2d 20 61 70 70 61 64  on v1.11.- appad
0c70: 6d 69 6e 20 61 6c 6c 6f 77 73 20 74 6f 20 6b 65  min allows to ke
0c80: 65 70 20 6f 72 20 64 65 6c 65 74 65 20 75 70 6c  ep or delete upl
0c90: 6f 61 64 65 64 20 66 69 6c 65 73 0a 0a 23 23 20  oaded files..## 
0ca0: 47 6c 75 6f 6e 20 76 31 2e 31 32 0a 2d 20 69 6e  Gluon v1.12.- in
0cb0: 20 73 71 6c 2e 70 79 20 0a 2d 20 68 61 6e 64 6c   sql.py .- handl
0cc0: 65 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 70  es NULL values p
0cd0: 72 6f 70 65 72 6c 79 0a 2d 20 75 6e 69 63 6f 64  roperly.- unicod
0ce0: 65 20 73 75 70 70 6f 72 74 20 28 64 61 74 61 20  e support (data 
0cf0: 61 6c 77 61 79 73 20 73 74 6f 72 65 64 20 69 6e  always stored in
0d00: 20 75 74 66 2d 38 29 0a 2d 20 27 64 61 74 65 27   utf-8).- 'date'
0d10: 20 2d 3e 20 64 61 74 65 74 69 6d 65 2e 64 61 74   -> datetime.dat
0d20: 65 20 2c 27 74 69 6d 65 27 20 2d 3e 20 64 61 74  e ,'time' -> dat
0d30: 65 74 69 6d 65 2e 74 69 6d 65 2c 20 27 64 61 74  etime.time, 'dat
0d40: 65 74 69 6d 65 27 20 2d 3e 20 64 61 74 65 74 69  etime' -> dateti
0d50: 6d 65 2e 64 61 74 65 74 69 6d 65 2c 20 27 62 6f  me.datetime, 'bo
0d60: 6f 6c 65 61 6e 27 20 2d 3e 20 54 72 75 65 2f 46  olean' -> True/F
0d70: 61 6c 73 65 0a 2d 20 6d 6f 73 74 20 74 79 70 65  alse.- most type
0d80: 73 20 68 61 76 65 20 64 65 66 61 75 6c 74 20 76  s have default v
0d90: 61 6c 69 64 61 74 6f 72 73 0a 2d 20 53 51 4c 46  alidators.- SQLF
0da0: 69 65 6c 64 28 2e 2e 2e 2c 72 65 71 75 69 72 65  ield(...,require
0db0: 64 3d 54 72 75 65 29 20 6f 70 74 69 6f 6e 2e 0a  d=True) option..
0dc0: 2d 20 53 51 4c 52 6f 77 73 20 68 61 73 20 5f 5f  - SQLRows has __
0dd0: 73 74 72 5f 5f 20 74 68 61 74 20 73 65 72 69 61  str__ that seria
0de0: 6c 69 7a 65 73 20 69 6e 20 43 53 56 20 61 6e 64  lizes in CSV and
0df0: 20 78 6d 6c 28 29 20 74 68 61 74 20 73 65 72 69   xml() that seri
0e00: 61 6c 69 7a 65 73 20 69 6e 20 48 54 4d 4c 0a 2d  alizes in HTML.-
0e10: 20 53 51 4c 54 61 62 6c 65 20 68 61 73 20 69 6d   SQLTable has im
0e20: 70 6f 72 74 5f 66 72 6f 6d 5f 63 73 76 5f 66 69  port_from_csv_fi
0e30: 6c 65 28 2e 2e 2e 29 0a 2d 20 67 6c 75 6f 6e 2e  le(...).- gluon.
0e40: 73 69 6d 70 6c 65 6a 73 6f 6e 20 66 6f 72 20 41  simplejson for A
0e50: 4a 41 58 0a 2d 20 69 6e 20 76 61 6c 69 64 61 74  JAX.- in validat
0e60: 6f 72 73 2e 70 79 0a 2d 20 49 53 5f 49 4e 5f 44  ors.py.- IS_IN_D
0e70: 42 28 64 62 2c 2e 2e 29 20 2d 20 20 64 62 20 63  B(db,..) -  db c
0e80: 61 6e 20 62 65 20 61 6e 20 53 51 4c 53 65 74 20  an be an SQLSet 
0e90: 6f 72 20 61 6e 20 53 51 4c 44 42 0a 2d 20 62 65  or an SQLDB.- be
0ea0: 74 74 65 72 20 65 72 72 6f 72 20 6d 65 73 73 61  tter error messa
0eb0: 67 65 73 0a 2d 20 69 6e 20 61 64 6d 69 6e 0a 2d  ges.- in admin.-
0ec0: 20 6e 65 77 20 69 6d 70 6f 72 74 2f 65 78 70 6f   new import/expo
0ed0: 72 74 20 69 6e 20 63 73 76 2c 20 75 70 64 61 74  rt in csv, updat
0ee0: 65 20 61 6e 64 20 64 65 6c 65 74 65 20 69 6e 74  e and delete int
0ef0: 65 72 66 61 63 65 2e 0a 2d 20 69 6e 20 61 70 70  erface..- in app
0f00: 61 64 6d 69 6e 0a 2d 20 65 64 69 74 20 66 6f 72  admin.- edit for
0f10: 6d 20 61 6c 6c 6f 77 73 20 74 6f 20 6b 65 65 70  m allows to keep
0f20: 20 73 74 6f 72 65 64 20 65 6e 63 72 79 70 74 65   stored encrypte
0f30: 64 20 70 61 73 73 77 6f 72 64 0a 2d 20 69 6e 20  d password.- in 
0f40: 6d 61 69 6e 2e 70 79 0a 2d 20 68 74 74 70 3a 2f  main.py.- http:/
0f50: 2f 68 6f 73 74 20 6e 6f 74 20 64 65 66 61 75 6c  /host not defaul
0f60: 74 73 20 74 6f 20 68 74 74 70 3a 2f 2f 68 6f 73  ts to http://hos
0f70: 74 2f 69 6e 69 74 2f 64 65 66 61 75 6c 74 2f 69  t/init/default/i
0f80: 6e 64 65 78 0a 2d 20 4e 65 77 20 74 68 69 72 64  ndex.- New third
0f90: 20 70 61 72 74 79 20 6d 6f 64 75 6c 65 73 0a 2d   party modules.-
0fa0: 20 67 6c 75 6f 6e 2e 73 69 6d 70 6c 65 6a 73 6f   gluon.simplejso
0fb0: 6e 28 2e 64 75 6d 70 73 2c 20 2e 6c 6f 61 64 73  n(.dumps, .loads
0fc0: 29 0a 2d 20 67 6c 75 6f 6e 2e 70 79 72 74 66 28  ).- gluon.pyrtf(
0fd0: 2e 64 75 6d 70 73 29 0a 2d 20 67 6c 75 6f 6e 2e  .dumps).- gluon.
0fe0: 72 73 73 32 28 2e 64 75 6d 70 73 29 0a 0a 23 23  rss2(.dumps)..##
0ff0: 20 47 6c 75 6f 6e 20 76 31 2e 31 33 0a 2d 20 28   Gluon v1.13.- (
1000: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  this is one of t
1010: 68 65 20 62 69 67 67 65 73 74 20 72 65 76 69 73  he biggest revis
1020: 69 6f 6e 73 20 65 76 65 72 29 0a 2d 20 49 6d 70  ions ever).- Imp
1030: 72 6f 76 65 64 20 73 71 6c 2e 70 79 20 68 61 73  roved sql.py has
1040: 20 73 75 70 70 6f 72 74 20 4d 79 53 51 4c 2c 20   support MySQL, 
1050: 63 78 4f 72 61 63 6c 65 20 28 65 78 70 65 72 69  cxOracle (experi
1060: 6d 65 6e 74 61 6c 29 2c 20 65 78 74 72 61 63 74  mental), extract
1070: 2c 20 6c 69 6b 65 20 61 6e 64 20 62 65 74 74 65  , like and bette
1080: 72 20 74 65 73 74 69 6e 67 0a 2d 20 53 51 4c 44  r testing.- SQLD
1090: 42 2e 74 61 62 6c 65 73 20 61 6e 64 20 53 51 4c  B.tables and SQL
10a0: 54 61 62 6c 65 2e 66 69 65 6c 64 73 20 61 72 65  Table.fields are
10b0: 20 6e 6f 77 20 53 51 4c 43 61 6c 61 62 6c 65 4c   now SQLCalableL
10c0: 69 73 74 20 6f 62 6a 65 63 74 73 0a 2d 20 46 69  ist objects.- Fi
10d0: 78 65 64 20 62 75 67 20 77 69 74 68 20 65 64 69  xed bug with edi
10e0: 74 69 6e 67 20 69 6e 74 65 67 65 72 20 66 69 65  ting integer fie
10f0: 6c 64 73 20 73 74 6f 72 69 6e 67 20 7a 65 72 6f  lds storing zero
1100: 0a 2d 20 41 64 6d 69 6e 20 69 6e 74 65 72 66 61  .- Admin interfa
1110: 63 65 20 6e 6f 77 20 73 61 79 73 20 22 69 6e 73  ce now says "ins
1120: 65 72 74 20 6e 65 77 20 5b 74 61 62 6c 65 6e 61  ert new [tablena
1130: 6d 65 5d 22 20 61 6e 64 20 64 69 73 70 6c 61 79  me]" and display
1140: 20 69 6e 73 65 72 74 2c 20 73 65 6c 65 63 74 20   insert, select 
1150: 6f 72 20 75 70 64 61 74 65 20 70 72 6f 70 65 72  or update proper
1160: 6c 79 20 69 6e 20 74 68 65 20 74 69 74 6c 65 2e  ly in the title.
1170: 0a 2d 20 41 64 64 65 64 20 61 20 63 61 63 68 65  .- Added a cache
1180: 20 6d 65 63 68 61 6d 69 73 6d 2e 20 57 6f 72 6b   mechamism. Work
1190: 73 20 66 6f 72 20 64 61 74 61 2c 20 63 6f 6e 74  s for data, cont
11a0: 72 6f 6c 6c 65 72 73 2c 20 76 69 65 77 73 20 61  rollers, views a
11b0: 6e 64 20 53 51 4c 52 6f 77 73 2e 0a 2d 20 6d 61  nd SQLRows..- ma
11c0: 69 6e 2e 70 79 20 6e 6f 77 20 75 73 65 73 20 61  in.py now uses a
11d0: 20 72 65 71 75 65 73 74 2e 66 6f 6c 64 65 72 20   request.folder 
11e0: 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 77 68  absolute path wh
11f0: 65 6e 20 6e 6f 74 20 6f 73 2e 6e 61 6d 65 20 69  en not os.name i
1200: 6e 20 5b 27 6e 74 27 2c 27 70 6f 73 69 78 27 5d  n ['nt','posix']
1210: 2e 20 53 65 65 6d 73 20 74 6f 20 77 6f 72 6b 20  . Seems to work 
1220: 6f 6e 20 77 69 6e 64 6f 77 73 63 65 20 64 65 76  on windowsce dev
1230: 69 63 65 73 2c 20 65 78 63 65 70 74 20 6e 6f 20  ices, except no 
1240: 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 68 61 73  file locking has
1250: 20 63 6f 6e 73 65 71 75 65 6e 63 65 73 2e 0a 2d   consequences..-
1260: 20 4e 6f 77 20 79 6f 75 20 63 61 6e 20 70 75 74   Now you can put
1270: 20 6d 6f 64 75 6c 65 73 20 69 6e 20 61 70 70 6c   modules in appl
1280: 69 63 61 74 69 6f 6e 73 2f 5b 61 6e 79 61 70 70  ications/[anyapp
1290: 5d 2f 6d 6f 64 75 6c 65 73 20 61 6e 64 20 69 6d  ]/modules and im
12a0: 70 6f 72 74 20 74 68 65 6d 20 77 69 74 68 0a 2d  port them with.-
12b0: 20 69 6d 70 6f 72 74 20 61 70 70 6c 69 63 61 74   import applicat
12c0: 69 6f 6e 73 2e 5b 61 6e 79 61 70 70 5d 2e 6d 6f  ions.[anyapp].mo
12d0: 64 75 6c 65 73 2e 5b 6d 6f 64 75 6c 65 5d 20 61  dules.[module] a
12e0: 73 20 5b 6d 6f 64 75 6c 65 5d 0a 2d 20 46 69 78  s [module].- Fix
12f0: 65 64 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 20  ed problem with 
1300: 69 6e 69 74 0a 2d 20 4e 65 77 20 61 70 70 6c 69  init.- New appli
1310: 63 61 74 69 6f 6e 73 2f 65 78 61 6d 70 6c 65 73  cations/examples
1320: 2f 63 6f 6e 74 72 6f 6c 6c 65 72 2f 67 6c 6f 62  /controller/glob
1330: 61 6c 2e 70 79 20 63 6f 6e 74 72 6f 6c 6c 65 72  al.py controller
1340: 20 66 6f 72 20 64 6f 63 73 2e 0a 0a 23 23 20 47   for docs...## G
1350: 6c 75 6f 6e 20 76 31 2e 31 34 0a 2d 20 46 69 78  luon v1.14.- Fix
1360: 65 64 20 61 20 62 75 67 20 66 69 78 20 69 6e 20  ed a bug fix in 
1370: 55 52 4c 73 0a 0a 23 23 20 47 6c 75 6f 6e 20 76  URLs..## Gluon v
1380: 31 2e 31 35 0a 2d 20 4e 65 77 20 74 72 79 3a 2e  1.15.- New try:.
1390: 2e 2e 20 65 78 63 65 70 74 2e 20 69 6e 20 67 6c  .. except. in gl
13a0: 75 6f 6e 2f 6d 61 69 6e 2e 70 79 20 66 6f 72 20  uon/main.py for 
13b0: 77 68 65 6e 20 73 65 73 73 69 6f 6e 73 20 63 61  when sessions ca
13c0: 6e 6e 6f 74 20 62 65 20 73 61 76 65 64 0a 2d 20  nnot be saved.- 
13d0: 4e 6f 77 20 76 61 6c 69 64 61 74 6f 72 2f 66 6f  Now validator/fo
13e0: 72 6d 61 74 74 65 72 20 6d 65 74 68 6f 64 20 61  rmatter method a
13f0: 6c 6c 6f 77 73 20 49 53 5f 44 41 54 45 28 27 25  llows IS_DATE('%
1400: 64 2f 25 6d 2f 25 59 27 29 0a 0a 23 23 20 77 65  d/%m/%Y')..## we
1410: 62 32 70 79 20 76 31 2e 31 36 0a 2d 20 79 65 73  b2py v1.16.- yes
1420: 20 77 65 20 63 68 61 6e 67 65 64 20 74 68 65 20   we changed the 
1430: 6e 61 6d 65 21 20 54 75 72 6e 73 20 6f 75 74 20  name! Turns out 
1440: 47 6c 75 6f 6e 20 77 61 73 20 74 72 61 64 65 6d  Gluon was tradem
1450: 61 72 6b 65 64 20 62 79 20 73 6f 6d 65 62 6f 64  arked by somebod
1460: 79 20 65 6c 73 65 2e 0a 2d 20 41 6c 74 68 6f 75  y else..- Althou
1470: 67 68 20 77 65 20 61 72 65 20 6e 6f 74 20 69 6e  gh we are not in
1480: 66 72 69 6e 67 69 6e 67 20 74 68 65 20 74 72 61  fringing the tra
1490: 64 65 6d 61 72 6b 20 73 69 6e 63 65 20 74 68 69  demark since thi
14a0: 73 20 69 73 20 61 20 6e 6f 6e 2d 63 6f 6d 6d 65  s is a non-comme
14b0: 72 63 69 61 6c 0a 2d 20 70 72 6f 64 75 63 74 20  rcial.- product 
14c0: 77 65 20 63 6f 75 6c 64 20 68 61 76 65 20 72 75  we could have ru
14d0: 6e 20 69 6e 74 6f 20 73 6f 6d 65 20 69 73 73 75  n into some issu
14e0: 65 73 2e 20 53 6f 20 77 65 20 68 61 76 65 20 62  es. So we have b
14f0: 65 65 6e 20 70 72 6f 66 65 73 73 69 6f 6e 61 6c  een professional
1500: 0a 2d 20 61 6e 64 20 63 68 61 6e 67 65 64 20 74  .- and changed t
1510: 68 65 20 6e 61 6d 65 20 74 6f 20 77 65 62 32 70  he name to web2p
1520: 79 2e 0a 2d 20 4e 6f 77 20 53 51 4c 46 4f 52 4d  y..- Now SQLFORM
1530: 73 20 61 6e 64 20 46 4f 52 4d 20 63 61 6e 20 68  s and FORM can h
1540: 61 76 65 20 61 20 66 6f 72 6d 6e 61 6d 65 20 61  ave a formname a
1550: 6e 64 20 6d 75 6c 74 69 70 6c 65 20 66 6f 72 6d  nd multiple form
1560: 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 0a 2d  s are allowed .-
1570: 20 70 65 72 20 70 61 67 65 2e 0a 2d 20 41 20 6e   per page..- A n
1580: 65 77 20 65 78 61 6d 70 6c 65 73 2f 64 65 66 61  ew examples/defa
1590: 75 6c 74 2f 69 6e 64 65 78 20 70 61 67 65 2e 0a  ult/index page..
15a0: 2d 20 77 65 62 32 70 79 2e 70 79 20 69 6e 73 74  - web2py.py inst
15b0: 65 61 64 20 6f 66 20 72 75 6e 6d 65 2e 70 79 0a  ead of runme.py.
15c0: 2d 20 6d 79 73 71 6c 20 73 65 74 73 20 75 74 66  - mysql sets utf
15d0: 38 20 65 6e 63 6f 64 69 6e 67 2e 0a 2d 20 69 6e  8 encoding..- in
15e0: 70 75 74 20 69 6e 74 65 67 65 72 20 66 69 65 6c  put integer fiel
15f0: 64 20 76 61 6c 75 65 73 20 61 72 65 20 61 75 74  d values are aut
1600: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65  omatically conve
1610: 72 74 65 64 20 69 6e 74 28 29 2e 0a 0a 23 23 20  rted int()...## 
1620: 77 65 62 32 70 79 20 76 31 2e 31 37 0a 2d 20 49  web2py v1.17.- I
1630: 20 70 6f 73 74 65 64 20 76 31 2e 31 36 20 74 6f   posted v1.16 to
1640: 6f 20 73 6f 6f 6e 2e 20 76 31 2e 31 37 20 77 61  o soon. v1.17 wa
1650: 73 20 72 65 6c 65 61 73 65 64 20 61 66 74 65 72  s released after
1660: 20 31 68 20 74 6f 20 66 69 78 20 73 6f 6d 65 20   1h to fix some 
1670: 62 75 67 73 2e 0a 0a 23 23 20 77 65 62 32 70 79  bugs...## web2py
1680: 20 76 31 2e 31 38 0a 2d 20 72 65 6d 6f 76 65 64   v1.18.- removed
1690: 20 76 75 6c 6e 65 72 61 62 69 6c 69 74 79 20 69   vulnerability i
16a0: 6e 20 61 63 63 65 70 74 5f 6c 61 6e 67 75 61 67  n accept_languag
16b0: 65 73 20 61 6e 64 20 73 65 73 73 69 6f 6e 5f 69  es and session_i
16c0: 64 0a 2d 20 4d 69 6e 6f 72 20 62 75 67 20 66 69  d.- Minor bug fi
16d0: 78 65 73 2e 20 54 79 70 6f 73 20 61 6e 64 20 63  xes. Typos and c
16e0: 6c 65 61 6e 75 70 20 63 61 63 68 65 2e 20 54 65  leanup cache. Te
16f0: 78 74 61 72 65 61 20 6e 6f 77 20 63 6c 65 61 72  xtarea now clear
1700: 73 2e 0a 2d 20 53 75 70 70 6f 72 74 20 66 6f 72  s..- Support for
1710: 20 50 79 41 4d 46 2e 0a 2d 20 54 20 72 65 74 75   PyAMF..- T retu
1720: 72 6e 73 20 61 20 63 6c 61 73 73 2c 20 6e 6f 74  rns a class, not
1730: 20 61 20 73 74 72 69 6e 67 0a 2d 20 6e 65 77 20   a string.- new 
1740: 74 65 6d 70 6c 61 74 65 20 70 61 72 73 65 72 20  template parser 
1750: 28 66 61 73 74 65 72 3f 29 0a 2d 20 67 6f 74 20  (faster?).- got 
1760: 72 69 64 20 6f 66 20 73 69 6e 74 61 78 68 69 67  rid of sintaxhig
1770: 68 6c 69 67 68 74 65 72 20 69 6e 20 66 61 76 6f  hlighter in favo
1780: 72 20 6f 66 20 73 65 72 76 65 72 20 73 69 64 65  r of server side
1790: 20 43 4f 44 45 0a 2d 20 66 69 78 20 70 72 6f 62   CODE.- fix prob
17a0: 6c 65 6d 20 77 69 74 68 20 63 61 63 68 65 6f 6e  lem with cacheon
17b0: 64 69 73 6b 20 6c 6f 63 6b 69 6e 67 0a 2d 20 66  disk locking.- f
17c0: 69 78 20 27 4e 6f 6e 65 27 20 69 6e 73 74 65 61  ix 'None' instea
17d0: 64 20 6f 66 20 4e 55 4c 4c 20 69 6e 20 49 53 5f  d of NULL in IS_
17e0: 4e 4f 54 5f 49 4e 5f 44 42 20 28 49 20 74 68 69  NOT_IN_DB (I thi
17f0: 6e 6b 29 0a 2d 20 67 6c 75 6f 6e 2e 63 6f 6e 74  nk).- gluon.cont
1800: 72 69 62 2e 6d 61 72 6b 64 6f 77 6e 0a 2d 20 6e  rib.markdown.- n
1810: 6f 74 6e 75 6c 6c 20 61 6e 64 20 75 6e 69 71 75  otnull and uniqu
1820: 65 20 69 6e 20 53 51 4c 46 69 65 6c 64 20 6e 6f  e in SQLField no
1830: 77 20 73 75 70 70 6f 72 74 65 64 20 28 74 65 73  w supported (tes
1840: 74 65 64 20 6f 6e 20 73 71 6c 69 74 65 20 6d 79  ted on sqlite my
1850: 73 71 6c 20 61 6e 64 20 70 6f 73 74 67 72 65 73  sql and postgres
1860: 71 6c 29 0a 2d 20 53 74 6f 72 61 67 65 20 6e 6f  ql).- Storage no
1870: 77 20 68 61 73 20 5f 5f 67 65 74 73 74 61 74 65  w has __getstate
1880: 5f 5f 20 61 6e 64 20 5f 5f 73 65 74 73 74 61 74  __ and __setstat
1890: 65 5f 5f 20 6e 65 65 64 65 64 20 66 6f 72 20 70  e__ needed for p
18a0: 69 63 6b 6c 69 6e 67 2e 0a 2d 20 73 65 73 73 69  ickling..- sessi
18b0: 6f 6e 20 66 69 6c 65 73 20 61 72 65 20 6e 6f 77  on files are now
18c0: 20 6c 6f 63 6b 65 64 20 74 6f 20 6d 61 6b 65 20   locked to make 
18d0: 69 74 20 77 6f 72 6b 20 62 65 74 74 65 72 20 77  it work better w
18e0: 69 74 68 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73  ith asynchronous
18f0: 20 72 65 71 75 65 73 74 73 0a 2d 20 63 78 6f 72   requests.- cxor
1900: 61 63 6c 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  acle should work
1910: 2c 20 61 70 61 72 74 20 66 6f 72 20 6c 69 6d 69  , apart for limi
1920: 74 62 79 0a 2d 20 2e 2e 2e 2f 65 78 61 6d 70 6c  tby.- .../exampl
1930: 65 73 20 69 73 20 6e 6f 77 20 6d 61 70 70 65 64  es is now mapped
1940: 20 74 6f 20 2e 2e 2e 2f 65 78 61 6d 70 6c 65 73   to .../examples
1950: 2f 64 65 66 61 75 6c 74 2f 69 6e 64 65 78 20 65  /default/index e
1960: 74 63 2e 0a 2d 20 2e 2e 2e 2f 69 6e 69 74 20 69  tc..- .../init i
1970: 73 20 6e 6f 77 20 6d 61 70 70 65 64 20 74 6f 20  s now mapped to 
1980: 2e 2e 2e 2f 77 65 6c 63 6f 6d 65 20 69 66 20 69  .../welcome if i
1990: 6e 69 74 20 69 73 20 6e 6f 74 20 70 72 65 73 65  nit is not prese
19a0: 6e 74 0a 0a 23 23 20 77 65 62 32 70 79 20 31 2e  nt..## web2py 1.
19b0: 31 39 0a 2d 20 6d 69 6e 6f 72 20 74 79 70 6f 73  19.- minor typos
19c0: 0a 0a 23 23 20 77 65 62 32 70 79 20 31 2e 32 30  ..## web2py 1.20
19d0: 0a 2d 20 6e 65 77 20 49 46 52 41 4d 45 2c 20 4c  .- new IFRAME, L
19e0: 41 42 45 4c 2c 20 46 49 45 4c 44 53 45 54 20 76  ABEL, FIELDSET v
19f0: 61 6c 69 64 61 74 6f 72 73 20 0a 2d 20 50 28 2e  alidators .- P(.
1a00: 2e 63 72 32 62 72 3d 54 72 75 65 29 20 6f 70 74  .cr2br=True) opt
1a10: 69 6f 6e 0a 2d 20 46 4f 52 4d 20 61 6e 64 20 53  ion.- FORM and S
1a20: 51 4c 46 4f 52 4d 20 68 61 76 65 20 68 69 64 64  QLFORM have hidd
1a30: 65 6e 3d 64 69 63 74 28 2e 2e 2e 29 20 6f 70 74  en=dict(...) opt
1a40: 69 6f 6e 20 66 6f 72 20 52 45 53 54 0a 2d 20 74  ion for REST.- t
1a50: 65 73 74 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  esting framework
1a60: 2e 0a 2d 20 69 6d 70 72 6f 76 65 64 20 65 78 61  ..- improved exa
1a70: 6d 70 6c 65 73 20 70 61 67 65 73 0a 0a 23 23 20  mples pages..## 
1a80: 77 65 62 32 70 79 20 31 2e 32 31 0a 2d 20 72 65  web2py 1.21.- re
1a90: 70 6c 61 63 65 64 20 70 61 73 74 65 2e 68 74 74  placed paste.htt
1aa0: 70 73 65 72 76 65 72 20 77 69 74 68 20 63 68 65  pserver with che
1ab0: 72 72 79 70 79 2e 77 73 67 69 20 73 65 72 76 65  rrypy.wsgi serve
1ac0: 72 0a 2d 20 74 65 6d 70 6f 72 61 72 79 20 73 65  r.- temporary se
1ad0: 73 73 69 6f 6e 73 20 61 72 65 20 6e 6f 20 6c 6f  ssions are no lo
1ae0: 6e 67 65 72 20 73 61 76 65 64 0a 2d 20 77 69 64  nger saved.- wid
1af0: 67 65 74 20 68 61 73 20 5b 73 74 6f 70 5d 20 62  get has [stop] b
1b00: 75 74 74 6f 6e 20 61 6e 64 20 67 72 61 70 68 0a  utton and graph.
1b10: 2d 20 6c 6f 67 67 69 6e 67 20 69 73 20 64 6f 6e  - logging is don
1b20: 65 20 62 79 20 6d 61 69 6e 20 62 79 20 61 70 70  e by main by app
1b30: 66 61 63 74 6f 72 79 0a 2d 20 66 69 78 65 64 20  factory.- fixed 
1b40: 61 20 62 75 67 20 69 6e 20 73 71 6c 20 62 65 6c  a bug in sql bel
1b50: 6f 6e 67 73 0a 0a 23 23 20 77 65 62 32 70 79 20  ongs..## web2py 
1b60: 31 2e 32 32 2d 31 2e 32 35 0a 2d 20 66 69 78 65  1.22-1.25.- fixe
1b70: 64 20 6d 69 6e 6f 72 20 62 75 67 73 2c 20 61 64  d minor bugs, ad
1b80: 64 65 64 20 49 53 5f 4e 55 4c 4c 5f 4f 52 0a 0a  ded IS_NULL_OR..
1b90: 23 23 20 77 65 62 32 70 79 20 31 2e 32 36 0a 2d  ## web2py 1.26.-
1ba0: 20 61 64 64 65 64 20 73 68 65 6c 6c 2e 70 79 20   added shell.py 
1bb0: 28 74 68 61 6e 6b 73 20 4c 69 6d 6f 64 6f 75 21  (thanks Limodou!
1bc0: 29 0a 2d 20 61 64 64 65 64 20 6d 65 6d 63 61 63  ).- added memcac
1bd0: 68 65 20 73 75 70 70 6f 72 74 0a 0a 23 23 20 77  he support..## w
1be0: 65 62 32 70 79 20 31 2e 32 37 0a 2d 20 49 53 5f  eb2py 1.27.- IS_
1bf0: 4e 55 4c 4c 5f 4f 52 20 6e 6f 77 20 77 6f 72 6b  NULL_OR now work
1c00: 73 20 77 69 6c 6c 20 61 6c 6c 20 66 69 65 6c 64  s will all field
1c10: 73 0a 2d 20 61 64 6d 69 6e 20 63 72 65 61 74 65  s.- admin create
1c20: 73 20 70 61 74 68 73 20 74 6f 20 73 74 61 74 69  s paths to stati
1c30: 63 20 66 69 6c 65 73 0a 2d 20 77 73 67 69 73 65  c files.- wsgise
1c40: 72 76 65 72 20 6f 70 74 69 6f 6e 73 20 61 72 65  rver options are
1c50: 20 70 61 73 73 65 64 20 74 6f 20 48 74 74 70 53   passed to HttpS
1c60: 65 72 76 65 72 0a 2d 20 66 61 6b 69 6e 67 20 6c  erver.- faking l
1c70: 69 6d 69 74 62 79 20 66 6f 72 20 6f 72 61 63 6c  imitby for oracl
1c80: 65 20 74 6f 20 6d 61 6b 65 20 61 70 70 61 64 6d  e to make appadm
1c90: 69 6e 20 77 6f 72 6b 0a 2d 20 61 6c 6c 20 6f 62  in work.- all ob
1ca0: 6a 65 63 74 73 20 69 6e 68 65 72 69 74 20 66 72  jects inherit fr
1cb0: 6f 6d 20 6f 62 6a 65 63 74 0a 2d 20 66 69 78 65  om object.- fixe
1cc0: 64 20 62 75 67 20 69 6e 20 61 70 70 20 6e 61 6d  d bug in app nam
1cd0: 65 73 20 77 69 74 68 20 2e 0a 2d 20 66 69 78 65  es with ..- fixe
1ce0: 64 20 62 75 67 20 69 6e 20 63 72 65 61 74 65 64  d bug in created
1cf0: 20 52 65 73 74 72 69 63 74 65 64 45 72 72 6f 72   RestrictedError
1d00: 20 6f 62 6a 65 63 74 20 6f 6e 20 77 69 6e 64 6f   object on windo
1d10: 77 73 0a 2d 20 73 68 65 6c 6c 20 69 73 20 6e 6f  ws.- shell is no
1d20: 77 20 69 6e 20 67 6c 75 6f 6e 20 61 6e 64 20 61  w in gluon and a
1d30: 63 63 65 73 73 69 62 6c 65 20 76 69 61 20 77 65  ccessible via we
1d40: 62 32 70 79 2e 70 79 0a 0a 23 23 20 77 65 62 32  b2py.py..## web2
1d50: 70 79 20 31 2e 32 38 0a 2d 20 66 69 78 65 64 20  py 1.28.- fixed 
1d60: 62 75 67 20 77 69 74 68 20 62 65 6c 6f 6e 67 73  bug with belongs
1d70: 2c 20 66 61 73 74 65 72 20 73 71 6c 2e 70 79 0a  , faster sql.py.
1d80: 2d 20 69 6e 63 6c 75 64 65 64 20 6a 71 75 65 72  - included jquer
1d90: 79 2e 6a 73 0a 2d 20 6d 69 6e 6f 72 20 61 65 73  y.js.- minor aes
1da0: 74 65 74 69 63 61 6c 20 66 69 78 65 73 0a 2d 20  tetical fixes.- 
1db0: 73 6f 72 74 61 62 6c 65 2e 6a 73 20 69 73 20 67  sortable.js is g
1dc0: 6f 6e 65 0a 0a 23 23 20 77 65 62 32 70 79 20 31  one..## web2py 1
1dd0: 2e 32 39 0a 2d 20 4e 6f 77 20 73 65 6c 65 74 20  .29.- Now selet 
1de0: 6d 75 74 6c 69 70 6c 65 20 77 6f 72 6b 73 20 77  mutliple works w
1df0: 69 74 68 20 67 65 74 2c 20 73 6f 20 64 6f 65 73  ith get, so does
1e00: 20 69 73 20 49 53 5f 4c 45 4e 47 54 48 0a 2d 20   is IS_LENGTH.- 
1e10: 41 64 64 65 64 20 49 53 5f 4c 49 53 54 5f 4f 46  Added IS_LIST_OF
1e20: 0a 2d 20 66 69 78 65 64 20 70 72 6f 62 6c 65 6d  .- fixed problem
1e30: 20 77 69 74 68 20 61 64 6d 69 6e 20 66 72 6f 6d   with admin from
1e40: 20 77 69 6e 64 6f 77 73 20 61 6e 64 20 6c 6f 63   windows and loc
1e50: 61 6c 68 6f 73 74 0a 0a 23 23 20 77 65 62 32 70  alhost..## web2p
1e60: 79 20 31 2e 33 30 0a 2d 20 61 64 64 65 64 20 66  y 1.30.- added f
1e70: 6c 76 20 74 6f 20 63 6f 6e 74 65 6e 74 74 79 70  lv to contenttyp
1e80: 65 0a 2d 20 61 64 64 65 64 20 73 75 70 70 6f 72  e.- added suppor
1e90: 74 20 66 6f 72 20 61 70 70 65 6e 67 69 6e 65 0a  t for appengine.
1ea0: 0a 23 23 20 77 65 62 32 70 79 20 31 2e 33 31 2d  .## web2py 1.31-
1eb0: 31 2e 34 31 0a 2d 20 73 6f 6d 65 20 62 75 67 20  1.41.- some bug 
1ec0: 66 69 78 65 73 2c 20 6d 6f 73 74 6c 79 20 62 65  fixes, mostly be
1ed0: 74 74 65 72 20 61 70 70 65 6e 67 69 6e 65 20 73  tter appengine s
1ee0: 75 70 70 6f 72 74 0a 2d 20 6d 73 73 71 6c 20 73  upport.- mssql s
1ef0: 75 70 70 6f 72 74 0a 2d 20 66 69 72 65 62 69 72  upport.- firebir
1f00: 64 20 73 75 70 70 6f 72 74 0a 2d 20 77 69 64 67  d support.- widg
1f10: 65 74 73 20 73 75 70 70 6f 72 74 0a 2d 20 63 6f  ets support.- co
1f20: 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 73 0a 0a  nnection pools..
1f30: 23 23 20 31 2e 34 32 0a 2d 20 66 69 78 65 64 20  ## 1.42.- fixed 
1f40: 73 65 63 75 72 69 74 79 20 69 73 73 75 65 20 62  security issue b
1f50: 79 20 72 65 6d 6f 76 69 6e 67 20 73 6c 61 73 68  y removing slash
1f60: 20 65 73 63 61 70 65 20 69 6e 20 6d 79 73 71 6c   escape in mysql
1f70: 0a 2d 20 72 65 6d 6f 76 65 64 20 72 61 6e 64 6f  .- removed rando
1f80: 6d 20 65 76 65 72 79 77 68 65 72 65 0a 2d 20 75  m everywhere.- u
1f90: 73 65 20 75 75 69 64 20 66 6f 72 20 73 65 73 73  se uuid for sess
1fa0: 69 6f 6e 20 61 6e 64 20 74 69 63 6b 65 74 73 0a  ion and tickets.
1fb0: 2d 20 75 73 65 20 68 74 74 70 5f 78 5f 66 6f 72  - use http_x_for
1fc0: 77 61 72 64 5f 66 6f 72 20 74 6f 20 66 69 67 75  ward_for to figu
1fd0: 72 65 20 6f 75 74 20 74 68 65 20 63 6c 69 65 6e  re out the clien
1fe0: 74 20 63 61 75 73 69 6e 67 20 61 20 74 69 63 6b  t causing a tick
1ff0: 65 74 0a 2d 20 75 73 65 20 6c 6f 6e 67 74 65 78  et.- use longtex
2000: 74 20 61 6e 64 20 6c 6f 6e 67 62 6c 6f 62 20 66  t and longblob f
2010: 6f 72 20 6d 79 73 71 6c 0a 2d 20 6d 61 69 6e 20  or mysql.- main 
2020: 6e 6f 77 20 72 65 61 6c 6c 79 20 63 61 74 63 68  now really catch
2030: 65 73 20 61 6c 6c 20 65 78 63 65 70 74 69 6f 6e  es all exception
2040: 73 0a 2d 20 6e 6f 20 6d 6f 72 65 20 77 61 72 6e  s.- no more warn
2050: 69 6e 67 73 20 6f 6e 20 47 41 45 0a 0a 23 23 20  ings on GAE..## 
2060: 31 2e 34 33 2d 31 2e 34 38 0a 2d 20 68 74 6d 6c  1.43-1.48.- html
2070: 2e 70 79 20 72 65 77 72 69 74 65 20 28 62 65 74  .py rewrite (bet
2080: 74 65 72 20 73 75 70 70 6f 72 74 20 66 6f 72 20  ter support for 
2090: 63 75 73 74 6f 6d 20 66 6f 72 6d 73 29 20 28 42  custom forms) (B
20a0: 69 6c 6c 20 46 65 72 72 65 74 74 29 0a 2d 20 6e  ill Ferrett).- n
20b0: 65 77 20 73 74 69 63 6b 65 72 73 20 69 6e 20 65  ew stickers in e
20c0: 78 61 6d 70 6c 65 73 20 28 74 68 61 6e 6b 73 20  xamples (thanks 
20d0: 4d 61 74 65 75 73 7a 29 0a 2d 20 6f 6e 20 77 69  Mateusz).- on wi
20e0: 6e 64 6f 77 73 20 63 61 6e 20 72 75 6e 20 69 6e  ndows can run in
20f0: 20 74 61 73 6b 62 61 72 20 28 4d 61 72 6b 20 4c   taskbar (Mark L
2100: 61 72 73 65 6e 29 0a 2d 20 69 6e 20 61 64 6d 69  arsen).- in admi
2110: 6e 7c 65 64 69 74 20 70 61 67 65 20 6c 69 6e 6b  n|edit page link
2120: 20 74 6f 20 65 64 69 74 7c 63 6f 6e 74 72 6f 6c   to edit|control
2130: 6c 65 72 20 28 4e 61 74 68 61 6e 20 46 72 65 65  ler (Nathan Free
2140: 7a 65 29 0a 2d 20 62 65 74 74 65 72 20 65 72 72  ze).- better err
2150: 6f 72 20 63 6f 64 65 73 20 61 6e 64 20 72 6f 75  or codes and rou
2160: 74 65 73 5f 6f 6e 65 72 72 6f 72 20 28 54 69 6d  tes_onerror (Tim
2170: 6f 74 68 79 20 46 61 72 72 65 6c 6c 29 0a 2d 20  othy Farrell).- 
2180: 44 41 4c 20 73 75 70 70 6f 72 74 20 66 6f 72 20  DAL support for 
2190: 67 72 6f 75 70 79 20 61 6e 64 20 68 61 76 69 6e  groupy and havin
21a0: 67 0a 2d 20 44 41 4c 20 73 75 70 70 6f 72 74 20  g.- DAL support 
21b0: 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
21c0: 69 6e 73 74 65 61 64 20 6f 66 20 76 61 6c 75 65  instead of value
21d0: 73 0a 2d 20 44 41 4c 20 68 61 73 20 65 78 70 65  s.- DAL has expe
21e0: 72 69 6d 65 6e 74 61 6c 20 49 6e 66 6f 72 6d 69  rimental Informi
21f0: 78 20 73 75 70 70 6f 72 74 0a 2d 20 66 69 78 65  x support.- fixe
2200: 64 20 62 75 67 20 77 69 74 68 20 6e 6f 6e 2d 70  d bug with non-p
2210: 72 69 6e 74 61 62 6c 65 20 63 68 61 72 73 20 69  rintable chars i
2220: 6e 20 44 41 4c 0a 2d 20 27 74 65 78 74 27 20 66  n DAL.- 'text' f
2230: 69 65 6c 64 73 20 6c 69 6d 69 74 65 64 20 74 6f  ields limited to
2240: 20 32 2a 2a 31 36 20 28 74 6f 20 61 76 6f 69 64   2**16 (to avoid
2250: 20 6d 79 73 71 6c 20 70 72 6f 62 6c 65 6d 73 29   mysql problems)
2260: 0a 2d 20 77 69 64 67 65 74 20 68 61 73 20 2d 71  .- widget has -q
2270: 75 69 65 74 20 61 6e 64 20 2d 64 65 62 75 67 20  uiet and -debug 
2280: 28 41 74 74 69 6c 61 20 43 73 69 70 61 29 0a 2d  (Attila Csipa).-
2290: 20 77 65 62 32 70 79 5f 73 65 73 73 69 6f 6e 20   web2py_session 
22a0: 75 73 65 73 20 42 4c 4f 42 20 69 6e 73 74 65 61  uses BLOB instea
22b0: 64 20 6f 66 20 54 45 58 54 0a 2d 20 69 6d 70 72  d of TEXT.- impr
22c0: 6f 76 65 64 20 49 53 5f 55 52 4c 0a 2d 20 52 75  oved IS_URL.- Ru
22d0: 6e 73 20 77 69 74 68 20 70 79 74 68 6f 6e 20 32  ns with python 2
22e0: 2e 36 20 28 54 69 6d 29 0a 2d 20 4f 6e 20 47 41  .6 (Tim).- On GA
22f0: 45 20 75 73 65 73 20 47 41 45 20 66 6f 72 20 73  E uses GAE for s
2300: 74 61 74 69 63 20 66 69 6c 65 73 20 28 52 6f 62  tatic files (Rob
2310: 69 6e 29 0a 0a 0a 23 23 20 31 2e 34 39 0a 2d 20  in)...## 1.49.- 
2320: 66 69 78 65 64 20 61 20 62 75 67 20 77 69 74 68  fixed a bug with
2330: 20 74 61 73 6b 62 61 72 20 77 69 64 67 65 74 2c   taskbar widget,
2340: 20 74 68 61 6e 6b 73 20 4d 61 72 6b 0a 2d 20 66   thanks Mark.- f
2350: 69 78 65 64 20 61 20 62 75 67 20 77 69 74 68 20  ixed a bug with 
2360: 66 6f 72 6d 2e 6c 61 74 65 73 74 0a 2d 20 6d 61  form.latest.- ma
2370: 64 65 20 6d 61 6e 79 20 44 49 56 20 6d 65 74 68  de many DIV meth
2380: 6f 64 73 20 70 72 69 76 61 74 65 20 28 5f 29 0a  ods private (_).
2390: 0a 0a 23 23 20 31 2e 35 30 0a 2d 20 46 69 78 65  ..## 1.50.- Fixe
23a0: 64 20 73 6f 6d 65 20 62 75 67 73 20 69 6e 74 72  d some bugs intr
23b0: 6f 64 75 63 65 64 20 69 6e 20 31 2e 34 39 0a 0a  oduced in 1.49..
23c0: 23 23 20 31 2e 35 31 0a 2d 20 46 69 78 65 64 20  ## 1.51.- Fixed 
23d0: 6d 6f 72 65 20 62 75 67 73 20 69 6e 74 72 6f 64  more bugs introd
23e0: 75 63 65 64 20 69 6e 20 31 2e 34 39 20 28 73 71  uced in 1.49 (sq
23f0: 6c 20 5f 65 78 74 72 61 20 61 6e 64 20 68 74 6d  l _extra and htm
2400: 6c 20 73 65 6c 65 63 74 29 0a 2d 20 73 75 70 70  l select).- supp
2410: 6f 72 74 20 66 6f 72 20 73 71 6c 69 74 65 3a 6d  ort for sqlite:m
2420: 65 6d 6f 72 79 3a 0a 0a 23 23 20 31 2e 35 32 0a  emory:..## 1.52.
2430: 2d 20 46 69 78 65 64 20 61 20 6d 69 6e 6f 72 20  - Fixed a minor 
2440: 62 75 67 20 77 69 74 68 20 5f 65 78 74 72 61 5b  bug with _extra[
2450: 6b 65 79 5d 20 61 6e 64 20 6b 65 79 20 6e 6f 74  key] and key not
2460: 20 73 74 72 2e 0a 2d 20 63 68 65 63 6b 20 66 6f   str..- check fo
2470: 72 20 75 70 67 72 61 64 65 20 76 69 61 20 61 6a  r upgrade via aj
2480: 61 78 0a 0a 23 23 20 31 2e 35 33 0a 2d 20 4f 6e  ax..## 1.53.- On
2490: 20 47 41 45 20 75 70 6c 6f 61 64 20 64 61 74 61   GAE upload data
24a0: 20 67 6f 65 73 20 61 75 74 6f 6d 61 74 69 63 61   goes automatica
24b0: 6c 6c 79 20 69 6e 20 64 61 74 61 73 74 6f 72 65  lly in datastore
24c0: 20 28 62 6c 6f 62 20 63 72 65 61 74 65 64 20 61   (blob created a
24d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 29 0a 2d 20  utomatically).- 
24e0: 4e 65 77 20 61 70 70 61 64 6d 69 6e 20 72 75 6e  New appadmin run
24f0: 73 20 6f 6e 20 47 41 45 20 28 6d 6f 73 74 20 6f  s on GAE (most o
2500: 66 20 69 74 2c 20 6e 6f 74 20 61 6c 6c 29 0a 2d  f it, not all).-
2510: 20 4d 61 72 74 69 6e 20 48 75 66 73 6b 79 20 70   Martin Hufsky p
2520: 61 74 63 68 20 61 6c 6c 6f 77 20 73 6c 69 63 69  atch allow slici
2530: 6e 67 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  ng of fields in 
2540: 44 41 4c 20 65 78 70 72 65 73 73 69 6f 6e 73 0a  DAL expressions.
2550: 0a 23 23 20 31 2e 35 34 0a 2d 20 66 69 78 65 64  .## 1.54.- fixed
2560: 20 6d 69 6e 6f 72 20 62 75 67 73 0a 0a 23 23 20   minor bugs..## 
2570: 31 2e 35 35 3f 0a 2d 20 72 6f 77 63 6f 75 6e 74  1.55?.- rowcount
2580: 0a 2d 20 66 69 78 65 64 20 62 75 67 20 77 68 65  .- fixed bug whe
2590: 6e 20 49 53 5f 49 4e 5f 44 42 20 69 6e 76 6f 6c  n IS_IN_DB invol
25a0: 76 65 64 20 6d 75 6c 74 69 70 6c 65 20 66 69 65  ved multiple fie
25b0: 6c 64 73 20 6f 6e 20 47 41 45 0a 2d 20 54 2e 73  lds on GAE.- T.s
25c0: 65 74 5f 63 75 72 72 65 6e 74 5f 6c 61 6e 67 75  et_current_langu
25d0: 61 67 65 73 0a 2d 20 62 65 74 74 65 72 20 75 6e  ages.- better un
25e0: 69 74 74 65 73 74 73 0a 2d 20 72 65 73 70 6f 6e  ittests.- respon
25f0: 73 65 2e 63 75 73 74 6f 6d 5f 63 6f 6d 6d 69 74  se.custom_commit
2600: 20 61 6e 64 20 72 65 73 70 6f 6e 73 65 2e 63 75   and response.cu
2610: 73 74 6f 6d 5f 72 6f 6c 6c 62 61 63 6b 0a 2d 20  stom_rollback.- 
2620: 79 6f 75 20 63 61 6e 20 6e 65 78 74 20 63 61 63  you can next cac
2630: 68 65 20 63 61 6c 6c 73 20 28 6c 69 6b 65 20 63  he calls (like c
2640: 61 63 68 65 20 61 20 63 6f 6e 74 72 6f 6c 6c 65  ache a controlle
2650: 72 20 74 68 61 74 20 63 61 63 68 65 73 20 61 20  r that caches a 
2660: 73 65 6c 65 63 74 29 2e 20 54 68 61 6e 6b 73 20  select). Thanks 
2670: 49 63 65 62 65 72 67 0a 2d 20 64 62 28 2e 2e 2e  Iceberg.- db(...
2680: 2e 69 64 3d 3d 4e 6f 6e 65 29 2e 73 65 6c 65 63  .id==None).selec
2690: 74 28 29 20 6e 6f 20 6c 6f 6e 67 65 72 20 72 65  t() no longer re
26a0: 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 62  turns an error b
26b0: 75 74 20 61 6e 20 65 6d 70 74 79 20 53 51 4c 52  ut an empty SQLR
26c0: 6f 77 73 20 6f 6e 20 47 41 45 0a 2d 20 64 62 28  ows on GAE.- db(
26d0: 2e 2e 2e 29 2e 64 65 6c 65 74 65 28 64 65 6c 65  ...).delete(dele
26e0: 74 65 5f 75 70 6c 6f 61 64 73 3d 54 72 75 65 29  te_uploads=True)
26f0: 20 61 6e 64 20 53 51 4c 46 4f 52 4d 2e 61 63 63   and SQLFORM.acc
2700: 65 70 74 73 28 2e 2e 2e 2e 64 65 6c 65 74 65 5f  epts(....delete_
2710: 75 70 6c 6f 61 64 73 3d 54 72 75 65 29 20 77 69  uploads=True) wi
2720: 6c 6c 20 64 65 6c 65 74 65 20 61 6c 6c 20 72 65  ll delete all re
2730: 66 65 72 65 6e 63 65 64 20 75 70 6c 6f 61 64 65  ferenced uploade
2740: 64 20 66 69 6c 65 73 0a 2d 20 44 49 56 2e 65 6c  d files.- DIV.el
2750: 65 6d 65 6e 74 20 61 6e 64 20 44 49 56 2e 75 70  ement and DIV.up
2760: 64 61 74 65 0a 2d 20 73 71 6c 72 6f 77 73 2e 6a  date.- sqlrows.j
2770: 73 6f 6e 28 29 0a 2d 20 53 51 4c 46 4f 52 4d 2e  son().- SQLFORM.
2780: 77 69 64 67 65 74 73 0a 2d 20 55 52 4c 28 72 3d  widgets.- URL(r=
2790: 72 65 71 75 65 73 74 2c 61 72 67 73 3d 30 29 0a  request,args=0).
27a0: 2d 20 49 53 5f 49 4e 5f 44 42 28 2e 2e 2e 2c 6d  - IS_IN_DB(...,m
27b0: 75 6c 74 69 70 6c 65 3d 54 72 75 65 29 20 66 6f  ultiple=True) fo
27c0: 72 20 4d 61 6e 79 32 4d 61 6e 79 20 28 73 6f 72  r Many2Many (sor
27d0: 74 20 6f 66 29 0a 2d 20 49 6e 20 55 52 4c 28 2e  t of).- In URL(.
27e0: 2e 2e 2c 66 29 20 66 20 69 73 20 75 72 6c 20 65  ..,f) f is url e
27f0: 6e 63 6f 64 65 64 0a 2d 20 49 6e 20 72 6f 75 74  ncoded.- In rout
2800: 65 73 5f 69 6e 3d 5b 5b 27 61 2f 62 2f 63 2f 27  es_in=[['a/b/c/'
2810: 2c 27 61 2f 62 2f 63 2f 3f 76 61 72 3d 76 61 6c  ,'a/b/c/?var=val
2820: 75 65 27 5d 5d 0a 2d 20 73 69 6d 70 6c 65 6a 73  ue']].- simplejs
2830: 6f 6e 20 32 2e 30 2e 37 0a 0a 0a 23 23 20 31 2e  on 2.0.7...## 1.
2840: 35 36 0a 2d 20 43 6f 6e 73 69 64 65 72 20 74 68  56.- Consider th
2850: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
2860: 65 3a 0a 0a 2d 20 64 62 2e 64 65 66 69 6e 65 5f  e:..- db.define_
2870: 74 61 62 6c 65 28 27 63 69 72 6c 63 65 27 2c 0a  table('cirlce',.
2880: 2d 20 20 20 20 64 62 2e 46 69 65 6c 64 28 27 72  -    db.Field('r
2890: 61 64 69 75 73 27 2c 27 64 6f 75 62 6c 65 27 29  adius','double')
28a0: 2c 0a 2d 20 20 20 20 64 62 2e 46 69 65 6c 64 28  ,.-    db.Field(
28b0: 27 61 72 65 61 27 2c 27 64 6f 75 62 6c 65 27 29  'area','double')
28c0: 2c 0a 2d 20 20 20 20 64 62 2e 46 69 65 6c 64 28  ,.-    db.Field(
28d0: 27 6d 6f 64 69 66 69 65 64 5f 6f 6e 27 2c 27 64  'modified_on','d
28e0: 61 74 65 74 69 6d 65 27 29 29 0a 0a 2d 20 6e 6f  atetime'))..- no
28f0: 77 20 79 6f 75 20 63 61 6e 20 64 6f 3a 0a 0a 23  w you can do:..#
2900: 23 20 20 61 64 64 20 61 20 63 6f 6d 6d 65 6e 74  #  add a comment
2910: 20 69 6e 20 74 68 65 20 66 6f 72 6d 73 0a 2d 20   in the forms.- 
2920: 64 62 2e 63 69 72 63 6c 65 2e 61 72 65 61 2e 63  db.circle.area.c
2930: 6f 6d 6d 65 6e 74 3d 22 28 74 68 69 73 20 69 73  omment="(this is
2940: 20 61 20 63 6f 6d 6d 65 6e 74 29 22 0a 0a 23 23   a comment)"..##
2950: 20 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 61 72    do not show ar
2960: 65 61 20 69 6e 20 63 72 65 61 74 65 2f 65 64 69  ea in create/edi
2970: 74 20 66 6f 72 6d 73 0a 2d 20 64 62 2e 63 69 72  t forms.- db.cir
2980: 63 6c 65 2e 61 72 65 61 2e 77 72 69 74 61 62 6c  cle.area.writabl
2990: 65 3d 46 61 6c 73 65 0a 0a 2d 20 20 23 23 20 20  e=False..-  ##  
29a0: 64 6f 20 6e 6f 74 20 73 68 6f 77 20 6e 6f 77 20  do not show now 
29b0: 69 6e 20 64 69 73 70 6c 61 79 20 66 6f 72 6d 73  in display forms
29c0: 0a 2d 20 64 62 2e 63 69 72 63 6c 65 2e 6d 6f 64  .- db.circle.mod
29d0: 69 66 69 65 64 5f 6f 6e 2e 72 65 61 64 61 62 6c  ified_on.readabl
29e0: 65 3d 46 61 6c 73 65 0a 0a 23 23 20 20 61 75 74  e=False..##  aut
29f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 74 69 6d 65 73  omatically times
2a00: 74 61 6d 70 20 77 68 65 6e 20 72 65 63 6f 72 64  tamp when record
2a10: 20 63 72 65 74 61 65 64 0a 2d 20 64 62 2e 63 69   cretaed.- db.ci
2a20: 72 63 6c 65 2e 6d 6f 64 69 66 69 65 64 5f 6f 6e  rcle.modified_on
2a30: 2e 64 65 66 61 75 6c 74 3d 72 65 71 75 65 73 74  .default=request
2a40: 2e 6e 6f 77 0a 0a 23 23 20 20 61 75 74 6f 6d 61  .now..##  automa
2a50: 74 69 63 61 6c 6c 79 20 74 69 6d 65 73 74 61 6d  tically timestam
2a60: 70 20 77 68 65 6e 20 72 65 63 6f 72 64 20 69 73  p when record is
2a70: 20 6d 6f 64 69 66 69 65 64 0a 2d 20 64 62 2e 63   modified.- db.c
2a80: 69 72 63 6c 65 2e 6d 6f 64 69 66 69 65 64 5f 6f  ircle.modified_o
2a90: 6e 2e 75 70 64 61 74 65 3d 72 65 71 75 65 73 74  n.update=request
2aa0: 2e 6e 6f 77 0a 0a 23 23 20 20 6d 61 6b 65 20 74  .now..##  make t
2ab0: 68 65 20 72 61 64 69 75 73 20 61 70 70 65 61 72  he radius appear
2ac0: 20 69 6e 20 62 6f 6c 64 20 69 6e 20 64 69 73 70   in bold in disp
2ad0: 6c 61 79 20 61 6e 64 20 74 61 62 6c 65 0a 2d 20  lay and table.- 
2ae0: 64 62 2e 63 69 72 63 6c 65 2e 72 61 64 69 75 73  db.circle.radius
2af0: 2e 72 65 70 72 65 73 65 6e 74 3d 6c 61 6d 62 64  .represent=lambd
2b00: 61 20 76 61 6c 75 65 3a 20 42 28 76 61 6c 75 65  a value: B(value
2b10: 29 0a 0a 23 23 20 20 6d 61 6b 65 20 61 20 66 6f  )..##  make a fo
2b20: 72 6d 20 74 68 61 74 20 61 75 74 6f 6d 61 74 69  rm that automati
2b30: 63 61 6c 6c 79 20 63 6f 6d 70 75 74 65 73 20 61  cally computes a
2b40: 72 65 61 0a 2d 20 70 69 3d 33 2e 31 34 31 35 0a  rea.- pi=3.1415.
2b50: 2d 20 66 6f 72 6d 3d 53 51 4c 46 4f 4d 28 64 62  - form=SQLFOM(db
2b60: 2e 63 69 72 63 6c 65 29 0a 2d 20 69 66 20 66 6f  .circle).- if fo
2b70: 72 6d 2e 61 63 63 65 70 74 73 28 72 65 71 75 65  rm.accepts(reque
2b80: 73 74 2e 76 61 72 73 2c 0a 2d 20 6f 6e 76 61 6c  st.vars,.- onval
2b90: 69 64 61 74 69 6f 6e 3d 6c 61 6d 62 64 61 20 66  idation=lambda f
2ba0: 6f 72 6d 3a 20 66 6f 72 6d 2e 76 61 72 73 2e 61  orm: form.vars.a
2bb0: 72 65 61 3d 70 69 2a 66 6f 72 6d 2e 76 61 72 73  rea=pi*form.vars
2bc0: 2e 72 61 64 69 75 73 2a 2a 32 29 3a 20 2e 2e 2e  .radius**2): ...
2bd0: 0a 0a 23 23 20 20 6d 61 6b 65 20 61 20 63 72 65  ..##  make a cre
2be0: 61 74 65 20 66 6f 72 6d 20 69 6e 20 74 77 6f 20  ate form in two 
2bf0: 70 6f 73 73 69 62 6c 65 20 77 61 79 73 3a 0a 2d  possible ways:.-
2c00: 20 66 6f 72 6d 3d 53 51 4c 46 4f 52 4d 28 64 62   form=SQLFORM(db
2c10: 2e 63 69 72 63 6c 65 29 0a 2d 20 66 6f 72 6d 3d  .circle).- form=
2c20: 53 51 4c 46 4f 52 4d 28 64 62 2e 63 69 72 63 6c  SQLFORM(db.circl
2c30: 65 2c 30 29 0a 0a 23 23 20 20 6d 61 6b 65 20 61  e,0)..##  make a
2c40: 6e 20 75 70 64 61 74 65 20 66 6f 72 6d 20 69 6e  n update form in
2c50: 20 74 77 6f 20 70 6f 73 73 69 62 6c 65 20 77 61   two possible wa
2c60: 79 73 3a 0a 2d 20 66 6f 72 6d 3d 53 51 4c 46 4f  ys:.- form=SQLFO
2c70: 52 4d 28 64 62 2e 63 69 72 63 6c 65 2c 72 65 63  RM(db.circle,rec
2c80: 6f 72 64 29 0a 2d 20 66 6f 72 6d 3d 53 51 4c 46  ord).- form=SQLF
2c90: 4f 52 4d 28 64 62 2e 63 69 72 63 6c 65 2c 72 65  ORM(db.circle,re
2ca0: 63 6f 72 64 5f 69 64 29 0a 0a 23 23 20 20 6d 61  cord_id)..##  ma
2cb0: 6b 65 20 61 20 64 69 73 70 6c 61 79 20 66 6f 72  ke a display for
2cc0: 6d 20 69 6e 20 74 77 6f 20 70 6f 73 73 69 62 6c  m in two possibl
2cd0: 65 20 77 61 79 73 3a 0a 2d 20 66 6f 72 6d 3d 53  e ways:.- form=S
2ce0: 51 4c 46 4f 52 4d 28 64 62 2e 63 69 72 63 6c 65  QLFORM(db.circle
2cf0: 2c 72 65 63 6f 72 64 2c 72 65 61 64 6f 6e 6c 79  ,record,readonly
2d00: 3d 54 72 75 65 29 0a 2d 20 66 6f 72 6d 3d 53 51  =True).- form=SQ
2d10: 4c 46 4f 52 4d 28 64 62 2e 63 69 72 63 6c 65 2c  LFORM(db.circle,
2d20: 72 65 63 6f 72 64 5f 69 64 2c 72 65 61 64 6f 6e  record_id,readon
2d30: 6c 79 3d 54 72 75 65 29 0a 0a 23 23 20 20 73 6f  ly=True)..##  so
2d40: 20 6e 6f 77 20 79 6f 75 20 63 61 6e 20 64 6f 2e   now you can do.
2d50: 2e 2e 0a 0a 2d 20 66 6f 72 6d 3d 53 51 4c 46 4f  ....- form=SQLFO
2d60: 52 4d 28 64 62 2e 63 69 72 63 6c 65 2c 72 65 71  RM(db.circle,req
2d70: 75 65 73 74 2e 61 72 67 73 5b 2d 31 5d 29 0a 0a  uest.args[-1])..
2d80: 2d 20 61 6e 64 20 79 6f 75 20 67 65 74 20 61 20  - and you get a 
2d90: 63 72 65 61 74 65 20 66 6f 72 6d 20 69 66 20 74  create form if t
2da0: 68 65 20 55 52 4c 20 65 6e 64 73 20 69 6e 20 2f  he URL ends in /
2db0: 30 2c 20 79 6f 75 20 67 65 74 20 61 6e 20 75 70  0, you get an up
2dc0: 64 61 74 65 0a 2d 20 66 6f 72 6d 20 69 66 20 74  date.- form if t
2dd0: 68 65 20 55 52 4c 20 65 6e 64 73 20 69 6e 20 2f  he URL ends in /
2de0: 5b 76 61 6c 69 64 5f 72 65 63 6f 72 64 5f 69 64  [valid_record_id
2df0: 5d 0a 0a 23 23 20 79 6f 75 20 63 61 6e 20 61 6c  ]..## you can al
2e00: 73 6f 20 64 65 66 69 6e 65 20 6f 6e 63 65 20 66  so define once f
2e10: 6f 72 20 61 6c 6c 0a 0a 2d 20 74 69 6d 65 73 74  or all..- timest
2e20: 61 6d 70 3d 53 51 4c 54 61 62 6c 65 28 4e 6f 6e  amp=SQLTable(Non
2e30: 65 2c 27 74 69 6d 65 73 74 61 6d 70 27 2c 0a 2d  e,'timestamp',.-
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2e50: 46 69 65 6c 64 28 27 63 72 65 61 74 65 64 5f 6f  Field('created_o
2e60: 6e 27 2c 27 64 61 74 65 74 69 6d 65 27 2c 0a 2d  n','datetime',.-
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e80: 20 20 20 20 20 20 20 20 20 20 20 77 72 69 74 61             writa
2e90: 62 6c 65 3d 46 61 6c 73 65 2c 0a 2d 20 20 20 20  ble=False,.-    
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3d 72         default=r
2ec0: 65 71 75 65 73 74 2e 6e 6f 77 29 2c 0a 2d 20 20  equest.now),.-  
2ed0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 46 69             SQLFi
2ee0: 65 6c 64 28 27 6d 6f 64 69 66 69 65 64 5f 6f 6e  eld('modified_on
2ef0: 27 2c 27 64 61 74 65 74 69 6d 65 27 2c 0a 2d 20  ','datetime',.- 
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f10: 20 20 20 20 20 20 20 20 20 20 77 72 69 74 61 62            writab
2f20: 6c 65 3d 46 61 6c 73 65 2c 0a 2d 20 20 20 20 20  le=False,.-     
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f40: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3d 72 65        default=re
2f50: 71 75 65 73 74 2e 6e 6f 77 2c 75 70 64 61 74 65  quest.now,update
2f60: 3d 72 65 71 75 65 73 74 2e 6e 6f 77 29 29 0a 0a  =request.now))..
2f70: 23 23 20 61 6e 64 20 75 73 65 20 69 74 20 69 6e  ## and use it in
2f80: 20 61 6c 6c 20 79 6f 75 72 20 74 61 62 6c 65 73   all your tables
2f90: 0a 0a 2d 20 64 62 2e 64 65 66 69 6e 65 5f 74 61  ..- db.define_ta
2fa0: 62 6c 65 28 27 6d 79 74 61 62 6c 65 27 2c 64 62  ble('mytable',db
2fb0: 2e 46 69 65 6c 64 28 27 73 6f 6d 65 66 69 65 6c  .Field('somefiel
2fc0: 64 27 29 2c 74 69 6d 65 73 74 61 6d 70 29 20 0a  d'),timestamp) .
2fd0: 0a 23 23 20 23 23 20 23 23 20 0a 0a 2d 20 4f 6e  .## ## ## ..- On
2fe0: 65 20 6d 6f 72 65 20 66 65 61 74 75 72 65 20 69  e more feature i
2ff0: 6e 20 74 72 75 6e 6b 2e 2e 2e 2e 0a 0a 2d 20 20  n trunk......-  
3000: 20 20 20 64 62 2e 64 65 66 69 6e 65 5f 74 61 62     db.define_tab
3010: 6c 65 28 27 69 6d 61 67 65 27 2c 53 51 4c 46 69  le('image',SQLFi
3020: 65 6c 64 28 27 66 69 6c 65 27 2c 27 75 70 6c 6f  eld('file','uplo
3030: 61 64 27 29 29 0a 0a 2d 20 20 20 20 20 64 62 2e  ad'))..-     db.
3040: 69 6d 61 67 65 2e 66 69 6c 65 2e 61 75 74 68 6f  image.file.autho
3050: 72 69 7a 65 3d 6c 61 6d 62 64 61 20 72 6f 77 3a  rize=lambda row:
3060: 20 54 72 75 65 20 6f 72 20 46 61 6c 73 65 0a 0a   True or False..
3070: 2d 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 6c 65  - then controlle
3080: 72 0a 2d 20 20 20 20 20 64 65 66 20 64 6f 77 6e  r.-     def down
3090: 6c 6f 61 64 28 29 3a 20 72 65 74 75 72 6e 20 72  load(): return r
30a0: 65 73 70 6f 6e 73 65 2e 64 6f 77 6e 6c 6f 61 64  esponse.download
30b0: 28 72 65 71 75 65 73 74 2c 64 62 29 0a 2d 20 69  (request,db).- i
30c0: 64 27 20 69 73 20 6e 6f 77 20 61 20 68 69 64 64  d' is now a hidd
30d0: 65 6e 20 66 69 65 6c 64 20 73 71 6c 66 6f 72 6d  en field sqlform
30e0: 0a 2d 20 67 71 6c 20 72 65 66 65 72 65 6e 63 65  .- gql reference
30f0: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 6c  s converted to l
3100: 6f 6e 67 0a 2d 20 61 64 6d 69 6e 20 6c 6f 67 69  ong.- admin logi
3110: 6e 20 68 61 73 20 61 75 74 6f 66 6f 63 75 73 0a  n has autofocus.
3120: 2d 20 6e 65 77 20 6e 6f 74 61 74 69 6f 6e 20 70  - new notation p
3130: 72 6f 70 6f 73 65 64 20 62 79 20 52 6f 62 69 6e  roposed by Robin
3140: 2c 20 64 62 2e 74 61 62 6c 65 5b 69 64 5d 0a 2d  , db.table[id].-
3150: 20 6e 65 77 20 55 70 6c 6f 61 64 57 69 64 67 65   new UploadWidge
3160: 74 20 73 68 6f 77 73 20 69 6d 61 67 65 73 0a 2d  t shows images.-
3170: 20 6e 65 77 20 67 65 6e 65 72 69 63 2e 68 74 6d   new generic.htm
3180: 6c 20 73 68 6f 77 73 20 72 65 71 75 65 73 74 2c  l shows request,
3190: 20 72 65 73 70 6f 6e 73 65 2c 20 73 65 73 73 69   response, sessi
31a0: 6f 6e 0a 2d 20 6e 65 77 20 4c 45 47 45 4e 44 20  on.- new LEGEND 
31b0: 68 65 6c 70 65 72 20 28 74 68 61 6e 6b 73 20 4d  helper (thanks M
31c0: 61 72 63 75 73 29 0a 2d 20 66 69 78 65 64 20 64  arcus).- fixed d
31d0: 6f 63 74 65 73 74 73 20 69 6e 20 73 71 6c 20 28  octests in sql (
31e0: 74 68 61 6e 6b 73 20 52 6f 62 69 6e 29 0a 2d 20  thanks Robin).- 
31f0: 6e 65 77 20 6e 6f 74 61 74 69 6f 6e 20 66 6f 72  new notation for
3200: 20 44 42 0a 0a 2d 20 72 65 63 6f 72 64 3d 64 62   DB..- record=db
3210: 2e 74 61 62 6c 65 5b 69 64 5d 0a 2d 20 64 62 2e  .table[id].- db.
3220: 74 61 62 6c 65 5b 69 64 5d 3d 64 69 63 74 28 2e  table[id]=dict(.
3230: 2e 2e 29 0a 2d 20 64 65 6c 20 64 62 2e 74 61 62  ..).- del db.tab
3240: 6c 65 5b 69 64 5d 0a 0a 2d 20 72 65 71 75 65 73  le[id]..- reques
3250: 74 2e 65 6e 76 2e 77 65 62 32 70 79 5f 76 65 72  t.env.web2py_ver
3260: 73 69 6f 6e 0a 2d 20 6e 65 77 20 63 6c 61 73 73  sion.- new class
3270: 20 67 6c 75 6f 6e 2e 73 74 6f 72 61 67 65 2e 53   gluon.storage.S
3280: 65 74 74 69 6e 67 73 20 68 61 73 20 6c 6f 63 6b  ettings has lock
3290: 5f 6b 65 79 73 2c 20 6c 6f 63 6b 5f 76 61 6c 75  _keys, lock_valu
32a0: 65 73 0a 2d 20 6a 71 75 65 72 79 20 31 2e 33 2e  es.- jquery 1.3.
32b0: 31 0a 2d 20 50 45 50 38 20 63 6f 6d 70 6c 69 61  1.- PEP8 complia
32c0: 6e 63 65 0a 2d 20 6e 65 77 20 65 78 61 6d 70 6c  nce.- new exampl
32d0: 65 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 2d  es application.-
32e0: 20 72 75 6e 73 20 6f 6e 20 6a 79 74 68 6f 6e 20   runs on jython 
32f0: 28 6e 6f 20 64 61 74 61 62 61 73 65 20 64 72 69  (no database dri
3300: 76 65 72 73 20 79 65 74 2c 20 74 68 61 6e 6b 73  vers yet, thanks
3310: 20 50 68 79 6f 29 0a 2d 20 66 69 78 65 64 20 62   Phyo).- fixed b
3320: 75 67 73 20 69 6e 20 74 65 73 74 73 0a 2d 20 70  ugs in tests.- p
3330: 61 73 73 65 73 20 61 6c 6c 20 75 6e 69 74 74 65  asses all unitte
3340: 73 74 20 62 75 74 20 74 65 73 74 5f 72 65 77 69  st but test_rewi
3350: 74 65 20 28 6e 6f 74 20 73 75 72 65 20 69 74 20  te (not sure it 
3360: 73 68 6f 75 6c 64 20 70 61 73 73 20 74 68 61 74  should pass that
3370: 20 6f 6e 65 29 0a 0a 2d 20 4c 6f 74 73 20 6f 66   one)..- Lots of
3380: 20 70 61 74 63 68 65 73 20 66 72 6f 6d 20 46 72   patches from Fr
3390: 61 6e 20 42 6f 6f 6e 65 20 28 61 62 6f 75 74 20  an Boone (about 
33a0: 74 6f 6f 6c 73 29 20 61 6e 64 20 44 6f 75 67 6c  tools) and Dougl
33b0: 61 20 53 6f 61 72 65 73 20 64 65 20 41 6e 64 61  a Soares de Anda
33c0: 72 64 65 20 28 50 79 74 68 6f 6e 20 32 2e 36 20  rde (Python 2.6 
33d0: 63 6f 6d 70 6c 69 61 6e 63 65 2c 20 75 73 65 72  compliance, user
33e0: 20 75 73 65 20 6f 66 20 68 61 73 68 6c 69 62 20   use of hashlib 
33f0: 69 6e 73 74 65 61 64 20 6f 66 20 6d 64 35 2c 20  instead of md5, 
3400: 6e 65 77 20 6d 61 72 6b 64 6f 77 6e 32 2e 70 79  new markdown2.py
3410: 29 0a 0a 23 23 20 31 2e 35 36 2e 31 2d 31 2e 35  )..## 1.56.1-1.5
3420: 36 2e 34 0a 2d 20 66 69 78 69 6e 67 20 6c 6f 74  6.4.- fixing lot
3430: 73 20 6f 66 20 73 6d 61 6c 6c 20 62 75 67 73 20  s of small bugs 
3440: 77 69 74 68 20 74 6f 6f 6c 20 61 6e 64 20 6c 61  with tool and la
3450: 6e 67 75 61 67 65 73 0a 2d 20 6a 71 75 65 72 79  nguages.- jquery
3460: 2e 31 2e 33 2e 32 0a 0a 23 23 20 31 2e 35 37 0a  .1.3.2..## 1.57.
3470: 2d 20 4e 65 77 20 61 6a 61 78 20 65 64 69 74 20  - New ajax edit 
3480: 77 69 74 68 20 6b 65 65 70 61 6c 69 76 65 20 28  with keepalive (
3490: 6e 6f 20 6c 6f 6e 67 65 72 20 6c 6f 67 67 65 64  no longer logged
34a0: 20 6f 75 74 20 77 68 65 6e 20 65 64 69 74 69 6e   out when editin
34b0: 67 20 63 6f 64 65 29 0a 2d 20 46 69 78 65 64 20  g code).- Fixed 
34c0: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
34d0: 69 6f 6e 20 70 61 67 65 2e 0a 2d 20 52 65 6d 6f  ion page..- Remo
34e0: 76 65 64 20 2f 75 73 65 72 2f 62 69 6e 2f 70 79  ved /user/bin/py
34f0: 74 68 6f 6e 20 66 72 6f 6d 20 6d 6f 64 65 6c 73  thon from models
3500: 2f 63 6f 6e 74 72 6f 6c 6c 65 72 73 0a 0a 23 23  /controllers..##
3510: 20 31 2e 35 38 0a 2d 20 46 69 78 65 64 20 73 6f   1.58.- Fixed so
3520: 6d 65 20 43 52 4f 4e 20 62 75 67 73 0a 2d 20 46  me CRON bugs.- F
3530: 69 78 65 64 20 61 20 62 75 67 20 77 69 74 68 20  ixed a bug with 
3540: 6e 65 77 20 61 6a 61 78 20 65 64 69 74 0a 2d 20  new ajax edit.- 
3550: 45 78 70 65 72 69 6d 65 6e 74 61 6c 20 44 42 32  Experimental DB2
3560: 20 73 75 70 70 6f 72 74 20 69 6e 20 44 41 4c 0a   support in DAL.
3570: 2d 20 43 75 73 74 6f 6d 69 7a 61 62 6c 65 20 66  - Customizable f
3580: 6f 6e 74 20 73 69 7a 65 20 69 6e 20 61 64 6d 69  ont size in admi
3590: 6e 20 65 64 69 74 20 70 61 67 65 0a 2d 20 4e 65  n edit page.- Ne
35a0: 77 20 77 65 6c 63 6f 6d 65 2f 6d 6f 64 65 6c 73  w welcome/models
35b0: 2f 64 62 2e 70 79 20 73 68 6f 77 73 20 68 6f 77  /db.py shows how
35c0: 20 74 6f 20 6d 65 6d 63 61 63 68 65 20 73 65 73   to memcache ses
35d0: 73 69 6f 6e 73 20 6f 6e 20 47 41 45 20 77 69 74  sions on GAE wit
35e0: 68 20 4d 45 4d 44 42 0a 2d 20 4d 6f 72 65 20 65  h MEMDB.- More e
35f0: 78 70 72 65 73 73 69 76 65 20 74 69 74 6c 65 73  xpressive titles
3600: 20 69 6e 20 61 64 6d 69 6e 0a 2d 20 44 42 32 20   in admin.- DB2 
3610: 73 75 70 70 6f 72 74 2e 20 54 68 61 6e 6b 73 20  support. Thanks 
3620: 44 65 6e 65 73 21 0a 0a 23 23 20 31 2e 35 39 2d  Denes!..## 1.59-
3630: 31 2e 36 30 0a 2d 20 66 69 78 65 64 20 6c 6f 74  1.60.- fixed lot
3640: 73 20 6f 66 20 73 6d 61 6c 6c 20 62 75 67 73 0a  s of small bugs.
3650: 2d 20 72 6f 75 74 65 73 5f 69 6e 20 63 61 6e 20  - routes_in can 
3660: 66 69 6c 74 65 72 20 62 79 20 68 74 74 70 5f 68  filter by http_h
3670: 6f 73 74 0a 0a 23 23 20 31 2e 36 31 0a 2d 20 66  ost..## 1.61.- f
3680: 69 78 65 64 20 73 6f 6d 65 20 74 79 70 6f 73 0a  ixed some typos.
3690: 2d 20 61 75 74 68 2e 61 64 64 5f 70 65 72 6d 69  - auth.add_permi
36a0: 73 73 69 6f 6e 73 28 30 2c 2e 2e 2e 2e 29 20 30  ssions(0,....) 0
36b0: 20 69 6e 64 69 63 61 74 65 73 20 67 72 6f 75 70   indicates group
36c0: 20 6f 66 20 63 75 72 72 65 6e 74 20 75 73 65 72   of current user
36d0: 0a 2d 20 63 72 75 64 2e 75 70 64 61 74 65 20 68  .- crud.update h
36e0: 61 73 20 64 65 6c 65 74 61 62 6c 65 3d 54 72 75  as deletable=Tru
36f0: 65 20 6f 72 20 46 61 6c 73 65 0a 2d 20 66 69 78  e or False.- fix
3700: 65 64 20 69 73 73 75 65 20 77 69 74 68 20 47 41  ed issue with GA
3710: 45 20 64 65 74 65 63 74 69 6f 6e 20 2d 3e 20 67  E detection -> g
3720: 6c 75 6f 6e 2e 73 65 74 74 69 6e 67 73 2e 77 65  luon.settings.we
3730: 62 32 70 79 5f 72 75 6e 74 69 6d 65 20 2d 3e 20  b2py_runtime -> 
3740: 72 65 71 75 65 73 74 0a 0a 23 23 20 31 2e 36 32  request..## 1.62
3750: 0a 2d 20 53 51 4c 46 4f 52 4d 53 20 61 6e 64 20  .- SQLFORMS and 
3760: 63 72 75 64 20 6e 6f 77 20 73 68 6f 77 20 72 65  crud now show re
3770: 61 64 62 6c 65 20 66 69 65 6c 64 73 0a 2d 20 42  adble fields.- B
3780: 65 74 74 65 72 20 57 69 6e 67 49 44 45 20 73 75  etter WingIDE su
3790: 70 70 6f 72 74 0a 2d 20 4c 61 6e 67 75 61 67 65  pport.- Language
37a0: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
37b0: 6c 6c 79 20 74 72 61 6e 73 6c 61 74 65 64 0a 2d  lly translated.-
37c0: 20 54 2e 66 6f 72 63 65 20 61 6e 64 20 6c 61 7a   T.force and laz
37d0: 79 54 20 77 6f 72 6b 73 20 62 65 74 74 65 72 2c  yT works better,
37e0: 20 6f 70 74 69 6f 6e 61 6c 20 54 2e 6c 61 7a 79   optional T.lazy
37f0: 3d 46 61 6c 73 65 0a 2d 20 67 6c 75 6f 6e 2e 73  =False.- gluon.s
3800: 74 6f 72 61 67 65 2e 4d 65 73 73 61 67 65 73 20  torage.Messages 
3810: 61 72 65 20 6e 6f 77 20 74 72 61 6e 73 6c 61 74  are now translat
3820: 65 64 20 77 69 74 68 6f 75 74 20 54 0a 2d 20 69  ed without T.- i
3830: 66 20 72 6f 75 74 65 73 2e 70 79 20 74 68 65 6e  f routes.py then
3840: 20 72 65 71 75 65 73 74 2e 65 6e 76 2e 77 65 62   request.env.web
3850: 32 70 79 5f 6f 72 69 67 69 6e 61 6c 5f 75 72 69  2py_original_uri
3860: 0a 2d 20 64 62 2e 74 61 62 6c 65 2e 66 69 65 6c  .- db.table.fiel
3870: 64 2e 69 73 61 74 74 61 63 68 6d 65 6e 74 20 3d  d.isattachment =
3880: 20 54 72 75 65 0a 2d 20 69 6e 74 65 72 6e 61 74   True.- internat
3890: 69 6f 6e 61 6c 69 7a 61 69 74 6f 6e 20 6f 66 20  ionalizaiton of 
38a0: 61 64 6d 69 6e 20 62 79 20 59 61 69 72 0a 2d 20  admin by Yair.- 
38b0: 61 64 6d 69 6e 2e 70 79 20 62 79 20 41 6c 76 61  admin.py by Alva
38c0: 72 6f 0a 2d 20 6e 65 77 20 4d 45 4e 55 20 68 65  ro.- new MENU he
38d0: 6c 70 65 72 0a 2d 20 6e 65 77 20 77 32 70 20 66  lper.- new w2p f
38e0: 69 6c 65 20 66 6f 72 6d 61 74 0a 2d 20 6e 65 77  ile format.- new
38f0: 20 77 65 6c 63 6f 6d 65 20 61 70 70 20 77 69 74   welcome app wit
3900: 68 20 61 75 74 68 2c 20 73 65 72 76 69 63 65 20  h auth, service 
3910: 61 6e 64 20 63 72 75 64 20 74 75 72 6e 65 64 20  and crud turned 
3920: 6f 6e 0a 0a 23 23 20 31 2e 36 33 2d 31 2e 36 33  on..## 1.63-1.63
3930: 2e 34 0a 2d 20 6e 6f 20 6d 6f 72 65 20 69 6d 70  .4.- no more imp
3940: 6f 72 74 20 67 6c 75 6f 6e 2e 0a 2d 20 73 75 70  ort gluon..- sup
3950: 70 6f 72 74 20 66 6f 72 20 67 65 6e 65 72 69 63  port for generic
3960: 2e 78 78 78 0a 2d 20 73 69 6d 70 6c 65 6a 73 6f  .xxx.- simplejso
3970: 6e 20 63 61 6e 20 68 61 6e 64 6c 65 20 64 61 74  n can handle dat
3980: 65 74 69 6d 65 20 64 61 74 65 20 61 6e 64 20 74  etime date and t
3990: 69 6d 65 0a 0a 23 23 20 31 2e 36 33 2e 35 0a 2d  ime..## 1.63.5.-
39a0: 20 59 6f 75 20 63 61 6e 20 64 6f 20 6a 51 75 65   You can do jQue
39b0: 72 79 2e 6e 6f 43 6f 6e 66 6c 69 63 74 28 29 20  ry.noConflict() 
39c0: 77 69 74 68 6f 75 74 20 62 72 65 61 6b 69 6e 67  without breaking
39d0: 20 77 65 62 32 70 79 5f 61 6a 61 78 0a 2d 20 57   web2py_ajax.- W
39e0: 69 67 65 74 73 20 63 61 6e 20 68 61 76 65 20 61  igets can have a
39f0: 74 74 72 69 62 75 74 65 73 20 28 74 68 61 6e 6b  ttributes (thank
3a00: 73 20 48 61 6e 73 29 0a 2d 20 4c 6f 74 73 20 6f  s Hans).- Lots o
3a10: 66 20 69 6e 74 65 72 6e 61 6c 20 63 6c 65 61 6e  f internal clean
3a20: 75 70 20 61 6e 64 20 62 65 74 74 65 72 20 63 6f  up and better co
3a30: 64 65 20 72 65 75 73 61 67 65 20 28 74 68 61 6e  de reusage (than
3a40: 6b 73 20 48 61 6e 73 29 0a 0a 23 23 20 31 2e 36  ks Hans)..## 1.6
3a50: 34 0a 2d 20 4d 6f 64 65 6c 73 20 32 2d 33 20 74  4.- Models 2-3 t
3a60: 69 6d 65 73 20 66 61 73 74 65 72 20 28 74 68 61  imes faster (tha
3a70: 6e 6b 73 20 41 6c 65 78 65 79 29 0a 2d 20 42 65  nks Alexey).- Be
3a80: 74 74 65 72 20 4c 44 41 50 20 73 75 70 70 6f 72  tter LDAP suppor
3a90: 74 0a 2d 20 57 6f 72 6b 73 20 77 69 74 68 20 4a  t.- Works with J
3aa0: 79 74 68 6f 6e 20 28 69 6e 63 6c 75 64 69 6e 67  ython (including
3ab0: 20 73 71 6c 69 74 65 20 61 6e 64 20 70 6f 73 74   sqlite and post
3ac0: 67 72 65 73 71 6c 20 77 69 74 68 20 7a 78 4a 44  gresql with zxJD
3ad0: 42 43 29 3a 0a 0a 2d 20 20 20 64 6f 77 6e 6c 6f  BC):..-   downlo
3ae0: 61 64 20 6a 79 74 68 6f 6e 2d 32 2e 35 72 63 33  ad jython-2.5rc3
3af0: 2e 6a 61 72 0a 2d 20 20 20 64 6f 77 6e 6c 6f 61  .jar.-   downloa
3b00: 64 20 71 6c 69 74 65 2d 6a 64 62 63 2d 33 2e 36  d qlite-jdbc-3.6
3b10: 2e 31 34 2e 32 2e 6a 61 72 0a 2d 20 20 20 6a 61  .14.2.jar.-   ja
3b20: 76 61 20 2d 6a 61 72 20 6a 79 74 68 6f 6e 2d 78  va -jar jython-x
3b30: 78 78 2e 6a 61 72 0a 2d 20 20 20 65 78 70 6f 72  xx.jar.-   expor
3b40: 74 20 43 4c 41 53 53 50 41 54 48 3d 24 43 4c 41  t CLASSPATH=$CLA
3b50: 53 53 50 41 54 48 3a 2f 55 73 65 72 73 2f 6d 64  SSPATH:/Users/md
3b60: 69 70 69 65 72 72 6f 2f 6a 79 74 68 6f 6e 32 2e  ipierro/jython2.
3b70: 35 72 63 33 2f 73 71 6c 69 74 65 2d 6a 64 62 63  5rc3/sqlite-jdbc
3b80: 2d 33 2e 36 2e 31 34 2e 32 2e 6a 61 72 0a 2d 20  -3.6.14.2.jar.- 
3b90: 20 20 63 64 20 77 65 62 32 70 79 0a 2d 20 20 20    cd web2py.-   
3ba0: 2e 2e 2f 6a 79 74 68 6f 6e 32 2e 35 72 63 33 2f  ../jython2.5rc3/
3bb0: 6a 79 74 68 6f 6e 20 77 65 62 32 70 79 2e 70 79  jython web2py.py
3bc0: 0a 0a 23 23 20 31 2e 36 34 2e 32 0a 2d 20 4e 65  ..## 1.64.2.- Ne
3bd0: 77 20 49 53 5f 43 4f 4d 50 4c 45 58 20 76 61 6c  w IS_COMPLEX val
3be0: 69 64 61 74 6f 72 2c 20 74 68 61 6e 6b 20 4d 72  idator, thank Mr
3bf0: 2e 20 46 72 65 65 7a 65 0a 2d 20 45 78 70 65 72  . Freeze.- Exper
3c00: 69 6d 65 6e 74 61 6c 20 49 6e 66 6f 72 6d 69 78  imental Informix
3c10: 20 73 75 70 70 6f 72 74 0a 2d 20 41 75 74 6f 6c   support.- Autol
3c20: 6f 67 69 6e 20 6f 6e 20 72 65 67 69 73 74 72 61  ogin on registra
3c30: 74 69 6f 6e 0a 0a 23 23 20 31 2e 36 34 2e 33 0a  tion..## 1.64.3.
3c40: 2d 20 53 6f 6d 65 20 62 75 67 20 66 69 78 65 73  - Some bug fixes
3c50: 0a 0a 23 23 20 31 2e 36 34 2e 34 0a 2d 20 53 6f  ..## 1.64.4.- So
3c60: 6d 20 62 75 67 20 66 69 78 65 73 0a 2d 20 49 6e  m bug fixes.- In
3c70: 66 6f 72 6d 69 78 20 53 75 70 70 6f 72 74 0a 2d  formix Support.-
3c80: 20 72 65 73 70 6f 6e 73 65 2e 72 65 6e 64 65 72   response.render
3c90: 28 73 74 72 65 61 6d 29 0a 2d 20 53 51 4c 46 4f  (stream).- SQLFO
3ca0: 52 4d 2e 66 61 63 74 6f 72 79 0a 2d 20 53 51 4c  RM.factory.- SQL
3cb0: 46 4f 52 4d 2e 77 69 64 67 65 74 73 2e 72 61 64  FORM.widgets.rad
3cc0: 69 6f 20 61 6e 64 20 53 51 4c 46 4f 52 4d 2e 77  io and SQLFORM.w
3cd0: 69 64 67 65 74 73 2e 63 68 65 63 6b 62 6f 78 65  idgets.checkboxe
3ce0: 73 0a 0a 23 23 20 31 2e 36 35 0a 2d 20 72 65 53  s..## 1.65.- reS
3cf0: 54 20 64 6f 63 73 74 72 69 6e 67 73 20 66 6f 72  T docstrings for
3d00: 20 53 70 68 69 6e 78 2c 20 74 68 61 6e 6b 73 20   Sphinx, thanks 
3d10: 48 61 6e 73 0a 2d 20 67 6c 75 6f 6e 2f 63 6f 6e  Hans.- gluon/con
3d20: 72 74 69 62 2f 6c 6f 67 69 6e 5f 6d 65 74 68 6f  rtib/login_metho
3d30: 64 73 2f 67 61 65 5f 67 6f 6f 67 6c 65 5f 61 63  ds/gae_google_ac
3d40: 63 6f 75 6e 74 2e 70 79 20 66 6f 72 20 67 6f 6f  count.py for goo
3d50: 67 6c 65 20 43 41 53 20 6c 6f 67 69 6e 20 6f 6e  gle CAS login on
3d60: 20 47 41 45 2c 20 74 68 61 6e 6b 73 20 48 61 6e   GAE, thanks Han
3d70: 73 0a 2d 20 66 69 78 65 64 20 70 72 6f 62 6c 65  s.- fixed proble
3d80: 6d 20 77 69 74 68 20 41 75 74 68 20 61 6e 64 20  m with Auth and 
3d90: 46 69 72 65 62 69 72 64 20 27 70 61 73 73 77 6f  Firebird 'passwo
3da0: 72 64 27 20 69 73 73 75 65 0a 2d 20 6e 65 77 20  rd' issue.- new 
3db0: 61 75 74 68 2e 73 65 74 74 69 6e 67 73 2e 63 72  auth.settings.cr
3dc0: 65 61 74 65 5f 75 73 65 72 5f 67 72 6f 75 70 73  eate_user_groups
3dd0: 0a 2d 20 74 69 63 6b 65 74 73 20 73 74 6f 72 65  .- tickets store
3de0: 64 20 6f 6e 20 64 61 74 61 73 74 6f 72 65 20 6f  d on datastore o
3df0: 6e 20 47 41 45 20 61 6e 64 20 61 6c 73 6f 20 6c  n GAE and also l
3e00: 6f 67 67 65 64 2c 20 74 68 61 6e 6b 73 20 48 61  ogged, thanks Ha
3e10: 6e 73 0a 2d 20 69 6d 70 6f 72 76 65 64 20 49 53  ns.- imporved IS
3e20: 5f 4c 45 4e 47 54 48 20 77 69 74 68 20 6d 61 78  _LENGTH with max
3e30: 20 61 6e 64 20 6d 69 6e 2c 20 74 68 61 6e 6b 73   and min, thanks
3e40: 20 4d 61 74 65 75 73 7a 0a 2d 20 69 6d 70 72 6f   Mateusz.- impro
3e50: 76 65 64 20 49 53 5f 45 4d 41 49 4c 20 77 69 74  ved IS_EMAIL wit
3e60: 68 20 66 69 6c 74 65 72 73 2c 20 74 68 61 6e 6b  h filters, thank
3e70: 73 20 4d 61 74 65 75 73 7a 0a 2d 20 6e 65 77 20  s Mateusz.- new 
3e80: 49 53 5f 49 4d 41 47 45 20 63 68 65 63 6b 73 20  IS_IMAGE checks 
3e90: 66 6f 72 20 66 6f 72 6d 61 74 20 61 6e 64 20 73  for format and s
3ea0: 69 7a 65 2c 20 74 68 61 6e 6b 73 20 4d 61 74 65  ize, thanks Mate
3eb0: 75 73 7a 0a 2d 20 6e 65 77 20 49 53 5f 49 50 56  usz.- new IS_IPV
3ec0: 34 2c 20 74 68 61 6e 6b 73 20 4d 61 74 65 75 73  4, thanks Mateus
3ed0: 7a 0a 0a 23 23 20 31 2e 36 35 2e 31 0a 2d 20 73  z..## 1.65.1.- s
3ee0: 70 72 65 61 64 73 68 65 65 74 0a 2d 20 73 68 65  preadsheet.- she
3ef0: 6c 6c 20 68 69 73 74 6f 72 79 2c 20 74 68 61 6e  ll history, than
3f00: 6b 73 20 73 68 65 72 64 69 6d 0a 2d 20 63 72 6f  ks sherdim.- cro
3f10: 6e 74 61 62 20 65 64 69 74 6f 72 2c 20 74 68 61  ntab editor, tha
3f20: 6e 6b 73 20 41 6e 67 65 6c 6f 0a 2d 20 67 6c 75  nks Angelo.- glu
3f30: 6f 6e 2f 63 6f 6e 74 72 69 62 2f 6c 6f 67 69 6e  on/contrib/login
3f40: 5f 6d 65 74 68 6f 64 73 2f 63 61 73 5f 61 75 74  _methods/cas_aut
3f50: 68 2e 70 79 20 28 74 68 61 6e 6b 73 20 48 61 6e  h.py (thanks Han
3f60: 73 29 0a 2d 20 44 41 4c 28 2e 2e 2e 29 20 69 6e  s).- DAL(...) in
3f70: 73 74 65 61 64 20 6f 66 20 53 51 4c 44 42 28 2e  stead of SQLDB(.
3f80: 2e 2e 29 0a 2d 20 44 41 4c 28 27 67 61 65 27 29  ..).- DAL('gae')
3f90: 20 69 6e 73 74 65 61 64 20 6f 66 20 47 51 4c 44   instead of GQLD
3fa0: 42 28 29 0a 2d 20 46 69 65 6c 64 20 69 6e 73 74  B().- Field inst
3fb0: 65 61 64 20 6f 66 20 53 51 4c 46 69 65 6c 64 0a  ead of SQLField.
3fc0: 2d 20 28 74 68 65 20 6f 6c 64 20 73 79 6e 74 61  - (the old synta
3fd0: 78 20 73 74 69 6c 6c 20 77 6f 72 6b 73 29 0a 0a  x still works)..
3fe0: 23 23 20 31 2e 36 35 2e 32 0a 2d 20 46 69 78 65  ## 1.65.2.- Fixe
3ff0: 64 20 73 6f 6d 65 20 73 6d 61 6c 6c 20 61 75 74  d some small aut
4000: 68 20 62 75 67 73 0a 2d 20 46 69 65 6c 64 2e 73  h bugs.- Field.s
4010: 74 6f 72 65 28 2e 2e 2e 29 0a 0a 23 23 20 31 2e  tore(...)..## 1.
4020: 36 35 2e 33 2d 31 30 0a 2d 20 46 69 78 65 64 20  65.3-10.- Fixed 
4030: 73 6f 6d 65 20 73 6d 61 6c 6c 20 62 75 67 73 20  some small bugs 
4040: 61 6e 64 20 74 79 70 6f 73 20 69 6e 20 74 68 65  and typos in the
4050: 20 64 6f 63 73 74 72 69 6e 67 73 0a 2d 20 46 69   docstrings.- Fi
4060: 78 65 64 20 41 4d 46 33 20 73 75 70 70 6f 72 74  xed AMF3 support
4070: 0a 0a 23 23 20 31 2e 36 35 2e 31 31 0a 2d 20 46  ..## 1.65.11.- F
4080: 69 78 65 64 20 61 20 73 71 6c 68 74 6d 6c 20 62  ixed a sqlhtml b
4090: 75 67 20 77 69 74 68 20 69 6d 61 67 65 20 75 70  ug with image up
40a0: 6c 6f 61 64 0a 0a 23 23 20 31 2e 36 35 2e 31 32  load..## 1.65.12
40b0: 0a 2d 20 6c 61 62 6c 65 73 20 69 6e 20 61 75 74  .- lables in aut
40c0: 68 20 61 75 74 6f 2d 74 72 61 6e 73 6c 61 74 65  h auto-translate
40d0: 20 28 74 68 61 6e 6b 73 20 41 6c 76 61 72 6f 29   (thanks Alvaro)
40e0: 0a 2d 20 62 65 74 74 65 72 20 6c 64 61 70 5f 61  .- better ldap_a
40f0: 75 74 68 20 28 74 68 61 6e 6b 73 20 46 72 61 6e  uth (thanks Fran
4100: 29 0a 2d 20 61 75 74 68 20 63 68 61 63 6b 73 20  ).- auth chacks 
4110: 6c 6f 63 61 6c 6c 79 20 66 6f 72 20 62 6c 6f 63  locally for bloc
4120: 6b 65 64 20 61 63 63 6f 75 6e 74 73 20 65 76 65  ked accounts eve
4130: 6e 20 66 6f 72 20 61 6c 74 65 72 6e 61 74 65 20  n for alternate 
4140: 6c 6f 67 69 6e 20 6d 65 74 68 6f 64 73 20 28 74  login methods (t
4150: 68 61 6e 6b 73 20 46 72 61 6e 29 0a 0a 23 23 20  hanks Fran)..## 
4160: 31 2e 36 35 2e 31 33 0a 2d 20 72 65 71 75 65 73  1.65.13.- reques
4170: 74 2e 75 72 6c 20 28 74 68 61 6e 6b 73 20 4a 6f  t.url (thanks Jo
4180: 6e 61 74 68 61 6e 29 0a 2d 20 72 65 73 74 6f 72  nathan).- restor
4190: 65 64 20 75 70 6c 6f 61 64 66 69 65 6c 64 5f 6e  ed uploadfield_n
41a0: 65 77 66 69 6c 65 6e 61 6d 65 0a 2d 20 6e 65 77  ewfilename.- new
41b0: 20 65 78 61 6d 70 6c 65 73 20 6c 61 79 6f 75 74   examples layout
41c0: 20 6e 61 64 20 6c 6f 67 6f 20 28 74 68 61 6e 6b   nad logo (thank
41d0: 73 20 4d 61 74 65 75 73 7a 29 0a 0a 23 23 20 31  s Mateusz)..## 1
41e0: 2e 36 36 0a 2d 20 6e 65 77 20 64 6f 63 74 79 70  .66.- new doctyp
41f0: 65 73 0a 2d 20 66 6f 72 6d 2e 76 61 72 73 2e 6e  es.- form.vars.n
4200: 65 77 66 69 6c 65 6e 61 6d 65 0a 2d 20 6e 65 77  ewfilename.- new
4210: 20 48 54 4d 4c 20 61 6e 64 20 58 48 54 4d 4c 20   HTML and XHTML 
4220: 68 65 6c 70 65 72 73 0a 2d 20 62 65 74 74 65 72  helpers.- better
4230: 20 49 53 5f 4c 45 4e 47 54 48 0a 0a 23 23 20 31   IS_LENGTH..## 1
4240: 2e 36 37 2e 30 0a 2d 20 50 79 74 68 6f 6e 20 32  .67.0.- Python 2
4250: 2e 34 20 73 75 70 70 6f 72 74 20 28 61 67 61 69  .4 support (agai
4260: 6e 29 0a 2d 20 4e 65 77 20 6c 61 79 6f 75 74 20  n).- New layout 
4270: 66 6f 72 20 77 65 6c 63 6f 6d 65 0a 2d 20 63 68  for welcome.- ch
4280: 61 6e 67 65 64 20 64 65 66 61 75 6c 64 20 66 69  anged defauld fi
4290: 65 6c 64 20 73 69 7a 65 73 20 74 6f 20 35 31 32  eld sizes to 512
42a0: 0a 2d 20 46 69 65 6c 64 28 75 70 6c 6f 61 64 66  .- Field(uploadf
42b0: 6f 6c 64 65 72 3d 22 2e 2e 2e 22 29 0a 2d 20 61  older="...").- a
42c0: 70 70 61 64 6d 69 6e 20 77 6f 72 6b 73 20 6f 6e  ppadmin works on
42d0: 20 47 41 45 20 28 61 67 61 69 6e 2c 20 73 6f 6d   GAE (again, som
42e0: 65 68 74 69 6e 67 20 67 6f 74 20 62 72 6f 6b 65  ehting got broke
42f0: 6e 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74 29  n at some point)
4300: 0a 2d 20 6e 65 77 20 77 73 67 69 73 65 72 76 65  .- new wsgiserve
4310: 72 20 33 2e 32 2e 30 20 73 68 6f 75 6c 64 20 66  r 3.2.0 should f
4320: 69 78 20 72 65 63 75 72 72 65 6e 74 20 62 72 6f  ix recurrent bro
4330: 6b 65 6e 20 64 6f 77 6e 6c 6f 61 64 20 70 72 6f  ken download pro
4340: 62 6c 65 6d 73 0a 0a 23 23 20 31 2e 36 37 2e 31  blems..## 1.67.1
4350: 0a 2d 20 42 75 78 20 66 69 78 65 64 0a 0a 23 23  .- Bux fixed..##
4360: 20 31 2e 36 37 2e 32 0a 2d 20 53 65 63 75 72 69   1.67.2.- Securi
4370: 74 79 20 66 69 78 20 69 6e 20 6d 61 72 6b 64 6f  ty fix in markdo
4380: 77 6e 0a 0a 23 23 20 31 2e 36 38 2e 31 0a 2d 20  wn..## 1.68.1.- 
4390: 4e 65 77 20 6f 66 66 69 63 69 61 6c 20 6d 61 72  New official mar
43a0: 6b 64 6f 77 6e 20 77 69 74 68 20 73 65 63 75 72  kdown with secur
43b0: 69 74 79 20 66 69 78 0a 2d 20 72 6f 77 73 2e 66  ity fix.- rows.f
43c0: 69 72 73 74 28 29 0a 2d 20 72 6f 77 73 2e 6c 61  irst().- rows.la
43d0: 73 74 28 29 0a 2d 20 4e 65 77 20 63 72 6f 6e 0a  st().- New cron.
43e0: 2d 20 4e 65 77 20 68 69 6e 64 69 20 61 6e 64 20  - New hindi and 
43f0: 73 70 61 6e 69 73 68 20 74 72 61 6e 73 6c 61 74  spanish translat
4400: 69 6f 6e 0a 2d 20 63 61 63 68 65 64 20 75 70 6c  ion.- cached upl
4410: 6f 61 64 73 20 61 6c 6c 6f 77 20 66 6f 72 20 70  oads allow for p
4420: 72 6f 67 72 65 73 73 20 62 61 72 73 20 28 74 68  rogress bars (th
4430: 61 6e 6b 73 20 41 6e 64 43 79 63 6c 65 29 0a 2d  anks AndCycle).-
4440: 20 69 6e 67 72 65 73 20 73 75 70 70 6f 72 74 20   ingres support 
4450: 28 74 68 61 6e 6b 73 20 43 68 72 69 73 29 0a 2d  (thanks Chris).-
4460: 20 6c 65 67 61 63 79 20 64 61 74 61 62 61 73 65   legacy database
4470: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 64 62 32   support for db2
4480: 2c 20 6d 73 73 71 6c 20 77 69 74 68 20 6e 6f 6e  , mssql with non
4490: 2d 69 6e 74 20 70 72 69 6d 61 72 79 20 6b 65 79  -int primary key
44a0: 73 20 28 74 68 61 6e 6b 73 20 44 65 6e 65 73 29  s (thanks Denes)
44b0: 0a 2d 20 64 65 66 61 75 6c 74 20 73 65 74 74 69  .- default setti
44c0: 6e 67 20 6f 66 20 63 6f 6e 74 65 6e 74 2d 74 79  ng of content-ty
44d0: 70 65 20 28 74 68 69 73 20 6d 61 79 20 63 61 75  pe (this may cau
44e0: 73 65 20 73 74 72 61 6e 67 65 20 62 65 68 61 76  se strange behav
44f0: 69 6f 72 20 69 6e 20 6f 6c 64 20 61 70 70 73 20  ior in old apps 
4500: 77 68 65 6e 20 64 6f 77 6e 6c 6f 61 64 69 6e 67  when downloading
4510: 20 69 6d 61 67 65 73 29 0a 2d 20 49 53 5f 55 50   images).- IS_UP
4520: 50 45 52 20 61 6e 64 20 49 53 5f 4c 4f 57 45 52  PER and IS_LOWER
4530: 20 77 6f 72 6b 73 20 77 69 74 68 20 75 6e 69 63   works with unic
4540: 6f 64 65 0a 2d 20 43 4c 45 4e 55 50 20 6e 6f 74  ode.- CLENUP not
4550: 20 74 61 6b 65 73 20 72 65 67 65 78 20 6f 66 20   takes regex of 
4560: 61 6c 6c 6f 77 65 64 2f 6e 6f 77 20 61 6c 6c 6f  allowed/now allo
4570: 77 65 64 20 63 68 61 72 74 61 72 65 73 0a 2d 20  wed chartares.- 
4580: 4e 65 77 20 72 65 77 72 69 74 65 2e 70 79 20 61  New rewrite.py a
4590: 6c 6c 6f 77 73 20 64 79 6e 61 6d 69 63 20 72 6f  llows dynamic ro
45a0: 75 74 65 73 0a 2d 20 42 65 74 74 65 72 20 65 72  utes.- Better er
45b0: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 66 6f 72  ror messages for
45c0: 20 49 53 5f 49 4e 54 5f 2a 20 61 6e 64 20 49 53   IS_INT_* and IS
45d0: 5f 46 4c 4f 41 54 5f 2a 0a 0a 23 23 20 31 2e 36  _FLOAT_*..## 1.6
45e0: 38 2e 32 0a 2d 20 46 69 78 69 6e 67 20 62 75 67  8.2.- Fixing bug
45f0: 20 77 69 74 68 20 61 64 6d 69 6e 20 61 6e 64 20   with admin and 
4600: 6d 69 73 73 69 6e 67 20 63 72 6f 6e 74 61 62 0a  missing crontab.
4610: 2d 20 46 69 78 69 6e 67 20 62 75 67 20 77 69 74  - Fixing bug wit
4620: 68 20 72 65 77 72 69 74 65 2e 6c 6f 61 64 20 6f  h rewrite.load o
4630: 6e 20 47 41 45 20 28 74 68 61 6e 6b 73 20 57 69  n GAE (thanks Wi
4640: 6c 6c 69 61 6e 20 57 61 6e 67 29 0a 0a 23 23 20  llian Wang)..## 
4650: 31 2e 36 39 2e 31 0a 2d 20 46 69 78 65 64 20 61  1.69.1.- Fixed a
4660: 20 62 75 67 20 69 6e 74 72 6f 64 75 63 65 64 20   bug introduced 
4670: 69 6e 20 31 2e 36 38 20 61 62 6f 75 74 20 69 6e  in 1.68 about in
4680: 73 65 72 74 69 6e 67 20 75 6e 69 63 6f 64 65 20  serting unicode 
4690: 69 6e 20 44 41 4c 0a 2d 20 46 69 78 65 64 20 6f  in DAL.- Fixed o
46a0: 74 68 65 72 20 73 6d 61 6c 6c 20 62 75 67 73 0a  ther small bugs.
46b0: 2d 20 42 65 74 74 65 72 20 73 75 70 70 6f 72 74  - Better support
46c0: 20 66 6f 72 20 6c 65 67 61 63 79 20 64 61 74 61   for legacy data
46d0: 62 61 73 65 73 20 28 74 68 61 6e 6b 20 44 65 6e  bases (thank Den
46e0: 65 73 29 0a 2d 20 72 65 73 70 6f 6e 73 65 2e 6d  es).- response.m
46f0: 65 74 61 20 72 65 70 6c 61 63 65 73 20 72 65 73  eta replaces res
4700: 70 6f 6e 73 65 2e 61 75 74 68 6f 72 2c 20 72 65  ponse.author, re
4710: 73 70 6f 6e 73 65 2e 6b 65 79 77 6f 72 64 73 2c  sponse.keywords,
4720: 20 72 65 73 70 6f 6e 73 65 2e 64 65 73 63 72 69   response.descri
4730: 70 74 69 6f 6e 0a 2d 20 72 65 73 70 6f 6e 73 65  ption.- response
4740: 2e 66 69 6c 65 73 20 73 74 65 74 73 20 64 65 70  .files stets dep
4750: 65 6e 64 65 73 20 69 6e 20 70 6c 75 67 69 6e 73  endes in plugins
4760: 0a 2d 20 62 65 74 74 65 72 20 61 64 6d 69 6e 20  .- better admin 
4770: 66 6f 72 20 70 61 63 6b 69 6e 67 2f 75 6e 70 61  for packing/unpa
4780: 63 6b 69 6e 67 20 70 6c 75 67 69 6e 73 0a 2d 20  cking plugins.- 
4790: 72 65 66 65 72 65 6e 63 65 20 66 69 65 6c 73 20  reference fiels 
47a0: 6e 6f 72 20 65 76 61 6c 75 61 74 65 20 74 6f 20  nor evaluate to 
47b0: 44 41 4c 52 65 66 20 77 69 74 68 20 6c 61 7a 79  DALRef with lazy
47c0: 20 65 76 61 6c 75 61 74 69 6f 6e 20 28 63 6f 6f   evaluation (coo
47d0: 6c 2c 20 74 68 61 6e 6b 73 20 4d 72 20 46 72 65  l, thanks Mr Fre
47e0: 65 7a 65 29 0a 2d 20 63 61 6e 20 69 6e 73 65 72  eze).- can inser
47f0: 74 20 61 20 72 65 63 6f 72 64 20 69 6e 20 70 6c  t a record in pl
4800: 61 63 65 20 6f 66 20 61 20 72 65 66 65 72 65 6e  ace of a referen
4810: 63 65 0a 2d 20 72 65 63 6f 72 64 5b 65 5d 20 69  ce.- record[e] i
4820: 6e 73 74 65 61 64 20 6f 66 20 72 65 63 6f 72 64  nstead of record
4830: 2e 5f 65 78 74 72 61 5b 65 5d 20 28 74 65 6e 74  ._extra[e] (tent
4840: 61 74 69 76 65 6c 79 21 29 0a 2d 20 72 65 63 6f  atively!).- reco
4850: 72 64 2e 75 70 64 61 74 65 5f 72 65 63 6f 72 64  rd.update_record
4860: 28 29 20 77 69 74 68 20 6e 6f 20 61 72 67 73 0a  () with no args.
4870: 2d 20 72 6f 77 73 2e 66 69 6e 64 28 29 20 20 28  - rows.find()  (
4880: 74 68 61 6e 6b 73 20 4d 72 20 46 72 65 65 7a 65  thanks Mr Freeze
4890: 29 0a 2d 20 72 6f 77 73 2e 65 78 63 6c 75 64 65  ).- rows.exclude
48a0: 28 29 0a 2d 20 72 6f 77 73 2e 73 6f 72 74 28 29  ().- rows.sort()
48b0: 0a 2d 20 72 6f 77 73 5b 3a 5d 0a 0a 23 23 20 31  .- rows[:]..## 1
48c0: 2e 37 30 2e 31 0a 2d 20 46 69 78 65 64 20 62 75  .70.1.- Fixed bu
48d0: 67 20 77 69 74 68 20 52 6f 77 73 2e 61 73 5f 6c  g with Rows.as_l
48e0: 69 73 74 20 61 6e 64 20 44 41 4c 52 65 66 0a 2d  ist and DALRef.-
48f0: 20 41 64 64 65 64 20 52 6f 77 73 2e 61 73 5f 64   Added Rows.as_d
4900: 69 63 74 20 28 74 68 61 6e 6b 73 20 4d 72 20 46  ict (thanks Mr F
4910: 72 65 65 7a 65 20 61 6e 64 20 54 68 65 64 65 75  reeze and Thedeu
4920: 73 29 0a 2d 20 41 64 64 65 64 20 72 65 71 75 65  s).- Added reque
4930: 73 74 2e 77 73 67 69 20 28 74 68 61 6e 6b 73 20  st.wsgi (thanks 
4940: 68 63 76 73 74 29 20 61 6c 6c 6f 77 73 20 72 75  hcvst) allows ru
4950: 6e 6e 69 6e 67 20 77 73 67 69 20 61 70 70 73 20  nning wsgi apps 
4960: 75 6e 64 65 72 20 77 65 62 32 70 79 20 61 6e 64  under web2py and
4970: 20 61 70 70 6c 79 69 6e 67 20 77 65 67 69 20 6d   applying wegi m
4980: 69 64 64 6c 65 77 61 72 65 20 74 6f 20 72 65 67  iddleware to reg
4990: 75 6c 61 72 20 77 65 62 32 70 79 20 61 63 74 69  ular web2py acti
49a0: 6f 6e 73 20 74 68 61 74 20 72 65 74 75 72 6e 20  ons that return 
49b0: 73 74 72 69 6e 67 73 2e 0a 2d 20 45 78 70 65 72  strings..- Exper
49c0: 69 6d 65 6e 74 61 6c 20 64 69 73 74 72 69 62 75  imental distribu
49d0: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
49e0: 20 62 65 74 77 65 65 6e 20 70 6f 73 74 67 72 65   between postgre
49f0: 73 71 6c 2c 20 6d 79 73 71 6c 20 61 6e 64 20 66  sql, mysql and f
4a00: 69 72 65 62 69 72 64 0a 2d 20 46 69 6e 61 6c 6c  irebird.- Finall
4a10: 79 20 6c 6f 63 61 6c 5f 69 6d 70 6f 72 74 20 69  y local_import i
4a20: 73 20 68 65 72 65 21 0a 0a 23 23 20 31 2e 37 31  s here!..## 1.71
4a30: 2e 31 0a 2d 20 43 6f 6d 70 6c 65 74 65 20 72 65  .1.- Complete re
4a40: 77 72 69 74 65 20 6f 66 20 52 6f 77 73 0a 2d 20  write of Rows.- 
4a50: 72 65 6e 61 6d 65 64 20 44 41 4c 53 74 6f 72 61  renamed DALStora
4a60: 67 65 2d 3e 52 6f 77 73 2c 20 44 41 4c 52 65 66  ge->Rows, DALRef
4a70: 2d 3e 52 65 66 65 72 65 6e 63 65 0a 2d 20 45 78  ->Reference.- Ex
4a80: 70 65 72 69 6d 65 6e 74 61 6c 20 73 65 72 69 61  perimental seria
4a90: 6c 69 7a 61 72 69 6f 6e 20 6f 66 20 52 6f 77 20  lizarion of Row 
4aa0: 61 6e 64 20 52 6f 77 73 20 28 67 65 74 20 73 65  and Rows (get se
4ab0: 72 69 61 6c 69 7a 65 64 20 74 6f 20 64 69 63 74  rialized to dict
4ac0: 20 61 6e 64 20 6c 69 73 74 20 6f 66 20 64 69 63   and list of dic
4ad0: 74 29 0a 2d 20 44 41 4c 28 2e 2e 2e 2c 66 6f 6c  t).- DAL(...,fol
4ae0: 64 65 72 29 20 61 6e 64 20 74 65 6d 70 6c 61 74  der) and templat
4af0: 65 2e 72 65 6e 64 65 72 28 63 6f 6e 74 65 6e 74  e.render(content
4b00: 3d 2c 20 63 6f 6e 74 65 78 74 3d 29 20 6d 61 6b  =, context=) mak
4b10: 65 20 69 74 20 6d 6f 72 65 20 6d 6f 64 75 6c 61  e it more modula
4b20: 72 0a 0a 23 23 20 31 2e 37 32 2e 31 20 2d 20 31  r..## 1.72.1 - 1
4b30: 2e 37 32 2e 33 0a 2d 20 42 65 74 74 65 72 20 73  .72.3.- Better s
4b40: 75 70 70 6f 72 74 20 66 6f 72 20 6c 65 67 61 63  upport for legac
4b50: 79 20 64 61 74 61 62 61 73 65 73 0a 0a 23 23 20  y databases..## 
4b60: 31 2e 37 33 2e 31 0a 2d 20 46 69 78 65 64 20 70  1.73.1.- Fixed p
4b70: 72 6f 62 6c 65 6d 20 77 69 74 68 20 73 74 6f 72  roblem with stor
4b80: 61 67 65 20 61 6e 64 20 63 6f 6d 70 61 72 69 73  age and comparis
4b90: 6f 6e 20 6f 66 20 52 6f 77 20 6f 62 6a 65 63 74  on of Row object
4ba0: 73 0a 2d 20 46 69 78 65 64 20 70 72 6f 62 6c 65  s.- Fixed proble
4bb0: 6d 20 77 69 74 68 20 6d 61 69 6c 20 6f 6e 20 47  m with mail on G
4bc0: 41 45 0a 2d 20 46 69 78 65 64 20 70 72 6f 62 6c  AE.- Fixed probl
4bd0: 65 6d 20 77 69 74 68 20 54 20 69 6e 20 49 53 5f  em with T in IS_
4be0: 44 41 54 45 28 54 49 4d 45 29 20 65 72 72 6f 72  DATE(TIME) error
4bf0: 5f 6d 65 73 73 61 67 65 20 61 6e 64 20 66 6f 72  _message and for
4c00: 6d 61 74 0a 2d 20 52 6f 77 73 5b 69 5d 2e 64 65  mat.- Rows[i].de
4c10: 6c 65 74 65 5f 72 65 63 6f 72 64 28 29 0a 2d 20  lete_record().- 
4c20: 45 76 65 6e 20 62 65 74 74 65 72 20 73 75 70 70  Even better supp
4c30: 6f 72 74 20 66 6f 72 20 6c 65 67 61 63 79 20 64  ort for legacy d
4c40: 61 74 61 62 61 73 65 73 0a 2d 20 45 78 70 65 72  atabases.- Exper
4c50: 69 6d 61 6e 74 61 6c 20 73 75 70 70 6f 72 74 20  imantal support 
4c60: 66 6f 72 20 6e 6f 6e 20 55 54 46 38 20 65 6e 63  for non UTF8 enc
4c70: 6f 64 69 6e 67 20 69 6e 20 44 42 0a 2d 20 42 65  oding in DB.- Be
4c80: 74 74 65 72 20 49 50 56 34 20 28 74 68 61 6e 6b  tter IPV4 (thank
4c90: 73 20 54 68 61 6e 64 65 75 73 29 0a 2d 20 54 2e  s Thandeus).- T.
4ca0: 63 75 72 72 65 6e 74 5f 6c 61 6e 67 75 61 67 65  current_language
4cb0: 73 20 64 65 66 61 75 6c 74 20 74 6f 20 27 65 6e  s default to 'en
4cc0: 27 20 61 6e 64 20 6e 65 77 20 54 2e 73 65 74 5f  ' and new T.set_
4cd0: 63 75 72 72 65 6e 74 5f 6c 61 6e 67 75 61 67 65  current_language
4ce0: 73 28 2e 2e 2e 29 20 28 74 68 61 6e 6b 73 20 59  s(...) (thanks Y
4cf0: 61 72 6b 6f 29 0a 2d 20 49 4e 50 55 54 28 2e 2e  arko).- INPUT(..
4d00: 2e 2c 68 69 64 65 65 72 72 6f 72 3d 46 61 6c 73  .,hideerror=Fals
4d10: 65 29 20 75 73 65 64 20 74 6f 20 66 69 78 20 72  e) used to fix r
4d20: 61 72 65 20 63 68 65 63 68 62 6f 78 20 77 69 64  are chechbox wid
4d30: 67 65 74 20 70 72 6f 62 6c 65 6d 0a 2d 20 41 64  get problem.- Ad
4d40: 6d 69 6e 20 61 6c 6c 6f 77 73 20 63 68 61 6e 67  min allows chang
4d50: 65 20 6f 66 20 61 64 6d 69 6e 20 70 61 73 73 77  e of admin passw
4d60: 6f 72 64 0a 2d 20 4e 65 77 20 67 6c 75 6f 6e 2f  ord.- New gluon/
4d70: 63 6f 6e 74 72 69 62 2f 70 6f 70 75 6c 61 74 65  contrib/populate
4d80: 2e 70 79 0a 2d 20 53 69 7a 65 20 6f 66 20 69 6e  .py.- Size of in
4d90: 70 75 74 2f 74 65 78 74 61 72 65 61 20 73 65 74  put/textarea set
4da0: 20 62 79 20 43 53 53 20 6e 6f 20 6d 6f 72 65 20   by CSS no more 
4db0: 62 79 20 6a 51 75 65 72 79 20 20 28 74 68 61 6e  by jQuery  (than
4dc0: 6b 73 20 49 63 65 62 65 72 67 29 0a 2d 20 43 75  ks Iceberg).- Cu
4dd0: 73 74 6f 6d 69 7a 61 62 6c 65 20 43 53 56 20 20  stomizable CSV  
4de0: 28 74 68 61 6e 6b 73 20 54 68 61 6e 64 65 75 73  (thanks Thandeus
4df0: 29 0a 2d 20 4d 6f 72 65 20 62 75 67 20 66 69 78  ).- More bug fix
4e00: 65 64 20 28 74 68 61 6e 6b 73 20 54 68 61 6e 64  ed (thanks Thand
4e10: 65 75 73 29 0a 2d 20 42 65 74 74 65 72 20 72 65  eus).- Better re
4e20: 67 65 78 20 66 6f 72 20 74 65 6d 70 6c 61 74 65  gex for template
4e30: 20 66 69 78 65 64 20 4a 79 74 68 6f 6e 20 70 72   fixed Jython pr
4e40: 6f 62 6c 65 6d 20 28 74 68 61 6e 6b 20 4a 6f 6e  oblem (thank Jon
4e50: 61 74 68 61 6e 29 0a 0a 23 23 20 31 2e 37 34 2e  athan)..## 1.74.
4e60: 31 0a 2d 20 4d 6f 76 65 64 20 74 6f 20 6d 65 72  1.- Moved to mer
4e70: 63 75 72 69 61 6c 0a 2d 20 44 65 66 61 75 6c 74  curial.- Default
4e80: 20 76 61 6c 69 64 61 74 6f 72 73 20 75 73 65 20   validators use 
4e90: 74 68 65 20 6e 65 77 20 64 65 66 69 6e 65 5f 74  the new define_t
4ea0: 61 62 6c 65 28 2e 2e 2e 2e 2c 66 6f 72 6d 61 74  able(....,format
4eb0: 3d 27 2e 2e 2e 27 29 0a 2d 20 4e 65 77 20 67 65  ='...').- New ge
4ec0: 74 5f 76 61 72 73 20 61 6e 64 20 70 6f 73 74 5f  t_vars and post_
4ed0: 76 61 72 73 20 63 6f 6d 70 61 74 69 62 6c 65 20  vars compatible 
4ee0: 69 6e 20 32 2e 35 20 61 6e 64 20 32 2e 36 20 28  in 2.5 and 2.6 (
4ef0: 74 68 61 6e 6b 73 20 54 69 6d 29 0a 2d 20 4d 61  thanks Tim).- Ma
4f00: 6a 6f 72 20 72 65 77 72 69 74 65 20 6f 66 20 67  jor rewrite of g
4f10: 71 6c 2e 70 79 20 65 78 74 65 6e 64 73 20 44 41  ql.py extends DA
4f20: 4c 20 73 79 6e 74 61 78 20 6f 6e 20 47 41 45 0a  L syntax on GAE.
4f30: 2d 20 4e 6f 20 6d 6f 72 65 20 2a 2e 77 32 70 2c  - No more *.w2p,
4f40: 20 77 65 6c 63 6f 6d 65 2e 77 32 70 20 69 73 20   welcome.w2p is 
4f50: 63 72 65 61 74 65 20 61 75 74 6f 6d 61 74 69 63  create automatic
4f60: 61 6c 6c 79 2c 20 62 61 73 65 20 61 70 70 73 20  ally, base apps 
4f70: 61 72 65 20 61 6c 77 61 79 73 20 75 70 67 72 61  are always upgra
4f80: 64 65 64 0a 2d 20 65 78 70 6f 72 74 5f 74 6f 5f  ded.- export_to_
4f90: 63 73 76 28 64 65 6c 69 6d 69 74 65 72 20 3d 20  csv(delimiter = 
4fa0: 27 2c 27 2c 20 71 75 6f 74 65 63 68 61 72 20 3d  ',', quotechar =
4fb0: 20 27 22 27 2c 20 71 75 6f 74 69 6e 67 20 3d 20   '"', quoting = 
4fc0: 63 73 76 2e 51 55 4f 54 45 5f 4d 49 4e 49 4d 41  csv.QUOTE_MINIMA
4fd0: 4c 29 2c 20 74 68 61 6e 6b 73 20 54 68 61 64 65  L), thanks Thade
4fe0: 75 73 20 0a 0a 23 23 20 31 2e 37 34 2e 32 2d 34  us ..## 1.74.2-4
4ff0: 0a 2d 20 46 69 78 20 62 75 67 73 20 69 6e 63 6c  .- Fix bugs incl
5000: 75 64 69 6e 67 20 69 6e 63 6c 75 64 69 6e 67 20  uding including 
5010: 75 6e 69 63 6f 64 65 20 69 6e 20 65 6d 61 69 6c  unicode in email
5020: 73 20 61 6e 64 20 62 6c 6f 62 73 20 6f 6e 20 47  s and blobs on G
5030: 41 45 0a 0a 23 23 20 31 2e 37 34 2e 35 0a 2d 20  AE..## 1.74.5.- 
5040: 62 75 67 20 66 69 78 65 73 0a 2d 20 72 65 73 74  bug fixes.- rest
5050: 6f 72 65 64 20 70 79 74 68 6f 6e 20 32 2e 34 20  ored python 2.4 
5060: 73 75 70 70 6f 72 74 2c 74 68 61 6e 6b 73 20 6f  support,thanks o
5070: 6e 74 2e 72 69 66 0a 2d 20 73 75 70 70 6f 72 74  nt.rif.- support
5080: 20 66 6f 72 20 6e 61 74 69 76 65 20 74 79 70 65   for native type
5090: 73 20 6f 6e 20 47 6f 6f 67 6c 65 20 41 70 70 20  s on Google App 
50a0: 45 6e 67 69 6e 65 0a 2d 20 63 61 63 68 65 2e 72  Engine.- cache.r
50b0: 61 6d 20 75 73 61 67 65 20 73 74 61 74 69 63 74  am usage statict
50c0: 69 63 73 2c 20 74 68 61 6e 6b 73 20 54 68 61 64  ics, thanks Thad
50d0: 75 73 0a 2d 20 6e 6f 20 6d 6f 72 65 20 61 75 74  us.- no more aut
50e0: 68 20 6d 61 6e 75 20 69 6e 20 73 63 61 66 66 6f  h manu in scaffo
50f0: 6c 64 69 6e 67 0a 2d 20 6e 6f 20 6d 6f 72 65 20  lding.- no more 
5100: 73 70 61 73 68 20 73 63 72 65 65 6e 20 77 69 74  spash screen wit
5110: 68 20 2d 51 0a 2d 20 66 69 78 65 64 20 64 6f 63  h -Q.- fixed doc
5120: 74 65 73 74 20 69 6e 20 68 74 6d 6c 2e 70 79 2c  test in html.py,
5130: 20 74 68 61 6e 6b 73 20 41 6e 61 6e 64 20 56 61   thanks Anand Va
5140: 69 64 79 61 0a 2d 20 65 78 70 6f 72 74 5f 74 6f  idya.- export_to
5150: 5f 63 73 76 5f 66 69 6c 65 20 68 61 73 20 72 65  _csv_file has re
5160: 70 72 65 73 65 6e 74 2c 20 74 68 61 6e 6b 73 20  present, thanks 
5170: 54 68 61 64 65 75 73 0a 0a 23 23 20 31 2e 37 34  Thadeus..## 1.74
5180: 2e 36 0a 2d 20 62 75 67 20 66 69 78 65 73 0a 2d  .6.- bug fixes.-
5190: 20 49 53 5f 49 4e 5f 44 42 28 2e 2e 2e 2c 5f 61   IS_IN_DB(...,_a
51a0: 6e 64 3d 49 53 5f 4e 4f 54 5f 49 4e 5f 44 42 29  nd=IS_NOT_IN_DB)
51b0: 0a 2d 20 53 6d 61 6c 6c 65 72 20 70 6f 70 75 6c  .- Smaller popul
51c0: 61 74 65 2c 20 74 68 61 6e 6b 73 20 50 69 6f 74  ate, thanks Piot
51d0: 72 0a 2d 20 62 65 74 74 65 72 20 73 6c 69 63 69  r.- better slici
51e0: 6e 67 20 6f 66 20 66 69 65 6c 64 73 2c 20 74 68  ng of fields, th
51f0: 61 6e 6b 73 20 4d 69 63 68 61 65 6c 20 46 69 67  anks Michael Fig
5200: 0a 2d 20 43 61 63 68 65 20 73 74 61 74 73 2c 20  .- Cache stats, 
5210: 74 68 61 6e 6b 73 20 54 68 61 64 65 75 73 0a 2d  thanks Thadeus.-
5220: 20 42 65 74 74 65 72 20 67 71 6c 2e 70 79 0a 2d   Better gql.py.-
5230: 20 49 53 5f 49 4e 5f 44 42 20 61 6e 64 20 49 53   IS_IN_DB and IS
5240: 5f 49 4e 5f 53 45 54 20 64 65 66 61 75 6c 74 20  _IN_SET default 
5250: 74 6f 20 7a 65 72 6f 3d 27 27 2c 20 6e 6f 20 6c  to zero='', no l
5260: 6f 6e 67 65 72 20 7a 65 72 6f 3d 4e 6f 6e 65 0a  onger zero=None.
5270: 0a 23 23 20 31 2e 37 34 2e 37 0a 2d 20 72 65 71  .## 1.74.7.- req
5280: 75 65 73 74 5f 70 61 73 73 77 6f 72 64 5f 72 65  uest_password_re
5290: 73 65 74 20 61 6e 64 20 70 61 73 73 77 6f 72 64  set and password
52a0: 20 72 65 73 65 74 20 76 65 72 69 66 69 63 61 74   reset verificat
52b0: 69 6f 6e 0a 2d 20 70 79 74 68 6f 6e 20 77 65 62  ion.- python web
52c0: 32 70 79 2e 70 79 20 2d 53 20 61 70 70 20 2d 4d  2py.py -S app -M
52d0: 20 2d 52 20 73 63 72 69 70 74 2e 70 79 20 2d 41   -R script.py -A
52e0: 20 61 72 67 31 20 61 72 67 32 20 61 72 67 33 0a   arg1 arg2 arg3.
52f0: 2d 20 54 28 22 25 28 61 29 73 22 29 20 25 20 64  - T("%(a)s") % d
5300: 69 63 74 28 61 3d 22 68 65 6c 6c 6f 22 29 0a 0a  ict(a="hello")..
5310: 23 23 20 31 2e 37 34 2e 38 0a 2d 20 49 53 5f 53  ## 1.74.8.- IS_S
5320: 4c 55 47 2c 20 74 68 61 6e 6b 73 20 47 75 73 74  LUG, thanks Gust
5330: 61 76 6f 20 61 6e 64 20 4a 6f 6e 61 74 68 61 6e  avo and Jonathan
5340: 0a 2d 20 77 65 62 32 70 79 2e 70 79 20 2d 6e 6f  .- web2py.py -no
5350: 67 75 69 2c 20 74 68 61 6e 6b 73 20 4a 65 66 66  gui, thanks Jeff
5360: 20 42 61 75 65 72 0a 2d 20 73 6f 6c 76 65 64 20   Bauer.- solved 
5370: 61 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 6a  a problem with j
5380: 79 74 68 6f 6e 2c 20 74 68 61 6e 6b 73 20 54 69  ython, thanks Ti
5390: 6d 20 46 61 72 72 65 6c 0a 2d 20 6c 6f 67 69 6e  m Farrel.- login
53a0: 20 68 61 73 20 22 72 65 6d 65 6d 62 65 72 20 62   has "remember b
53b0: 65 20 6f 70 74 69 6f 6e 22 2c 20 74 68 61 6e 6b  e option", thank
53c0: 73 20 50 69 6f 74 72 20 42 61 6e 61 73 7a 69 65  s Piotr Banaszie
53d0: 77 69 63 7a 0a 2d 20 66 69 78 65 64 20 70 72 6f  wicz.- fixed pro
53e0: 62 6c 65 6d 20 77 69 74 68 20 6b 65 65 70 76 61  blem with keepva
53f0: 6c 75 65 20 69 6e 20 75 70 64 61 74 65 20 66 6f  lue in update fo
5400: 72 6d 73 2c 20 74 68 61 6e 6b 73 20 4d 69 67 75  rms, thanks Migu
5410: 65 6c 20 4c 6f 70 65 7a 0a 0a 23 23 20 31 2e 37  el Lopez..## 1.7
5420: 34 2e 39 0a 2d 20 49 53 5f 49 4e 5f 53 45 54 28  4.9.- IS_IN_SET(
5430: 28 28 30 2c 27 6c 61 62 65 6c 30 27 29 2c 28 31  ((0,'label0'),(1
5440: 2c 27 6c 61 62 65 6c 31 27 29 29 29 2c 20 74 68  ,'label1'))), th
5450: 61 6e 6b 73 20 46 61 6c 6b 6f 20 4b 72 61 75 73  anks Falko Kraus
5460: 65 0a 2d 20 53 51 4c 46 4f 52 4d 28 2e 2e 2e 29  e.- SQLFORM(...)
5470: 2e 61 63 63 70 65 74 73 20 73 74 6f 72 65 73 20  .accpets stores 
5480: 54 72 75 65 20 6f 72 20 46 61 6c 73 65 20 69 6e  True or False in
5490: 20 62 6f 6f 6c 65 61 6e 20 74 79 70 65 73 20 6e   boolean types n
54a0: 6f 20 4e 6f 6e 65 2c 20 74 68 61 6e 6b 73 20 46  o None, thanks F
54b0: 72 65 64 65 72 69 6b 20 57 61 67 6e 65 72 0a 2d  rederik Wagner.-
54c0: 20 53 51 4c 46 4f 52 4d 2e 66 61 63 74 6f 72 79   SQLFORM.factory
54d0: 28 2e 2e 2e 2c 74 61 62 6c 65 5f 6e 61 6d 65 3d  (...,table_name=
54e0: 27 6e 6f 5f 74 61 62 6c 65 27 29 2c 20 74 68 61  'no_table'), tha
54f0: 6e 6b 73 20 54 68 65 64 65 75 73 0a 2d 20 6a 51  nks Thedeus.- jQ
5500: 75 65 72 79 20 31 2e 34 2e 31 0a 2d 20 46 69 78  uery 1.4.1.- Fix
5510: 65 64 20 6d 61 6a 6f 72 20 70 72 6f 62 6c 65 6d  ed major problem
5520: 20 77 69 74 68 20 69 6e 74 65 72 6e 61 74 69 6f   with internatio
5530: 6e 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 6d 75  nalization of mu
5540: 6c 74 69 70 6c 65 20 6c 61 6e 67 75 61 67 65 73  ltiple languages
5550: 2e 0a 2d 20 46 69 78 65 64 20 61 20 73 65 72 69  ..- Fixed a seri
5560: 75 73 20 73 65 63 75 72 69 74 79 20 69 73 73 75  us security issu
5570: 65 20 77 69 74 68 20 6c 6f 67 69 6e 0a 2d 20 50  e with login.- P
5580: 6f 73 73 69 62 6c 79 20 66 69 78 65 64 20 73 6f  ossibly fixed so
5590: 6d 65 20 69 73 73 75 65 73 20 77 69 74 68 20 63  me issues with c
55a0: 72 6f 6e 0a 0a 23 23 20 31 2e 37 35 2e 31 0a 2d  ron..## 1.75.1.-
55b0: 20 62 65 74 74 65 72 20 63 72 6f 6e 0a 2d 20 62   better cron.- b
55c0: 65 74 74 65 72 20 66 65 74 63 68 0a 2d 20 6c 6f  etter fetch.- lo
55d0: 67 67 69 6e 67 20 6f 66 20 65 6d 61 69 6c 20 66  gging of email f
55e0: 61 69 6c 75 72 65 73 0a 2d 20 6e 65 77 20 77 65  ailures.- new we
55f0: 62 32 70 79 2e 66 65 64 6f 72 61 2e 73 68 0a 2d  b2py.fedora.sh.-
5600: 20 6e 65 77 20 73 65 74 75 70 2d 77 65 62 32 70   new setup-web2p
5610: 79 2d 75 62 75 6e 74 75 2e 73 68 0a 2d 20 65 78  y-ubuntu.sh.- ex
5620: 70 65 72 69 6d 65 6e 74 61 6c 20 61 75 74 6f 63  perimental autoc
5630: 6f 6d 70 6c 65 74 65 0a 2d 20 6d 65 6e 75 73 20  omplete.- menus 
5640: 77 6f 72 6b 20 6f 6e 20 49 45 36 0a 0a 23 23 20  work on IE6..## 
5650: 31 2e 37 35 2e 32 0a 2d 20 66 65 74 63 68 20 73  1.75.2.- fetch s
5660: 75 70 70 6f 72 74 73 20 63 61 63 68 65 0a 2d 20  upports cache.- 
5670: 63 75 72 64 2e 75 70 64 61 74 65 28 2e 2e 2e 2e  curd.update(....
5680: 2c 6f 6e 61 63 63 65 70 74 3d 63 72 75 64 2e 61  ,onaccept=crud.a
5690: 72 63 68 69 76 65 29 20 6d 61 67 69 63 0a 2d 20  rchive) magic.- 
56a0: 6e 65 77 20 55 55 49 44 20 6d 65 63 68 6e 69 73  new UUID mechnis
56b0: 6d 20 66 69 78 65 73 20 73 65 73 73 69 6f 6e 20  m fixes session 
56c0: 63 6f 6e 66 6c 69 63 74 73 20 77 69 74 68 20 63  conflicts with c
56d0: 6c 6f 6e 65 64 20 6d 61 63 68 69 6e 65 20 69 6e  loned machine in
56e0: 20 63 6c 6f 75 64 0a 2d 20 61 6c 6c 6f 77 20 74   cloud.- allow t
56f0: 6f 20 75 70 6c 6f 61 64 20 61 70 70 20 61 6e 64  o upload app and
5700: 20 6f 76 65 72 77 72 69 74 65 20 65 78 69 73 74   overwrite exist
5710: 69 6e 67 20 6f 6c 64 20 6f 6e 65 73 2c 20 74 68  ing old ones, th
5720: 61 6e 6b 73 20 4a 6f 6e 61 74 68 61 6e 0a 2d 20  anks Jonathan.- 
5730: 70 72 69 6e 74 20 67 6c 75 6f 6e 2e 74 6f 6f 6c  print gluon.tool
5740: 73 2e 70 72 65 74 74 79 64 61 74 65 28 72 65 71  s.prettydate(req
5750: 75 65 73 74 2e 6e 6f 77 2c 54 29 2c 20 74 68 61  uest.now,T), tha
5760: 6e 6b 73 20 52 69 63 68 61 72 64 0a 0a 23 23 20  nks Richard..## 
5770: 31 2e 37 35 2e 33 0a 2d 20 61 64 64 65 64 20 73  1.75.3.- added s
5780: 75 70 70 6f 72 74 20 66 6f 72 20 50 41 4d 20 61  upport for PAM a
5790: 75 74 68 65 6e 74 69 63 61 6e 20 66 6f 72 20 61  uthentican for a
57a0: 70 70 73 20 61 6e 64 20 66 6f 72 20 61 64 6d 69  pps and for admi
57b0: 6e 0a 2d 20 49 4e 54 52 4f 44 55 43 45 44 20 4d  n.- INTRODUCED M
57c0: 41 4a 4f 52 20 42 55 47 20 49 4e 20 42 45 41 55  AJOR BUG IN BEAU
57d0: 54 49 46 59 20 28 75 70 67 72 61 64 65 20 74 6f  TIFY (upgrade to
57e0: 20 31 2e 37 35 2e 34 29 20 49 4d 4d 45 44 49 41   1.75.4) IMMEDIA
57f0: 54 45 4c 59 0a 0a 23 23 20 31 2e 37 35 2e 34 0a  TELY..## 1.75.4.
5800: 2d 20 63 75 73 74 6f 6d 69 7a 61 62 6c 65 20 42  - customizable B
5810: 45 41 55 54 49 46 59 2c 20 74 68 61 6e 6b 73 20  EAUTIFY, thanks 
5820: 4a 6f 68 6e 0a 0a 23 23 20 31 2e 37 35 2e 35 0a  John..## 1.75.5.
5830: 2d 20 66 69 78 65 64 20 62 65 68 61 76 69 6f 75  - fixed behaviou
5840: 72 20 77 69 74 68 20 6c 61 6e 67 75 61 67 65 73  r with languages
5850: 2e 70 79 2c 20 74 68 61 6e 6b 73 20 49 63 65 62  .py, thanks Iceb
5860: 65 72 67 0a 2d 20 61 64 64 65 64 20 63 68 69 6e  erg.- added chin
5870: 65 73 65 20 28 74 68 61 6e 6b 73 20 49 63 65 62  ese (thanks Iceb
5880: 65 72 67 29 20 61 6e 64 20 48 75 6e 67 61 72 69  erg) and Hungari
5890: 61 6e 20 28 74 68 61 6e 6b 73 20 47 79 75 72 69  an (thanks Gyuri
58a0: 73 29 0a 2d 20 66 69 78 65 64 20 70 72 6f 62 6c  s).- fixed probl
58b0: 65 6d 20 77 69 74 68 20 47 41 45 20 64 65 6c 65  em with GAE dele
58c0: 74 65 64 20 62 79 20 69 64 20 28 74 68 61 6e 6b  ted by id (thank
58d0: 73 20 77 68 61 74 5f 68 6f 29 0a 2d 20 66 69 78  s what_ho).- fix
58e0: 65 64 20 62 75 67 20 69 6e 20 4c 4f 41 44 20 77  ed bug in LOAD w
58f0: 69 74 68 20 63 75 73 74 6f 6d 20 76 69 65 77 73  ith custom views
5900: 2c 20 74 68 61 6e 6b 73 20 76 68 61 6e 67 0a 2d  , thanks vhang.-
5910: 20 69 6d 70 72 6f 76 65 64 20 49 53 5f 49 4e 5f   improved IS_IN_
5920: 53 45 54 20 74 61 6b 65 73 20 69 74 65 72 61 74  SET takes iterat
5930: 6f 72 2c 20 64 69 63 74 2c 20 6c 69 73 74 20 61  or, dict, list a
5940: 6e 64 20 6c 69 73 74 20 6f 66 20 74 75 70 6c 65  nd list of tuple
5950: 73 2c 20 74 68 61 6e 6b 73 20 49 63 65 62 65 72  s, thanks Iceber
5960: 67 0a 2d 20 41 75 74 68 28 2e 2e 2e 2c 63 6f 6e  g.- Auth(...,con
5970: 74 72 6f 6c 6c 65 72 3d 27 64 65 66 61 75 6c 74  troller='default
5980: 27 29 0a 2d 20 46 69 78 65 64 20 6d 61 6a 6f 72  ').- Fixed major
5990: 20 62 75 67 20 69 6e 20 70 61 72 73 69 6e 67 20   bug in parsing 
59a0: 72 65 70 65 61 74 65 64 20 72 65 71 75 65 73 74  repeated request
59b0: 2e 76 61 72 73 2c 20 74 68 61 6e 6b 73 20 42 65  .vars, thanks Be
59c0: 6e 0a 2d 20 49 53 5f 44 41 54 45 20 61 6e 64 20  n.- IS_DATE and 
59d0: 49 53 5f 44 41 54 45 54 49 4d 45 20 63 61 6e 20  IS_DATETIME can 
59e0: 6e 6f 77 20 68 61 6e 64 6c 65 20 61 6e 79 20 30  now handle any 0
59f0: 3c 79 65 61 72 0a 2d 20 61 6c 6c 6f 77 20 74 6f  <year.- allow to
5a00: 20 64 69 73 61 62 6c 65 20 65 64 69 74 61 72 65   disable editare
5a10: 61 20 6f 6e 6c 6f 61 64 2c 20 74 68 61 6e 6b 73  a onload, thanks
5a20: 20 41 6c 65 78 0a 0a 23 23 20 31 2e 37 36 2e 31   Alex..## 1.76.1
5a30: 0a 2d 20 65 64 69 74 61 72 65 61 20 30 2e 38 2e  .- editarea 0.8.
5a40: 32 20 2b 20 7a 65 6e 63 6f 64 69 6e 67 0a 2d 20  2 + zencoding.- 
5a50: 6e 65 77 20 28 62 65 74 74 65 72 29 20 63 72 6f  new (better) cro
5a60: 6e 20 6c 6f 63 6b 69 6e 67 20 6d 65 61 63 68 6e  n locking meachn
5a70: 69 73 6d 0a 2d 20 6e 6f 20 73 74 6f 72 69 6e 67  ism.- no storing
5a80: 20 73 65 73 73 69 6f 6e 20 63 6f 6f 6b 69 65 73   session cookies
5a90: 20 6f 6e 20 73 65 73 73 69 6f 6e 2e 66 6f 72 67   on session.forg
5aa0: 65 74 28 29 2c 20 74 68 61 6e 6b 20 79 6f 75 20  et(), thank you 
5ab0: 41 6c 76 61 72 6f 0a 2d 20 72 6f 75 74 65 73 5f  Alvaro.- routes_
5ac0: 61 70 70 73 5f 72 61 77 20 61 6c 6c 6f 77 73 20  apps_raw allows 
5ad0: 64 69 73 61 62 6c 69 6e 67 20 6f 66 20 72 65 71  disabling of req
5ae0: 75 65 73 74 2e 61 72 67 73 20 76 61 6c 69 64 61  uest.args valida
5af0: 74 69 6f 6e 2c 20 74 68 61 6e 6b 73 20 4a 6f 6e  tion, thanks Jon
5b00: 61 74 68 61 6e 20 61 6e 64 20 44 65 6e 65 73 0a  athan and Denes.
5b10: 2d 20 66 69 78 65 64 20 70 72 6f 62 6c 65 6d 20  - fixed problem 
5b20: 77 69 74 68 20 65 64 69 74 5f 6c 61 6e 67 75 61  with edit_langua
5b30: 67 65 73 20 61 64 20 6d 75 6c 74 69 70 6c 65 20  ges ad multiple 
5b40: 74 61 62 73 2c 20 74 68 61 6e 6b 73 20 49 63 65  tabs, thanks Ice
5b50: 62 65 72 67 0a 2d 20 63 72 75 64 20 63 61 70 74  berg.- crud capt
5b60: 63 68 61 2c 20 74 68 61 6e 6b 73 20 79 6f 75 20  cha, thanks you 
5b70: 4e 61 74 68 61 6e 0a 2d 20 73 6f 66 74 63 72 6f  Nathan.- softcro
5b80: 6e 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65  n disabled by de
5b90: 66 61 75 6c 74 20 69 6e 20 77 73 67 69 68 61 6e  fault in wsgihan
5ba0: 64 6c 65 72 20 61 6e 64 20 66 63 67 69 68 61 6e  dler and fcgihan
5bb0: 64 6c 65 72 0a 0a 23 23 20 31 2e 37 36 2e 32 2d  dler..## 1.76.2-
5bc0: 31 2e 37 36 2e 33 0a 2d 20 6d 61 6a 6f 72 20 66  1.76.3.- major f
5bd0: 69 78 20 69 6e 20 63 72 6f 6e 20 28 77 69 6c 6c  ix in cron (will
5be0: 20 49 20 65 76 65 72 20 67 65 74 20 74 68 69 73   I ever get this
5bf0: 20 31 30 30 25 20 72 69 67 68 74 3f 29 0a 2d 20   100% right?).- 
5c00: 66 69 78 20 69 6e 20 64 65 6c 65 74 65 20 66 6f  fix in delete fo
5c10: 72 20 47 41 45 0a 2d 20 61 75 74 68 2e 73 65 74  r GAE.- auth.set
5c20: 74 69 6e 67 73 2e 6c 6f 67 69 6e 5f 63 61 70 74  tings.login_capt
5c30: 63 68 61 20 61 6e 64 20 61 75 74 68 2e 73 65 74  cha and auth.set
5c40: 74 69 6e 67 73 2e 72 65 67 69 73 74 65 72 5f 63  tings.register_c
5c50: 61 70 74 63 68 61 0a 2d 20 63 72 75 64 2e 73 65  aptcha.- crud.se
5c60: 74 74 69 6e 67 73 2e 63 72 65 61 74 65 5f 63 61  ttings.create_ca
5c70: 70 74 63 68 61 20 61 6e 64 20 20 63 72 75 64 2e  ptcha and  crud.
5c80: 73 65 74 74 69 6e 67 73 2e 75 70 64 61 74 65 5f  settings.update_
5c90: 63 61 70 74 63 68 61 0a 2d 20 61 75 74 6f 6d 61  captcha.- automa
5ca0: 74 69 63 20 75 70 64 61 74 65 20 62 75 74 74 6f  tic update butto
5cb0: 6e 20 69 6e 20 61 64 6d 69 6e 20 0a 0a 23 23 20  n in admin ..## 
5cc0: 31 2e 37 36 2e 34 0a 2d 20 53 51 4c 54 41 42 4c  1.76.4.- SQLTABL
5cd0: 45 28 64 62 28 64 62 2e 61 75 74 68 5f 75 73 65  E(db(db.auth_use
5ce0: 72 2e 69 64 3e 30 29 2e 73 65 6c 65 63 74 28 29  r.id>0).select()
5cf0: 2c 68 65 61 64 65 72 73 3d 27 66 69 65 6c 64 6e  ,headers='fieldn
5d00: 61 6d 65 3a 63 61 70 69 74 61 6c 69 7a 65 27 29  ame:capitalize')
5d10: 0a 2d 20 4f 72 61 63 6c 65 20 6c 69 6d 69 74 62  .- Oracle limitb
5d20: 79 20 69 6d 70 72 6f 76 65 64 20 28 74 68 61 6e  y improved (than
5d30: 6b 73 20 53 65 72 67 65 79 29 0a 2d 20 66 69 78  ks Sergey).- fix
5d40: 65 64 20 6d 69 67 72 61 74 69 6f 6e 73 20 69 6e  ed migrations in
5d50: 20 46 69 72 65 62 69 72 64 2c 20 74 68 61 6e 6b   Firebird, thank
5d60: 73 20 4a 6f 73 65 20 4a 61 63 68 75 66 0a 2d 20  s Jose Jachuf.- 
5d70: 67 6c 75 6f 6e 2f 63 6f 6e 74 72 69 62 2f 6c 6f  gluon/contrib/lo
5d80: 67 69 6e 5f 6d 65 74 68 6f 64 73 2f 6c 69 6e 6b  gin_methods/link
5d90: 65 64 69 6e 5f 61 63 63 6f 75 6e 74 2e 70 79 20  edin_account.py 
5da0: 28 74 6f 20 62 65 20 74 65 73 74 65 64 29 0a 0a  (to be tested)..
5db0: 23 23 20 31 2e 37 36 2e 35 0a 2d 20 46 69 78 65  ## 1.76.5.- Fixe
5dc0: 64 20 61 20 74 79 70 6f 20 69 6e 20 61 75 74 68  d a typo in auth
5dd0: 20 74 68 61 74 20 63 72 65 61 74 65 64 20 73 6f   that created so
5de0: 6d 65 20 72 65 67 69 73 74 72 61 74 69 6f 6e 20  me registration 
5df0: 70 72 6f 62 6c 65 6d 73 0a 0a 23 23 20 31 2e 37  problems..## 1.7
5e00: 37 2e 31 0a 2d 20 52 65 70 6c 61 63 65 64 20 43  7.1.- Replaced C
5e10: 68 65 72 72 79 50 79 20 77 69 74 68 20 52 6f 63  herryPy with Roc
5e20: 6b 65 74 20 77 65 62 20 73 65 72 76 65 72 2c 20  ket web server, 
5e30: 74 68 61 6e 6b 73 20 54 69 6d 0a 2d 20 43 61 63  thanks Tim.- Cac
5e40: 68 65 4f 6e 44 69 73 6b 20 61 6c 6c 6f 77 73 20  heOnDisk allows 
5e50: 74 6f 20 73 70 65 63 69 66 79 20 61 20 66 6f 6c  to specify a fol
5e60: 64 65 72 0a 2d 20 49 53 5f 44 41 54 45 2f 44 41  der.- IS_DATE/DA
5e70: 54 45 54 49 4d 45 20 63 61 6e 20 68 61 6e 64 6c  TETIME can handl
5e80: 65 20 61 6e 79 20 79 65 61 72 20 73 69 6e 63 65  e any year since
5e90: 20 30 0a 2d 20 53 51 4c 54 41 42 4c 45 28 2e 2e   0.- SQLTABLE(..
5ea0: 2e 2c 68 65 61 64 65 72 73 3d 27 66 69 65 6c 64  .,headers='field
5eb0: 6e 61 6d 65 3a 63 61 70 69 74 61 6c 69 7a 65 27  name:capitalize'
5ec0: 29 0a 2d 20 46 69 65 6c 64 28 29 2e 77 69 74 68  ).- Field().with
5ed0: 5f 61 6c 69 61 73 2c 20 74 68 61 6e 6b 73 20 4e  _alias, thanks N
5ee0: 61 74 68 61 6e 20 61 6e 64 20 4d 65 6e 67 75 0a  athan and Mengu.
5ef0: 2d 20 68 61 73 5f 6d 65 6d 62 65 72 73 68 69 70  - has_membership
5f00: 28 67 72 6f 75 70 3d 2e 2e 2e 2c 72 6f 6c 65 3d  (group=...,role=
5f10: 2e 2e 2e 29 2c 20 74 68 61 6e 6b 20 4a 6f 6e 61  ...), thank Jona
5f20: 74 68 61 6e 0a 2d 20 64 62 2e 64 65 66 69 6e 65  than.- db.define
5f30: 5f 74 61 62 6c 65 28 75 73 65 72 6e 61 6d 65 3d  _table(username=
5f40: 54 72 75 65 29 2c 20 74 68 61 6e 6b 73 20 4a 6f  True), thanks Jo
5f50: 6e 61 74 68 61 6e 0a 2d 20 67 6c 75 6f 6e 2e 74  nathan.- gluon.t
5f60: 6f 6f 6c 73 2e 70 72 65 74 74 79 64 61 74 65 0a  ools.prettydate.
5f70: 2d 20 63 61 6e 20 73 70 65 63 69 66 79 20 68 6f  - can specify ho
5f80: 73 74 6e 61 6d 65 20 69 6e 20 72 6f 75 74 65 73  stname in routes
5f90: 5f 6f 75 74 20 28 73 61 6d 65 20 73 79 6e 74 61  _out (same synta
5fa0: 78 20 61 73 20 72 6f 75 74 65 73 20 69 6e 29 2c  x as routes in),
5fb0: 20 74 68 61 6e 6b 73 20 4d 61 72 74 69 6e 0a 2d   thanks Martin.-
5fc0: 20 64 62 2e 74 61 62 6c 65 2e 62 75 6c 6b 5f 69   db.table.bulk_i
5fd0: 6e 73 65 72 74 28 5b 2e 2e 2e 72 65 63 6f 72 64  nsert([...record
5fe0: 73 2e 2e 2e 5d 29 20 6e 6f 77 20 77 6f 72 6b 73  s...]) now works
5ff0: 20 6f 6e 20 47 41 45 2c 20 74 68 61 6e 6b 73 20   on GAE, thanks 
6000: 4a 6f 6e 0a 2d 20 49 53 5f 45 4d 41 49 4c 20 76  Jon.- IS_EMAIL v
6010: 61 6c 69 64 61 74 65 73 20 6f 6e 20 27 6c 6f 63  alidates on 'loc
6020: 61 6c 68 6f 73 74 27 2c 20 74 68 61 6e 6b 73 20  alhost', thanks 
6030: 4a 6f 6e 61 74 68 61 6e 0a 2d 20 77 65 6c 63 6f  Jonathan.- welco
6040: 6d 65 2f 76 69 65 77 73 2f 6c 61 79 6f 75 74 2e  me/views/layout.
6050: 68 74 6d 6c 20 75 73 65 73 20 65 7a 2e 63 73 73  html uses ez.css
6060: 2c 20 74 68 61 6e 6b 73 20 59 61 72 6b 6f 0a 2d  , thanks Yarko.-
6070: 20 6d 61 69 6c 20 61 74 74 61 63 68 6d 65 6e 74   mail attachment
6080: 73 20 73 75 70 70 6f 72 74 20 75 74 66 38 2c 20  s support utf8, 
6090: 74 68 61 6e 6b 73 20 73 7a 69 6d 73 7a 6f 6e 0a  thanks szimszon.
60a0: 2d 20 77 6f 72 6b 73 20 77 69 74 68 20 50 79 50  - works with PyP
60b0: 79 2c 20 74 68 61 6e 6b 73 20 4a 6f 65 0a 2d 20  y, thanks Joe.- 
60c0: 62 65 74 74 65 72 20 46 69 72 65 62 69 72 64 20  better Firebird 
60d0: 73 75 70 70 6f 72 74 2c 20 74 68 61 6e 6b 73 20  support, thanks 
60e0: 4a 6f 73 65 0a 2d 20 62 65 74 74 65 72 20 4f 72  Jose.- better Or
60f0: 61 63 6c 65 20 73 75 70 70 6f 72 74 2c 20 74 68  acle support, th
6100: 61 6e 6b 73 20 47 61 62 72 69 65 6c 65 0a 2d 20  anks Gabriele.- 
6110: 63 72 6f 6e 20 73 75 70 70 6f 72 74 73 20 64 61  cron supports da
6120: 79 73 20 6f 66 20 77 65 65 6b 0a 2d 20 53 51 4c  ys of week.- SQL
6130: 46 4f 52 4d 28 2e 2e 2e 2c 66 6f 72 6d 73 74 79  FORM(...,formsty
6140: 6c 65 3d 22 74 61 62 6c 65 33 63 6f 6c 73 22 29  le="table3cols")
6150: 20 6f 72 20 22 74 61 62 6c 65 32 63 6f 6c 73 22   or "table2cols"
6160: 20 6f 72 20 22 64 69 76 73 22 20 6f 72 20 22 75   or "divs" or "u
6170: 6c 22 0a 2d 20 63 72 75 64 2e 73 65 74 74 69 6e  l".- crud.settin
6180: 67 73 2e 66 6f 72 6d 73 74 79 6c 65 0a 2d 20 77  gs.formstyle.- w
6190: 65 62 32 70 79 2e 70 79 20 2d 66 20 66 6f 6c 64  eb2py.py -f fold
61a0: 65 72 20 61 6c 6c 6f 77 73 20 74 6f 20 73 70 65  er allows to spe
61b0: 63 69 66 79 20 6c 6f 63 61 74 69 6f 6e 73 20 6f  cify locations o
61c0: 66 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20  f applications, 
61d0: 74 68 61 6e 6b 73 20 49 63 65 62 65 72 67 0a 2d  thanks Iceberg.-
61e0: 20 62 65 74 74 65 72 2f 66 61 73 74 65 72 20 72   better/faster r
61f0: 65 67 65 78 20 69 6e 20 74 65 6d 70 6c 61 74 65  egex in template
6200: 20 77 6f 72 6b 73 20 69 6e 20 4a 79 74 68 6f 6e   works in Jython
6210: 0a 2d 20 66 69 78 65 64 20 6c 6f 74 73 20 6f 66  .- fixed lots of
6220: 20 73 6d 61 6c 6c 20 62 75 67 73 0a 0a 23 23 20   small bugs..## 
6230: 31 2e 37 37 2e 32 0a 2d 20 66 69 78 65 64 20 78  1.77.2.- fixed x
6240: 2d 69 6e 64 65 78 20 69 6e 20 63 61 6c 65 6e 64  -index in calend
6250: 61 72 0a 23 23 20 31 2e 37 37 2e 33 0a 2d 20 73  ar.## 1.77.3.- s
6260: 6f 6d 65 20 63 6c 65 61 6e 75 70 20 6f 66 20 63  ome cleanup of c
6270: 6f 64 65 20 69 6e 20 63 6f 6d 70 69 6c 65 61 70  ode in compileap
6280: 70 0a 0a 23 23 20 31 2e 37 38 2e 31 0a 2d 20 6e  p..## 1.78.1.- n
6290: 65 77 20 74 65 6d 70 6c 61 74 65 20 73 79 73 74  ew template syst
62a0: 65 6d 20 61 6c 6c 6f 77 73 20 7b 7b 62 6c 6f 63  em allows {{bloc
62b0: 6b 20 6e 61 6d 65 7d 7d 7b 7b 65 6e 64 7d 7d 2c  k name}}{{end}},
62c0: 20 74 68 61 6e 6b 73 20 54 68 61 64 65 75 73 0a   thanks Thadeus.
62d0: 2d 20 66 69 78 65 64 20 6d 69 6d 65 20 68 65 61  - fixed mime hea
62e0: 64 65 72 73 20 69 6e 20 65 6d 61 69 6c 73 2c 20  ders in emails, 
62f0: 69 6e 63 6c 75 64 65 64 20 50 47 50 20 69 6e 20  included PGP in 
6300: 65 6d 61 69 6c 73 2c 20 74 68 61 6e 6b 73 20 47  emails, thanks G
6310: 79 75 72 69 73 0a 2d 20 61 75 74 6f 6d 61 74 69  yuris.- automati
6320: 63 20 64 61 74 61 62 61 73 65 20 72 65 74 72 79  c database retry
6330: 20 63 6f 6e 6e 65 63 74 20 77 68 65 6e 20 70 6f   connect when po
6340: 6f 6c 69 6e 67 20 61 6e 64 20 6c 6f 73 74 20 63  oling and lost c
6350: 6f 6e 6e 65 63 74 69 6f 6e 73 0a 2d 20 4f 50 54  onnections.- OPT
6360: 47 52 4f 55 50 20 68 65 6c 70 65 72 2c 20 74 68  GROUP helper, th
6370: 61 6e 6b 73 20 49 63 65 62 65 72 67 0a 2d 20 77  anks Iceberg.- w
6380: 65 62 32 70 79 5f 61 6a 61 78 5f 74 72 61 70 20  eb2py_ajax_trap 
6390: 63 61 70 74 75 72 65 73 20 61 6c 6c 20 66 6f 72  captures all for
63a0: 6d 20 73 75 62 6d 69 73 73 69 6f 6e 73 2c 20 74  m submissions, t
63b0: 68 61 6e 6b 20 79 6f 75 20 53 6b 69 72 6f 73 0a  hank you Skiros.
63c0: 2d 20 6d 75 6c 74 69 63 6f 6c 75 6d 6e 20 63 68  - multicolumn ch
63d0: 65 63 6b 77 69 64 67 65 74 20 61 6e 64 20 61 72  eckwidget and ar
63e0: 62 69 74 72 61 72 79 20 63 68 61 72 73 20 69 6e  bitrary chars in
63f0: 20 6d 75 6c 74 69 70 6c 65 20 69 73 5f 69 6e 5f   multiple is_in_
6400: 73 65 74 2c 20 74 68 61 6e 6b 73 20 68 79 20 0a  set, thanks hy .
6410: 2d 20 51 75 c3 a9 62 c3 a9 63 6f 69 73 20 66 6f  - Qu..b..cois fo
6420: 72 20 77 65 6c 63 6f 6d 65 2c 20 74 68 61 6e 6b  r welcome, thank
6430: 73 20 43 68 72 69 73 0a 2d 20 63 72 75 64 2e 73  s Chris.- crud.s
6440: 65 61 72 63 68 28 29 2c 20 74 68 61 6e 6b 73 20  earch(), thanks 
6450: 4d 72 20 46 72 65 65 7a 65 0a 2d 20 44 41 4c 28  Mr Freeze.- DAL(
6460: 2e 2e 2e 6d 69 67 72 61 74 65 2c 66 61 6b 65 5f  ...migrate,fake_
6470: 6d 69 67 72 61 74 65 29 2c 20 74 68 61 6e 6b 73  migrate), thanks
6480: 20 54 68 61 64 65 75 73 0a 0a 23 23 20 31 2e 37   Thadeus..## 1.7
6490: 38 2e 33 0a 2d 20 72 65 76 65 72 74 65 64 20 74  8.3.- reverted t
64a0: 65 6d 70 6f 72 61 72 69 6c 79 20 74 6f 20 6f 6c  emporarily to ol
64b0: 64 20 74 65 6d 70 6c 61 74 65 20 73 79 73 74 65  d template syste
64c0: 6d 20 62 65 63 61 75 73 65 20 6f 66 20 62 61 63  m because of bac
64d0: 6b 77 61 72 64 20 63 6f 6d 70 61 74 69 62 69 6c  kward compatibil
64e0: 69 74 79 20 69 73 73 75 65 73 0a 0a 23 23 20 31  ity issues..## 1
64f0: 2e 37 39 2e 31 0a 2d 20 78 35 30 39 20 65 6d 61  .79.1.- x509 ema
6500: 69 6c 73 2c 20 74 68 61 6e 6b 73 20 47 79 75 72  ils, thanks Gyur
6510: 69 73 0a 2d 20 61 74 74 61 63 68 6d 65 6e 74 20  is.- attachment 
6520: 61 6e 64 20 68 74 6d 6c 20 69 6e 20 4d 61 69 6c  and html in Mail
6530: 20 6f 6e 20 47 41 45 2c 20 74 68 61 6e 6b 73 20   on GAE, thanks 
6540: 50 61 6e 6f 73 4a 65 65 0a 2d 20 66 69 78 65 64  PanosJee.- fixed
6550: 20 64 6f 63 73 74 72 69 6e 67 20 69 6e 20 53 51   docstring in SQ
6560: 4c 54 41 42 4c 45 2c 20 74 68 61 6e 6b 73 20 61  LTABLE, thanks a
6570: 61 62 65 6c 79 61 6b 6f 76 0a 2d 20 54 41 47 28  abelyakov.- TAG(
6580: 68 74 6d 6c 29 20 70 61 72 65 73 65 20 68 74 6d  html) parese htm
6590: 6c 20 69 6e 74 6f 20 68 65 6c 70 65 72 73 20 28  l into helpers (
65a0: 65 78 70 65 72 69 6d 65 6e 74 61 6c 2c 20 73 74  experimental, st
65b0: 69 6c 6c 20 73 6f 6d 65 20 70 72 6f 62 6c 65 6d  ill some problem
65c0: 73 20 77 69 74 68 20 75 6e 69 63 6f 64 65 2c 20  s with unicode, 
65d0: 2c 20 74 68 61 6e 6b 73 20 52 6f 62 65 72 74 56  , thanks RobertV
65e0: 61 20 66 6f 72 20 75 6e 69 63 6f 64 65 20 68 65  a for unicode he
65f0: 6c 70 29 0a 2d 20 44 49 56 2e 65 6c 65 6d 65 6e  lp).- DIV.elemen
6600: 74 73 28 66 69 6e 64 3d 72 65 2e 63 6f 6d 70 69  ts(find=re.compi
6610: 6c 65 28 2e 2e 2e 2e 29 29 0a 2d 20 44 49 56 2e  le(....)).- DIV.
6620: 66 6c 61 74 74 65 6e 28 29 0a 2d 20 44 49 56 2e  flatten().- DIV.
6630: 65 6c 65 6d 65 6e 74 73 28 27 2e 2e 2e 2e 27 29  elements('....')
6640: 20 73 75 70 70 6f 72 74 73 20 6a 51 75 65 72 79   supports jQuery
6650: 20 73 79 6e 74 61 78 20 69 6e 20 27 2e 2e 2e 2e   syntax in '....
6660: 27 0a 2d 20 62 65 74 74 65 72 20 69 74 2d 69 74  '.- better it-it
6670: 2e 70 79 20 61 6e 64 20 69 74 2e 70 79 2c 20 74  .py and it.py, t
6680: 68 61 6e 6b 73 20 4d 61 72 63 65 6c 6c 6f 20 44  hanks Marcello D
6690: 65 6c 6c 61 20 4c 6f 6e 67 61 0a 2d 20 4d 61 6e  ella Longa.- Man
66a0: 79 20 42 75 67 20 66 69 78 65 73 3a 0a 2d 20 69  y Bug fixes:.- i
66b0: 6d 70 72 6f 76 65 64 20 73 75 70 70 6f 72 74 20  mproved support 
66c0: 66 6f 72 20 44 41 4c 20 61 6e 64 20 6a 6f 69 6e  for DAL and join
66d0: 73 20 69 6e 20 70 6f 73 74 67 72 65 73 71 6c 2f  s in postgresql/
66e0: 6f 72 61 63 6c 65 2c 20 74 68 61 6e 6b 73 20 4e  oracle, thanks N
66f0: 69 63 6f 20 64 65 20 47 72 6f 6f 74 0a 2d 20 62  ico de Groot.- b
6700: 75 78 20 66 69 78 65 78 20 69 6e 20 68 74 6d 6c  ux fixex in html
6710: 2e 70 79 2c 20 74 68 61 6e 6b 73 20 49 61 6e 0a  .py, thanks Ian.
6720: 2d 20 66 69 78 65 64 20 61 6e 20 69 73 73 75 65  - fixed an issue
6730: 20 77 69 74 68 20 72 65 67 69 73 74 72 61 74 69   with registrati
6740: 6f 6e 5f 6b 65 79 3d 3d 4e 6f 6e 65 2c 20 74 68  on_key==None, th
6750: 61 6e 6b 73 20 4a 61 79 20 4b 65 6c 6b 61 72 0a  anks Jay Kelkar.
6760: 2d 20 66 69 78 65 64 20 62 75 67 20 69 6e 20 67  - fixed bug in g
6770: 71 6c 2e 70 79 2c 20 74 68 61 6e 6b 73 20 4e 6f  ql.py, thanks No
6780: 4e 6f 4e 6f 0a 2d 20 66 69 78 65 64 20 70 72 6f  NoNo.- fixed pro
6790: 62 6c 65 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  blem with multip
67a0: 6c 65 20 61 6e 64 20 63 68 65 63 6b 62 6f 78 65  le and checkboxe
67b0: 73 2c 20 74 68 61 6e 6b 73 20 4d 49 63 68 61 65  s, thanks MIchae
67c0: 6c 20 48 6f 77 64 65 6e 0a 2d 20 66 69 78 65 64  l Howden.- fixed
67d0: 20 62 75 67 20 69 6e 20 67 61 65 2c 20 74 68 61   bug in gae, tha
67e0: 6e 6b 73 20 4e 6f 4e 6f 4e 6f 0a 2d 20 72 65 73  nks NoNoNo.- res
67f0: 74 6f 72 65 64 20 32 2e 34 20 63 6f 6d 70 61 74  tored 2.4 compat
6800: 69 62 69 6c 69 74 79 2c 20 74 68 61 6e 6b 73 20  ibility, thanks 
6810: 50 61 6f 6c 6f 20 47 61 73 70 61 72 65 6c 6c 6f  Paolo Gasparello
6820: 0a 2d 20 61 75 74 68 2e 75 70 64 61 74 65 28 29  .- auth.update()
6830: 20 77 68 65 6e 20 70 69 63 74 75 72 65 73 20 69   when pictures i
6840: 6e 20 70 72 6f 66 69 6c 65 0a 2d 20 66 6f 72 6d  n profile.- form
6850: 73 74 79 6c 65 20 63 61 6e 20 62 65 20 61 20 66  style can be a f
6860: 75 6e 63 74 69 6f 6e 2c 20 74 68 61 6e 6b 73 20  unction, thanks 
6870: 48 6f 77 64 65 6e 0a 2d 20 65 73 63 61 70 65 20  Howden.- escape 
6880: 69 6e 20 73 61 6e 69 74 69 7a 65 72 2c 20 74 68  in sanitizer, th
6890: 61 6e 6b 73 20 48 6f 77 65 73 0a 2d 20 61 64 64  anks Howes.- add
68a0: 20 6d 69 73 73 69 6e 67 20 73 65 74 74 69 6e 67   missing setting
68b0: 73 2c 20 74 68 61 6e 6b 73 20 48 61 6d 64 79 0a  s, thanks Hamdy.
68c0: 2d 20 66 69 6e 64 20 61 6e 64 20 65 78 63 6c 75  - find and exclu
68d0: 64 65 20 72 65 74 75 72 6e 20 65 6d 70 74 79 20  de return empty 
68e0: 52 6f 77 73 20 69 6e 73 74 65 61 64 20 6f 66 20  Rows instead of 
68f0: 5b 5d 2c 20 74 68 61 6e 6b 73 20 69 63 65 62 65  [], thanks icebe
6900: 72 67 0a 2d 20 73 69 6d 70 6c 65 6a 73 6f 6e 20  rg.- simplejson 
6910: 32 2e 31 2e 31 20 73 68 6f 75 6c 64 20 66 69 78  2.1.1 should fix
6920: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 70   compatibility p
6930: 72 6f 62 6c 65 6d 73 0a 2d 20 61 64 64 65 64 20  roblems.- added 
6940: 73 6d 73 5f 75 74 69 6c 73 20 61 6e 64 20 41 75  sms_utils and Au
6950: 74 68 6f 72 69 7a 65 2e 6e 65 74 20 69 6e 20 63  thorize.net in c
6960: 6f 6e 74 72 69 62 0a 0a 23 23 20 31 2e 37 39 2e  ontrib..## 1.79.
6970: 32 0a 2d 20 73 6f 6c 76 65 64 20 73 69 6d 70 6c  2.- solved simpl
6980: 65 6a 73 6f 6e 20 69 6d 63 6f 6d 70 61 74 69 62  ejson imcompatib
6990: 69 6c 69 74 79 20 70 72 6f 62 6c 65 6d 0a 0a 23  ility problem..#
69a0: 23 20 31 2e 38 30 2e 31 0a 2d 20 4d 41 52 4b 4d  # 1.80.1.- MARKM
69b0: 49 4e 20 68 65 6c 70 65 72 20 28 6e 6f 20 62 61  IN helper (no ba
69c0: 63 6b 77 61 72 64 20 63 6f 6d 70 61 74 69 62 69  ckward compatibi
69d0: 6c 69 74 79 20 70 72 6f 6d 69 73 65 20 79 65 74  lity promise yet
69e0: 29 0a 2d 20 73 65 6c 66 2e 5f 6c 61 73 74 5f 72  ).- self._last_r
69f0: 65 66 65 72 65 6e 63 65 2c 20 74 68 61 6e 6b 73  eference, thanks
6a00: 20 44 61 76 65 20 28 6e 6f 20 62 61 63 6b 77 61   Dave (no backwa
6a10: 72 64 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  rd compatibility
6a20: 20 70 72 6f 6d 69 73 65 20 79 65 74 29 0a 2d 20   promise yet).- 
6a30: 49 53 5f 45 51 55 41 4c 5f 54 4f 0a 2d 20 7a 68  IS_EQUAL_TO.- zh
6a40: 2d 74 77 20 61 6e 64 20 62 65 74 74 65 72 20 69  -tw and better i
6a50: 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 69 7a 61 74  nternationalizat
6a60: 69 6f 6e 20 70 61 67 65 2c 20 74 68 61 6e 6b 73  ion page, thanks
6a70: 20 44 61 6e 69 65 6c 20 4c 69 6e 20 61 6e 64 20   Daniel Lin and 
6a80: 49 63 65 62 65 72 67 0a 2d 20 62 65 74 74 65 72  Iceberg.- better
6a90: 20 63 72 75 64 2e 73 65 61 72 63 68 2c 20 74 68   crud.search, th
6aa0: 61 6e 6b 73 20 4d 72 46 72 65 65 7a 65 0a 2d 20  anks MrFreeze.- 
6ab0: 52 6f 63 6b 65 74 20 69 6e 74 65 72 66 61 63 65  Rocket interface
6ac0: 73 2c 20 74 68 61 6e 6b 73 20 4e 69 6b 20 4b 6c  s, thanks Nik Kl
6ad0: 65 76 65 72 0a 2d 20 64 62 2e 74 61 62 6c 65 2e  ever.- db.table.
6ae0: 66 69 65 6c 64 2e 75 70 6c 6f 61 64 73 65 70 61  field.uploadsepa
6af0: 72 61 74 65 3d 54 72 75 65 2c 20 74 68 61 6e 6b  rate=True, thank
6b00: 73 20 47 79 75 72 69 73 0a 2d 20 53 43 4f 50 45  s Gyuris.- SCOPE
6b10: 5f 49 44 45 4e 49 54 59 20 66 6f 72 20 4d 53 53  _IDENITY for MSS
6b20: 51 4c 2c 20 74 68 61 6e 6b 73 20 4a 6f 73 65 0a  QL, thanks Jose.
6b30: 2d 20 66 69 78 65 64 20 65 6d 61 69 6c 20 61 74  - fixed email at
6b40: 74 61 63 68 6d 65 6e 74 20 69 73 73 75 65 2c 20  tachment issue, 
6b50: 74 68 61 6e 6b 73 20 42 6f 62 5f 69 6e 5f 43 6f  thanks Bob_in_Co
6b60: 6d 6f 78 0a 2d 20 66 69 78 65 64 20 70 72 6f 62  mox.- fixed prob
6b70: 6c 65 6d 20 77 69 74 68 20 67 72 6f 75 70 62 79  lem with groupby
6b80: 20 61 6e 64 20 49 53 5f 49 4e 5f 44 42 0a 2d 20   and IS_IN_DB.- 
6b90: 6f 74 68 65 72 20 62 75 67 20 66 69 78 65 73 0a  other bug fixes.
6ba0: 2d 20 6e 65 77 20 69 6d 70 6c 65 6d 65 6e 74 61  - new implementa
6bb0: 74 69 6f 6e 20 66 6f 72 20 6c 6f 63 61 6c 5f 69  tion for local_i
6bc0: 6d 70 6f 72 74 0a 2d 20 61 6a 61 78 28 2e 2e 2c  mport.- ajax(..,
6bd0: 2e 2e 2e 2c 6e 75 6c 6c 29 0a 2d 20 66 69 78 65  ...,null).- fixe
6be0: 64 20 43 68 72 6f 6d 65 20 62 75 67 20 69 6e 20  d Chrome bug in 
6bf0: 63 61 6c 65 6e 64 61 72 2e 6a 73 2c 20 74 68 61  calendar.js, tha
6c00: 6e 6b 73 20 49 63 65 62 65 72 67 0a 2d 20 65 78  nks Iceberg.- ex
6c10: 70 65 72 69 6d 65 6e 74 61 6c 20 73 63 72 69 70  perimental scrip
6c20: 73 2f 77 65 62 32 70 79 2d 73 65 74 75 70 2d 66  s/web2py-setup-f
6c30: 65 64 6f 72 61 2e 73 68 0a 2d 20 67 65 6e 65 72  edora.sh.- gener
6c40: 69 63 2e 6c 6f 61 64 2c 20 74 68 61 6e 6b 73 20  ic.load, thanks 
6c50: 49 63 65 62 65 72 67 0a 0a 23 23 20 31 2e 38 31  Iceberg..## 1.81
6c60: 2e 31 0a 2d 20 72 70 78 20 28 6a 61 6e 72 61 69  .1.- rpx (janrai
6c70: 6e 29 20 73 75 70 70 6f 72 74 20 6f 75 74 20 6f  n) support out o
6c80: 66 20 74 68 65 20 62 6f 78 2c 20 61 6c 6c 6f 77  f the box, allow
6c90: 73 20 6c 6f 67 69 6e 20 77 69 74 68 20 46 61 63  s login with Fac
6ca0: 65 62 6f 6f 6b 2c 20 4d 79 53 70 61 63 65 2c 20  ebook, MySpace, 
6cb0: 65 74 63 2e 20 54 68 61 6e 6b 73 20 4d 72 20 46  etc. Thanks Mr F
6cc0: 72 65 65 7a 65 0a 2d 20 49 6e 63 72 65 61 73 65  reeze.- Increase
6cd0: 64 20 73 65 63 75 72 69 74 79 20 28 65 73 63 61  d security (esca
6ce0: 70 65 20 20 73 69 6e 67 6c 65 20 61 6e 64 20 64  pe  single and d
6cf0: 6f 75 62 6c 65 20 71 75 6f 74 65 73 2c 20 74 68  ouble quotes, th
6d00: 61 6e 6b 73 20 43 72 61 69 67 22 0a 2d 20 46 69  anks Craig".- Fi
6d10: 78 65 64 20 61 20 62 75 67 20 77 69 74 68 20 64  xed a bug with d
6d20: 62 2e 74 61 62 6c 65 2e 66 69 65 6c 64 2e 75 70  b.table.field.up
6d30: 6c 6f 61 64 73 65 70 61 72 61 74 65 3d 54 72 75  loadseparate=Tru
6d40: 65 20 61 6e 64 20 61 75 74 6f 64 65 6c 65 74 65  e and autodelete
6d50: 0a 2d 20 4e 65 77 20 77 65 6c 63 6f 6d 65 20 61  .- New welcome a
6d60: 70 70 20 77 69 74 68 20 73 75 70 65 72 66 69 73  pp with superfis
6d70: 68 20 61 6e 64 20 6a 51 75 65 72 79 20 31 2e 34  h and jQuery 1.4
6d80: 2e 32 0a 2d 20 44 65 6c 65 74 65 64 20 6f 70 65  .2.- Deleted ope
6d90: 6e 77 79 73 69 77 79 67 20 66 72 6f 6d 20 61 64  nwysiwyg from ad
6da0: 6d 69 6e 0a 2d 20 49 6e 20 58 4d 4c 20 61 6e 64  min.- In XML and
6db0: 20 78 6d 6c 65 73 63 61 70 65 20 71 75 6f 74 65   xmlescape quote
6dc0: 20 64 65 66 61 75 6c 74 73 20 74 6f 20 54 72 75   defaults to Tru
6dd0: 65 2e 20 42 6f 74 68 20 27 20 61 6e 64 20 22 20  e. Both ' and " 
6de0: 61 72 65 20 65 73 63 61 70 65 64 2e 20 54 68 61  are escaped. Tha
6df0: 6e 6b 73 20 43 72 61 69 67 20 59 6f 75 6e 6b 69  nks Craig Younki
6e00: 6e 73 0a 0a 23 23 20 31 2e 38 31 2e 32 0a 2d 20  ns..## 1.81.2.- 
6e10: 66 69 78 65 64 20 62 75 67 20 69 6e 20 41 75 74  fixed bug in Aut
6e20: 68 0a 0a 23 23 20 31 2e 38 31 2e 33 0a 2d 20 66  h..## 1.81.3.- f
6e30: 69 78 65 64 20 62 75 67 20 69 6e 20 6c 61 62 65  ixed bug in labe
6e40: 6c 20 6e 61 6d 65 73 20 69 6e 20 66 6f 72 6d 73  l names in forms
6e50: 74 79 6c 65 0a 2d 20 66 69 78 65 64 20 69 64 20  tyle.- fixed id 
6e60: 6e 61 6d 65 73 20 69 6e 20 61 64 6d 69 6e 20 74  names in admin t
6e70: 65 73 74 2e 68 74 6d 6c 20 70 61 67 65 0a 0a 23  est.html page..#
6e80: 23 20 31 2e 38 31 2e 34 0a 2d 20 46 69 78 65 64  # 1.81.4.- Fixed
6e90: 20 67 6c 75 6f 6e 2e 74 6f 6f 6c 73 20 74 6f 20   gluon.tools to 
6ea0: 77 6f 72 6b 20 77 6f 72 6b 20 77 69 74 68 20 6c  work work with l
6eb0: 6f 61 64 20 61 6e 64 20 62 61 73 65 2e 63 73 73  oad and base.css
6ec0: 20 74 6f 20 6e 6f 77 72 61 70 20 6c 61 62 65 6c   to nowrap label
6ed0: 73 0a 0a 23 23 20 31 2e 38 31 2e 35 0a 2d 20 46  s..## 1.81.5.- F
6ee0: 69 78 65 64 20 61 20 66 65 77 20 62 75 67 73 2e  ixed a few bugs.
6ef0: 20 54 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   The most import
6f00: 61 6e 74 20 62 75 67 73 20 77 65 20 66 69 78 65  ant bugs we fixe
6f10: 64 20 61 72 65 20 69 6e 20 6d 65 6d 63 61 63 68  d are in memcach
6f20: 65 20 28 74 68 61 6e 6b 73 20 53 63 6f 74 74 29  e (thanks Scott)
6f30: 20 61 6e 64 20 69 6e 20 61 20 70 72 6f 63 65 73   and in a proces
6f40: 73 20 73 74 61 72 76 61 74 69 6f 6e 20 69 73 73  s starvation iss
6f50: 75 65 20 77 69 74 68 20 52 6f 63 6b 65 74 20 28  ue with Rocket (
6f60: 74 68 61 6e 6b 73 20 4d 69 6b 65 20 45 6c 6c 69  thanks Mike Elli
6f70: 73 20 61 6e 64 20 54 69 6d 29 2e 0a 0a 23 23 20  s and Tim)...## 
6f80: 31 2e 38 32 2e 31 0a 2d 20 72 65 71 75 65 73 74  1.82.1.- request
6f90: 2e 61 6a 61 78 20 74 6f 20 64 65 74 65 63 74 20  .ajax to detect 
6fa0: 69 66 20 61 63 74 69 6f 6e 20 69 73 20 63 61 6c  if action is cal
6fb0: 6c 65 64 20 76 69 61 20 61 6a 61 78 2c 20 74 61  led via ajax, ta
6fc0: 68 6e 6b 73 20 4a 6f 6e 61 74 68 61 6e 20 61 6e  hnks Jonathan an
6fd0: 64 20 44 61 76 69 64 20 4d 61 6b 6f 0a 2d 20 6d  d David Mako.- m
6fe0: 6f 72 65 20 63 61 70 74 63 68 61 20 6f 70 74 69  ore captcha opti
6ff0: 6f 6e 73 2c 20 74 68 61 6e 6b 73 20 56 69 64 75  ons, thanks Vidu
7000: 6c 0a 2d 20 6f 70 65 6e 69 64 20 61 6e 64 20 6f  l.- openid and o
7010: 61 75 74 68 32 20 74 68 61 6e 6b 73 20 4d 69 63  auth2 thanks Mic
7020: 68 65 6c 65 20 61 6e 64 20 4b 65 69 74 68 0a 2d  hele and Keith.-
7030: 20 62 65 74 74 65 72 20 50 6c 75 67 69 6e 4d 61   better PluginMa
7040: 6e 61 67 65 72 20 61 6e 64 20 6c 6f 61 64 20 63  nager and load c
7050: 6f 6d 70 6f 6e 65 6e 74 73 0a 2d 20 6e 65 77 20  omponents.- new 
7060: 74 65 6d 70 6c 61 74 65 20 73 79 73 74 65 6d 2c  template system,
7070: 20 74 68 61 6e 6b 73 20 54 68 61 64 65 75 73 0a   thanks Thadeus.
7080: 2d 20 6e 65 77 20 64 62 2e 74 61 62 6c 65 28 69  - new db.table(i
7090: 64 2c 5b 66 69 65 6c 64 3d 76 61 6c 75 65 5d 29  d,[field=value])
70a0: 20 61 6e 64 20 64 62 2e 74 61 62 6c 65 28 71 75   and db.table(qu
70b0: 65 72 79 29 20 73 79 6e 74 61 78 0a 2d 20 55 52  ery) syntax.- UR
70c0: 4c 28 27 69 6e 64 65 78 27 29 20 28 6e 6f 20 6d  L('index') (no m
70d0: 6f 72 65 20 72 3d 72 65 71 75 65 73 74 29 2c 20  ore r=request), 
70e0: 74 68 61 6e 6b 73 20 54 68 61 64 65 75 73 0a 2d  thanks Thadeus.-
70f0: 20 6d 61 69 6c 2e 73 65 6e 64 28 6d 65 73 73 61   mail.send(messa
7100: 67 65 3d 27 3c 68 74 6d 6c 3e 2e 2e 2e 3c 2f 68  ge='<html>...</h
7110: 74 6d 6c 3e 27 2c 20 2e 2e 2e 2e 29 0a 2d 20 44  tml>', ....).- D
7120: 41 4c 28 5b 2e 2e 2e 2e 5d 29 20 66 6f 72 20 6c  AL([....]) for l
7130: 6f 61 64 20 62 61 6c 61 6e 63 69 6e 67 0a 2d 20  oad balancing.- 
7140: 40 73 65 72 76 69 63 65 2e 73 6f 61 70 28 2e 2e  @service.soap(..
7150: 2e 29 20 77 69 74 68 20 6d 79 73 69 6d 70 6c 65  .) with mysimple
7160: 73 6f 61 70 2c 20 74 68 61 6e 6b 73 20 4d 61 72  soap, thanks Mar
7170: 69 61 6e 6f 0a 2d 20 68 69 64 65 65 72 72 6f 72  iano.- hideerror
7180: 0a 0a 23 23 20 31 2e 38 33 2e 31 0a 2d 20 4e 65  ..## 1.83.1.- Ne
7190: 77 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  w error reportin
71a0: 67 20 6d 65 63 68 61 6e 69 73 6d 20 28 74 68 61  g mechanism (tha
71b0: 6e 6b 73 20 4d 61 72 69 61 6e 6f 29 0a 2d 20 4e  nks Mariano).- N
71c0: 65 77 20 72 6f 75 74 69 6e 67 20 73 79 73 74 65  ew routing syste
71d0: 6d 20 77 69 74 68 20 61 70 70 20 6c 65 76 65 6c  m with app level
71e0: 20 72 6f 75 74 69 6e 67 20 28 74 68 61 6e 6b 73   routing (thanks
71f0: 20 4a 6f 6e 61 74 68 61 6e 29 0a 2d 20 49 6e 74   Jonathan).- Int
7200: 65 67 72 61 74 65 64 20 47 41 45 20 61 70 70 73  egrated GAE apps
7210: 74 61 74 20 61 6e 64 20 47 41 45 20 70 72 65 63  tat and GAE prec
7220: 6f 6d 70 69 6c 61 74 69 6f 6e 20 28 74 68 61 6e  ompilation (than
7230: 6b 73 20 53 63 6f 74 74 29 0a 2d 20 4e 65 77 20  ks Scott).- New 
7240: 46 69 65 6c 64 20 74 79 70 65 73 20 22 6c 69 73  Field types "lis
7250: 74 3a 73 74 72 69 6e 67 22 2c 20 22 6c 69 73 74  t:string", "list
7260: 3a 69 6e 74 65 67 65 72 22 2c 20 22 6c 69 73 74  :integer", "list
7270: 3a 72 65 66 65 72 65 6e 63 65 22 0a 2d 20 72 65  :reference".- re
7280: 71 75 65 73 74 2e 63 69 64 2c 20 72 65 71 75 65  quest.cid, reque
7290: 73 74 2e 61 6a 61 78 2c 20 41 28 63 69 64 3d 72  st.ajax, A(cid=r
72a0: 65 71 75 65 73 74 2e 63 69 64 29 2c 20 72 65 73  equest.cid), res
72b0: 70 6f 6e 73 65 2e 6a 73 0a 0a 23 23 20 31 2e 38  ponse.js..## 1.8
72c0: 33 2e 32 0a 2d 20 6d 6f 73 74 6c 79 20 63 6c 65  3.2.- mostly cle
72d0: 61 6e 75 70 0a 0a 23 23 20 31 2e 38 34 2e 31 2d  anup..## 1.84.1-
72e0: 34 0a 2d 20 66 6c 61 73 68 20 6e 6f 77 20 73 74  4.- flash now st
72f0: 61 79 73 20 70 75 74 20 69 6e 20 74 68 65 20 74  ays put in the t
7300: 6f 70 20 72 69 67 68 74 20 63 6f 72 6e 65 72 0a  op right corner.
7310: 2d 20 69 6d 70 72 6f 76 65 64 20 62 65 68 61 76  - improved behav
7320: 69 6f 72 20 66 6f 72 20 55 52 4c 20 61 6e 64 20  ior for URL and 
7330: 54 20 6f 62 6a 65 63 74 73 0a 2d 20 6e 65 77 20  T objects.- new 
7340: 61 70 70 20 6c 65 76 65 6c 20 6c 6f 67 67 69 6e  app level loggin
7350: 67 20 77 69 74 68 20 6c 6f 67 67 69 6e 67 2e 63  g with logging.c
7360: 6f 6e 66 20 28 74 68 61 6e 6b 73 20 4a 6f 6e 61  onf (thanks Jona
7370: 74 68 61 6e 29 0a 2d 20 69 6d 70 72 6f 76 65 64  than).- improved
7380: 20 4f 70 65 6e 49 44 20 28 74 68 61 6e 6b 73 20   OpenID (thanks 
7390: 4d 69 63 68 65 6c 65 29 0a 2d 20 77 65 62 32 70  Michele).- web2p
73a0: 79 5f 61 6a 61 78 20 68 61 6e 64 6c 65 73 20 70  y_ajax handles p
73b0: 72 65 70 65 6e 64 2c 20 61 70 70 65 6e 64 2c 20  repend, append, 
73c0: 68 69 64 65 20 28 74 68 61 6e 6b 73 20 4a 75 72  hide (thanks Jur
73d0: 69 73 29 0a 2d 20 77 65 62 32 70 79 5f 61 6a 61  is).- web2py_aja
73e0: 78 20 61 6c 73 6f 20 68 61 6e 64 65 6c 73 20 70  x also handels p
73f0: 72 65 2d 76 61 6c 69 64 61 74 69 6f 6e 20 6f 66  re-validation of
7400: 20 64 65 63 69 6d 61 6c 20 66 69 65 6c 64 73 0a   decimal fields.
7410: 2d 20 72 75 2d 72 75 20 74 72 61 6e 73 6c 61 74  - ru-ru translat
7420: 69 6f 6e 20 28 74 68 61 6e 6b 73 20 4d 69 63 68  ion (thanks Mich
7430: 65 6c 65 29 0a 2d 20 73 6b 2d 73 6b 20 74 72 61  ele).- sk-sk tra
7440: 6e 73 6c 61 74 69 6f 6e 20 28 74 68 61 6e 6b 73  nslation (thanks
7450: 20 4a 75 6c 69 75 73 29 0a 2d 20 6d 69 67 72 61   Julius).- migra
7460: 74 69 6f 6e 73 20 73 61 76 65 20 2e 74 61 62 6c  tions save .tabl
7470: 65 20 6f 6e 6c 79 20 69 66 20 63 68 61 6e 67 65  e only if change
7480: 64 20 61 6e 64 20 61 66 74 65 72 20 65 61 63 68  d and after each
7490: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 28 6e 6f   ALTER TABLE (no
74a0: 20 6d 6f 72 65 20 6d 79 73 71 6c 20 69 6e 63 6f   more mysql inco
74b0: 6e 73 69 73 74 65 6e 63 69 65 73 29 0a 2d 20 66  nsistencies).- f
74c0: 69 78 65 64 20 62 75 67 73 20 69 6e 20 53 51 4c  ixed bugs in SQL
74d0: 43 75 73 74 6f 6d 46 69 65 6c 64 2c 20 46 69 65  CustomField, Fie
74e0: 6c 64 28 64 65 66 61 75 6c 74 3d 2e 2e 2e 29 2c  ld(default=...),
74f0: 20 49 53 5f 49 4d 41 47 45 2c 20 49 53 5f 44 45   IS_IMAGE, IS_DE
7500: 43 49 4d 41 4c 5f 49 4e 5f 52 41 4e 47 45 20 61  CIMAL_IN_RANGE a
7510: 6e 64 20 61 20 66 65 77 20 6d 6f 72 65 2e 0a 2d  nd a few more..-
7520: 20 42 65 74 74 65 72 20 76 61 6c 69 64 61 74 6f   Better validato
7530: 72 73 20 28 49 53 5f 44 45 43 49 4d 41 4c 5f 49  rs (IS_DECIMAL_I
7540: 4e 5f 52 41 4e 47 45 2c 20 49 53 5f 49 4e 54 5f  N_RANGE, IS_INT_
7550: 49 4e 5f 52 41 4e 47 45 2c 20 65 74 63 29 20 74  IN_RANGE, etc) t
7560: 68 61 6e 6b 73 20 4a 6f 6e 61 74 68 61 6d 0a 2d  hanks Jonatham.-
7570: 20 50 6f 6c 79 6d 6d 6f 64 65 6c 20 73 75 70 70   Polymmodel supp
7580: 6f 72 74 20 6f 6e 20 47 41 45 0a 2d 20 45 78 70  ort on GAE.- Exp
7590: 65 72 69 6d 65 6e 74 61 6c 20 4c 69 73 74 57 69  erimental ListWi
75a0: 64 67 65 74 0a 2d 20 6d 6f 76 65 64 20 44 41 4c  dget.- moved DAL
75b0: 20 61 6e 64 20 72 6f 75 74 65 73 20 74 6f 20 74   and routes to t
75c0: 68 72 65 61 64 2e 6c 6f 63 61 6c 20 28 74 68 61  hread.local (tha
75d0: 6e 6b 73 20 4a 6f 6e 61 74 68 61 6e 2c 20 61 67  nks Jonathan, ag
75e0: 61 69 6e 29 0a 2d 20 73 63 72 69 70 74 73 2f 65  ain).- scripts/e
75f0: 78 74 72 61 63 74 5f 6d 79 73 71 6c 5f 6d 6f 64  xtract_mysql_mod
7600: 65 6c 73 2e 70 79 2c 20 74 68 61 6e 6b 73 20 46  els.py, thanks F
7610: 61 6c 6b 6f 20 4b 72 61 75 73 65 20 61 6e 64 20  alko Krause and 
7620: 52 6f 6e 20 4d 63 4f 75 61 74 20 0a 2d 20 73 63  Ron McOuat .- sc
7630: 72 69 70 74 73 2f 64 62 73 65 73 73 69 6f 6e 73  ripts/dbsessions
7640: 32 74 72 61 73 68 2e 70 79 2c 20 74 68 61 6e 6b  2trash.py, thank
7650: 73 20 53 63 6f 74 74 0a 0a 23 23 20 31 2e 38 35  s Scott..## 1.85
7660: 2e 31 2d 33 0a 2d 20 66 69 78 65 64 20 73 6f 6d  .1-3.- fixed som
7670: 65 20 62 75 67 73 0a 2d 20 61 64 64 65 64 20 70  e bugs.- added p
7680: 79 66 70 64 66 2c 20 74 68 61 6e 6b 20 4d 61 72  yfpdf, thank Mar
7690: 69 61 6e 6f 0a 0a 23 23 20 31 2e 38 36 2e 31 2d  iano..## 1.86.1-
76a0: 31 2e 38 36 2e 33 0a 2d 20 6d 61 72 6b 6d 69 6e  1.86.3.- markmin
76b0: 32 6c 61 74 65 78 20 0a 2d 20 6d 61 72 6b 6d 69  2latex .- markmi
76c0: 6e 32 70 64 66 0a 2d 20 66 69 78 65 64 20 73 6f  n2pdf.- fixed so
76d0: 6d 65 20 62 75 67 73 0a 2d 20 53 74 6f 72 61 67  me bugs.- Storag
76e0: 65 20 67 65 74 66 69 72 73 74 2c 20 67 65 74 6c  e getfirst, getl
76f0: 61 73 74 2c 20 67 65 74 61 6c 6c 20 62 79 20 4b  ast, getall by K
7700: 65 76 69 6e 20 61 6e 64 20 4e 61 74 68 61 6e 0a  evin and Nathan.
7710: 2d 20 64 62 28 64 62 2e 74 61 62 6c 65 29 2c 20  - db(db.table), 
7720: 64 62 28 64 62 2e 74 61 62 6c 65 2e 69 64 29 20  db(db.table.id) 
7730: 62 6f 74 68 20 73 75 70 6f 72 74 65 64 20 61 6e  both suported an
7740: 64 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  d equivalent to 
7750: 64 62 28 64 62 2e 74 61 62 6c 65 2e 69 64 3e 30  db(db.table.id>0
7760: 29 0a 2d 20 70 6f 73 74 72 65 73 71 6c 20 73 73  ).- postresql ss
7770: 6c 20 73 75 70 70 6f 72 74 0a 2d 20 6c 65 73 73  l support.- less
7780: 20 75 6e 2d 6e 65 63 65 73 73 61 72 79 20 6c 6f   un-necessary lo
7790: 67 67 69 6e 67 20 61 6e 64 20 77 61 72 6e 69 6e  gging and warnin
77a0: 67 73 20 6f 6e 20 47 41 45 0a 2d 20 49 53 5f 44  gs on GAE.- IS_D
77b0: 45 43 49 4d 41 4c 5f 49 4e 5f 52 41 4e 47 45 20  ECIMAL_IN_RANGE 
77c0: 61 6e 64 20 49 53 5f 46 4c 4f 41 54 5f 49 4e 5f  and IS_FLOAT_IN_
77d0: 52 41 4e 47 45 20 73 75 70 70 6f 72 74 20 64 6f  RANGE support do
77e0: 74 3d 22 2c 22 20 28 64 6f 74 3d 22 2e 22 20 69  t="," (dot="." i
77f0: 73 20 64 65 66 61 75 6c 74 29 0a 2d 20 6f 6e 5f  s default).- on_
7800: 66 61 69 6c 65 64 5f 61 75 74 68 6f 72 69 7a 61  failed_authoriza
7810: 74 69 6f 6e 20 63 61 6e 20 62 65 20 61 20 66 75  tion can be a fu
7820: 6e 63 74 69 6f 6e 2c 20 74 68 61 6e 6b 73 20 4e  nction, thanks N
7830: 69 70 68 6f 6c 64 0a 2d 20 67 6c 75 6f 6e 2f 63  iphold.- gluon/c
7840: 6f 6e 74 72 69 62 2f 6c 6f 67 69 6e 5f 6d 65 74  ontrib/login_met
7850: 68 6f 64 73 2f 63 61 73 5f 61 75 74 68 2e 70 79  hods/cas_auth.py
7860: 20 66 6f 72 20 69 6e 74 65 67 72 61 74 69 6f 6e   for integration
7870: 20 62 65 74 77 65 65 6e 20 43 41 53 20 61 6e 64   between CAS and
7880: 20 41 75 74 68 2e 0a 0a 23 23 20 31 2e 38 36 2e   Auth...## 1.86.
7890: 33 0a 2d 20 45 72 72 6f 72 20 72 65 70 6f 72 74  3.- Error report
78a0: 69 6e 67 20 6f 6e 20 73 61 76 65 2c 20 74 68 61  ing on save, tha
78b0: 6e 6b 73 20 4d 61 72 69 61 6e 6f 0a 72 65 63 61  nks Mariano.reca
78c0: 6c 6c 65 64 0a 0a 23 23 20 31 2e 38 37 2e 31 2d  lled..## 1.87.1-
78d0: 32 0a 2d 20 6e 65 77 20 6c 61 79 6f 75 74 20 66  2.- new layout f
78e0: 6f 72 20 65 78 61 6d 70 6c 65 73 2c 20 74 68 61  or examples, tha
78f0: 6e 6b 73 20 42 72 75 6e 6f 20 61 6e 64 20 4d 61  nks Bruno and Ma
7900: 72 74 69 6e 0a 2d 20 61 64 6d 69 6e 20 61 6c 6c  rtin.- admin all
7910: 6f 77 20 60 60 44 45 4d 4f 5f 4d 4f 44 45 3d 54  ow ``DEMO_MODE=T
7920: 72 75 65 60 60 20 61 6e 64 20 60 60 46 49 4c 54  rue`` and ``FILT
7930: 45 52 5f 41 50 50 53 3d 5b 27 77 65 6c 63 6f 6d  ER_APPS=['welcom
7940: 65 27 5d 60 60 0a 2d 20 66 69 78 65 64 20 61 20  e']``.- fixed a 
7950: 70 6f 73 73 69 62 6c 65 20 70 72 6f 62 6c 65 6d  possible problem
7960: 20 77 69 74 68 20 43 52 4f 4e 20 61 6e 64 20 70   with CRON and p
7970: 61 74 68 73 0a 0a 0a 23 23 20 31 2e 38 37 2e 33  aths...## 1.87.3
7980: 0a 2d 20 66 69 78 65 64 20 61 20 6d 61 6a 6f 72  .- fixed a major
7990: 20 62 75 67 20 69 6e 74 72 6f 64 75 63 65 64 20   bug introduced 
79a0: 69 6e 20 31 2e 38 37 2e 31 20 74 68 61 74 20 70  in 1.87.1 that p
79b0: 72 65 76 65 6e 74 73 20 61 70 70 61 64 6d 69 6e  revents appadmin
79c0: 20 66 72 6f 6d 20 77 6f 72 6b 69 6e 67 20 66 6f   from working fo
79d0: 72 20 6e 65 77 20 61 70 70 73 20 63 72 65 61 74  r new apps creat
79e0: 65 64 20 77 69 74 68 20 31 2e 38 37 2e 31 2d 32  ed with 1.87.1-2
79f0: 2e 0a 2d 20 75 70 67 72 61 64 65 64 20 74 6f 20  ..- upgraded to 
7a00: 63 6c 6f 63 6b 70 69 63 6b 20 31 2e 32 38 2c 20  clockpick 1.28, 
7a10: 74 68 61 6e 6b 73 20 76 69 6c 6c 61 73 0a 0a 23  thanks villas..#
7a20: 23 20 31 2e 38 38 2e 31 2d 32 0a 2d 20 62 65 74  # 1.88.1-2.- bet
7a30: 74 65 72 20 6c 69 73 74 3a 20 73 74 72 69 6e 67  ter list: string
7a40: 20 73 75 70 70 6f 72 74 2c 20 74 68 61 6e 6b 73   support, thanks
7a50: 20 42 6f 62 0a 2d 20 6a 71 75 65 72 79 20 31 2e   Bob.- jquery 1.
7a60: 34 2e 33 0a 2d 20 73 63 72 69 70 74 73 2f 61 75  4.3.- scripts/au
7a70: 74 6f 72 6f 75 74 65 73 2e 70 79 0a 2d 20 6e 65  toroutes.py.- ne
7a80: 77 20 61 64 6d 69 6e 20 77 69 7a 61 72 64 0a 2d  w admin wizard.-
7a90: 20 61 64 64 65 64 20 72 65 74 72 69 65 76 65 5f   added retrieve_
7aa0: 75 73 65 72 6e 61 6d 65 20 74 6f 20 6e 61 76 62  username to navb
7ab0: 61 72 20 28 69 66 20 75 73 65 72 6e 61 6d 65 29  ar (if username)
7ac0: 0a 2d 20 69 6e 74 65 72 6e 61 6c 20 72 65 77 72  .- internal rewr
7ad0: 69 74 65 20 66 6f 72 20 61 72 62 69 74 72 61 72  ite for arbitrar
7ae0: 79 20 70 61 74 68 73 20 28 61 62 73 70 61 74 68  y paths (abspath
7af0: 29 2c 20 74 68 61 6e 6b 73 20 4a 6f 6e 61 74 68  ), thanks Jonath
7b00: 61 6e 0a 2d 20 70 6f 70 75 6c 61 74 65 20 73 75  an.- populate su
7b10: 70 70 6f 72 74 20 66 6f 72 20 6c 69 73 74 3a 20  pport for list: 
7b20: 61 6e 64 20 64 65 63 69 6d 61 6c 2c 20 74 68 61  and decimal, tha
7b30: 6e 6b 73 20 43 68 69 72 73 74 69 61 6e 0a 2d 20  nks Chirstian.- 
7b40: 6d 61 72 6b 6d 69 6e 32 6c 61 74 65 78 20 68 61  markmin2latex ha
7b50: 73 20 65 78 74 72 61 20 61 74 74 72 69 62 75 74  s extra attribut
7b60: 65 0a 2d 20 62 65 74 74 65 72 20 6d 65 72 63 75  e.- better mercu
7b70: 61 6c 20 61 64 6d 69 6e 20 61 6c 6c 6f 77 73 20  al admin allows 
7b80: 6c 69 73 74 20 6f 66 20 66 69 6c 65 73 2c 20 76  list of files, v
7b90: 65 72 73 69 6f 6e 73 20 61 6e 64 20 72 65 74 72  ersions and retr
7ba0: 69 65 76 65 0a 2d 20 6e 65 77 20 65 72 72 6f 72  ieve.- new error
7bb0: 20 72 65 70 6f 72 74 20 73 79 73 74 65 6d 2c 20   report system, 
7bc0: 74 68 61 6e 6b 73 20 54 68 61 64 65 75 73 20 61  thanks Thadeus a
7bd0: 6e 64 20 53 65 6c 65 63 74 61 0a 2d 20 53 51 4c  nd Selecta.- SQL
7be0: 46 4f 52 4d 2e 61 63 63 65 70 74 73 28 64 65 74  FORM.accepts(det
7bf0: 65 63 74 5f 72 65 63 6f 72 64 5f 63 68 61 6e 67  ect_record_chang
7c00: 65 29 2e 72 65 63 6f 72 64 5f 63 68 61 6e 67 65  e).record_change
7c10: 64 0a 2d 20 66 69 78 65 64 20 63 72 6f 6e 20 66  d.- fixed cron f
7c20: 6f 72 20 62 79 74 65 63 6f 64 65 20 63 6f 6d 70  or bytecode comp
7c30: 69 6c 65 64 20 61 70 70 73 2c 20 74 68 61 6e 6b  iled apps, thank
7c40: 73 20 c3 81 6c 76 61 72 6f 20 4a 2e 20 49 72 61  s ..lvaro J. Ira
7c50: 64 69 65 72 20 4d 75 72 6f 0a 2d 20 6f 74 68 65  dier Muro.- othe
7c60: 72 20 62 75 67 73 20 66 69 78 65 73 20 61 6e 64  r bugs fixes and
7c70: 20 70 65 70 38 20 63 6f 6d 70 6c 69 61 6e 74 20   pep8 compliant 
7c80: 66 69 78 65 73 0a 0a 23 23 20 31 2e 38 39 2e 31  fixes..## 1.89.1
7c90: 2d 2e 35 0a 2d 20 6e 65 77 20 61 64 6d 69 6e 20  -.5.- new admin 
7ca0: 6c 61 79 6f 75 74 20 28 74 68 61 6e 6b 73 20 42  layout (thanks B
7cb0: 72 61 6e 6b 6f 20 56 75 6b 65 6c 69 63 29 0a 2d  ranko Vukelic).-
7cc0: 20 6e 65 77 20 61 64 6d 69 6e 20 73 65 61 72 63   new admin searc
7cd0: 68 0a 2d 20 6e 65 77 20 61 64 6d 69 6e 20 6c 61  h.- new admin la
7ce0: 6e 67 75 61 67 65 20 73 65 6c 65 63 74 6f 72 20  nguage selector 
7cf0: 28 74 68 61 6e 6b 73 20 59 61 69 72 29 0a 2d 20  (thanks Yair).- 
7d00: 6e 65 77 20 57 65 6c 63 6f 6d 65 20 61 70 70 20  new Welcome app 
7d10: 28 74 68 61 6e 6b 73 20 4d 61 72 74 69 6e 20 4d  (thanks Martin M
7d20: 75 6c 6f 6e 65 29 0a 2d 20 62 65 74 74 65 72 20  ulone).- better 
7d30: 77 69 7a 61 72 64 0a 2d 20 61 64 6d 69 6e 20 73  wizard.- admin s
7d40: 75 70 70 6f 72 74 20 66 6f 72 20 44 45 4d 4f 5f  upport for DEMO_
7d50: 4d 4f 44 45 3d 54 72 75 65 0a 2d 20 61 64 6d 69  MODE=True.- admi
7d60: 6e 20 65 78 70 6f 73 65 73 20 47 41 45 20 64 65  n exposes GAE de
7d70: 70 6c 6f 79 6d 65 6e 74 20 62 75 74 74 6f 6e 20  ployment button 
7d80: 28 61 6c 77 61 79 73 29 0a 2d 20 4d 45 4e 55 20  (always).- MENU 
7d90: 73 75 70 70 6f 72 74 20 4e 6f 6e 65 20 6c 69 6e  support None lin
7da0: 6b 73 20 28 74 68 61 6e 6b 73 20 4d 69 63 68 61  ks (thanks Micha
7db0: 65 6c 20 57 6f 6c 66 65 29 0a 2d 20 77 65 62 32  el Wolfe).- web2
7dc0: 70 79 2e 70 79 20 2d 4a 20 66 6f 72 20 72 75 6e  py.py -J for run
7dd0: 6e 69 6e 67 20 63 72 6f 6e 20 28 74 68 61 6e 6b  ning cron (thank
7de0: 73 20 4a 6f 6e 61 74 68 61 6e 20 4c 75 6e 64 65  s Jonathan Lunde
7df0: 6c 6c 29 0a 2d 20 66 69 78 65 64 20 7e 64 62 2e  ll).- fixed ~db.
7e00: 74 61 62 6c 65 2e 69 64 20 6f 6e 20 47 41 45 20  table.id on GAE 
7e10: 28 74 68 61 6e 6b 73 20 4d 69 63 4c 65 65 29 0a  (thanks MicLee).
7e20: 2d 20 73 65 72 76 69 63 65 2e 6a 73 6f 6e 72 70  - service.jsonrp
7e30: 63 20 73 75 70 70 6f 72 74 73 20 73 65 72 76 69  c supports servi
7e40: 63 65 2e 4a 73 6f 6e 52 70 63 45 78 63 65 70 74  ce.JsonRpcExcept
7e50: 69 6f 6e 20 28 74 68 61 6e 6b 73 20 4d 61 74 74  ion (thanks Matt
7e60: 29 0a 2d 20 62 75 67 20 66 69 78 65 73 0a 0a 23  ).- bug fixes..#
7e70: 23 20 31 2e 39 30 2e 31 0a 2d 20 6e 65 77 20 44  # 1.90.1.- new D
7e80: 41 4c 20 28 63 6f 6d 70 6c 65 74 65 20 72 65 77  AL (complete rew
7e90: 72 69 74 65 20 6f 66 20 74 68 65 20 77 65 62 32  rite of the web2
7ea0: 70 79 20 44 41 4c 20 69 73 20 6d 6f 72 65 20 6d  py DAL is more m
7eb0: 6f 64 75 6c 61 72 29 0a 2d 20 72 65 77 72 69 74  odular).- rewrit
7ec0: 65 20 68 61 73 20 66 61 69 6c 20 73 61 66 65 20  e has fail safe 
7ed0: 72 65 6c 6f 61 64 2c 20 74 68 61 6e 6b 73 20 4a  reload, thanks J
7ee0: 6f 6e 61 74 68 61 6e 0a 2d 20 62 65 74 74 65 72  onathan.- better
7ef0: 20 43 41 53 20 77 69 74 68 20 76 32 20 73 75 70   CAS with v2 sup
7f00: 70 6f 72 74 2c 20 74 68 61 6e 6b 73 20 4f 6c 69  port, thanks Oli
7f10: 76 69 65 72 20 52 4f 43 48 20 56 49 4c 41 54 4f  vier ROCH VILATO
7f20: 0a 2d 20 62 65 74 74 65 72 20 6d 61 72 6b 6d 69  .- better markmi
7f30: 6e 32 6c 61 74 65 78 0a 2d 20 73 65 73 73 69 6f  n2latex.- sessio
7f40: 6e 2e 63 6f 6e 6e 65 63 74 28 73 65 70 61 72 61  n.connect(separa
7f50: 74 65 3d 54 72 75 65 29 20 74 6f 20 68 61 6e 64  te=True) to hand
7f60: 6c 65 20 6d 61 6e 79 20 73 65 73 73 69 6f 6e 20  le many session 
7f70: 66 69 6c 65 73 2c 20 74 68 61 6e 6b 73 20 68 75  files, thanks hu
7f80: 61 69 79 75 20 77 61 6e 67 0a 2d 20 63 68 61 6e  aiyu wang.- chan
7f90: 67 65 64 20 62 61 68 76 69 6f 72 20 6f 66 20 69  ged bahvior of i
7fa0: 6d 70 65 72 73 6f 6e 61 74 65 20 28 6d 6f 72 65  mpersonate (more
7fb0: 20 73 65 63 75 72 65 2c 20 63 61 6e 20 67 65 6e   secure, can gen
7fc0: 65 72 61 74 65 20 66 6f 72 6d 20 6f 72 20 75 73  erate form or us
7fd0: 65 64 20 61 73 20 41 50 49 29 0a 2d 20 6e 65 77  ed as API).- new
7fe0: 20 72 6f 63 6b 65 74 2c 20 74 68 61 6e 6b 73 20   rocket, thanks 
7ff0: 54 69 6d 0a 2d 20 6e 65 77 20 70 79 66 70 64 66  Tim.- new pyfpdf
8000: 0a 2d 20 6e 6f 20 6d 6f 72 65 20 6f 6c 64 20 73  .- no more old s
8010: 74 79 6c 65 20 63 6c 61 73 73 65 73 0a 2d 20 65  tyle classes.- e
8020: 78 70 65 72 69 6d 65 6e 74 61 6c 20 63 6f 75 63  xperimental couc
8030: 68 64 62 20 73 75 70 70 6f 72 74 20 69 6e 20 6e  hdb support in n
8040: 65 77 20 64 61 6c 20 28 6f 6e 6c 79 20 69 6e 73  ew dal (only ins
8050: 65 72 74 2c 20 73 65 6c 65 63 74 2c 20 75 70 64  ert, select, upd
8060: 61 74 65 20 62 79 20 69 64 29 0a 2d 20 6d 79 73  ate by id).- mys
8070: 71 6c 20 73 75 70 70 6f 72 74 20 6f 75 74 20 6f  ql support out o
8080: 66 20 74 68 65 20 62 6f 78 20 76 69 61 20 70 79  f the box via py
8090: 6d 79 73 71 6c 0a 2d 20 53 51 4c 49 54 41 42 4c  mysql.- SQLITABL
80a0: 45 28 2e 2e 2e 2c 68 65 61 64 65 72 73 3d 27 6c  E(...,headers='l
80b0: 61 62 65 6c 73 27 29 20 74 68 61 6e 6b 73 20 42  abels') thanks B
80c0: 72 75 6e 6f 0a 2d 20 6f 70 74 69 6f 6e 61 6c 3a  runo.- optional:
80d0: 20 64 69 67 69 74 61 6c 6c 79 20 73 69 67 6e 65   digitally signe
80e0: 64 20 55 52 4c 73 2c 20 74 68 61 6e 6b 73 20 42  d URLs, thanks B
80f0: 72 69 61 6e 20 4d 65 72 65 64 79 6b 0a 2d 20 6d  rian Meredyk.- m
8100: 69 6e 6f 72 20 62 75 67 20 66 69 78 65 73 0a 0a  inor bug fixes..
8110: 23 23 20 31 2e 39 30 2e 32 2d 34 0a 2d 20 70 79  ## 1.90.2-4.- py
8120: 6d 79 73 71 6c 20 6e 6f 20 6c 6f 6e 67 65 72 20  mysql no longer 
8130: 72 65 71 75 69 72 65 73 20 73 73 6c 20 28 69 66  requires ssl (if
8140: 20 6e 6f 74 20 75 73 65 64 29 0a 2d 20 66 69 78   not used).- fix
8150: 65 64 20 62 75 67 20 77 69 74 68 20 76 69 72 74  ed bug with virt
8160: 75 61 6c 66 69 65 6c 64 73 0a 2d 20 66 69 78 65  ualfields.- fixe
8170: 64 20 62 75 67 20 69 6e 20 74 72 75 6e 63 61 74  d bug in truncat
8180: 65 20 28 6e 65 77 20 64 61 6c 29 0a 2d 20 66 69  e (new dal).- fi
8190: 78 65 64 20 62 75 67 20 69 6e 20 73 65 6c 65 63  xed bug in selec
81a0: 74 20 77 69 74 68 20 61 6c 74 65 72 6e 61 74 65  t with alternate
81b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 28 6e 65   primary key (ne
81c0: 77 20 64 61 6c 29 0a 2d 20 66 69 78 65 64 20 62  w dal).- fixed b
81d0: 75 67 20 77 69 74 68 20 49 53 5f 49 4e 5f 44 42  ug with IS_IN_DB
81e0: 20 61 6e 64 20 73 65 6c 66 20 72 65 66 65 6e 63   and self refenc
81f0: 65 73 20 28 61 6c 73 6f 20 6e 65 77 20 64 61 6c  es (also new dal
8200: 29 0a 0a 23 23 20 31 2e 39 30 2e 35 0a 2d 20 73  )..## 1.90.5.- s
8210: 65 74 20 70 6f 6c 6c 20 3d 20 46 61 6c 73 65 20  et poll = False 
8220: 69 6e 20 72 6f 63 6b 65 74 20 62 65 63 61 75 73  in rocket becaus
8230: 65 20 6f 66 20 70 6f 6c 6c 20 70 79 74 68 6f 6e  e of poll python
8240: 20 74 68 72 65 61 64 20 62 75 67 20 6f 66 74 65   thread bug ofte
8250: 6e 20 75 6e 66 69 78 65 64 2c 20 74 68 61 6e 6b  n unfixed, thank
8260: 73 20 4a 6f 6e 61 74 68 61 6e 0a 2d 20 66 69 78  s Jonathan.- fix
8270: 65 73 20 69 73 73 75 65 20 77 69 74 68 20 63 72  es issue with cr
8280: 75 64 20 61 6e 64 20 72 65 43 61 70 74 63 68 61  ud and reCaptcha
8290: 0a 0a 23 23 20 31 2e 39 30 2e 36 0a 2d 20 66 69  ..## 1.90.6.- fi
82a0: 78 20 69 73 73 75 65 20 77 69 74 68 20 70 69 63  x issue with pic
82b0: 6b 6c 69 6e 67 20 6e 65 77 20 64 61 6c 20 52 6f  kling new dal Ro
82c0: 77 20 61 6e 64 20 52 6f 77 73 2e 0a 0a 23 23 20  w and Rows...## 
82d0: 31 2e 39 31 2e 31 0a 2d 20 4c 49 43 45 4e 53 45  1.91.1.- LICENSE
82e0: 20 43 48 41 4e 47 45 20 46 52 4f 4d 20 47 50 4c   CHANGE FROM GPL
82f0: 76 32 20 74 6f 20 4c 47 50 4c 76 33 0a 2d 20 55  v2 to LGPLv3.- U
8300: 52 4c 28 2e 2e 2e 2c 68 61 73 68 5f 76 61 72 73  RL(...,hash_vars
8310: 3d 2e 2e 2e 29 20 61 6c 6c 6f 77 73 20 74 6f 20  =...) allows to 
8320: 73 70 65 63 69 66 79 20 77 68 69 63 68 20 76 61  specify which va
8330: 72 73 20 6e 65 65 64 20 74 6f 20 62 65 20 73 69  rs need to be si
8340: 67 6e 65 64 0a 2d 20 66 69 78 65 64 20 62 75 67  gned.- fixed bug
8350: 20 77 69 74 68 20 61 6c 69 61 73 69 6e 67 20 69   with aliasing i
8360: 6e 20 6e 65 77 20 44 41 4c 0a 0a 23 23 20 31 2e  n new DAL..## 1.
8370: 39 31 2e 32 2d 31 2e 39 31 2e 35 0a 2d 20 66 69  91.2-1.91.5.- fi
8380: 78 65 64 20 61 20 70 72 6f 62 6c 65 6d 20 77 69  xed a problem wi
8390: 74 68 20 64 65 70 6c 79 6d 65 6e 74 20 6f 6e 20  th deplyment on 
83a0: 47 41 45 0a 2d 20 6f 74 68 65 72 20 6e 65 77 20  GAE.- other new 
83b0: 64 61 6c 20 62 75 67 20 66 69 78 65 73 0a 0a 23  dal bug fixes..#
83c0: 23 20 31 2e 39 31 2e 36 0a 2d 20 77 65 62 32 70  # 1.91.6.- web2p
83d0: 79 20 63 6f 6d 65 74 20 76 69 61 20 67 6c 75 6f  y comet via gluo
83e0: 6e 2f 63 6f 6e 74 72 69 62 2f 63 6f 6d 65 74 5f  n/contrib/comet_
83f0: 6d 65 73 73 61 67 69 6e 67 2e 70 79 20 28 68 74  messaging.py (ht
8400: 6d 6c 35 20 77 65 62 73 6f 63 6b 65 74 73 29 20  ml5 websockets) 
8410: 65 78 70 65 72 69 6d 65 6e 74 61 6c 0a 2d 20 66  experimental.- f
8420: 69 78 65 64 20 70 72 6f 62 6c 65 6d 20 77 69 74  ixed problem wit
8430: 68 20 73 65 72 76 69 63 65 73 20 28 62 72 6f 6b  h services (brok
8440: 65 6e 20 69 6e 20 31 2e 39 31 2e 35 29 2c 20 74  en in 1.91.5), t
8450: 68 61 6e 6b 73 20 56 6f 6c 6c 72 61 74 68 0a 2d  hanks Vollrath.-
8460: 20 63 75 73 74 6f 6d 69 7a 61 62 6c 65 20 75 70   customizable up
8470: 6c 6f 61 64 77 69 64 67 65 74 2c 20 74 68 61 6e  loadwidget, than
8480: 6b 73 20 46 72 61 6e 0a 2d 20 66 69 78 65 64 20  ks Fran.- fixed 
8490: 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 6d 61 69  problem with mai
84a0: 6c 20 75 6e 69 63 6f 64 65 20 73 75 70 70 6f 72  l unicode suppor
84b0: 74 2c 20 74 68 61 6e 6b 73 20 52 69 63 68 61 72  t, thanks Richar
84c0: 64 0a 2d 20 66 69 78 65 64 20 70 72 6f 62 6c 65  d.- fixed proble
84d0: 6d 20 77 69 74 68 20 6c 69 6e 6b 74 6f 3d 4e 6f  m with linkto=No
84e0: 6e 65 20 61 6e 64 20 72 65 66 65 72 65 6e 63 65  ne and reference
84f0: 73 20 66 69 65 6c 64 73 20 69 6e 20 53 51 4c 54  s fields in SQLT
8500: 41 42 4c 45 2c 20 74 68 61 6e 6b 73 20 76 69 6c  ABLE, thanks vil
8510: 6c 61 73 0a 2d 20 6e 6f 20 6d 6f 72 65 20 75 70  las.- no more up
8520: 67 72 61 64 65 20 62 75 74 74 6f 6e 20 6f 6e 20  grade button on 
8530: 77 69 6e 64 6f 77 73 20 73 69 6e 63 65 20 64 6f  windows since do
8540: 65 73 20 6e 6f 74 20 77 6f 72 6b 0a 2d 20 62 65  es not work.- be
8550: 74 74 65 72 20 72 65 6d 65 6d 62 65 72 2d 6d 65  tter remember-me
8560: 20 6c 6f 67 69 6e 2c 20 74 68 61 6e 6b 73 20 4d   login, thanks M
8570: 61 72 74 69 6e 20 57 65 69 73 73 65 6e 62 6f 65  artin Weissenboe
8580: 63 6b 0a 2d 20 73 75 70 70 6f 72 74 20 66 6f 72  ck.- support for
8590: 20 72 65 63 61 74 63 68 61 20 6f 70 74 69 6f 6e   recatcha option
85a0: 73 0a 2d 20 73 75 70 70 6f 72 74 20 66 6f 72 20  s.- support for 
85b0: 47 41 45 20 6e 61 6d 65 73 70 61 63 65 73 20 76  GAE namespaces v
85c0: 69 61 20 44 41 4c 28 27 67 61 65 3a 2f 2f 6e 61  ia DAL('gae://na
85d0: 6d 65 73 70 61 63 65 27 29 0a 2d 20 6e 65 77 20  mespace').- new 
85e0: 72 6f 63 6b 65 74 20 28 31 2e 32 2e 32 29 2c 20  rocket (1.2.2), 
85f0: 74 68 61 6e 6b 73 20 54 69 6d 0a 2d 20 6d 61 6e  thanks Tim.- man
8600: 79 20 6f 74 68 65 72 20 62 75 67 20 66 69 78 65  y other bug fixe
8610: 73 20 61 6e 64 20 69 6d 70 72 6f 76 65 6d 65 6e  s and improvemen
8620: 74 73 20 28 74 68 61 6e 6b 73 20 4a 6f 6e 61 74  ts (thanks Jonat
8630: 68 61 6e 29 0a 0a 23 23 20 31 2e 39 32 2e 31 0a  han)..## 1.92.1.
8640: 2d 20 6d 75 63 68 20 69 6d 70 72 6f 76 65 64 20  - much improved 
8650: 72 6f 75 74 69 6e 67 20 28 74 68 61 6e 6b 73 20  routing (thanks 
8660: 4a 6f 6e 61 74 68 61 6e 29 0a 2d 20 45 78 70 72  Jonathan).- Expr
8670: 65 73 73 69 6f 6e 2e 5f 5f 6d 6f 64 5f 5f 20 28  ession.__mod__ (
8680: 74 68 61 6e 6b 73 20 44 65 6e 65 73 29 0a 2d 20  thanks Denes).- 
8690: 61 64 6d 69 6e 20 68 61 73 20 4d 55 4c 54 49 5f  admin has MULTI_
86a0: 55 53 45 52 5f 4d 4f 44 45 20 28 61 64 6d 69 6e  USER_MODE (admin
86b0: 2f 6d 6f 64 65 6c 73 2f 30 2e 70 79 29 0a 2d 20  /models/0.py).- 
86c0: 73 75 70 70 6f 72 74 20 66 6f 72 20 63 6f 75 6e  support for coun
86d0: 74 28 64 69 73 74 69 6e 63 74 3d 2e 2e 2e 29 0a  t(distinct=...).
86e0: 2d 20 68 61 73 5f 70 65 72 6d 69 73 73 69 6f 6e  - has_permission
86f0: 73 28 2e 2e 2e 2c 67 72 6f 75 70 5f 69 64 29 0a  s(...,group_id).
8700: 2d 20 49 53 5f 4d 41 54 43 48 28 2e 2e 2e 2c 73  - IS_MATCH(...,s
8710: 74 72 69 63 74 3d 54 72 75 65 29 0a 2d 20 55 52  trict=True).- UR
8720: 4c 28 2e 2e 2e 2c 73 63 68 65 6d 65 3d 2c 68 6f  L(...,scheme=,ho
8730: 73 74 3d 2c 70 6f 72 74 3d 29 2c 20 74 68 61 6e  st=,port=), than
8740: 6b 73 20 4a 6f 6e 61 74 68 61 6e 0a 2d 20 61 64  ks Jonathan.- ad
8750: 6d 69 6e 20 69 6e 20 41 66 72 69 6b 61 61 6e 73  min in Afrikaans
8760: 2c 20 74 68 61 6e 6b 73 20 43 61 6c 65 62 0a 2d  , thanks Caleb.-
8770: 20 61 75 74 68 2e 73 69 67 6e 61 74 75 72 65 20   auth.signature 
8780: 28 65 78 70 65 72 69 6d 65 6e 74 61 6c 29 0a 2d  (experimental).-
8790: 20 6d 61 6e 79 20 6f 74 68 65 72 20 62 75 67 20   many other bug 
87a0: 66 69 78 65 73 0a 0a 23 23 20 31 2e 39 33 2e 31  fixes..## 1.93.1
87b0: 2d 32 0a 2d 20 73 75 70 70 6f 72 74 20 66 6f 72  -2.- support for
87c0: 20 6d 75 6c 74 69 70 6c 65 20 69 6e 74 65 72 66   multiple interf
87d0: 61 63 65 73 2c 20 74 68 61 6e 6b 73 20 4a 6f 6e  aces, thanks Jon
87e0: 61 74 68 61 6e 0a 2d 20 6a 71 75 65 72 79 20 31  athan.- jquery 1
87f0: 2e 35 2e 31 0a 2d 20 73 69 6d 70 6c 65 6a 73 6f  .5.1.- simplejso
8800: 6e 20 32 2e 31 2e 33 0a 2d 20 63 75 73 74 6f 6d  n 2.1.3.- custom
8810: 69 7a 61 62 6c 65 20 73 69 6d 70 6c 65 6a 73 6f  izable simplejso
8820: 6e 0a 2d 20 6c 65 61 6e 65 72 20 61 70 70 2e 79  n.- leaner app.y
8830: 61 6d 6c 0a 2d 20 63 73 73 33 20 62 75 74 74 6f  aml.- css3 butto
8840: 6e 73 20 69 6e 20 77 65 6c 63 6f 6d 65 0a 2d 20  ns in welcome.- 
8850: 61 6e 64 72 6f 69 64 20 73 75 70 70 6f 72 74 20  android support 
8860: 28 65 78 70 65 72 69 6d 65 6e 74 61 6c 29 0a 2d  (experimental).-
8870: 20 46 69 65 6c 64 28 27 3a 68 69 64 64 65 6e 27   Field(':hidden'
8880: 29 2c 20 46 69 65 6c 64 28 27 2e 72 65 61 64 6f  ), Field('.reado
8890: 6e 6c 79 27 29 2c 20 46 69 65 6c 64 28 27 6e 61  nly'), Field('na
88a0: 6d 65 3d 76 61 6c 75 65 27 29 0a 2d 20 63 6f 6d  me=value').- com
88b0: 62 69 6e 65 64 20 65 78 70 72 65 73 73 69 6f 6e  bined expression
88c0: 73 20 70 72 69 6e 74 20 64 62 2e 64 61 74 61 2e  s print db.data.
88d0: 62 6f 64 79 2e 6c 65 6e 28 29 2e 73 75 6d 28 29  body.len().sum()
88e0: 0a 2d 20 77 69 7a 61 72 64 20 63 61 6e 20 64 6f  .- wizard can do
88f0: 77 6e 6c 6f 61 64 20 70 6c 75 67 69 6e 73 0a 2d  wnload plugins.-
8900: 20 62 65 74 74 65 72 20 6a 73 6f 6e 20 73 65 72   better json ser
8910: 69 6c 69 7a 61 74 69 6f 6e 20 28 6f 62 6a 65 63  ilization (objec
8920: 74 2e 63 75 73 74 6f 6d 5f 6a 73 6f 6e 29 0a 2d  t.custom_json).-
8930: 20 62 65 74 74 65 72 20 78 6d 6c 20 73 65 72 69   better xml seri
8940: 61 6c 69 7a 61 74 69 6f 6e 20 28 6f 62 6a 65 63  alization (objec
8950: 74 2e 63 75 73 74 6f 6d 5f 78 6d 6c 29 0a 2d 20  t.custom_xml).- 
8960: 62 65 74 74 65 72 20 66 6f 72 6d 73 74 79 6c 65  better formstyle
8970: 20 73 75 70 70 6f 72 74 0a 2d 20 62 65 74 74 65   support.- bette
8980: 72 20 63 6f 6d 65 74 5f 6d 65 73 73 61 67 69 6e  r comet_messagin
8990: 67 2e 70 79 20 28 6e 65 65 64 73 20 6d 6f 72 65  g.py (needs more
89a0: 20 74 65 73 74 69 6e 67 29 0a 2d 20 6d 61 6e 79   testing).- many
89b0: 20 62 75 67 20 66 69 78 65 73 0a 0a 23 23 20 31   bug fixes..## 1
89c0: 2e 39 34 2e 31 0a 2d 20 6d 6f 64 65 72 6e 69 7a  .94.1.- moderniz
89d0: 20 31 2e 31 37 0a 2d 20 77 65 62 32 70 79 20 6e   1.17.- web2py n
89e0: 6f 20 6c 6f 6e 67 65 72 20 73 61 76 65 73 20 73  o longer saves s
89f0: 65 73 73 69 6f 6e 20 69 66 20 6e 6f 20 63 68 61  ession if no cha
8a00: 6e 67 65 2c 20 74 68 69 73 20 6d 61 6b 65 73 20  nge, this makes 
8a10: 69 74 20 75 70 20 75 70 20 74 6f 20 31 30 78 20  it up up to 10x 
8a20: 66 61 73 74 65 72 20 66 6f 72 20 73 69 6d 70 6c  faster for simpl
8a30: 65 20 61 63 74 69 6f 6e 73 0a 2d 20 65 78 70 65  e actions.- expe
8a40: 72 69 6d 65 6e 74 61 6c 20 52 45 53 54 20 41 50  rimental REST AP
8a50: 49 0a 2d 20 62 65 74 74 65 72 20 73 75 70 70 6f  I.- better suppo
8a60: 72 74 20 66 6f 72 20 4d 53 53 51 4c 20 4e 4f 54  rt for MSSQL NOT
8a70: 20 4e 55 4c 4c 0a 2d 20 73 6d 61 6c 6c 20 62 75   NULL.- small bu
8a80: 67 20 66 69 78 65 73 0a 0a 23 23 20 31 2e 39 34  g fixes..## 1.94
8a90: 2e 32 0a 2d 20 72 65 76 65 72 74 65 64 20 77 72  .2.- reverted wr
8aa0: 6f 6e 67 20 62 65 68 61 76 69 6f 72 20 6f 66 20  ong behavior of 
8ab0: 61 75 74 68 2e 72 65 71 75 69 72 65 73 28 63 6f  auth.requires(co
8ac0: 6e 64 69 74 69 6f 6e 29 20 69 6e 20 31 2e 39 34  ndition) in 1.94
8ad0: 2e 31 0a 0a 23 23 20 31 2e 39 34 2e 33 0a 2d 20  .1..## 1.94.3.- 
8ae0: 66 69 78 65 64 20 6d 61 6a 6f 72 20 62 75 67 20  fixed major bug 
8af0: 69 6e 20 61 75 74 68 20 72 65 64 69 72 65 63 74  in auth redirect
8b00: 69 6f 6e 0a 0a 23 23 20 31 2e 39 34 2e 34 0a 2d  ion..## 1.94.4.-
8b10: 20 72 65 6d 6f 76 65 64 20 64 65 62 75 67 20 70   removed debug p
8b20: 72 69 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 74  rint statement t
8b30: 68 61 74 20 63 61 75 73 65 64 20 70 72 6f 62 6c  hat caused probl
8b40: 65 6d 73 20 6f 6e 20 47 41 45 20 61 6e 64 20 6d  ems on GAE and m
8b50: 6f 64 5f 77 73 67 69 0a 0a 23 23 20 31 2e 39 34  od_wsgi..## 1.94
8b60: 2e 35 0a 2d 20 66 69 78 65 64 20 61 20 6d 61 6a  .5.- fixed a maj
8b70: 6f 72 20 62 75 67 20 77 69 74 68 20 73 65 73 73  or bug with sess
8b80: 69 6f 6e 20 69 6e 74 72 6f 64 75 65 64 20 69 6e  ion introdued in
8b90: 20 31 2e 39 34 2e 31 0a 0a 23 23 20 31 2e 39 34   1.94.1..## 1.94
8ba0: 2e 36 0a 2d 20 66 69 78 65 64 20 61 20 6e 75 6d  .6.- fixed a num
8bb0: 62 65 72 20 6f 66 20 6d 69 6e 6f 72 20 62 75 67  ber of minor bug
8bc0: 73 20 69 6e 63 6c 75 64 69 6e 67 20 61 64 64 69  s including addi
8bd0: 6e 67 20 73 6f 6d 65 20 6d 69 73 73 69 6e 67 20  ng some missing 
8be0: 66 69 6c 65 73 0a 2d 20 62 65 74 74 65 72 20 73  files.- better s
8bf0: 65 73 73 69 6f 6e 20 68 61 6e 64 6c 69 6e 67 20  ession handling 
8c00: 6f 6e 20 73 65 73 73 69 6f 6e 2e 5f 75 6e 6c 6f  on session._unlo
8c10: 63 6b 28 2e 2e 29 2c 20 74 68 61 6e 6b 73 20 4a  ck(..), thanks J
8c20: 6f 6e 61 74 68 61 6e 0a 2d 20 61 64 64 65 64 20  onathan.- added 
8c30: 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 70 69 70  experimental pip
8c40: 20 73 75 70 70 6f 72 74 2c 20 74 68 61 6e 6b 73   support, thanks
8c50: 20 4c 69 66 65 65 74 68 0a 2d 20 61 64 64 65 64   Lifeeth.- added
8c60: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 53 41   experimental SA
8c70: 50 20 44 42 20 73 75 70 70 6f 72 74 0a 0a 23 23  P DB support..##
8c80: 20 31 2e 39 35 2e 31 0a 2d 20 47 6f 6f 67 6c 65   1.95.1.- Google
8c90: 20 4d 79 53 51 4c 20 73 75 70 70 6f 72 74 20 28   MySQL support (
8ca0: 65 78 70 65 72 69 6d 65 6e 74 61 6c 29 0a 2d 20  experimental).- 
8cb0: 70 69 70 20 73 75 70 70 6f 72 74 2c 20 74 68 61  pip support, tha
8cc0: 6e 6b 73 20 6c 69 66 65 65 74 68 0a 2d 20 62 65  nks lifeeth.- be
8cd0: 74 74 65 72 20 73 65 74 75 70 5f 65 78 65 2e 70  tter setup_exe.p
8ce0: 79 2c 20 74 68 61 6e 6b 73 20 6d 65 72 65 64 79  y, thanks meredy
8cf0: 6b 0a 2d 20 69 6d 70 6f 72 74 76 65 64 20 70 79  k.- importved py
8d00: 66 70 64 66 0a 2d 20 64 6f 6d 61 69 6e 20 63 68  fpdf.- domain ch
8d10: 65 63 6b 20 69 6e 20 65 6d 61 69 6c 5f 61 75 74  eck in email_aut
8d20: 68 2e 70 79 2c 20 74 68 61 6e 6b 73 20 47 79 75  h.py, thanks Gyu
8d30: 72 69 73 0a 2d 20 61 64 64 65 64 20 63 68 61 6e  ris.- added chan
8d40: 67 65 5f 70 61 73 73 77 6f 72 64 5f 6f 6e 76 61  ge_password_onva
8d50: 6c 69 64 61 74 69 6f 6e 20 61 6e 64 20 63 68 61  lidation and cha
8d60: 6e 67 65 5f 70 61 73 73 77 6f 72 64 5f 6f 6e 61  nge_password_ona
8d70: 63 63 65 70 74 0a 2d 20 44 41 4c 28 2e 2e 2e 2c  ccept.- DAL(...,
8d80: 6d 69 67 72 61 74 65 5f 65 6e 61 62 6c 65 64 3d  migrate_enabled=
8d90: 54 72 75 65 29 0a 2d 20 6c 6f 67 69 6e 5f 6d 65  True).- login_me
8da0: 74 68 6f 64 73 2f 6c 6f 67 69 6e 7a 61 2e 70 79  thods/loginza.py
8db0: 2c 20 74 68 61 6e 6b 73 20 56 6c 61 64 69 6d 69  , thanks Vladimi
8dc0: 72 0a 2d 20 62 70 79 74 68 6f 6e 20 73 68 65 6c  r.- bpython shel
8dd0: 6c 20 73 75 70 70 6f 72 74 2c 20 74 68 61 6e 6b  l support, thank
8de0: 73 20 41 72 75 6e 0a 2d 20 72 65 71 75 65 73 74  s Arun.- request
8df0: 2e 75 75 69 64 20 61 6e 64 20 72 65 73 70 6f 6e  .uuid and respon
8e00: 73 65 2e 75 75 69 64 20 28 66 6f 72 20 61 20 66  se.uuid (for a f
8e10: 75 74 75 72 65 20 74 6f 6f 6c 62 61 72 29 0a 2d  uture toolbar).-
8e20: 20 64 62 2e 5f 74 69 6d 69 6e 67 73 20 63 6f 6e   db._timings con
8e30: 74 61 69 6e 73 20 64 61 74 61 62 61 73 65 20 71  tains database q
8e40: 75 65 72 79 20 74 69 6d 69 6e 67 20 69 6e 66 6f  uery timing info
8e50: 0a 2d 20 65 66 66 69 63 69 65 6e 74 20 64 62 28  .- efficient db(
8e60: 2e 2e 2e 29 2e 69 73 65 6d 70 74 79 28 29 0a 2d  ...).isempty().-
8e70: 20 73 65 74 75 70 2d 77 65 62 32 70 79 2d 6e 67   setup-web2py-ng
8e80: 69 6e 78 2d 75 77 73 67 69 2d 75 62 75 6e 74 75  inx-uwsgi-ubuntu
8e90: 2e 73 68 0a 2d 20 4d 61 6e 79 20 62 75 67 20 66  .sh.- Many bug f
8ea0: 69 78 65 73 2c 20 74 68 61 6e 6b 73 20 4a 6f 6e  ixes, thanks Jon
8eb0: 61 74 68 61 6e 0a 0a 23 23 20 31 2e 39 36 2e 31  athan..## 1.96.1
8ec0: 0a 0a 2d 20 22 66 72 6f 6d 20 67 6c 75 6f 6e 20  ..- "from gluon 
8ed0: 69 6d 70 6f 72 74 20 2a 22 20 69 6d 70 6f 72 74  import *" import
8ee0: 73 20 69 6e 20 65 76 65 72 79 20 70 79 74 68 6f  s in every pytho
8ef0: 6e 20 6d 6f 64 75 6c 65 20 61 20 77 65 62 32 70  n module a web2p
8f00: 79 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 28 41  y environment (A
8f10: 2c 20 44 49 56 2c 2e 2e 53 51 4c 46 4f 52 4d 2c  , DIV,..SQLFORM,
8f20: 20 44 41 4c 2c 20 46 69 65 6c 64 2c 2e 2e 2e 29   DAL, Field,...)
8f30: 20 69 6e 63 6c 75 64 69 6e 67 20 63 75 72 72 65   including curre
8f40: 6e 74 2e 72 65 71 75 65 73 74 2c 20 63 75 72 72  nt.request, curr
8f50: 65 6e 74 2e 72 65 73 70 6f 6e 73 65 2c 20 63 75  ent.response, cu
8f60: 72 72 65 6e 74 2e 73 65 73 73 69 6f 6e 2c 20 63  rrent.session, c
8f70: 75 72 72 65 6e 74 2e 54 2c 20 63 75 72 72 65 6e  urrent.T, curren
8f80: 74 2e 63 61 63 68 65 2c 20 74 68 61 6e 6b 73 20  t.cache, thanks 
8f90: 4a 6f 6e 61 74 68 61 6e 2e 0a 2d 20 63 6f 6e 64  Jonathan..- cond
8fa0: 69 74 69 6f 6e 61 6c 20 6d 6f 64 65 6c 73 20 69  itional models i
8fb0: 6e 20 0a 20 20 6d 6f 64 65 6c 73 2f 3c 63 6f 6e  n .  models/<con
8fc0: 74 72 6f 6c 6c 65 72 3e 2f 61 2e 70 79 20 61 6e  troller>/a.py an
8fd0: 64 20 6d 6f 64 65 6c 73 2f 3c 63 6f 6e 74 72 6f  d models/<contro
8fe0: 6c 6c 65 72 3e 2f 3c 66 75 6e 63 74 69 6f 6e 3e  ller>/<function>
8ff0: 2f 61 2e 70 79 0a 2d 20 66 72 6f 6d 20 6d 79 6d  /a.py.- from mym
9000: 6f 64 75 6c 65 20 69 6d 70 6f 72 74 20 2a 2c 20  odule import *, 
9010: 6c 6f 6f 6b 73 20 66 6f 72 20 6d 79 6d 6f 64 75  looks for mymodu
9020: 6c 65 20 69 6e 20 61 70 70 6c 69 63 61 74 69 6f  le in applicatio
9030: 6e 73 2f 74 68 69 73 61 70 70 2f 6d 6f 64 75 6c  ns/thisapp/modul
9040: 65 73 20 66 69 72 73 74 20 61 6e 64 20 74 68 65  es first and the
9050: 6e 20 69 6e 20 73 79 73 2e 70 61 74 68 2e 20 4e  n in sys.path. N
9060: 6f 20 6d 6f 72 65 20 6e 65 65 64 20 66 6f 72 20  o more need for 
9070: 6c 6f 63 61 6c 5f 69 6d 70 6f 72 74 2e 20 54 68  local_import. Th
9080: 61 6e 6b 73 20 50 69 65 72 72 65 2e 0a 2d 20 75  anks Pierre..- u
9090: 73 61 67 65 20 6f 66 20 67 65 6e 65 72 69 63 2e  sage of generic.
90a0: 2a 20 76 69 65 77 73 20 69 73 20 2d 20 62 79 20  * views is - by 
90b0: 64 65 66 61 75 6c 74 20 2d 20 72 65 73 74 72 69  default - restri
90c0: 63 74 65 64 20 74 6f 20 6c 6f 63 61 6c 68 6f 73  cted to localhos
90d0: 74 20 66 6f 72 20 73 65 63 75 72 69 74 79 2e 20  t for security. 
90e0: 54 68 69 73 20 63 61 6e 20 62 65 20 63 68 61 6e  This can be chan
90f0: 67 65 64 20 69 6e 20 61 20 67 72 61 6e 75 6c 61  ged in a granula
9100: 72 20 77 61 79 20 77 69 74 68 3a 20 72 65 73 70  r way with: resp
9110: 6f 6e 73 65 2e 67 65 6e 65 72 69 63 5f 70 61 74  onse.generic_pat
9120: 74 65 72 6e 73 3d 5b 27 2a 27 5d 2e 20 54 68 69  terns=['*']. Thi
9130: 73 20 69 73 20 61 20 73 6c 69 67 68 74 20 63 68  s is a slight ch
9140: 61 6e 67 65 20 6f 66 20 62 65 68 61 76 69 6f 72  ange of behavior
9150: 20 66 6f 72 20 6e 65 77 20 61 70 70 20 62 75 74   for new app but
9160: 20 61 20 6d 61 6a 6f 72 20 73 65 63 75 72 69 74   a major securit
9170: 79 20 66 69 78 2e 0a 0a 2d 20 61 6c 6c 20 61 70  y fix...- all ap
9180: 70 6c 69 63 61 74 69 6f 6e 73 20 68 61 76 65 20  plications have 
9190: 63 61 73 20 32 2e 30 20 70 72 6f 76 69 64 65 72  cas 2.0 provider
91a0: 20 61 74 20 68 74 74 70 3a 2f 2f 2e 2e 2e 2f 75   at http://.../u
91b0: 73 65 72 2f 63 61 73 2f 6c 6f 67 69 6e 0a 2d 20  ser/cas/login.- 
91c0: 61 6c 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  all applications
91d0: 20 63 61 6e 20 64 65 6c 65 67 61 74 65 20 74 6f   can delegate to
91e0: 20 6c 6f 67 69 6e 20 74 6f 20 65 78 74 65 72 6e   login to extern
91f0: 61 6c 20 70 72 6f 76 69 64 65 72 20 41 75 74 68  al provider Auth
9200: 28 2e 2e 2e 2c 63 61 73 5f 70 72 6f 76 69 64 65  (...,cas_provide
9210: 72 3d 27 68 74 74 70 3a 2f 2f 2e 2e 2e 2f 6f 74  r='http://.../ot
9220: 68 65 72 5f 61 70 70 2f 64 65 66 61 75 6c 74 2f  her_app/default/
9230: 75 73 65 72 2f 63 61 73 27 29 0a 2d 20 41 28 2e  user/cas').- A(.
9240: 2e 2e 2c 63 61 6c 6c 62 61 63 6b 3d 55 52 4c 28  ..,callback=URL(
9250: 2e 2e 2e 29 2c 6c 61 72 67 65 74 3d 27 69 64 27  ...),larget='id'
9260: 29 20 64 6f 65 73 20 41 6a 61 78 0a 2d 20 55 52  ) does Ajax.- UR
9270: 4c 28 2e 2e 2e 2c 75 73 65 72 5f 73 69 67 6e 61  L(...,user_signa
9280: 74 75 72 65 3d 54 72 75 65 29 2c 20 4c 4f 41 44  ture=True), LOAD
9290: 28 2e 2e 2e 2c 75 73 65 72 5f 73 69 67 6e 61 74  (...,user_signat
92a0: 75 72 65 3d 54 72 75 65 29 20 63 61 6e 20 73 69  ure=True) can si
92b0: 67 6e 20 75 72 6c 73 20 61 6e 64 20 40 61 75 74  gn urls and @aut
92c0: 68 2e 72 65 71 75 69 72 65 73 5f 73 69 67 6e 61  h.requires_signa
92d0: 74 75 72 65 28 29 20 77 69 6c 6c 20 63 68 65 63  ture() will chec
92e0: 6b 20 74 68 65 20 73 69 67 6e 61 74 75 72 65 20  k the signature 
92f0: 66 6f 72 20 61 6e 79 20 64 65 63 6f 72 61 74 65  for any decorate
9300: 64 20 61 63 74 69 6f 6e 2e 0a 0a 2d 20 44 41 4c  d action...- DAL
9310: 28 2e 2e 2e 2c 6d 69 67 72 61 74 65 5f 65 6e 61  (...,migrate_ena
9320: 62 6c 65 64 3d 46 61 6c 73 65 29 20 74 6f 20 64  bled=False) to d
9330: 69 73 61 62 6c 65 20 61 6c 6c 20 6d 69 67 72 61  isable all migra
9340: 74 69 6f 6e 73 0a 2d 20 44 41 4c 28 2e 2e 2e 2c  tions.- DAL(...,
9350: 66 61 6b 65 5f 6d 69 67 72 61 74 65 5f 61 6c 6c  fake_migrate_all
9360: 3d 54 72 75 65 29 20 74 6f 20 72 65 62 75 69 6c  =True) to rebuil
9370: 64 20 61 6c 6c 20 63 6f 72 72 75 70 74 65 64 20  d all corrupted 
9380: 6d 65 74 61 64 61 74 61 0a 2d 20 6e 65 77 20 44  metadata.- new D
9390: 41 4c 20 6d 65 74 61 64 61 74 61 20 66 6f 72 6d  AL metadata form
93a0: 61 74 20 28 64 61 74 61 62 61 73 65 73 2f 2a 2e  at (databases/*.
93b0: 74 61 62 6c 65 29 0a 2d 20 44 41 4c 28 2e 2e 2e  table).- DAL(...
93c0: 2c 61 64 61 70 74 65 72 5f 61 72 67 3d 7b 7d 29  ,adapter_arg={})
93d0: 20 61 6c 6c 6f 77 73 20 73 75 70 70 6f 72 74 20   allows support 
93e0: 66 6f 72 20 61 6c 74 65 72 6e 61 74 65 20 64 72  for alternate dr
93f0: 69 76 65 72 73 0a 2d 20 44 41 4c 20 6e 6f 77 20  ivers.- DAL now 
9400: 61 6c 6c 6f 77 73 20 63 69 72 63 75 6c 61 72 20  allows circular 
9410: 74 61 62 6c 65 20 64 65 66 69 6e 74 69 6f 6e 73  table defintions
9420: 0a 2d 20 44 41 4c 28 2e 2e 2c 61 75 74 6f 5f 69  .- DAL(..,auto_i
9430: 6d 70 6f 72 74 3d 54 72 75 65 29 20 61 75 74 6f  mport=True) auto
9440: 6d 61 74 69 63 61 6c 6c 79 20 69 6d 70 6f 72 74  matically import
9450: 73 20 74 61 62 6c 65 73 20 66 72 6f 6d 20 6d 65  s tables from me
9460: 74 61 64 61 74 61 20 77 69 74 68 6f 75 74 20 6e  tadata without n
9470: 65 65 64 20 74 6f 20 64 62 2e 64 65 66 69 6e 65  eed to db.define
9480: 5f 74 61 62 6c 65 28 2e 2e 2e 29 73 2e 0a 2d 20  _table(...)s..- 
9490: 6e 65 77 20 61 6c 74 65 72 61 6e 74 65 20 73 79  new alterante sy
94a0: 6e 74 61 78 20 66 6f 72 20 69 6e 6e 65 72 20 6a  ntax for inner j
94b0: 6f 69 6e 73 3a 20 64 62 28 2e 2e 2e 29 2e 73 65  oins: db(...).se
94c0: 6c 65 63 74 28 6a 6f 69 6e 3d 2e 2e 2e 29 0a 2d  lect(join=...).-
94d0: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 63 75   experimental cu
94e0: 62 72 69 64 20 64 61 74 61 62 61 73 65 20 73 75  brid database su
94f0: 70 70 6f 72 74 0a 2d 20 44 41 4c 20 27 72 65 71  pport.- DAL 'req
9500: 75 65 73 74 5f 74 65 6e 61 6e 74 27 20 66 69 65  uest_tenant' fie
9510: 6c 64 73 20 61 72 65 20 73 70 65 63 69 61 6c 2c  lds are special,
9520: 20 74 68 65 20 61 6c 74 6f 6d 61 74 69 63 61 6c   the altomatical
9530: 6c 79 20 66 69 6c 65 72 20 61 6c 6c 20 72 65 63  ly filer all rec
9540: 6f 72 64 73 20 62 61 73 65 64 20 6f 6e 20 74 68  ords based on th
9550: 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
9560: 65 2e 0a 2d 20 64 62 2e 5f 63 6f 6d 6d 6f 6e 5f  e..- db._common_
9570: 66 69 65 6c 64 73 2e 61 70 70 65 6e 64 28 46 69  fields.append(Fi
9580: 65 6c 64 28 27 6f 77 6e 65 72 27 29 29 20 61 6c  eld('owner')) al
9590: 6c 6f 77 73 20 74 6f 20 61 64 64 20 66 69 65 6c  lows to add fiel
95a0: 64 73 20 74 6f 20 41 4c 4c 20 74 61 62 6c 65 73  ds to ALL tables
95b0: 0a 2d 20 44 41 4c 20 69 67 6e 6f 72 65 73 20 72  .- DAL ignores r
95c0: 65 70 65 61 74 65 64 20 66 69 65 6c 64 73 20 77  epeated fields w
95d0: 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 73 0a 0a  ith same names..
95e0: 2d 20 77 65 62 32 70 79 5f 61 6a 61 78 2e 68 74  - web2py_ajax.ht
95f0: 6d 6c 20 69 73 20 6d 6f 72 65 20 6d 6f 64 75 6c  ml is more modul
9600: 61 72 2c 20 74 68 61 6e 6b 73 20 41 6e 74 68 6f  ar, thanks Antho
9610: 6e 79 0a 2d 20 72 65 71 75 65 73 74 2e 69 73 5f  ny.- request.is_
9620: 6c 6f 63 61 6c 0a 2d 20 72 65 71 75 65 73 74 2e  local.- request.
9630: 69 73 5f 68 74 74 70 0a 2d 20 6e 65 77 20 73 65  is_http.- new se
9640: 73 73 69 6f 6e 73 32 74 72 61 73 68 2e 70 79 20  ssions2trash.py 
9650: 74 68 61 6e 6b 73 20 4a 69 6d 20 4b 61 72 73 74  thanks Jim Karst
9660: 65 6e 0a 2d 20 63 6f 72 72 75 70 74 65 64 20 63  en.- corrupted c
9670: 61 63 68 65 20 66 69 6c 65 73 20 61 72 65 20 61  ache files are a
9680: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
9690: 65 74 65 64 0a 2d 20 6e 65 77 20 73 69 6d 70 6c  eted.- new simpl
96a0: 65 72 20 41 50 49 20 67 6c 75 6f 6e 2e 63 6f 6e  er API gluon.con
96b0: 74 72 69 62 2e 41 75 74 68 6f 72 69 7a 65 4e 65  trib.AuthorizeNe
96c0: 74 2e 70 72 6f 63 73 73 28 2e 2e 2e 29 0a 2d 20  t.procss(...).- 
96d0: 66 69 78 65 64 20 72 65 63 61 70 74 63 68 61 20  fixed recaptcha 
96e0: 28 61 73 20 74 68 65 79 20 72 65 6c 65 61 73 65  (as they release
96f0: 64 20 6e 65 77 20 41 50 49 29 0a 2d 20 6d 65 73  d new API).- mes
9700: 73 61 67 65 73 20 69 6e 20 76 61 6c 69 64 61 74  sages in validat
9710: 6f 72 73 20 68 61 76 65 20 64 65 66 61 75 6c 74  ors have default
9720: 20 69 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 69 7a   internationaliz
9730: 61 74 69 6f 6e 0a 2d 20 4e 6f 20 6d 6f 72 65 20  ation.- No more 
9740: 41 75 74 68 28 67 6c 6f 62 61 6c 73 28 29 2c 64  Auth(globals(),d
9750: 62 29 2c 20 6a 75 73 74 20 41 75 74 68 28 64 62  b), just Auth(db
9760: 29 2e 20 53 61 6d 65 20 66 6f 72 20 43 72 75 64  ). Same for Crud
9770: 20 61 6e 64 20 53 65 72 76 69 63 65 2e 0a 2d 20   and Service..- 
9780: 73 63 72 69 70 74 73 2f 61 63 63 65 73 73 2e 77  scripts/access.w
9790: 73 67 69 20 61 6c 6c 6f 77 73 20 61 70 61 63 68  sgi allows apach
97a0: 65 2b 6d 6f 64 5f 77 73 67 69 20 74 6f 20 64 65  e+mod_wsgi to de
97b0: 6c 65 67 61 74 65 20 61 75 74 68 65 6e 74 69 63  legate authentic
97c0: 61 74 69 6f 6e 20 6f 66 20 61 6e 79 20 55 52 4c  ation of any URL
97d0: 20 74 6f 20 61 6e 79 20 77 65 62 32 70 79 20 61   to any web2py a
97e0: 70 70 0a 2d 20 6a 73 6f 6e 20 6e 6f 77 20 73 75  pp.- json now su
97f0: 70 70 6f 72 74 73 20 54 28 2e 2e 2e 29 20 0a 2d  pports T(...) .-
9800: 20 73 63 72 69 70 74 73 2f 73 65 74 75 70 2d 77   scripts/setup-w
9810: 65 62 32 70 79 2d 6e 67 69 6e 78 2d 75 77 73 67  eb2py-nginx-uwsg
9820: 69 2d 75 62 75 6e 74 75 2e 73 68 0a 2d 20 77 65  i-ubuntu.sh.- we
9830: 62 32 70 79 20 48 54 54 50 20 72 65 73 70 6f 6e  b2py HTTP respon
9840: 73 65 73 20 6e 6f 77 20 73 65 74 3a 20 22 58 2d  ses now set: "X-
9850: 50 6f 77 65 72 65 64 2d 42 79 3a 20 77 65 62 32  Powered-By: web2
9860: 70 79 22 2c 20 74 68 61 6e 6b 73 20 42 72 75 6e  py", thanks Brun
9870: 6f 0a 2d 20 6d 6f 73 74 6c 79 20 66 69 78 65 64  o.- mostly fixed
9880: 20 67 65 6e 65 72 69 63 2e 70 64 66 2e 20 59 6f   generic.pdf. Yo
9890: 75 20 63 61 6e 20 76 69 65 77 20 61 6e 79 20 70  u can view any p
98a0: 61 67 65 20 69 6e 20 50 44 46 20 69 66 20 79 6f  age in PDF if yo
98b0: 75 20 68 61 76 65 20 70 64 66 6c 61 74 65 78 20  u have pdflatex 
98c0: 69 6e 73 74 61 6c 6c 65 64 20 6f 72 20 69 66 20  installed or if 
98d0: 79 6f 75 72 20 68 74 6d 6c 20 66 6f 6c 6c 6f 77  your html follow
98e0: 73 20 74 68 65 20 70 79 66 70 64 66 20 63 6f 6e  s the pyfpdf con
98f0: 76 65 6e 74 69 6f 6e 2e 0a 2d 20 61 75 74 68 2e  vention..- auth.
9900: 73 65 74 74 69 6e 67 73 2e 65 78 74 72 61 5f 66  settings.extra_f
9910: 69 65 6c 64 73 5b 27 61 75 74 68 5f 75 73 65 72  ields['auth_user
9920: 27 5d 2e 61 70 70 65 6e 64 28 46 69 65 6c 64 28  '].append(Field(
9930: 27 63 6f 75 6e 74 72 79 27 29 29 20 61 6c 6c 6f  'country')) allo
9940: 77 73 20 74 6f 20 65 78 74 65 6e 64 20 61 75 74  ws to extend aut
9950: 68 5f 2a 20 74 61 62 6c 65 73 20 77 69 74 68 6f  h_* tables witho
9960: 75 74 20 6e 65 65 64 20 6f 66 20 64 65 66 69 6e  ut need of defin
9970: 69 74 69 6e 67 20 61 20 63 75 73 74 6f 6d 20 61  iting a custom a
9980: 75 74 68 5f 2a 20 74 61 62 6c 65 2e 20 4d 75 73  uth_* table. Mus
9990: 74 20 62 65 20 70 6c 61 63 65 64 20 62 65 66 6f  t be placed befo
99a0: 72 65 20 61 75 74 68 2e 64 65 66 69 6e 65 5f 74  re auth.define_t
99b0: 61 62 6c 65 73 28 29 0a 2d 20 7b 7b 3d 72 65 73  ables().- {{=res
99c0: 70 6f 6e 73 65 2e 74 6f 6f 6c 62 61 72 28 29 7d  ponse.toolbar()}
99d0: 7d 20 74 6f 20 68 65 6c 70 20 79 6f 75 20 64 65  } to help you de
99e0: 62 75 67 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  bug applications
99f0: 0a 2d 20 77 65 62 20 62 61 73 65 64 20 73 68 65  .- web based she
9a00: 6c 6c 20 6e 6f 77 20 73 75 70 70 6f 72 74 73 20  ll now supports 
9a10: 6f 62 6a 65 63 74 20 6d 6f 64 69 66 69 63 61 74  object modificat
9a20: 69 6f 6e 73 20 28 62 75 74 20 6e 6f 20 72 65 64  ions (but no red
9a30: 65 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 6e 6f  efinitions of no
9a40: 6e 2d 73 65 72 69 61 6c 69 7a 61 62 6c 65 20 74  n-serializable t
9a50: 79 70 65 73 29 0a 2d 20 6a 51 75 65 72 79 20 31  ypes).- jQuery 1
9a60: 2e 36 2e 31 0a 2d 20 4c 6f 74 73 20 6f 66 20 62  .6.1.- Lots of b
9a70: 75 67 20 66 69 78 65 73 0a 0a 23 20 31 2e 39 36  ug fixes..# 1.96
9a80: 2e 32 2d 31 2e 39 36 2e 34 0a 2d 20 62 75 67 20  .2-1.96.4.- bug 
9a90: 66 69 78 65 73 0a 0a 23 20 31 2e 39 37 2e 31 0a  fixes..# 1.97.1.
9aa0: 2d 20 76 61 6c 69 64 61 74 65 5f 61 6e 64 5f 75  - validate_and_u
9ab0: 70 64 61 74 65 2c 20 74 68 61 6e 6b 73 20 42 72  pdate, thanks Br
9ac0: 75 6e 6f 0a 2d 20 66 69 78 65 64 20 70 72 6f 62  uno.- fixed prob
9ad0: 6c 65 6d 20 77 69 74 68 20 6e 65 77 20 63 75 73  lem with new cus
9ae0: 74 6f 6d 20 69 6d 70 6f 72 74 2c 20 74 68 61 6e  tom import, than
9af0: 6b 73 20 4d 61 72 74 0a 2d 20 66 69 78 65 64 20  ks Mart.- fixed 
9b00: 70 79 61 6d 66 20 30 2e 36 2c 20 74 68 61 6e 6b  pyamf 0.6, thank
9b10: 73 20 41 6c 65 78 65 69 20 61 6e 64 20 4e 69 63  s Alexei and Nic
9b20: 6b 64 0a 2d 20 66 69 78 65 64 20 22 2b 20 3d 22  kd.- fixed "+ ="
9b30: 20 62 75 67 20 69 6e 20 77 69 7a 61 72 64 0a 2d   bug in wizard.-
9b40: 20 66 69 78 65 64 20 70 72 6f 62 6c 65 6d 20 77   fixed problem w
9b50: 69 74 68 20 61 6c 6c 6f 77 65 64 5f 70 61 74 74  ith allowed_patt
9b60: 65 72 6e 73 0a 2d 20 66 69 78 65 64 20 70 72 6f  erns.- fixed pro
9b70: 62 6c 65 6d 73 20 77 69 74 68 20 4c 4f 41 44 20  blems with LOAD 
9b80: 61 6e 64 20 76 61 72 73 20 61 6e 64 20 61 6a 61  and vars and aja
9b90: 78 0a 2d 20 63 6c 6f 73 65 64 20 6c 6f 74 73 20  x.- closed lots 
9ba0: 6f 66 20 67 6f 6f 67 6c 65 20 63 6f 64 65 20 74  of google code t
9bb0: 69 63 6b 65 74 73 0a 2d 20 63 68 65 63 6b 62 6f  ickets.- checkbo
9bc0: 78 65 73 20 73 68 6f 75 6c 64 20 6e 6f 77 20 77  xes should now w
9bd0: 6f 72 6b 20 77 69 74 68 20 6c 69 73 74 3a 73 74  ork with list:st
9be0: 72 69 6e 67 0a 2d 20 77 65 62 32 70 79 20 77 6f  ring.- web2py wo
9bf0: 72 6b 73 20 6f 6e 20 41 6e 64 72 6f 69 64 2c 20  rks on Android, 
9c00: 74 68 61 6e 6b 73 20 43 6f 72 6e 65 20 44 69 63  thanks Corne Dic
9c10: 6b 65 6e 73 0a 2d 20 6e 65 77 20 63 70 64 62 2e  kens.- new cpdb.
9c20: 70 79 2c 20 74 68 61 6e 6b 73 20 4d 61 72 74 0a  py, thanks Mart.
9c30: 2d 20 69 6d 70 72 6f 76 65 64 20 74 72 61 6e 73  - improved trans
9c40: 6c 61 74 69 6f 6e 20 28 66 72 65 63 68 20 69 6e  lation (frech in
9c50: 20 70 61 72 74 69 63 75 6c 65 72 29 2c 20 74 68   particuler), th
9c60: 61 6e 6b 73 20 50 69 65 72 72 65 0a 2d 20 69 6d  anks Pierre.- im
9c70: 70 72 6f 76 65 64 20 63 61 73 5f 61 75 74 68 2e  proved cas_auth.
9c80: 70 79 2c 20 74 68 61 6e 6b 73 20 53 65 72 67 69  py, thanks Sergi
9c90: 6f 0a 2d 20 49 53 5f 44 41 54 45 20 61 6e 64 20  o.- IS_DATE and 
9ca0: 49 53 5f 44 41 54 45 54 49 4d 45 20 76 61 6c 69  IS_DATETIME vali
9cb0: 64 61 74 6f 72 73 20 6e 6f 77 20 77 6f 72 6b 20  dators now work 
9cc0: 77 69 74 68 20 6e 61 74 69 76 65 20 74 79 70 65  with native type
9cd0: 73 0a 2d 20 62 65 74 74 65 72 20 64 65 73 63 72  s.- better descr
9ce0: 69 70 74 69 6f 6e 20 6f 66 20 2d 2d 73 68 65 6c  iption of --shel
9cf0: 6c 2c 20 74 68 61 6e 6b 73 20 41 6e 74 68 6f 6e  l, thanks Anthon
9d00: 79 0a 2d 20 65 78 74 72 61 20 53 51 4c 54 41 42  y.- extra SQLTAB
9d10: 4c 45 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 61 6e  LE columns, than
9d20: 6b 73 20 4d 61 72 74 69 6e 0a 2d 20 66 69 78 65  ks Martin.- fixe
9d30: 64 20 74 6f 6f 6c 62 61 72 20 63 6f 6e 66 6c 69  d toolbar confli
9d40: 63 73 2c 20 74 68 61 6e 6b 73 20 53 69 6d 6f 6e  cs, thanks Simon
9d50: 0a 2d 20 47 41 45 20 70 61 73 73 77 6f 72 64 20  .- GAE password 
9d60: 73 68 6f 77 73 20 77 69 74 68 20 2a 2a 2a 2a 0a  shows with ****.
9d70: 0a 23 20 31 2e 39 38 2e 31 2d 31 2e 39 38 2e 32  .# 1.98.1-1.98.2
9d80: 0a 2d 20 66 69 78 65 64 20 73 6f 6d 65 20 70 72  .- fixed some pr
9d90: 6f 62 6c 65 6d 73 20 77 69 74 68 20 4c 4f 41 44  oblems with LOAD
9da0: 28 61 6a 61 78 3d 46 61 6c 73 65 29 2c 20 74 68  (ajax=False), th
9db0: 61 6e 6b 73 20 41 6e 74 68 6f 6e 79 0a 2d 20 6a  anks Anthony.- j
9dc0: 71 75 65 72 79 20 31 2e 36 2e 32 0a 2d 20 67 65  query 1.6.2.- ge
9dd0: 76 65 6e 74 2e 70 79 77 73 67 69 20 61 64 64 73  vent.pywsgi adds
9de0: 20 73 73 6c 20 73 75 70 70 6f 72 74 2c 20 74 68   ssl support, th
9df0: 61 6e 6b 73 20 56 61 73 69 6c 65 0a 2d 20 69 6d  anks Vasile.- im
9e00: 70 6f 72 74 2f 65 78 70 6f 72 74 20 6f 66 20 62  port/export of b
9e10: 6c 6f 62 73 20 61 72 65 20 62 61 73 65 36 34 20  lobs are base64 
9e20: 65 6e 63 6f 64 65 64 0a 2d 20 6d 61 78 20 6e 75  encoded.- max nu
9e30: 6d 62 65 72 20 6f 66 20 6c 6f 67 69 6e 20 61 74  mber of login at
9e40: 74 65 6d 74 73 20 69 6e 20 61 64 6d 69 6e 2c 20  temts in admin, 
9e50: 74 68 61 6e 6b 73 20 52 6f 73 73 0a 2d 20 66 69  thanks Ross.- fi
9e60: 78 65 64 20 6a 6f 69 6e 73 20 77 69 74 68 20 61  xed joins with a
9e70: 6c 69 61 73 20 74 61 62 6c 65 73 0a 2d 20 6e 65  lias tables.- ne
9e80: 77 20 66 69 65 6c 64 2e 63 75 73 74 6f 6d 5f 64  w field.custom_d
9e90: 65 6c 65 74 65 20 61 74 74 72 69 62 75 74 65 0a  elete attribute.
9ea0: 2d 20 72 65 6d 6f 76 65 64 20 72 65 73 63 74 69  - removed rescti
9eb0: 6f 6e 73 20 6f 6e 20 6c 61 72 67 65 20 27 74 65  ons on large 'te
9ec0: 78 74 20 66 69 65 6c 64 73 2c 20 74 68 61 6e 6b  xt fields, thank
9ed0: 73 20 4d 61 72 74 69 6e 0a 2d 20 66 69 65 6c 64  s Martin.- field
9ee0: 2e 72 65 70 72 65 73 65 6e 74 20 3d 20 6c 61 6d  .represent = lam
9ef0: 62 64 61 20 76 61 6c 75 65 2c 72 65 63 6f 72 64  bda value,record
9f00: 3a 20 2e 2e 2e 2e 20 28 72 65 63 6f 72 64 20 69  : .... (record i
9f10: 73 20 6f 70 74 69 6f 6e 61 6c 29 0a 2d 20 46 4f  s optional).- FO
9f20: 52 4d 2e 76 61 6c 69 64 61 74 65 28 29 20 61 6e  RM.validate() an
9f30: 64 20 46 4f 52 4d 2e 70 72 6f 63 65 73 73 28 29  d FORM.process()
9f40: 2c 20 74 68 61 6e 6b 73 20 42 72 75 6e 6f 0a 2d  , thanks Bruno.-
9f50: 20 66 61 73 74 65 72 20 76 69 73 72 74 75 61 6c   faster visrtual
9f60: 66 69 65 6c 64 73 2c 20 74 68 61 6e 6b 73 20 48  fields, thanks H
9f70: 6f 77 73 65 63 0a 2d 20 6d 61 69 6c 20 68 61 73  owsec.- mail has
9f80: 20 73 73 6c 20 73 75 70 70 6f 72 74 20 73 65 70   ssl support sep
9f90: 61 72 61 74 65 20 66 72 6f 6d 20 74 6c 73 2c 20  arate from tls, 
9fa0: 74 68 61 6e 6b 73 20 45 72 69 63 0a 2d 20 54 41  thanks Eric.- TA
9fb0: 47 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  G objects are no
9fc0: 77 20 70 69 63 6b 61 62 6c 65 0a 2d 20 6e 65 77  w pickable.- new
9fd0: 20 43 41 54 20 74 61 67 20 66 6f 72 20 6e 6f 20   CAT tag for no 
9fe0: 74 61 67 73 0a 2d 20 72 65 71 75 65 73 74 2e 75  tags.- request.u
9ff0: 73 65 72 5f 61 67 65 6e 74 28 29 2c 20 74 68 61  ser_agent(), tha
a000: 6e 6b 73 20 52 6f 73 73 0a 2d 20 66 69 78 65 64  nks Ross.- fixed
a010: 20 66 61 77 70 73 20 73 75 70 70 6f 72 74 0a 2d   fawps support.-
a020: 20 53 51 4c 46 4f 52 4d 28 2e 2e 2e 2c 73 65 70   SQLFORM(...,sep
a030: 61 72 61 74 6f 72 3d 27 3a 20 27 29 20 6e 6f 77  arator=': ') now
a040: 20 63 75 73 74 6f 6d 69 7a 61 62 6c 65 0a 2d 20   customizable.- 
a050: 6d 61 6e 79 20 73 6d 61 6c 6c 20 62 75 67 20 66  many small bug f
a060: 69 78 65 73 0a 0a 23 23 20 31 2e 39 39 2e 31 0a  ixes..## 1.99.1.
a070: 2d 20 67 6c 75 6f 6e 2f 63 6f 6e 74 72 69 62 2f  - gluon/contrib/
a080: 73 69 6d 70 6c 65 6a 73 6f 6e 72 70 63 2e 70 79  simplejsonrpc.py
a090: 0a 2d 20 67 6c 75 6f 6e 2f 63 6f 6e 74 72 69 62  .- gluon/contrib
a0a0: 2f 72 65 64 69 73 5f 63 61 63 68 65 2e 70 79 0a  /redis_cache.py.
a0b0: 2d 20 73 75 70 70 6f 72 74 20 66 6f 72 20 41 28  - support for A(
a0c0: 6e 61 6d 65 2c 63 61 6c 6c 62 61 63 6b 3d 75 72  name,callback=ur
a0d0: 6c 2c 74 61 72 67 65 74 3d 27 69 64 27 2c 64 65  l,target='id',de
a0e0: 6c 65 74 65 3d 27 74 72 27 29 0a 2d 20 73 75 70  lete='tr').- sup
a0f0: 70 6f 72 74 20 66 6f 72 20 41 28 6e 61 6d 65 2c  port for A(name,
a100: 63 6f 6d 70 6f 6e 65 6e 74 3d 75 72 6c 2c 74 61  component=url,ta
a110: 72 67 65 74 3d 27 69 64 27 2c 64 65 6c 65 74 65  rget='id',delete
a120: 3d 27 74 72 27 29 0a 2d 20 6e 65 77 20 70 69 70  ='tr').- new pip
a130: 20 69 6e 73 74 61 6c 6c 65 72 2c 20 74 68 61 6e   installer, than
a140: 6b 73 20 43 68 72 69 73 20 53 74 65 65 6c 0a 2d  ks Chris Steel.-
a150: 20 69 73 61 70 69 77 73 67 69 68 61 6e 64 6c 65   isapiwsgihandle
a160: 72 2e 70 79 0a 2d 20 64 61 6c 20 65 78 70 72 65  r.py.- dal expre
a170: 73 73 69 6f 6e 2e 63 6f 61 6c 65 73 63 65 28 2a  ssion.coalesce(*
a180: 6f 70 74 69 6f 6e 73 29 0a 2d 20 67 6c 75 6f 6e  options).- gluon
a190: 2f 63 6f 6e 74 72 69 62 2f 73 69 6d 70 6c 65 6a  /contrib/simplej
a1a0: 73 6f 6e 72 70 63 2e 70 79 2c 20 74 68 61 6e 6b  sonrpc.py, thank
a1b0: 73 20 4d 61 72 69 61 6e 6f 0a 2d 20 65 78 70 69  s Mariano.- expi
a1c0: 72 65 5f 73 65 73 73 69 6f 6e 73 2e 70 79 20 72  re_sessions.py r
a1d0: 65 73 70 65 63 74 73 20 65 78 70 69 72 61 74 69  espects expirati
a1e0: 6f 6e 20 74 69 6d 65 2c 20 74 68 61 6e 6b 73 20  on time, thanks 
a1f0: 69 63 65 62 65 72 67 0a 2d 20 61 64 64 72 65 73  iceberg.- addres
a200: 73 65 64 20 74 68 69 73 20 69 73 73 75 65 3a 20  sed this issue: 
a210: 68 74 74 70 3a 2f 2f 66 75 65 6c 79 6f 75 72 63  http://fuelyourc
a220: 6f 64 69 6e 67 2e 63 6f 6d 2f 6a 71 75 65 72 79  oding.com/jquery
a230: 2d 65 76 65 6e 74 73 2d 73 74 6f 70 2d 6d 69 73  -events-stop-mis
a240: 75 73 69 6e 67 2d 72 65 74 75 72 6e 2d 66 61 6c  using-return-fal
a250: 73 65 2f 0a 2d 20 78 35 30 39 20 73 75 70 70 6f  se/.- x509 suppo
a260: 72 74 20 28 74 68 61 6e 6b 73 20 4d 69 63 68 65  rt (thanks Miche
a270: 6c 65 29 0a 2d 20 66 6f 72 6d 2e 70 72 6f 63 65  le).- form.proce
a280: 73 73 28 29 20 61 6e 64 20 66 6f 72 2e 76 61 6c  ss() and for.val
a290: 69 64 61 74 65 28 29 0a 2d 20 72 6f 63 6b 65 74  idate().- rocket
a2a0: 20 75 70 67 72 61 64 65 20 28 31 2e 32 2e 34 29   upgrade (1.2.4)
a2b0: 0a 2d 20 6a 51 75 65 72 79 20 75 70 67 72 61 64  .- jQuery upgrad
a2c0: 65 20 28 31 2e 36 2e 33 29 0a 2d 20 6e 65 77 20  e (1.6.3).- new 
a2d0: 73 79 6e 74 61 78 20 72 6f 77 73 5b 69 5d 28 27  syntax rows[i]('
a2e0: 74 61 62 6c 65 6e 61 6d 65 2e 66 69 65 6c 64 6e  tablename.fieldn
a2f0: 61 6d 65 27 29 0a 2d 20 6e 65 77 20 71 75 65 72  ame').- new quer
a300: 79 20 73 79 6e 74 61 78 20 66 69 65 6c 64 2e 63  y syntax field.c
a310: 6f 6e 74 61 69 6e 73 28 6c 69 73 74 2c 61 6c 6c  ontains(list,all
a320: 3d 54 72 75 65 20 6f 72 20 46 61 6c 73 65 29 0a  =True or False).
a330: 2d 20 6e 65 77 20 53 51 4c 46 4f 52 4d 2e 67 72  - new SQLFORM.gr
a340: 69 64 20 61 6e 64 20 53 51 4c 46 4f 52 4d 2e 73  id and SQLFORM.s
a350: 6d 61 72 74 67 72 69 64 20 28 73 68 6f 75 6c 64  martgrid (should
a360: 20 72 65 70 6c 61 63 65 20 63 72 75 64 2e 73 65   replace crud.se
a370: 61 72 63 68 20 61 6e 64 20 63 72 75 64 2e 73 65  arch and crud.se
a380: 6c 65 63 74 29 0a 2d 20 73 75 70 70 6f 72 74 20  lect).- support 
a390: 66 6f 72 20 6e 61 74 75 72 61 6c 20 6c 61 6e 67  for natural lang
a3a0: 75 61 67 65 20 71 75 65 72 69 65 73 20 28 65 6e  uage queries (en
a3b0: 67 6c 69 73 68 20 6f 6e 6c 79 29 20 69 6e 20 53  glish only) in S
a3c0: 51 4c 46 4f 52 4d 2e 67 72 69 64 0a 2d 20 73 75  QLFORM.grid.- su
a3d0: 70 70 6f 72 74 20 66 6f 72 20 63 6f 6d 70 75 74  pport for comput
a3e0: 65 64 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 61  ed columns and a
a3f0: 64 64 69 74 69 6f 6e 61 6c 20 6c 69 6e 6b 73 20  dditional links 
a400: 69 6e 20 53 51 4c 46 4f 52 4d 2e 67 72 69 64 0a  in SQLFORM.grid.
a410: 2d 20 6e 65 77 20 73 74 79 6c 65 20 76 69 72 74  - new style virt
a420: 75 61 6c 20 66 69 65 6c 64 73 20 28 65 78 70 65  ual fields (expe
a430: 72 69 6d 65 6e 74 61 6c 29 3a 20 64 62 2e 74 61  rimental): db.ta
a440: 62 6c 65 2e 66 69 65 6c 64 3d 46 69 65 6c 64 2e  ble.field=Field.
a450: 4c 61 7a 79 28 2e 2e 2e 29 0a 2d 20 72 65 71 75  Lazy(...).- requ
a460: 65 73 74 2e 75 74 63 6e 6f 77 0a 2d 20 63 6c 65  est.utcnow.- cle
a470: 61 6e 65 72 2f 73 69 6d 70 6c 65 72 20 77 65 6c  aner/simpler wel
a480: 63 6f 6d 65 2f 6d 6f 64 65 6c 73 2f 64 62 2e 70  come/models/db.p
a490: 79 20 61 6e 64 20 77 65 6c 63 6f 6d 65 20 6c 61  y and welcome la
a4a0: 79 6f 75 74 2e 68 74 6d 6c 0a 2d 20 72 65 73 70  yout.html.- resp
a4b0: 6f 6e 73 65 2e 69 6e 63 6c 75 64 65 5f 6d 65 74  onse.include_met
a4c0: 61 28 29 20 61 6e 64 20 72 65 73 70 6f 6e 73 65  a() and response
a4d0: 2e 69 6e 63 6c 75 64 65 5f 66 69 6c 65 73 28 29  .include_files()
a4e0: 2c 20 74 68 61 6e 6b 73 20 44 65 6e 65 73 0a 2d  , thanks Denes.-
a4f0: 20 64 61 6c 20 61 75 74 6f 2d 72 65 63 6f 6e 6e   dal auto-reconn
a500: 65 63 74 20 6f 6e 20 74 69 6d 65 2d 6f 75 74 20  ect on time-out 
a510: 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 2d 20 43 4f  connections.- CO
a520: 4c 20 61 6e 64 20 43 4f 4c 47 52 4f 55 50 20 68  L and COLGROUP h
a530: 65 6c 70 65 72 73 0a 2d 20 61 64 64 72 65 73 65  elpers.- addrese
a540: 64 20 4f 57 41 53 50 20 23 31 30 2c 20 74 68 61  d OWASP #10, tha
a550: 6e 6b 73 20 41 6e 74 68 6f 6e 79 20 61 6e 64 20  nks Anthony and 
a560: 45 72 69 63 0a 2d 20 61 75 74 68 2e 73 65 74 74  Eric.- auth.sett
a570: 69 6e 67 73 2e 6c 6f 67 69 6e 5f 61 66 74 65 72  ings.login_after
a580: 5f 72 65 67 69 73 74 72 61 74 69 6f 6e 3d 54 72  _registration=Tr
a590: 75 65 0a 2d 20 64 65 74 65 63 74 69 6f 6e 20 6f  ue.- detection o
a5a0: 66 20 6d 6f 62 69 6c 65 20 64 65 76 69 63 65 73  f mobile devices
a5b0: 20 61 6e 64 20 40 6d 6f 62 69 6c 69 7a 65 20 68   and @mobilize h
a5c0: 65 6c 70 65 72 20 28 76 69 65 77 2e 6d 6f 62 69  elper (view.mobi
a5d0: 6c 65 2e 68 74 6d 6c 29 2c 20 74 68 61 6e 6b 73  le.html), thanks
a5e0: 20 41 6e 67 65 6c 6f 0a 2d 20 65 78 70 65 72 69   Angelo.- experi
a5f0: 6d 65 6e 74 61 6c 20 67 6c 75 6f 6e 2f 73 63 68  mental gluon/sch
a600: 65 64 75 6c 65 72 2e 70 79 0a 2d 20 73 63 72 69  eduler.py.- scri
a610: 70 74 73 2f 6d 61 6b 65 5f 6d 69 6e 5f 77 65 62  pts/make_min_web
a620: 32 70 79 2e 70 79 0a 2d 20 63 72 75 64 2e 73 65  2py.py.- crud.se
a630: 61 72 63 68 20 68 61 73 20 6d 6f 72 65 20 6f 70  arch has more op
a640: 74 69 6f 6e 73 2c 20 74 68 61 6e 6b 73 20 44 65  tions, thanks De
a650: 6e 65 73 0a 2d 20 6d 61 6e 79 20 62 75 67 20 66  nes.- many bug f
a660: 69 78 65 73 20 28 74 68 61 6e 6b 73 20 4a 6f 6e  ixes (thanks Jon
a670: 61 74 68 61 6e 2c 20 4d 69 63 68 65 6c 65 2c 20  athan, Michele, 
a680: 46 72 61 6e 20 61 6e 64 20 6f 74 68 65 72 73 29  Fran and others)
a690: 0a                                               .