Merge remote-tracking branch 'upstream/website-wip' into wsgi
Conflicts: webnotes/handler.py
This commit is contained in:
commit
126198621b
16 changed files with 32 additions and 233 deletions
|
|
@ -100,11 +100,11 @@ class DocType:
|
|||
webnotes.conn.set(self.doc, 'new_password', '')
|
||||
|
||||
def reset_password(self):
|
||||
from webnotes.utils import random_string, get_request_site_address
|
||||
from webnotes.utils import random_string, get_url
|
||||
|
||||
key = random_string(32)
|
||||
webnotes.conn.set_value("Profile", self.doc.name, "reset_password_key", key)
|
||||
self.password_reset_mail(get_request_site_address() + "/update-password?key=" + key)
|
||||
self.password_reset_mail(get_url("/update-password?key=" + key))
|
||||
|
||||
def get_other_system_managers(self):
|
||||
return webnotes.conn.sql("""select distinct parent from tabUserRole user_role
|
||||
|
|
@ -179,7 +179,7 @@ Thank you,<br>
|
|||
|
||||
from webnotes.utils.email_lib import sendmail_md
|
||||
from webnotes.profile import get_user_fullname
|
||||
from webnotes.utils import get_request_site_address
|
||||
from webnotes.utils import get_url
|
||||
|
||||
full_name = get_user_fullname(webnotes.session['user'])
|
||||
if full_name == "Guest":
|
||||
|
|
@ -189,7 +189,7 @@ Thank you,<br>
|
|||
'first_name': self.doc.first_name or self.doc.last_name or "user",
|
||||
'user': self.doc.name,
|
||||
'company': webnotes.conn.get_default('company') or webnotes.get_config().get("app_name"),
|
||||
'login_url': get_request_site_address(),
|
||||
'login_url': get_url(),
|
||||
'product': webnotes.get_config().get("app_name"),
|
||||
'user_fullname': full_name
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,8 +80,7 @@ def delete(arg=None):
|
|||
webnotes.form_dict['name']);
|
||||
|
||||
def notify(arg=None):
|
||||
from webnotes.utils import cstr, get_fullname
|
||||
from startup import get_url
|
||||
from webnotes.utils import cstr, get_fullname, get_url
|
||||
|
||||
fn = get_fullname(webnotes.user.name) or webnotes.user.name
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ $.extend(wn.meta, {
|
|||
var currency = wn.boot.sysdefaults.currency;
|
||||
if(!doc && cur_frm)
|
||||
doc = cur_frm.doc;
|
||||
|
||||
|
||||
if(df && df.options) {
|
||||
if(doc && df.options.indexOf(":")!=-1) {
|
||||
var options = df.options.split(":");
|
||||
|
|
@ -127,7 +127,9 @@ $.extend(wn.meta, {
|
|||
if(!docname && cur_frm) {
|
||||
docname = cur_frm.doc[options[1]];
|
||||
}
|
||||
currency = wn.model.get_value(options[0], docname, options[2]) || currency;
|
||||
currency = wn.model.get_value(options[0], docname, options[2]) ||
|
||||
wn.model.get_value(":" + options[0], docname, options[2]) ||
|
||||
currency;
|
||||
}
|
||||
} else if(doc && doc[df.options]) {
|
||||
currency = doc[df.options];
|
||||
|
|
|
|||
|
|
@ -188,9 +188,9 @@ wn.views.QueryReport = Class.extend({
|
|||
if(c.indexOf(":")!=-1) {
|
||||
var opts = c.split(":");
|
||||
var df = {
|
||||
label: opts.slice(0, opts.length - 2).join(":"),
|
||||
fieldtype: opts[opts.length - 2],
|
||||
width: opts[opts.length - 1]
|
||||
label: opts.length<=2 ? opts[0] : opts.slice(0, opts.length - 2).join(":"),
|
||||
fieldtype: opts.length<=2 ? opts[1] : opts[opts.length - 2],
|
||||
width: opts.length<=2 ? opts[2] : opts[opts.length - 1]
|
||||
}
|
||||
|
||||
if(!df.fieldtype)
|
||||
|
|
|
|||
|
|
@ -302,9 +302,8 @@ def has_permission(doctype, ptype="read", refdoc=None):
|
|||
keys = p.match.split(":")
|
||||
else:
|
||||
keys = [p.match, p.match]
|
||||
|
||||
if refdoc.fields.get(keys[0],"[No Value]") \
|
||||
in get_user_default_as_list(keys[1]):
|
||||
|
||||
if refdoc.fields.get(keys[0],"[No Value]") in get_user_default_as_list(keys[1]):
|
||||
return True
|
||||
else:
|
||||
match_failed[keys[0]] = refdoc.fields.get(keys[0],"[No Value]")
|
||||
|
|
@ -320,6 +319,7 @@ def has_permission(doctype, ptype="read", refdoc=None):
|
|||
msg += "\n" + (doctypelist.get_field(key) and doctypelist.get_label(key) or key) \
|
||||
+ " = " + (match_failed[key] or "None")
|
||||
msgprint(msg)
|
||||
|
||||
return False
|
||||
else:
|
||||
return perms and True or False
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ def web_logout():
|
|||
webnotes.repsond_as_web_page("Logged Out", """<p>You have been logged out.</p>
|
||||
<p><a href='index'>Back to Home</a></p>""")
|
||||
webnotes.local.login_manager.logout()
|
||||
webnotes.commit()
|
||||
|
||||
@webnotes.whitelist()
|
||||
def uploadfile():
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@ def get_dependencies(doctype):
|
|||
for doctype_name in test_module.test_ignore:
|
||||
if doctype_name in options_list:
|
||||
options_list.remove(doctype_name)
|
||||
|
||||
return options_list
|
||||
|
||||
def make_test_records_for_doctype(doctype, verbose=0):
|
||||
|
|
|
|||
|
|
@ -816,13 +816,19 @@ def get_base_path():
|
|||
import os
|
||||
return os.path.dirname(os.path.abspath(conf.__file__))
|
||||
|
||||
def get_url():
|
||||
import startup
|
||||
if hasattr(startup, "get_url"):
|
||||
url = startup.get_url()
|
||||
else:
|
||||
url = get_request_site_address()
|
||||
|
||||
def get_url(uri=None):
|
||||
url = get_request_site_address()
|
||||
if not url or "localhost" in url:
|
||||
subdomain = webnotes.conn.get_value("Website Settings", "Website Settings",
|
||||
"subdomain")
|
||||
if subdomain:
|
||||
if "http" not in subdomain:
|
||||
url = "http://" + subdomain
|
||||
|
||||
if uri:
|
||||
import urllib
|
||||
url = urllib.basejoin(url, uri)
|
||||
|
||||
return url
|
||||
|
||||
def get_url_to_form(doctype, name, base_url=None, label=None):
|
||||
|
|
|
|||
|
|
@ -33,12 +33,12 @@ def send(recipients=None, sender=None, doctype='Profile', email_field='email',
|
|||
raise_exception=BulkLimitCrossedError)
|
||||
|
||||
def update_message(doc):
|
||||
from webnotes.utils import get_request_site_address
|
||||
from webnotes.utils import get_url
|
||||
import urllib
|
||||
updated = message + """<div style="padding: 7px; border-top: 1px solid #aaa;
|
||||
margin-top: 17px;">
|
||||
<small><a href="%s/server.py?%s">
|
||||
Unsubscribe</a> from this list.</small></div>""" % (get_request_site_address(),
|
||||
Unsubscribe</a> from this list.</small></div>""" % (get_url(),
|
||||
urllib.urlencode({
|
||||
"cmd": "webnotes.utils.email_lib.bulk.unsubscribe",
|
||||
"email": doc.get(email_field),
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ def log(method):
|
|||
|
||||
def report_errors():
|
||||
from webnotes.utils.email_lib import sendmail_to_system_managers
|
||||
from startup import get_url
|
||||
from webnotes.utils import get_url
|
||||
|
||||
errors = [("""<p>Time: %(modified)s</p>
|
||||
<pre><code>%(error)s</code></pre>""" % d) for d in webnotes.conn.sql("""select modified, error
|
||||
|
|
|
|||
|
|
@ -1,146 +0,0 @@
|
|||
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
||||
# MIT License. See license.txt
|
||||
|
||||
# Simple Web service client for wnframework (ERPNext)
|
||||
# License MIT
|
||||
#
|
||||
# Uses: requests (http://docs.python-requests.org/en/v1.0.0/)
|
||||
#
|
||||
# Usage:
|
||||
# 1. set the server settings, user, password in this file
|
||||
# 2. user the "insert", "update", "delete" methods to push data
|
||||
#
|
||||
# Help:
|
||||
# Data is sent as JSON objects called "doclist". A doclist is a list of records that represent one transaction (document)
|
||||
# in ERPNext, both parent (header) and child records.
|
||||
#
|
||||
# For what fields to set in the doclist, please check the table columns of the table you want to update
|
||||
|
||||
import requests
|
||||
import unittest
|
||||
import json
|
||||
|
||||
server = "http://localhost/webnotes/erpnext_master/public/server.py"
|
||||
user = "Administrator"
|
||||
password = "test"
|
||||
sid = None
|
||||
debug = True
|
||||
|
||||
class AuthError(Exception): pass
|
||||
|
||||
def login(usr=None, pwd=None):
|
||||
response = requests.get(server, params = {
|
||||
"cmd": "login",
|
||||
"usr": usr or user,
|
||||
"pwd": pwd or password
|
||||
})
|
||||
|
||||
if response.json.get("message")=="Logged In":
|
||||
global sid
|
||||
sid = response.cookies["sid"]
|
||||
return response
|
||||
else:
|
||||
raise AuthError
|
||||
|
||||
def insert(doclist):
|
||||
return post_request({
|
||||
"cmd": "webnotes.client.insert",
|
||||
"doclist": json.dumps(doclist)
|
||||
})
|
||||
|
||||
def update(doclist):
|
||||
return post_request({
|
||||
"cmd": "webnotes.client.save",
|
||||
"doclist": json.dumps(doclist)
|
||||
})
|
||||
|
||||
def delete(doctype, name):
|
||||
return post_request({
|
||||
"cmd": "webnotes.model.delete_doc",
|
||||
"doctype": doctype,
|
||||
"name": name
|
||||
})
|
||||
|
||||
def submit(doclist):
|
||||
return post_request({
|
||||
"cmd": "webnotes.client.submit",
|
||||
"doclist": json.dumps(doclist)
|
||||
})
|
||||
|
||||
|
||||
def cancel(doctype, name):
|
||||
return post_request({
|
||||
"cmd": "webnotes.client.cancel",
|
||||
"doctype": doctype,
|
||||
"name": name
|
||||
})
|
||||
|
||||
def get_doc(doctype, name=None, filters=None):
|
||||
params = {
|
||||
"cmd": "webnotes.client.get",
|
||||
"doctype": doctype,
|
||||
}
|
||||
if name:
|
||||
params["name"] = name
|
||||
if filters:
|
||||
params["filters"] = json.dumps(filters)
|
||||
ret = get_request(params)
|
||||
return ret
|
||||
|
||||
def get_request(params):
|
||||
if not sid: login()
|
||||
response = requests.get(server, params = params, cookies = {"sid": sid})
|
||||
return post_process(response)
|
||||
|
||||
def post_request(params):
|
||||
if not sid: login()
|
||||
response = requests.post(server, data = params, cookies = {"sid": sid})
|
||||
return post_process(response)
|
||||
|
||||
def post_process(response):
|
||||
if debug and response.json and ("exc" in response.json) and response.json["exc"]:
|
||||
print response.json["exc"]
|
||||
|
||||
return response
|
||||
|
||||
class TestAPI(unittest.TestCase):
|
||||
def test_login(self):
|
||||
global sid
|
||||
response = login()
|
||||
self.assertTrue(response.json.get("message")=="Logged In")
|
||||
self.assertTrue(sid)
|
||||
self.assertRaises(AuthError, login, {"pwd":"--"})
|
||||
sid = None
|
||||
|
||||
def test_all(self):
|
||||
login()
|
||||
delete("Customer", "Import Test Customer")
|
||||
response = insert([{
|
||||
"doctype":"Customer",
|
||||
"customer_name": "Import Test Customer",
|
||||
"customer_type": "Company",
|
||||
"customer_group": "Standard Group",
|
||||
"territory": "Default",
|
||||
"customer_details": "some unique info",
|
||||
"company": "Alpha"
|
||||
}])
|
||||
self.assertTrue(response.json["message"][0]["name"]=="Import Test Customer")
|
||||
|
||||
# get
|
||||
response = get_doc("Customer", "Import Test Customer")
|
||||
self.check_get(response)
|
||||
|
||||
response = get_doc("Customer", filters={"customer_details":"some unique info"})
|
||||
self.check_get(response)
|
||||
|
||||
# delete
|
||||
self.assertTrue(delete("Customer", "Import Test Customer").json["message"]=="okay")
|
||||
|
||||
def check_get(self, response):
|
||||
doclist = response.json["message"]
|
||||
self.assertTrue(len(doclist)==1)
|
||||
self.assertTrue(doclist[0]["doctype"]=="Customer")
|
||||
self.assertTrue(doclist[0]["customer_group"]=="Standard Group")
|
||||
|
||||
if __name__=="__main__":
|
||||
unittest.main()
|
||||
|
|
@ -5,16 +5,3 @@ install_docs = [
|
|||
]
|
||||
|
||||
import webnotes
|
||||
|
||||
|
||||
def get_site_address():
|
||||
from webnotes.utils import get_request_site_address
|
||||
url = get_request_site_address()
|
||||
|
||||
if not url or url=='http://localhost':
|
||||
new_url = webnotes.conn.get_value('Website Settings', 'Website Settings',
|
||||
'subdomain')
|
||||
if new_url:
|
||||
url = "http://" + new_url
|
||||
|
||||
return url
|
||||
|
|
@ -1 +0,0 @@
|
|||
Alternate grouping of parent Item (for website, so an Item can be listed under multiple groups).
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
|
||||
# MIT License. See license.txt
|
||||
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
|
||||
class DocType:
|
||||
def __init__(self, d, dl):
|
||||
self.doc, self.doclist = d, dl
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
[
|
||||
{
|
||||
"creation": "2013-02-22 01:28:09",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-07-10 14:54:25",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
{
|
||||
"description": "Cross Listing of Item in multiple groups",
|
||||
"doctype": "DocType",
|
||||
"document_type": "Other",
|
||||
"istable": 1,
|
||||
"module": "Website",
|
||||
"name": "__common__"
|
||||
},
|
||||
{
|
||||
"doctype": "DocField",
|
||||
"fieldname": "item_group",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Item Group",
|
||||
"name": "__common__",
|
||||
"options": "Item Group",
|
||||
"parent": "Website Item Group",
|
||||
"parentfield": "fields",
|
||||
"parenttype": "DocType",
|
||||
"permlevel": 0
|
||||
},
|
||||
{
|
||||
"doctype": "DocType",
|
||||
"name": "Website Item Group"
|
||||
},
|
||||
{
|
||||
"doctype": "DocField"
|
||||
}
|
||||
]
|
||||
Loading…
Add table
Reference in a new issue