NameError handling, fixed copy doc used in amend, handle tabs

This commit is contained in:
Anand Doshi 2014-04-23 13:39:12 +05:30
parent 8f668eba00
commit a1bd2176fb
9 changed files with 43 additions and 42 deletions

View file

@ -1,5 +1,5 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
# MIT License. See license.txt
import sys, os
import json
@ -30,10 +30,10 @@ def application(request):
frappe.local.request = request
frappe.local.is_ajax = frappe.get_request_header("X-Requested-With")=="XMLHttpRequest"
response = None
try:
rollback = True
init_site(request)
if frappe.local.conf.get('maintainance_mode'):
@ -41,81 +41,81 @@ def application(request):
make_form_dict(request)
frappe.local.http_request = frappe.auth.HTTPRequest()
if frappe.local.form_dict.cmd:
response = frappe.handler.handle()
elif frappe.request.path.startswith("/api/"):
response = frappe.api.handle()
elif frappe.request.path.startswith('/backups'):
response = frappe.utils.response.download_backup(request.path)
elif frappe.local.request.method in ('GET', 'HEAD'):
response = frappe.website.render.render(request.path)
else:
raise NotFound
except HTTPException, e:
return e
except frappe.SessionStopped, e:
response = frappe.utils.response.handle_session_stopped()
except (frappe.AuthenticationError,
frappe.PermissionError,
frappe.DoesNotExistError,
frappe.DuplicateEntryError,
frappe.NameError,
frappe.OutgoingEmailError,
frappe.ValidationError,
frappe.UnsupportedMediaType), e:
if frappe.local.is_ajax:
response = frappe.utils.response.report_error(e.http_status_code)
else:
response = frappe.website.render.render("error", e.http_status_code)
if e.__class__ == frappe.AuthenticationError:
if hasattr(frappe.local, "login_manager"):
frappe.local.login_manager.clear_cookies()
else:
if frappe.local.request.method in ("POST", "PUT") and frappe.db:
frappe.db.commit()
rollback = False
finally:
if frappe.local.request.method in ("POST", "PUT") and frappe.db and rollback:
frappe.db.rollback()
# set cookies
if response and hasattr(frappe.local, 'cookie_manager'):
frappe.local.cookie_manager.flush_cookies(response=response)
frappe.destroy()
return response
def init_site(request):
site = _site or request.headers.get('X-Frappe-Site-Name') or get_site_name(request.host)
frappe.init(site=site, sites_path=_sites_path)
if not (frappe.local.conf and frappe.local.conf.db_name):
# site does not exist
raise NotFound
def make_form_dict(request):
frappe.local.form_dict = frappe._dict({ k:v[0] if isinstance(v, (list, tuple)) else v \
for k, v in (request.form or request.args).iteritems() })
application = local_manager.make_middleware(application)
def serve(port=8000, profile=False, site=None, sites_path='.'):
global application, _site, _sites_path
_site = site
_sites_path = sites_path
from werkzeug.serving import run_simple
if profile:
@ -125,10 +125,10 @@ def serve(port=8000, profile=False, site=None, sites_path='.'):
application = SharedDataMiddleware(application, {
'/assets': os.path.join(sites_path, 'assets'),
})
application = StaticDataMiddleware(application, {
'/files': os.path.abspath(sites_path)
})
run_simple('0.0.0.0', int(port), application, use_reloader=True,
run_simple('0.0.0.0', int(port), application, use_reloader=True,
use_debugger=True, use_evalex=True)

View file

@ -17,7 +17,7 @@ class PermissionError(Exception):
class DoesNotExistError(ValidationError):
http_status_code = 404
class DuplicateEntryError(Exception):
class NameError(Exception):
http_status_code = 409
class OutgoingEmailError(Exception):
@ -29,6 +29,7 @@ class SessionStopped(Exception):
class UnsupportedMediaType(Exception):
http_status_code = 415
class DuplicateEntryError(NameError):pass
class DataError(ValidationError): pass
class UnknownDomainError(Exception): pass
class MappingMismatchError(ValidationError): pass

View file

@ -182,7 +182,7 @@ class BaseDocument(object):
), d.values())
except Exception, e:
if e.args[0]==1062:
raise NameError, e
raise frappe.NameError((d.get("doctype"), d.get("name"), e))
else:
raise

View file

@ -133,7 +133,7 @@ def get_default_naming_series(doctype):
def validate_name(doctype, name, case=None, merge=False):
if not name: return 'No Name Specified for %s' % doctype
if name.startswith('New '+doctype):
raise NameError, 'There were some errors setting the name, please contact the administrator'
raise frappe.NameError, 'There were some errors setting the name, please contact the administrator'
if case=='Title Case': name = name.title()
if case=='UPPER CASE': name = name.upper()
name = name.strip()

View file

@ -179,13 +179,13 @@ frappe.ui.form.Layout = Class.extend({
var me = this,
grid_row = null;
prev = null,
fields = me.fields,
fields = me.fields_list,
in_grid = false;
// in grid
if(doctype != me.doctype) {
grid_row =me.get_open_grid_row()
fields = grid_row.fields;
fields = grid_row.layout.fields_list;
}
for(var i=0, len=fields.length; i < len; i++) {

View file

@ -26,6 +26,7 @@ $.extend(frappe.model, {
parenttype: parent_doc.doctype,
});
if(!parent_doc[parentfield]) parent_doc[parentfield] = [];
doc.idx = parent_doc[parentfield].length + 1;
parent_doc[parentfield].push(doc);
} else {
frappe.provide("frappe.model.docinfo." + doctype + "." + doc.name);
@ -132,9 +133,9 @@ $.extend(frappe.model, {
return d;
},
copy_doc: function(doc, from_amend) {
copy_doc: function(doc, from_amend, parent_doc, parentfield) {
var no_copy_list = ['name','amended_from','amendment_date','cancel_reason'];
var newdoc = frappe.model.get_new_doc(doc.doctype);
var newdoc = frappe.model.get_new_doc(doc.doctype, parent_doc, parentfield);
for(var key in doc) {
// dont copy name and blank fields
@ -145,11 +146,9 @@ $.extend(frappe.model, {
&& !(df && (!from_amend && cint(df.no_copy)==1))) {
value = doc[key];
if(df.fieldtype==="Table") {
newdoc[key] = [];
$.each(value || [], function(i, d) {
newdoc[key].push(frappe.model.copy_doc(d, from_amend))
newdoc[key][newdoc[key].length-1].idx = newdoc[key].length;
})
frappe.model.copy_doc(d, from_amend, newdoc, df.fieldname);
});
} else {
newdoc[key] = doc[key];
}

View file

@ -30,7 +30,7 @@ def after_install():
for d in install_docs:
try:
frappe.get_doc(d).insert()
except NameError:
except frappe.NameError:
pass
# all roles to admin

View file

@ -124,7 +124,7 @@ class sync(object):
try:
page.insert()
except NameError:
except frappe.NameError:
# page exists, if deleted static, delete it and try again
old_route = frappe.get_doc("Website Route", {"ref_doctype":"Web Page",
"docname": page.name})

View file

@ -14,8 +14,9 @@ def savedocs():
doc.docstatus = {"Save":0, "Submit": 1, "Update": 1, "Cancel": 2}[frappe.form_dict.action]
try:
doc.save()
except NameError:
frappe.msgprint(frappe._("Name exists"))
except frappe.NameError, e:
doctype, name, original_exception = e if isinstance(e, tuple) else (doc.doctype or "", doc.name or "", None)
frappe.msgprint(frappe._("{0} {1} already exists").format(doctype, name))
raise
# update recent documents