def check_gstorage_params(**kwargs):
"""
Check that the module is initialized with all the required settings/environment
Args:
kwargs: optional list of app_config
Returns:
A list of errors
"""
errors = []
module_name = 'gstorage'
for index, field in enumerate(REQUIRED_SETTINGS):
if not get_config(field):
errors.append(
checks.Error(
'%s is required' % field,
hint=None,
obj=module_name,
id='%s.00%s' % (module_name, index + 1) # use 1-based index for errors
)
)
return errors
python类Error()的实例源码
def check_all_models(app_configs=None, **kwargs):
errors = []
if app_configs is None:
models = apps.get_models()
else:
models = chain.from_iterable(app_config.get_models() for app_config in app_configs)
for model in models:
if not inspect.ismethod(model.check):
errors.append(
Error(
"The '%s.check()' class method is currently overridden by %r."
% (model.__name__, model.check),
obj=model,
id='models.E020'
)
)
else:
errors.extend(model.check(**kwargs))
return errors
def _check_generic_foreign_key_existence(self):
target = self.remote_field.model
if isinstance(target, ModelBase):
fields = target._meta.private_fields
if any(self._is_matching_generic_foreign_key(field) for field in fields):
return []
else:
return [
checks.Error(
"The GenericRelation defines a relation with the model "
"'%s.%s', but that model does not have a GenericForeignKey." % (
target._meta.app_label, target._meta.object_name
),
obj=self,
id='contenttypes.E004',
)
]
else:
return []
def _check_field_name(self):
field_name = self._get_field_name()
try:
field = self.model._meta.get_field(field_name)
except FieldDoesNotExist:
return [
checks.Error(
"CurrentSiteManager could not find a field named '%s'." % field_name,
obj=self,
id='sites.E001',
)
]
if not field.many_to_many and not isinstance(field, (models.ForeignKey)):
return [
checks.Error(
"CurrentSiteManager cannot use '%s.%s' as it is not a foreign key or a many-to-many field." % (
self.model._meta.object_name, field_name
),
obj=self,
id='sites.E002',
)
]
return []
def check(self, **kwargs):
errors = super(ArrayField, self).check(**kwargs)
if self.base_field.remote_field:
errors.append(
checks.Error(
'Base field for array cannot be a related field.',
obj=self,
id='postgres.E002'
)
)
else:
# Remove the field name checks as they are not needed here.
base_errors = self.base_field.check()
if base_errors:
messages = '\n '.join('%s (%s)' % (error.msg, error.id) for error in base_errors)
errors.append(
checks.Error(
'Base field for array has errors:\n %s' % messages,
obj=self,
id='postgres.E001'
)
)
return errors
def _check_recursion_field_dependecy(self):
res = []
for local_field in self._raw_fields.values():
try:
f = self.model._meta.get_field(local_field.value)
if isinstance(f, CompositeForeignKey):
res.append(
checks.Error(
"the field %s depend on the field %s which is another CompositeForeignKey" % (self.name, local_field),
hint=None,
obj=self,
id='compositefk.E005',
)
)
except FieldDoesNotExist:
pass # _check_to_fields_local_valide already raise errors for this
return res
def _check_to_fields_local_valide(self):
res = []
for local_field in self._raw_fields.values():
if isinstance(local_field, LocalFieldValue):
try:
self.model._meta.get_field(local_field.value)
except FieldDoesNotExist:
res.append(
checks.Error(
"the field %s does not exists on the model %s" % (local_field, self.model),
hint=None,
obj=self,
id='compositefk.E003',
)
)
return res
def check_database_connected(app_configs, **kwargs):
"""
A Django check to see if connecting to the configured default
database backend succeeds.
"""
errors = []
try:
connection.ensure_connection()
except OperationalError as e:
msg = 'Could not connect to database: {!s}'.format(e)
errors.append(checks.Error(msg, id=ERROR_CANNOT_CONNECT_DATABASE))
except ImproperlyConfigured as e:
msg = 'Datbase misconfigured: "{!s}"'.format(e)
errors.append(checks.Error(msg, id=ERROR_MISCONFIGURED_DATABASE))
else:
if not connection.is_usable():
errors.append(checks.Error('Database connection is not usable',
id=ERROR_UNUSABLE_DATABASE))
return errors
def _check_options(self, **kwargs):
if not self.editor_options:
return [
checks.Error(
'options required',
obj=self
)
]
elif not isinstance(self.editor_options, dict):
return [
checks.Error(
'options must be a dict',
obj=self
)
]
else:
return []
def _check_options(self, **kwargs):
if not self.editor_options:
return [
checks.Error(
'options required',
obj=self
)
]
elif not isinstance(self.editor_options, dict):
return [
checks.Error(
'options must be a dict',
obj=self
)
]
else:
return []
def _check_storage_location(cls, **kwargs):
if not cls.STORAGE_LOCATION:
return [
checks.Error(
'STORAGE_LOCATION is required',
obj=cls
)
]
elif not isinstance(cls.STORAGE_LOCATION, str):
return [
checks.Error(
'STORAGE_LOCATION must be an instance of str',
obj=cls
)
]
else:
return []
def _check_max_dimensions(cls, **kwargs):
if not cls.MAX_DIMENSIONS:
return [
checks.Error(
'MAX_DIMENSIONS is required',
obj=cls
)
]
elif not is_size(cls.MAX_DIMENSIONS):
return [
checks.Error(
'MAX_DIMENSIONS must be a tuple of 2 non-negative numbers',
obj=cls
)
]
else:
return []
def _check_max_source_dimensions(cls, **kwargs):
if not cls.MAX_SOURCE_DIMENSIONS:
return [
checks.Error(
'MAX_SOURCE_DIMENSIONS is required',
obj=cls
)
]
elif not is_size(cls.MAX_SOURCE_DIMENSIONS):
return [
checks.Error(
'MAX_SOURCE_DIMENSIONS must be a tuple of 2 non-negative numbers',
obj=cls
)
]
else:
return []
def _check_variations(cls, **kwargs):
if not cls.VARIATIONS:
return [
checks.Error(
'VARIATIONS is required',
obj=cls
)
]
elif not isinstance(cls.VARIATIONS, dict):
return [
checks.Error(
'VARIATIONS must be an instance of dict',
obj=cls
)
]
errors = []
errors.extend(check_variations(cls.VARIATIONS, cls))
return errors
def _check_storage_location(cls, **kwargs):
if not cls.STORAGE_LOCATION:
return [
checks.Error(
'STORAGE_LOCATION is required',
obj=cls
)
]
elif not isinstance(cls.STORAGE_LOCATION, str):
return [
checks.Error(
'STORAGE_LOCATION must be an instance of str',
obj=cls
)
]
else:
return []
def _check_max_source_dimensions(cls, **kwargs):
if not cls.MAX_SOURCE_DIMENSIONS:
return [
checks.Error(
'MAX_SOURCE_DIMENSIONS is required',
obj=cls
)
]
elif not is_size(cls.MAX_SOURCE_DIMENSIONS):
return [
checks.Error(
'MAX_SOURCE_DIMENSIONS must be a tuple of 2 non-negative numbers',
obj=cls
)
]
else:
return []
def _check_variations(cls, **kwargs):
if not cls.VARIATIONS:
return [
checks.Error(
'VARIATIONS is required',
obj=cls
)
]
elif not isinstance(cls.VARIATIONS, dict):
return [
checks.Error(
'VARIATIONS must be an instance of dict',
obj=cls
)
]
errors = []
errors.extend(check_variations(cls.VARIATIONS, cls))
return errors
def _check_admin_variation(cls, **kwargs):
if not cls.ADMIN_VARIATION:
return [
checks.Error(
'ADMIN_VARIATION is required',
obj=cls
)
]
elif cls.ADMIN_VARIATION not in cls.VARIATIONS:
return [
checks.Error(
'ADMIN_VARIATION "%s" not found in variations' % cls.admin_variation,
obj=cls
)
]
else:
return []
def _check_admin_item_size(cls, **kwargs):
if not cls.ADMIN_ITEM_SIZE:
return [
checks.Error(
'ADMIN_ITEM_SIZE is required',
obj=cls
)
]
elif not is_size(cls.ADMIN_ITEM_SIZE):
return [
checks.Error(
'ADMIN_ITEM_SIZE should be a tuple of 2 non-negative numbers',
obj=cls
)
]
else:
return []
def recut_generator(self):
"""
????????? ??????????? ???? ???????? ???????.
??????:
for error_code, msg in gallery.recut_generator():
print(msg)
if error_code:
break
"""
image_items = list(self.image_items)
for item in image_items:
if not item.image:
yield 1, 'Error (ID %d): Empty value' % item.pk
continue
if not item.image.exists():
yield 2, 'Error (ID %d): Not found %r' % (item.pk, item.image.url)
continue
item.image.recut()
yield 0, item.image.url