Compare commits

..

10 Commits

Author SHA1 Message Date
2b4d5fab83 Update dal to the current pydal master with major bugfix of JSON parser
handoff.
2020-01-15 13:12:44 +00:00
mdipierro
ec40c1b5a9 Merge pull request #2281 from guiguid/master
Improve capacity of model extraction for legacy SQLite DB
2020-01-15 07:32:32 +01:00
mdipierro
93ef108c0b new pydal 2020-01-03 17:42:08 +01:00
Guillaume DELVIT
e55cf14a07 Improve capacity of model extraction for legacy SQLite DB
Extended version with support of 
 - Inline CREATE TABLE declaration in sqlite DB. 
 - "ID_MYTABLE" as REFERENCE PRIMARY KEY
2020-01-01 11:52:34 +01:00
mdipierro
382d034fdd AuthJWT 400->401 2019-12-26 09:22:04 +01:00
mdipierro
ee0763100b Merge pull request #2264 from timnyborg/patch-12
limit widget rebuilding on form error to ListWidget
2019-12-24 06:57:17 -08:00
mdipierro
67b033d0a8 Merge pull request #2224 from timnyborg/patch-6
fix error block location in radio buttons
2019-12-24 06:48:19 -08:00
mdipierro
b6060ab79a Merge pull request #2280 from dlage/issue-2274
Fix Issue 2274 - sessions using redis
2019-12-24 06:44:11 -08:00
Tim Nyborg
66ae2a5a7f limit widget rebuilding on form error to ListWidget 2019-10-09 16:21:25 +01:00
Tim Nyborg
2e8a8a62f9 fix error block location in radio buttons
Currently, radio widget error messages appear between the final checkbox and the final label.  Instead, use CheckboxesWidget's invisible input method to display errors on radio widgets.
2019-06-17 12:13:15 +01:00
5 changed files with 25 additions and 6 deletions

View File

@@ -461,7 +461,12 @@ class RadioWidget(OptionsWidget):
opts.append(child(tds))
if opts:
opts[-1][0][0]['hideerror'] = False
opts.append(
INPUT(requires=attr.get('requires', None),
_style="display:none;",
_disabled="disabled",
_name=field.name,
hideerror=False))
return parent(*opts, **attr)
@@ -1814,7 +1819,7 @@ class SQLFORM(FORM):
if not field.widget and field.type.startswith('list:') and \
not OptionsWidget.has_options(field):
field.widget = self.widgets.list.widget
if field.widget and fieldname in request_vars:
if field.widget == self.widgets.list.widget and fieldname in request_vars:
if fieldname in self.request_vars:
value = self.request_vars[fieldname]
elif self.record:

View File

@@ -3726,7 +3726,7 @@ class Auth(AuthAPI):
are passed to the constructor of class AuthJWT. Look there for documentation.
"""
if not self.jwt_handler:
raise HTTP(400, "Not authorized")
raise HTTP(401, "Not authorized")
else:
rtn = self.jwt_handler.jwt_token_manager()
raise HTTP(200, rtn, cookies=None, **current.response.headers)
@@ -3820,7 +3820,7 @@ class Auth(AuthAPI):
def allows_jwt(self, otherwise=None):
if not self.jwt_handler:
raise HTTP(400, "Not authorized")
raise HTTP(401, "Not authorized")
else:
return self.jwt_handler.allows_jwt(otherwise=otherwise)

View File

@@ -13,6 +13,12 @@ legacy_db(legacy_db.mytable.id>0).select()
extract_sqlite_models.py -- Copyright (C) Michele Comitini
This code is distributed with web2py.
Extended version with support of
- "ID_MYTABLE" as REFERENCE PRIMARY KEY
- Inline CREATE TABLE declaration in sqlite DB.
Copyright (C) Guillaume DELVIT.
The regexp code and the dictionary type map was extended from
extact_mysql_models.py that comes with web2py. extact_mysql_models.py is Copyright (C) Falko Krause.
@@ -58,6 +64,10 @@ def get_foreign_keys(sql_lines):
hit = re.search(r'FOREIGN\s+KEY\s+\("(\S+)"\)\s+REFERENCES\s+"(\S+)"\s+\("(\S+)"\)', line)
if hit:
fks[hit.group(1)] = hit.groups()[1:]
else:
hit = re.search(r'ID_(\S+)\s+INTEGER', line)
if hit:
fks['ID_'+hit.group(1)] = [hit.group(1), 'ID']
return fks
@@ -74,6 +84,8 @@ def sqlite(database_name):
if 'CREATE' in sql_create_stmnt: # check if the table exists
#remove garbage lines from sql statement
sql_lines = sql_create_stmnt.split('\n')
if len(sql_lines) == 1 :
sql_lines = re.split('[()\n]|, ',sql_create_stmnt)
sql_lines = [x for x in sql_lines if not(
x.startswith('--') or x.startswith('/*') or x == '')]
#generate the web2py code from the create statement
@@ -84,6 +96,8 @@ def sqlite(database_name):
if re.search('KEY', line) or re.search('PRIMARY', line) or re.search('"ID"', line) or line.startswith(')'):
continue
hit = re.search(r'\[(\S+)\]\s+(\w+(\(\S+\))?),?( .*)?', line)
if not hit:
hit = re.search(r'(\S+)\s(\S+)', line)
if hit is not None:
name, d_type = hit.group(1), hit.group(2)
d_type = re.sub(r'(\w+)\(.*', r'\1', d_type)