def import_by_path(dotted_path, error_prefix=""): """ Import a dotted module path and return the attribute/class designated by the last name in the path. Raise ImproperlyConfigured if something goes wrong. This has come straight from Django 1.6 """ try: module_path, class_name = dotted_path.rsplit(".", 1) except ValueError: raise ImproperlyConfigured("%s%s doesn't look like a module path" % (error_prefix, dotted_path)) try: module = import_module(module_path) except ImportError as e: raise ImproperlyConfigured('%sError importing module %s: "%s"' % (error_prefix, module_path, e)) try: attr = getattr(module, class_name) except AttributeError: raise ImproperlyConfigured( '%sModule "%s" does not define a "%s" attribute/class' % (error_prefix, module_path, class_name) ) return attr
def import_by_path(dotted_path, error_prefix=''): """ Import a dotted module path and return the attribute/class designated by the last name in the path. Raise ImproperlyConfigured if something goes wrong. This has come straight from Django 1.6 """ try: module_path, class_name = dotted_path.rsplit('.', 1) except ValueError: raise ImproperlyConfigured("%s%s doesn't look like a module path" % (error_prefix, dotted_path)) try: module = import_module(module_path) except ImportError as e: raise ImproperlyConfigured('%sError importing module %s: "%s"' % (error_prefix, module_path, e)) try: attr = getattr(module, class_name) except AttributeError: raise ImproperlyConfigured( '%sModule "%s" does not define a "%s" attribute/class' % (error_prefix, module_path, class_name)) return attr
def endpoint_loader(request, application, model, **kwargs): """Load an AJAX endpoint. This will load either an ad-hoc endpoint or it will load up a model endpoint depending on what it finds. It first attempts to load ``model`` as if it were an ad-hoc endpoint. Alternatively, it will attempt to see if there is a ``ModelEndpoint`` for the given ``model``. """ if request.method != "POST": raise AJAXError(400, _('Invalid HTTP method used.')) try: module = import_module('%s.endpoints' % application) except ImportError as e: if settings.DEBUG: raise e else: raise AJAXError(404, _('AJAX endpoint does not exist.')) if hasattr(module, model): # This is an ad-hoc endpoint endpoint = getattr(module, model) else: # This is a model endpoint method = kwargs.get('method', 'create').lower() try: del kwargs['method'] except: pass try: model_endpoint = ajax.endpoint.load(model, application, method, **kwargs) if not model_endpoint.authenticate(request, application, method): raise AJAXError(403, _('User is not authorized.')) endpoint = getattr(model_endpoint, method, False) if not endpoint: raise AJAXError(404, _('Invalid method.')) except NotRegistered: raise AJAXError(500, _('Invalid model.')) data = endpoint(request) if isinstance(data, HttpResponse): return data if isinstance(data, EnvelopedResponse): envelope = data.metadata payload = data.data else: envelope = {} payload = data envelope.update({ 'success': True, 'data': payload, }) return HttpResponse(json.dumps(envelope, cls=DjangoJSONEncoder, separators=(',', ':')))