def create(self, request, note, policy, extra_fields={}, local_site_name=None, *args, **kwargs): """Registers a new API token. The token value be generated and returned in the payload. Callers are expected to provide a note and a policy. Note that this may, in theory, fail due to too many token collisions. If that happens, please re-try the request. """ try: user = resources.user.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if not self.has_list_access_permissions(request, *args, **kwargs): return self._no_access_error(request.user) try: self._validate_policy(policy) except ValueError as e: return INVALID_FORM_DATA, {"fields": {"policy": six.text_type(e)}} local_site = self._get_local_site(local_site_name) try: token = WebAPIToken.objects.generate_token(user, note=note, policy=policy, local_site=local_site) except WebAPITokenGenerationError as e: return TOKEN_GENERATION_FAILED.with_message(six.text_type(e)) if extra_fields: self._import_extra_data(token.extra_data, extra_fields) token.save() return 201, {self.item_result_key: token}
def create(self, request, note, policy, extra_fields={}, local_site_name=None, *args, **kwargs): """Registers a new API token. The token value be generated and returned in the payload. Callers are expected to provide a note and a policy. Note that this may, in theory, fail due to too many token collisions. If that happens, please re-try the request. Extra data can be stored later lookup. See :ref:`webapi2.0-extra-data` for more information. """ try: user = resources.user.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if not self.has_list_access_permissions(request, *args, **kwargs): return self.get_no_access_error(request) try: self._validate_policy(policy) except ValueError as e: return INVALID_FORM_DATA, { 'fields': { 'policy': str(e), }, } local_site = self._get_local_site(local_site_name) try: token = WebAPIToken.objects.generate_token(user, note=note, policy=policy, local_site=local_site) except WebAPITokenGenerationError as e: return TOKEN_GENERATION_FAILED.with_message(str(e)) if extra_fields: try: self.import_extra_data(token, token.extra_data, extra_fields) except ImportExtraDataError as e: return e.error_payload token.save(update_fields=('extra_data', )) return 201, { self.item_result_key: token, }
def create(self, request, note, policy, extra_fields={}, local_site_name=None, *args, **kwargs): """Registers a new API token. The token value be generated and returned in the payload. Callers are expected to provide a note and a policy. Note that this may, in theory, fail due to too many token collisions. If that happens, please re-try the request. Extra data can be stored later lookup. See :ref:`webapi2.0-extra-data` for more information. """ try: user = resources.user.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if not self.has_list_access_permissions(request, *args, **kwargs): return self.get_no_access_error(request) try: self._validate_policy(policy) except ValueError as e: return INVALID_FORM_DATA, { 'fields': { 'policy': six.text_type(e), }, } local_site = self._get_local_site(local_site_name) try: token = WebAPIToken.objects.generate_token(user, note=note, policy=policy, local_site=local_site) except WebAPITokenGenerationError as e: return TOKEN_GENERATION_FAILED.with_message(six.text_type(e)) if extra_fields: try: self.import_extra_data(token, token.extra_data, extra_fields) except ImportExtraDataError as e: return e.error_payload token.save(update_fields=('extra_data',)) return 201, { self.item_result_key: token, }