def __call__(self, request): if request.method != 'POST': return json_success({ "available_methods": sorted( map(lambda m: m.description, self._methods.itervalues()), key=lambda m: m["name"]), }) try: data = json.loads(request.body) method_name = data["method"] args = data["args"] kwargs = data["kwargs"] try: method = self._methods[method_name] except KeyError: raise NameError("Method {} not found!".format(method_name)) ipaddr = get_ip(request) create_logger(method).info( "Calling with parameters {!r}{!r} from {!r}".format(tuple(args), kwargs, ipaddr)) if method.auth: if "auth" in data: username, password = data["auth"] try: user = User.objects.get(username=username) except ObjectDoesNotExist: return json_autherror("User {} does not exist!".format(username)) if not user.check_password(password): return json_autherror("Wrong password for user {}!".format(username)) create_logger(method).info( "Called by user {}/{}".format(user.id, user.username)) return json_success(method(user, *args, **kwargs)) else: return json_autherror("Method {} needs authentication!".format(method_name)) else: return json_success(method(*args, **kwargs)) except Exception as e: create_logger(method).error( "Exception raised during call: {}: {}".format(type(e).__name__, str(e))) return json_exception(e) else: create_logger(method).info("Call finished")
def logger(): return create_logger("sprout_vm_actions")
def class_logger(cls, id=None): return create_logger(cls, id)
def logger(self): return create_logger(self)
def provider_error_logger(): return create_logger("provider_errors")