def showView(request, appSlug="front", viewSlug="home", viewAttrs="", **args): """ Show url view. Application code and view name are parsed from the url. urls not following /appSlug/viewSlug mapped into urls???? appSlug would be default app from settings **Required Attributes** **Optional Attributes** **Returns** """ # logger.debug( 'xpcore showView :: context: %s' % (json.dumps(args['ctx'])) ) dbApplication = ApplicationDAO(args["ctx"]) application = dbApplication.get(slug=appSlug) db = ViewDAO(args["ctx"]) view = db.get(application=application, slug=viewSlug) args["ctx"].viewAuth = view.hasAuth classPath, method, viewAttrTuple = __showView(view, viewAttrs, args["ctx"]) if method.find("_") == -1 or method.find("__") == -1: logger.debug("showView :: classPath: %s method: %s viewAttrTuple: %s" % (classPath, method, viewAttrTuple)) cls = get_class(classPath) obj = cls(args["ctx"]) super(cls, obj).__init__(args["ctx"]) obj.request = request if len(viewAttrTuple) == 0: result = eval("obj." + method)() else: result = eval("obj." + method)(*viewAttrTuple) else: logger.debug("xpcore :: showView :: private methods...") raise Http404 return result
def jxService(request, **args): """Excutes the business class: bsClass, method {bsClass: '', method: ''} @param request: Request @param result: Result""" logger.debug("jxService...") # raw_input('Continue???') # time.sleep(1.5) logger.debug(json.dumps(request.REQUEST.items())) request.session.set_test_cookie() request.session.delete_test_cookie() # logger.debug( 'session: %s' % (json.dumps(request.session.items())) ) # logger.debug( 'session: %s' % json.dumps(request.session.items()) + ' ' + json.dumps(request.session.session_key) ) if (request.REQUEST.has_key("view") or request.REQUEST.has_key("action")) and request.is_ajax() is True: viewAttrs = {} dbApplication = ApplicationDAO(args["ctx"]) app = request.REQUEST["app"] application = dbApplication.get(name=app) if request.REQUEST.has_key("view"): view = request.REQUEST["view"] logger.debug("view: %s" % (view)) dbView = ViewDAO(args["ctx"]) viewObj = dbView.get(application__name=app, name=view) args["ctx"].viewAuth = viewObj.hasAuth impl = viewObj.implementation # view attributes viewAttrs = json.loads(request.REQUEST["params"]) if "params" in request.REQUEST else {} args["ctx"].viewNameSource = view args["ctx"].path = "/apps/" + application.slug + "/" + viewObj.slug elif request.REQUEST.has_key("action"): action = request.REQUEST["action"] logger.debug("action: %s" % (action)) dbAction = ActionDAO(args["ctx"]) dbView = ViewDAO(args["ctx"]) actionObj = dbAction.get(application__name=app, name=action) # if args['ctx'].has_key('viewNameSource') and len(args['ctx']['viewNameSource']) != 0: if len(args["ctx"].viewNameSource) != 0: # Get view name and check its application code with application code of action logger.debug("viewNameSource: %s" % (args["ctx"].viewNameSource)) viewObj = dbView.get(application__name=app, name=args["ctx"].viewNameSource) if actionObj.application.name != viewObj.application.name: raise XpMsgException(None, _("Action is not in same application as view source")) impl = actionObj.implementation args["ctx"].path = "/apps/" + application.slug + "/do/" + actionObj.slug implFields = impl.split(".") method = implFields[len(implFields) - 1] classPath = ".".join(implFields[:-1]) logger.debug("classPath: %s" % (classPath)) if method.find("_") == -1 or method.find("__") == -1: cls = get_class(classPath) obj = cls(args["ctx"]) super(cls, obj).__init__(args["ctx"]) obj.request = request if len(viewAttrs) == 0: result = getattr(obj, method)() else: result = getattr(obj, method)(**viewAttrs) else: logger.debug("private methods...") raise Http404 else: logger.debug("Unvalid business request") raise Http404 return result