def router(self, request): response = {} if self.login_required: if not request.user.is_authenticated(): response['type'] = 'event' response['data'] = 'You must be authenticated to run this method.' response['name'] = self.event return HttpResponse(jsonDumpStripped(response), mimetype='application/json') if self.permission: if not request.user.has_perm(self.permission): response['type'] = 'result' response['data'] = 'You need `%s` permission to run this method' % self.permission response['name'] = self.event return HttpResponse(jsonDumpStripped(response), mimetype='application/json') try: if self.func: response['data'] = self.func(request) response['name'] = self.event response['type'] = 'event' else: raise RuntimeError("The server provider didn't register a function to run yet") except Exception as e: if settings.DEBUG: etype, evalue, etb = sys.exc_info() response['type'] = 'exception' response['message'] = traceback.format_exception_only(etype, evalue)[0] response['where'] = traceback.extract_tb(etb)[-1] else: raise e return HttpResponse(jsonDumpStripped(response), mimetype='application/json')
def api(self, request): conf = self._config descriptor = self.namespace + '.' + self.descriptor if 'format' in request.GET and request.GET['format'] == 'json': conf['descriptor'] = descriptor mimetype = 'application/json' response = jsonDumpStripped(conf) else: response = """ Ext.ns('%s'); %s = %s """ % (self.namespace, descriptor, jsonDumpStripped(self._config)) mimetype = 'text/javascript' return HttpResponse(response, mimetype=mimetype)
def script(self, request): """ Return a HttpResponse with the javascript code needed to register the DirectProvider in Ext. You will have to add an urlpattern to your urls.py pointing to this method. Something like:: remote_provider = ExtDirectProvider('/some-url/', ...) urlpatterns = patterns( ..., (r'^myprovider.js/$', remote_provider.script), ... ) """ config = jsonDumpStripped(self._config) js = SCRIPT % config return HttpResponse(js, mimetype='text/javascript')
def router(self, request): """ Check if the request came from a Form POST and call the dispatcher for every ExtDirect request recieved. """ if 'extAction' in request.POST: extdirect_request = dict( action=request.POST['extAction'], method=request.POST['extMethod'], tid=request.POST['extTID'], type=request.POST['extType'], isForm=True ) elif request.body: extdirect_request = json.loads(request.body) else: return HttpResponseBadRequest('Invalid request') if isinstance(extdirect_request, list): #call in batch response = [] for single_request in extdirect_request: response.append(self.dispatcher(request, single_request)) elif isinstance(extdirect_request, dict): #single call response = self.dispatcher(request, extdirect_request) if request.POST.get('extUpload', False): #http://www.extjs.com/deploy/dev/docs/?class=Ext.form.BasicForm#Ext.form.BasicForm-fileUpload mimetype = 'text/html' else: mimetype = 'application/json' return HttpResponse(jsonDumpStripped(response), mimetype=mimetype)