diff --git a/frappe/__init__.py b/frappe/__init__.py
index 4c40d0b3cf..deb2a0f9f4 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.2.17'
+__version__ = '7.2.18'
__title__ = "Frappe Framework"
local = Local()
diff --git a/frappe/oauth.py b/frappe/oauth.py
index 89f00c41a6..16d0a9c390 100644
--- a/frappe/oauth.py
+++ b/frappe/oauth.py
@@ -34,6 +34,7 @@ class WebApplicationServer(AuthorizationEndpoint, TokenEndpoint, ResourceEndpoin
:param kwargs: Extra parameters to pass to authorization-,
token-, resource-, and revocation-endpoint constructors.
"""
+ implicit_grant = ImplicitGrant(request_validator)
auth_grant = AuthorizationCodeGrant(request_validator)
refresh_grant = RefreshTokenGrant(request_validator)
openid_connect_auth = OpenIDConnectAuthCode(request_validator)
@@ -48,6 +49,7 @@ class WebApplicationServer(AuthorizationEndpoint, TokenEndpoint, ResourceEndpoin
'code token': openid_connect_auth,
'code id_token': openid_connect_auth,
'code token id_token': openid_connect_auth,
+ 'token': implicit_grant
},
default_token_type=bearer)
TokenEndpoint.__init__(self, default_grant_type='authorization_code',
@@ -205,7 +207,7 @@ class OAuthWebRequestValidator(RequestValidator):
otoken.user = request.user
otoken.scopes = get_url_delimiter().join(request.scopes)
otoken.access_token = token['access_token']
- otoken.refresh_token = token['refresh_token']
+ otoken.refresh_token = token.get('refresh_token')
otoken.expires_in = token['expires_in']
otoken.save(ignore_permissions=True)
frappe.db.commit()
diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js
index 583e6a7827..720b47f21f 100644
--- a/frappe/public/js/frappe/form/control.js
+++ b/frappe/public/js/frappe/form/control.js
@@ -713,17 +713,17 @@ frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({
});
frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
-
+
make_input: function() {
var me = this
var me = this;
var _super = this._super;
_super.apply(me);
import_daterangepicker(function() {
-
+
me.refresh();
me.set_daterangepicker();
-
+
});
},
set_daterangepicker: function() {
@@ -758,7 +758,7 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
'Last Financial Year': [moment(frappe.defaults.get_default("year_start_date"), "YYYY-MM-DD").subtract(1, 'year'), moment(frappe.defaults.get_default("year_end_date"), "YYYY-MM-DD").subtract(1, 'year')]
}
}
-
+
this.$input.daterangepicker(daterangepicker_options)
.on('apply.daterangepicker',function(ev,picker){
me.set_input(picker.startDate,picker.endDate)
@@ -787,7 +787,7 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
this.$input && this.$input.val("")
}
this.set_disp_area();
-
+
this.set_mandatory && this.set_mandatory(value);
},
parse: function(value) {
@@ -797,7 +797,7 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
value2 = dateutil.user_to_obj(vals[vals.length-1]);
return [value,value2];
}
-
+
},
format_for_input: function(value,value2) {
if(value && value2) {
@@ -805,7 +805,7 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
value2 = dateutil.str_to_user(value2);
return value + " - " + value2
}
-
+
return "";
},
validate: function(value, callback) {
@@ -1423,7 +1423,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
ui.item.action.apply(me);
}
- // if remember_last_selected is checked in the doctype against the field,
+ // if remember_last_selected is checked in the doctype against the field,
// then add this value
// to defaults so you do not need to set it again
// unless it is changed.
diff --git a/frappe/public/js/frappe/form/formatters.js b/frappe/public/js/frappe/form/formatters.js
index 2ab935c9a6..166fb6ae39 100644
--- a/frappe/public/js/frappe/form/formatters.js
+++ b/frappe/public/js/frappe/form/formatters.js
@@ -59,7 +59,7 @@ frappe.form.formatters = {
if(value) {
return '';
} else {
- return '';
+ return '';
}
},
Link: function(value, docfield, options, doc) {
diff --git a/frappe/utils/data.py b/frappe/utils/data.py
index ca3c9e3aad..405e1cadf6 100644
--- a/frappe/utils/data.py
+++ b/frappe/utils/data.py
@@ -6,7 +6,7 @@ from __future__ import unicode_literals
# IMPORTANT: only import safe functions as this module will be included in jinja environment
import frappe
import operator
-import re, urllib, datetime, math
+import re, urllib, datetime, math, time
import babel.dates
from babel.core import UnknownLocaleError
from dateutil import parser
@@ -117,6 +117,9 @@ def now_datetime():
dt = convert_utc_to_user_timezone(datetime.datetime.utcnow())
return dt.replace(tzinfo=None)
+def get_timestamp(date):
+ return time.mktime(getdate(date).timetuple())
+
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))