From 4a4f22b654d24f0218037f169a9b41ce5c615667 Mon Sep 17 00:00:00 2001 From: Henry Nguyen Date: Fri, 24 Oct 2014 12:18:17 -0700 Subject: [PATCH 1/6] Fixed missing update for new DAL structure Other values were updated in 5e5e649c28a4f3615f917cec3476f0c32e358777 but this was missing from that commit. --- gluon/scheduler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gluon/scheduler.py b/gluon/scheduler.py index 6a72dda5..b5d5fac7 100644 --- a/gluon/scheduler.py +++ b/gluon/scheduler.py @@ -1312,7 +1312,7 @@ class Scheduler(MetaScheduler): have all fields == None """ - from gluon.dal import Query + from gluon.dal.objects import Query sr, st = self.db.scheduler_run, self.db.scheduler_task if isinstance(ref, (int, long)): q = st.id == ref From 63d8785918722b5e311e9a3b7b3155992c7c1eca Mon Sep 17 00:00:00 2001 From: ilvalle Date: Thu, 30 Oct 2014 17:57:04 +0100 Subject: [PATCH 2/6] hooks panel in admin editor --- applications/admin/controllers/appadmin.py | 2 +- applications/admin/views/default/edit.html | 17 ++++--- .../admin/views/default/editor_shortcuts.html | 29 ++++++----- applications/examples/controllers/appadmin.py | 48 ++++++++----------- applications/welcome/controllers/appadmin.py | 2 +- 5 files changed, 46 insertions(+), 52 deletions(-) diff --git a/applications/admin/controllers/appadmin.py b/applications/admin/controllers/appadmin.py index 50263b35..c2d5836c 100644 --- a/applications/admin/controllers/appadmin.py +++ b/applications/admin/controllers/appadmin.py @@ -693,6 +693,6 @@ def hooks(): ul_t = UL(_class='nav nav-list', _id="a_%s" % t['slug'], _style='display:none') for op in t['method_hooks']: ul_t.append(LI (op['name'])) - ul_t.append(UL([LI(A(f['funcname'], _href=f['url']if 'url' in f else None)) for f in op['functions']])) + ul_t.append(UL([LI(A(f['funcname'], _class="editor_filelink", _href=f['url']if 'url' in f else None, **{'_data-lineno':f['lineno']-1})) for f in op['functions']])) ul_main.append(ul_t) return ul_main diff --git a/applications/admin/views/default/edit.html b/applications/admin/views/default/edit.html index c2af8ced..d094b937 100644 --- a/applications/admin/views/default/edit.html +++ b/applications/admin/views/default/edit.html @@ -258,12 +258,16 @@ $(document).on('click', 'a.font_button', function (e) {
-
- {{=LOAD('default', 'todolist.load', vars={'app':app}, ajax=True, timeout=60000, times="infinity")}} -
-
- {{include 'default/editor_shortcuts.html'}} -
+
+ {{=LOAD('default', 'todolist.load', vars={'app':app}, ajax=True, timeout=60000, times="infinity")}} +
+
+ {{include 'default/editor_shortcuts.html'}} +
+
+

Tables hooks

+
{{=LOAD(url="/%s/appadmin/hooks" % app, ajax=True, timeout=60000, times="infinity")}}
+
{{block footer}} @@ -272,6 +276,7 @@ $(document).on('click', 'a.font_button', function (e) { diff --git a/applications/admin/views/default/editor_shortcuts.html b/applications/admin/views/default/editor_shortcuts.html index 874921f9..cc2883f7 100644 --- a/applications/admin/views/default/editor_shortcuts.html +++ b/applications/admin/views/default/editor_shortcuts.html @@ -1,18 +1,17 @@

{{=T("Keyboard shortcuts")}}

-
    -
  • - {{=shortcut('Ctrl+S', T('Save via Ajax'))}} - {{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}} - {{=shortcut('Shift+Esc', T('Exit Fullscreen'))}} - {{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}} - {{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}} - {{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}} - {{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}} - {{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}} - {{=shortcut('Ctrl-/ ', T('Toggle comment'))}} - {{=shortcut('Tab', T('Expand Abbreviation (html files only)'))}} - {{=shortcut('Ctrl-Space', T('Autocomplete Python Code'))}} -
-
+ diff --git a/applications/examples/controllers/appadmin.py b/applications/examples/controllers/appadmin.py index 3b78a019..c2d5836c 100644 --- a/applications/examples/controllers/appadmin.py +++ b/applications/examples/controllers/appadmin.py @@ -461,34 +461,24 @@ def ccache(): if value[0] < ram['oldest']: ram['oldest'] = value[0] ram['keys'].append((key, GetInHMS(time.time() - value[0]))) - folder = os.path.join(request.folder,'cache') - if not os.path.exists(folder): - os.mkdir(folder) - locker = open(os.path.join(folder, 'cache.lock'), 'a') - portalocker.lock(locker, portalocker.LOCK_EX) - disk_storage = shelve.open( - os.path.join(folder, 'cache.shelve')) - try: - for key, value in disk_storage.items(): - if isinstance(value, dict): - disk['hits'] = value['hit_total'] - value['misses'] - disk['misses'] = value['misses'] - try: - disk['ratio'] = disk['hits'] * 100 / value['hit_total'] - except (KeyError, ZeroDivisionError): - disk['ratio'] = 0 - else: - if hp: - disk['bytes'] += hp.iso(value[1]).size - disk['objects'] += hp.iso(value[1]).count - disk['entries'] += 1 - if value[0] < disk['oldest']: - disk['oldest'] = value[0] - disk['keys'].append((key, GetInHMS(time.time() - value[0]))) - finally: - portalocker.unlock(locker) - locker.close() - disk_storage.close() + + for key in cache.disk.storage: + value = cache.disk.storage[key] + if isinstance(value, dict): + disk['hits'] = value['hit_total'] - value['misses'] + disk['misses'] = value['misses'] + try: + disk['ratio'] = disk['hits'] * 100 / value['hit_total'] + except (KeyError, ZeroDivisionError): + disk['ratio'] = 0 + else: + if hp: + disk['bytes'] += hp.iso(value[1]).size + disk['objects'] += hp.iso(value[1]).count + disk['entries'] += 1 + if value[0] < disk['oldest']: + disk['oldest'] = value[0] + disk['keys'].append((key, GetInHMS(time.time() - value[0]))) total['entries'] = ram['entries'] + disk['entries'] total['bytes'] = ram['bytes'] + disk['bytes'] @@ -703,6 +693,6 @@ def hooks(): ul_t = UL(_class='nav nav-list', _id="a_%s" % t['slug'], _style='display:none') for op in t['method_hooks']: ul_t.append(LI (op['name'])) - ul_t.append(UL([LI(A(f['funcname'], _href=f['url']if 'url' in f else None)) for f in op['functions']])) + ul_t.append(UL([LI(A(f['funcname'], _class="editor_filelink", _href=f['url']if 'url' in f else None, **{'_data-lineno':f['lineno']-1})) for f in op['functions']])) ul_main.append(ul_t) return ul_main diff --git a/applications/welcome/controllers/appadmin.py b/applications/welcome/controllers/appadmin.py index 50263b35..c2d5836c 100644 --- a/applications/welcome/controllers/appadmin.py +++ b/applications/welcome/controllers/appadmin.py @@ -693,6 +693,6 @@ def hooks(): ul_t = UL(_class='nav nav-list', _id="a_%s" % t['slug'], _style='display:none') for op in t['method_hooks']: ul_t.append(LI (op['name'])) - ul_t.append(UL([LI(A(f['funcname'], _href=f['url']if 'url' in f else None)) for f in op['functions']])) + ul_t.append(UL([LI(A(f['funcname'], _class="editor_filelink", _href=f['url']if 'url' in f else None, **{'_data-lineno':f['lineno']-1})) for f in op['functions']])) ul_main.append(ul_t) return ul_main From 67ba09af37e0c01d12c9d9db93644e00a1a97d2b Mon Sep 17 00:00:00 2001 From: mdipierro Date: Wed, 5 Nov 2014 09:09:36 -0600 Subject: [PATCH 3/6] fixed data bug in hypermedia --- gluon/contrib/hypermedia.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gluon/contrib/hypermedia.py b/gluon/contrib/hypermedia.py index e2cdf764..50494516 100644 --- a/gluon/contrib/hypermedia.py +++ b/gluon/contrib/hypermedia.py @@ -276,6 +276,8 @@ class Collection(object): table = db[tablename] if 'json' in request.env.content_type: data = request.post_vars.data + else: + data = request.post_vars if request.get_vars or len(request.args)>1: # update # ADD validate fields and return error try: From 5449f041489aaa5afb464b0c6c602fc9780fc848 Mon Sep 17 00:00:00 2001 From: ilvalle Date: Tue, 11 Nov 2014 10:40:16 +0100 Subject: [PATCH 4/6] added support for show_if in readonly sqlform (ex: sqlform.grid view ) --- gluon/sqlhtml.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 657ef814..4bac53c4 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1204,6 +1204,13 @@ class SQLFORM(FORM): field, default, _disabled=True) else: inp = field.formatter(default) + if getattr(field, 'show_if', None): + if not isinstance(inp, DIV): + # Create a container for string represents + inp = DIV(inp, _id='%s_%s' % (field.tablename, field.name)) + trigger, cond = show_if(field.show_if) + inp['_data-show-trigger'] = trigger + inp['_data-show-if'] = cond elif field.type == 'upload': if field.widget: inp = field.widget(field, default, upload) From db9eeee1c39d7f790deda71b6fe71c8b573429dd Mon Sep 17 00:00:00 2001 From: Andy Durant Date: Thu, 13 Nov 2014 18:15:41 +0000 Subject: [PATCH 5/6] enable dropdown-toggle when user logged in --- gluon/tools.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gluon/tools.py b/gluon/tools.py index 5d44d015..481d18ed 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -1544,7 +1544,9 @@ class Auth(object): _href=item['href']))) self.bar.insert(-1, LI('', _class='divider')) if self.user_id: - self.bar = LI(Anr(prefix, user_identifier, _href='#'), + self.bar = LI(Anr(prefix, user_identifier, + _href='#',_class="dropdown-toggle", + data={'toggle':'dropdown'}), self.bar,_class='dropdown') else: self.bar = LI(Anr(T('Log In'), From 22506a6b032012c183ab9c2b2a50a10ce0992eaa Mon Sep 17 00:00:00 2001 From: niphlod Date: Sun, 16 Nov 2014 18:50:53 +0100 Subject: [PATCH 6/6] fix issue with rname and oracle. Thanks @fernando. Fixes #2013 --- gluon/dal/adapters/oracle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gluon/dal/adapters/oracle.py b/gluon/dal/adapters/oracle.py index be8dcfb8..e00b9fea 100644 --- a/gluon/dal/adapters/oracle.py +++ b/gluon/dal/adapters/oracle.py @@ -136,7 +136,7 @@ class OracleAdapter(BaseAdapter): return self.log_execute(command, args) def create_sequence_and_triggers(self, query, table, **args): - tablename = table._tablename + tablename = table._rname or table._tablename id_name = table._id.name sequence_name = table._sequence_name trigger_name = table._trigger_name