From d1f03ce873011dd7e7b11a0110eccd07be440194 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 2 Aug 2016 10:51:54 +0530 Subject: [PATCH 01/13] minor fixes --- frappe/public/js/frappe/form/grid.js | 86 ++++++++++++++-------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 52946250ec..36cdcd1abd 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -820,50 +820,52 @@ frappe.ui.form.GridRow = Class.extend({ set_arrow_keys: function(field) { var me = this; - field.$input.on('keydown', function(e) { - var values = me.frm.doc[me.grid.df.fieldname]; - var fieldname = $(this).attr('data-fieldname'); - // TAB - if(e.which==TAB) { - // last column - if(me.grid.wrapper.find('input:enabled:last').get(0)===this) { - setTimeout(function() { - if(me.doc.idx === values.length) { - // last row - me.grid.add_new_row(null, null, true); - me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row(); - me.grid.set_focus_on_row(); - } else { - me.grid.grid_rows[me.doc.idx].toggle_editable_row(); - me.grid.set_focus_on_row(me.doc.idx+1); - } - }, 500); + if(field.$input) { + field.$input.on('keydown', function(e) { + var values = me.frm.doc[me.grid.df.fieldname]; + var fieldname = $(this).attr('data-fieldname'); + // TAB + if(e.which==TAB) { + // last column + if(me.grid.wrapper.find('input:enabled:last').get(0)===this) { + setTimeout(function() { + if(me.doc.idx === values.length) { + // last row + me.grid.add_new_row(null, null, true); + me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row(); + me.grid.set_focus_on_row(); + } else { + me.grid.grid_rows[me.doc.idx].toggle_editable_row(); + me.grid.set_focus_on_row(me.doc.idx+1); + } + }, 500); + } + } else if(e.which==UP_ARROW) { + if(me.doc.idx > 1) { + var prev = me.grid.grid_rows[me.doc.idx-2]; + prev.toggle_editable_row(); + setTimeout(function() { + var input = prev.columns[fieldname].field.$input; + if(input) { + input.focus(); + } + }, 400) + } + } else if(e.which==DOWN_ARROW) { + if(me.doc.idx < values.length) { + var next = me.grid.grid_rows[me.doc.idx]; + next.toggle_editable_row(); + setTimeout(function() { + var input = next.columns[fieldname].field.$input; + if(input) { + input.focus(); + } + }, 400) + } } - } else if(e.which==UP_ARROW) { - if(me.doc.idx > 1) { - var prev = me.grid.grid_rows[me.doc.idx-2]; - prev.toggle_editable_row(); - setTimeout(function() { - var input = prev.columns[fieldname].field.$input; - if(input) { - input.focus(); - } - }, 400) - } - } else if(e.which==DOWN_ARROW) { - if(me.doc.idx < values.length) { - var next = me.grid.grid_rows[me.doc.idx]; - next.toggle_editable_row(); - setTimeout(function() { - var input = next.columns[fieldname].field.$input; - if(input) { - input.focus(); - } - }, 400) - } - } - }); + }); + } }, get_open_form: function() { From 2c9df678a08539ab27d75b5ba2d8762c184dccb9 Mon Sep 17 00:00:00 2001 From: RobertSchouten Date: Mon, 8 Aug 2016 14:54:24 +0800 Subject: [PATCH 02/13] minifiying doctype json's sick and tired of a change to the doctype meaning one small change to a doctype adds all the fields to the json strips out the values that doesnt contain value's --- frappe/modules/export_file.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/modules/export_file.py b/frappe/modules/export_file.py index 2b7a6cab3b..154520fb9e 100644 --- a/frappe/modules/export_file.py +++ b/frappe/modules/export_file.py @@ -30,6 +30,9 @@ def write_document_file(doc, record_module=None, create_init=None): for fieldname in frappe.model.default_fields: if fieldname in d: del d[fieldname] + for fieldname in d.keys(): + if d[fieldname] == 0 or d[fieldname] == "": + del d[fieldname] module = record_module or get_module_name(doc) if create_init is None: From fd6f9bab7d14b67022c3504a8a2457e43baca3c4 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 8 Aug 2016 18:11:34 +0530 Subject: [PATCH 03/13] [ux improvement] Sort modules shown in user doctype --- frappe/core/doctype/user/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 48763253eb..cec0909907 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -36,7 +36,7 @@ class User(Document): def onload(self): self.set_onload('all_modules', [m.module_name for m in frappe.db.get_all('Desktop Icon', - fields=['module_name'], filters={'standard': 1})]) + fields=['module_name'], filters={'standard': 1}, order_by="module_name")]) def validate(self): self.check_demo() From 512fc3a5c2830e6571b1cdcd28845c78c0781331 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 9 Aug 2016 10:34:38 +0530 Subject: [PATCH 04/13] [feature] [api] frappe.client.insert_many --- frappe/client.py | 23 +++++++++++++ .../desk/doctype/bulk_update/bulk_update.js | 2 ++ .../doctype/email_account/email_account.js | 17 +++++----- frappe/frappeclient.py | 6 ++++ frappe/tests/test_api.py | 33 +++++++++++++++++++ requirements.txt | 1 + 6 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 frappe/tests/test_api.py diff --git a/frappe/client.py b/frappe/client.py index 142aeb2d8a..037c78edfa 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -83,6 +83,29 @@ def insert(doc=None): doc = frappe.get_doc(doc).insert() return doc.as_dict() +@frappe.whitelist() +def insert_many(docs=None): + if isinstance(docs, basestring): + docs = json.loads(docs) + + out = [] + + if len(docs) > 200: + frappe.throw(_('Only 200 inserts allowed in one request')) + + for doc in docs: + if doc.get("parent") and doc.get("parenttype"): + # inserting a child record + parent = frappe.get_doc(doc.get("parenttype"), doc.get("parent")) + parent.append(doc.get("parentfield"), doc) + parent.save() + out.append(parent.name) + else: + doc = frappe.get_doc(doc).insert() + out.append(doc.name) + + return out + @frappe.whitelist() def save(doc): if isinstance(doc, basestring): diff --git a/frappe/desk/doctype/bulk_update/bulk_update.js b/frappe/desk/doctype/bulk_update/bulk_update.js index d6db24036b..8f39ab27a3 100644 --- a/frappe/desk/doctype/bulk_update/bulk_update.js +++ b/frappe/desk/doctype/bulk_update/bulk_update.js @@ -21,6 +21,8 @@ frappe.ui.form.on('Bulk Update', { }, document_type: function(frm) { // set field options + if(!frm.doc.document_type) return; + frappe.model.with_doctype(frm.doc.document_type, function() { var options = $.map(frappe.get_meta(frm.doc.document_type).fields, function(d) { diff --git a/frappe/email/doctype/email_account/email_account.js b/frappe/email/doctype/email_account/email_account.js index 681830632a..f379ca1499 100644 --- a/frappe/email/doctype/email_account/email_account.js +++ b/frappe/email/doctype/email_account/email_account.js @@ -1,5 +1,5 @@ -email_defaults = { - "Gmail": { +frappe.email_defaults = { + "GMail": { "email_server": "pop.gmail.com", "use_ssl": 1, "enable_outgoing": 1, @@ -33,8 +33,8 @@ email_defaults = { }, }; -email_defaults_imap = { - "Gmail": { +frappe.email_defaults_imap = { + "GMail": { "email_server": "imap.gmail.com" }, "Outlook.com": { @@ -51,11 +51,12 @@ email_defaults_imap = { frappe.ui.form.on("Email Account", { service: function(frm) { - $.each(email_defaults[frm.doc.service], function(key, value) { + console.log(frm.doc.service, frappe.email_defaults[frm.doc.service]) + $.each(frappe.email_defaults[frm.doc.service], function(key, value) { frm.set_value(key, value); }) if (frm.doc.use_imap) { - $.each(email_defaults_imap[frm.doc.service], function(key, value) { + $.each(frappe.email_defaults_imap[frm.doc.service], function(key, value) { frm.set_value(key, value); }); } @@ -63,12 +64,12 @@ frappe.ui.form.on("Email Account", { }, use_imap: function(frm) { if (frm.doc.use_imap) { - $.each(email_defaults_imap[frm.doc.service], function(key, value) { + $.each(frappe.email_defaults_imap[frm.doc.service], function(key, value) { frm.set_value(key, value); }); } else{ - $.each(email_defaults[frm.doc.service], function(key, value) { + $.each(frappe.email_defaults[frm.doc.service], function(key, value) { frm.set_value(key, value); }); } diff --git a/frappe/frappeclient.py b/frappe/frappeclient.py index 289beae127..855564e8fc 100644 --- a/frappe/frappeclient.py +++ b/frappe/frappeclient.py @@ -58,6 +58,12 @@ class FrappeClient(object): data={"data":frappe.as_json(doc)}, verify=self.verify) return self.post_process(res) + def insert_many(self, docs): + return self.post_request({ + "cmd": "frappe.client.insert_many", + "docs": frappe.as_json(docs) + }) + def update(self, doc): url = self.url + "/api/resource/" + doc.get("doctype") + "/" + doc.get("name") res = self.session.put(url, data={"data":frappe.as_json(doc)}, verify=self.verify) diff --git a/frappe/tests/test_api.py b/frappe/tests/test_api.py new file mode 100644 index 0000000000..fb0b0a4e1a --- /dev/null +++ b/frappe/tests/test_api.py @@ -0,0 +1,33 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt +from __future__ import unicode_literals + +import unittest, frappe +from frappe.utils import get_url + +class TestAPI(unittest.TestCase): + def test_insert_many(self): + from frappe.frappeclient import FrappeClient + + frappe.db.sql('delete from `tabToDo` where description like "Test API%"') + frappe.db.commit() + + host = get_url() + + if not host.startswith('http'): + host = 'http://' + host + + if not host.endswith(':8000'): + host = host + ':8000' + + server = FrappeClient(host, "Administrator", "admin", verify=False) + + server.insert_many([ + {"doctype": "ToDo", "description": "Test API 1"}, + {"doctype": "ToDo", "description": "Test API 2"}, + {"doctype": "ToDo", "description": "Test API 3"}, + ]) + + self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 1'})) + self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 2'})) + self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 3'})) diff --git a/requirements.txt b/requirements.txt index 53f2e5d707..fb27369396 100644 --- a/requirements.txt +++ b/requirements.txt @@ -35,3 +35,4 @@ rq schedule cryptography zxcvbn +psutil From e297dcd9c114455761c6db54578cb46f19b92fd3 Mon Sep 17 00:00:00 2001 From: sbkolate Date: Tue, 9 Aug 2016 11:33:03 +0530 Subject: [PATCH 05/13] Updated limits Updated limits from following link https://frappe.github.io/frappe/user/en/bench/guides/settings-limits --- frappe/data/sample_site_config.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frappe/data/sample_site_config.json b/frappe/data/sample_site_config.json index 21f7f5910c..1bf3914039 100644 --- a/frappe/data/sample_site_config.json +++ b/frappe/data/sample_site_config.json @@ -2,6 +2,13 @@ "db_name": "testdb", "db_password": "password", "mute_emails": true, + + "limits": { + "emails": 1500, + "space": 0.157, + "expiry": "2016-07-25", + "users": 1 + } "developer_mode": 1, "auto_cache_clear": true, From d8470e47a712ae7f77aff2615cbb263a3cd0d6bd Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 9 Aug 2016 11:43:10 +0530 Subject: [PATCH 06/13] [UI][#1939] scale down the image --- frappe/public/css/list.css | 1 + frappe/public/css/sidebar.css | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/frappe/public/css/list.css b/frappe/public/css/list.css index 6581f7c640..d65c2d05fd 100644 --- a/frappe/public/css/list.css +++ b/frappe/public/css/list.css @@ -238,6 +238,7 @@ table.field-info tr td { border: 0px; } .image-field { + background-size: 100% 100% !important; position: relative; } .image-field:hover .field-info { diff --git a/frappe/public/css/sidebar.css b/frappe/public/css/sidebar.css index 98d99a773b..750a049dc2 100644 --- a/frappe/public/css/sidebar.css +++ b/frappe/public/css/sidebar.css @@ -305,3 +305,7 @@ a.close:focus { .layout-side-section .module-sidebar-nav { margin-top: 15px; } + +.sidebar-image { + background-size: 100% 100% !important; +} \ No newline at end of file From 6c787bf0792f56d3ff498bf0d86995fe71899485 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Tue, 9 Aug 2016 12:11:51 +0530 Subject: [PATCH 07/13] [minor][UI] updated less --- frappe/public/css/sidebar.css | 6 +----- frappe/public/less/list.less | 1 + frappe/public/less/sidebar.less | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/frappe/public/css/sidebar.css b/frappe/public/css/sidebar.css index 750a049dc2..0d6f6185a7 100644 --- a/frappe/public/css/sidebar.css +++ b/frappe/public/css/sidebar.css @@ -134,7 +134,7 @@ body[data-route^="Module"] .main-menu .form-sidebar { height: 0; padding-bottom: 100%; border-radius: 6px; - background-size: cover; + background-size: 100% 100%; background-repeat: no-repeat; background-position: center center; } @@ -305,7 +305,3 @@ a.close:focus { .layout-side-section .module-sidebar-nav { margin-top: 15px; } - -.sidebar-image { - background-size: 100% 100% !important; -} \ No newline at end of file diff --git a/frappe/public/less/list.less b/frappe/public/less/list.less index 965fa186c3..e3a3beeeb4 100644 --- a/frappe/public/less/list.less +++ b/frappe/public/less/list.less @@ -301,6 +301,7 @@ table.field-info tr td { } .image-field { + background-size: 100% 100% !important; position: relative; } diff --git a/frappe/public/less/sidebar.less b/frappe/public/less/sidebar.less index 655b2e3604..ecf6882e45 100644 --- a/frappe/public/less/sidebar.less +++ b/frappe/public/less/sidebar.less @@ -181,7 +181,7 @@ body[data-route^="Module"] .main-menu { height: 0; padding-bottom: 100%; border-radius: 6px; - background-size: cover; + background-size: 100% 100%; background-repeat: no-repeat; background-position: center center; } From 7f571798d99da34525c8d4e0f665ec6410ebbf48 Mon Sep 17 00:00:00 2001 From: Yaroslav Hreshko Date: Tue, 9 Aug 2016 13:38:11 +0300 Subject: [PATCH 08/13] Fix issue: There is an error appear "ValueError: No JSON object could be decoded" when data is sent from SAP to ERPNext in http request body. Signed-off-by: Yaroslav --- frappe/app.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frappe/app.py b/frappe/app.py index 3218906938..ffc52bd0e7 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -55,6 +55,8 @@ def application(request): response = frappe.handler.handle() elif frappe.request.path.startswith("/api/"): + if frappe.local.form_dict.data is None: + frappe.local.form_dict.data = request.get_data() response = frappe.api.handle() elif frappe.request.path.startswith('/backups'): From fca0cf5ddf2b3379f6df2d85a71295dfbe4f96b1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 9 Aug 2016 16:42:22 +0530 Subject: [PATCH 09/13] [minor] allow button in list view for grid, and other minor fixes --- frappe/core/doctype/doctype/doctype.py | 8 ++++++-- frappe/public/css/form_grid.css | 13 ++++++++++++- frappe/public/js/frappe/form/grid.js | 9 +++++++-- frappe/public/less/form_grid.less | 16 +++++++++++++++- frappe/utils/data.py | 4 ++++ 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 12881163db..cccd603fcf 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals -import re +import re, copy import MySQLdb import frappe from frappe import _ @@ -311,7 +311,7 @@ def validate_fields(meta): frappe.throw(_("Max width for type Currency is 100px in row {0}").format(d.idx)) def check_in_list_view(d): - if d.in_list_view and (d.fieldtype in no_value_fields): + if d.in_list_view and (d.fieldtype in not_allowed_in_list_view): frappe.throw(_("'In List View' not allowed for type {0} in row {1}").format(d.fieldtype, d.idx)) def check_dynamic_link_options(d): @@ -441,6 +441,10 @@ def validate_fields(meta): frappe.throw(_("Timeline field must be a Link or Dynamic Link"), InvalidFieldNameError) fields = meta.get("fields") + not_allowed_in_list_view = list(copy.copy(no_value_fields)) + if meta.istable: + not_allowed_in_list_view.remove('Button') + for d in fields: if not d.permlevel: d.permlevel = 0 if not d.fieldname: diff --git a/frappe/public/css/form_grid.css b/frappe/public/css/form_grid.css index 9fe46620be..57a4319ca8 100644 --- a/frappe/public/css/form_grid.css +++ b/frappe/public/css/form_grid.css @@ -104,8 +104,19 @@ .grid-body .editable-row input[data-fieldtype="Currency"] { text-align: right; } +.grid-body .grid-static-col[data-fieldtype="Button"] .field-area { + margin-top: 5px; + margin-left: 5px; +} +.grid-body .grid-static-col[data-fieldtype="Button"] .field-area button { + height: 27px; +} .grid-body .grid-static-col[data-fieldtype="Code"] .static-area { - margin-top: -10px; + margin-top: -5px; +} +.grid-body .grid-static-col[data-fieldtype="Code"] .static-area pre { + background: none; + border: none; } @media (max-width: 767px) { .grid-body .btn-open-row { diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 52946250ec..55f3ab594b 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -291,12 +291,17 @@ frappe.ui.form.Grid = Class.extend({ this.frm.script_manager.trigger(this.df.fieldname + "_add", d.doctype, d.name); this.refresh(); - if(show && !this.allow_on_grid_editing()) { + if(show) { if(idx) { + // always open inserted rows this.wrapper.find("[data-idx='"+idx+"']").data("grid_row") .toggle_view(true, callback); } else { - this.wrapper.find(".grid-row:last").data("grid_row").toggle_view(true, callback); + if(!this.allow_on_grid_editing()) { + // open last row only if on-grid-editing is disabled + this.wrapper.find(".grid-row:last").data("grid_row") + .toggle_view(true, callback); + } } } diff --git a/frappe/public/less/form_grid.less b/frappe/public/less/form_grid.less index 2a8d76c313..ea09b57309 100644 --- a/frappe/public/less/form_grid.less +++ b/frappe/public/less/form_grid.less @@ -136,8 +136,22 @@ } } + .grid-static-col[data-fieldtype="Button"] .field-area { + margin-top: 5px; + margin-left: 5px; + + button { + height: 27px; + } + } + .grid-static-col[data-fieldtype="Code"] .static-area { - margin-top: -10px; + margin-top: -5px; + + pre { + background: none; + border: none; + } } } diff --git a/frappe/utils/data.py b/frappe/utils/data.py index ca6a689584..3d2cc05dea 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -114,6 +114,10 @@ def now_datetime(): dt = convert_utc_to_user_timezone(datetime.datetime.utcnow()) return dt.replace(tzinfo=None) +def get_eta(from_time, percent_complete): + diff = time_diff(now_datetime(), from_time).total_seconds() + return str(datetime.timedelta(seconds=(100 - percent_complete) / percent_complete * diff)) + def _get_time_zone(): return frappe.db.get_system_setting('time_zone') or 'Asia/Kolkata' From d461f5cd27364960238279d54200a722b0da6394 Mon Sep 17 00:00:00 2001 From: Valmik Jangla Date: Tue, 9 Aug 2016 18:31:39 +0530 Subject: [PATCH 10/13] [fix] gzip path --- frappe/installer.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/frappe/installer.py b/frappe/installer.py index 68bffabfb4..dd1a329c23 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -346,13 +346,11 @@ def check_if_ready_for_barracuda(): def extract_sql_gzip(sql_gz_path): try: - success = subprocess.check_output(['gzip', '-d', '-v', '-f', sql_gz_path]) + subprocess.check_call(['gzip', '-d', '-v', '-f', sql_gz_path]) except: raise - path = sql_gz_path[:-3] if success else None - - return path + return sql_gz_path[:-3] def extract_tar_files(site_name, file_path, folder_name): # Need to do frappe.init to maintain the site locals From 7c7291b370c357696f3ea61c5dc9cbc4a3afe99b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 10 Aug 2016 12:47:21 +0530 Subject: [PATCH 11/13] [fix] tags api, #1956 --- frappe/desk/tags.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/frappe/desk/tags.py b/frappe/desk/tags.py index ea94eef7c5..0f9cb3d3cb 100644 --- a/frappe/desk/tags.py +++ b/frappe/desk/tags.py @@ -35,23 +35,15 @@ def check_user_tags(dt): DocTags(dt).setup() @frappe.whitelist() -def add_tag(): +def add_tag(tag, dt, dn, color=None): "adds a new tag to a record, and creates the Tag master" - - f = frappe.local.form_dict - tag, color = f.get('tag'), f.get('color') - dt, dn = f.get('dt'), f.get('dn') - DocTags(dt).add(dn, tag) return tag @frappe.whitelist() -def remove_tag(): +def remove_tag(tag, dt, dn): "removes tag from the record" - f = frappe.local.form_dict - tag, dt, dn = f.get('tag'), f.get('dt'), f.get('dn') - DocTags(dt).remove(dn, tag) From 3b78110528ef30b5008916d9e309e1398ab7b8d9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 10 Aug 2016 13:04:40 +0530 Subject: [PATCH 12/13] [fix] [tests] --- frappe/tests/test_db.py | 2 +- frappe/tests/test_scheduler.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/frappe/tests/test_db.py b/frappe/tests/test_db.py index c0d34796a0..e1cd32c15d 100644 --- a/frappe/tests/test_db.py +++ b/frappe/tests/test_db.py @@ -11,7 +11,7 @@ class TestDB(unittest.TestCase): def test_get_value(self): self.assertEquals(frappe.db.get_value("User", {"name": ["=", "Administrator"]}), "Administrator") self.assertEquals(frappe.db.get_value("User", {"name": ["like", "Admin%"]}), "Administrator") - self.assertEquals(frappe.db.get_value("User", {"name": ["!=", "Guest"]}), "Administrator") + self.assertNotEquals(frappe.db.get_value("User", {"name": ["!=", "Guest"]}), "Guest") self.assertEquals(frappe.db.get_value("User", {"name": ["<", "B"]}), "Administrator") self.assertEquals(frappe.db.get_value("User", {"name": ["<=", "Administrator"]}), "Administrator") diff --git a/frappe/tests/test_scheduler.py b/frappe/tests/test_scheduler.py index 55073d3f2f..e1f9915d6e 100644 --- a/frappe/tests/test_scheduler.py +++ b/frappe/tests/test_scheduler.py @@ -17,7 +17,6 @@ def test_timeout(): time.sleep(100) class TestScheduler(TestCase): - def setUp(self): frappe.db.set_global('enabled_scheduler_events', "") @@ -63,10 +62,8 @@ class TestScheduler(TestCase): def test_restrict_scheduler_events(self): frappe.set_user("Administrator") - user = frappe.get_doc("User", "Administrator") dormant_date = add_days(today(), -5) - user.last_active = dormant_date - user.save() + frappe.db.sql('update tabUser set last_active=%s', dormant_date) restrict_scheduler_events_if_dormant() frappe.local.conf = _dict(frappe.get_site_config()) From 42aba9cf82b1cfaaac7aed3e7581d4de8b43ccb1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 10 Aug 2016 14:58:01 +0600 Subject: [PATCH 13/13] bumped to version 7.0.19 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index f611ce705d..5eafb4ddb1 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = "7.0.18" +__version__ = "7.0.19" local = Local()