Merge remote-tracking branch 'upstream/website-wip' into wsgi

Conflicts:
	webnotes/handler.py
This commit is contained in:
Pratik Vyas 2013-09-17 19:19:33 +05:30
commit 126198621b
16 changed files with 32 additions and 233 deletions

View file

@ -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
}

View file

@ -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

View file

@ -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];

View file

@ -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)

View file

@ -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

View file

@ -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():

View file

@ -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):

View file

@ -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):

View file

@ -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),

View file

@ -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

View file

@ -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()

View file

@ -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

View file

@ -1 +0,0 @@
Alternate grouping of parent Item (for website, so an Item can be listed under multiple groups).

View file

@ -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

View file

@ -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"
}
]