mirror of
				https://github.com/graphql-python/graphene-django.git
				synced 2025-10-31 07:57:31 +03:00 
			
		
		
		
	* Use ruff in pre-commit * Add pyupgrade * Add isort * Add bugbear * Fix B015 Pointless comparison * Fix B026 * B018 false positive * Remove flake8 and isort config from setup.cfg * Remove black and flake8 from dev dependencies * Update black * Show list of fixes applied with autofix on * Fix typo * Add C4 flake8-comprehensions * Add ruff to dev dependencies * Fix up
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import binascii
 | |
| 
 | |
| from django.core.exceptions import ValidationError
 | |
| from django.forms import CharField, Field, MultipleChoiceField
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| from graphql_relay import from_global_id
 | |
| 
 | |
| 
 | |
| class GlobalIDFormField(Field):
 | |
|     default_error_messages = {"invalid": _("Invalid ID specified.")}
 | |
| 
 | |
|     def clean(self, value):
 | |
|         if not value and not self.required:
 | |
|             return None
 | |
| 
 | |
|         try:
 | |
|             _type, _id = from_global_id(value)
 | |
|         except (TypeError, ValueError, UnicodeDecodeError, binascii.Error):
 | |
|             raise ValidationError(self.error_messages["invalid"])
 | |
| 
 | |
|         try:
 | |
|             CharField().clean(_id)
 | |
|             CharField().clean(_type)
 | |
|         except ValidationError:
 | |
|             raise ValidationError(self.error_messages["invalid"])
 | |
| 
 | |
|         return value
 | |
| 
 | |
| 
 | |
| class GlobalIDMultipleChoiceField(MultipleChoiceField):
 | |
|     default_error_messages = {
 | |
|         "invalid_choice": _("One of the specified IDs was invalid (%(value)s)."),
 | |
|         "invalid_list": _("Enter a list of values."),
 | |
|     }
 | |
| 
 | |
|     def valid_value(self, value):
 | |
|         # Clean will raise a validation error if there is a problem
 | |
|         GlobalIDFormField().clean(value)
 | |
|         return True
 |