本文整理汇总了Python中thumbor.utils.logger.warning函数的典型用法代码示例。如果您正苦于以下问题:Python warning函数的具体用法?Python warning怎么用?Python warning使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了warning函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: read
def read(self, extension=None, quality=None):
if quality is None:
quality = self.context.request.quality
# returns image buffer in byte format.
img_buffer = StringIO()
ext = extension or self.extension
options = {"quality": quality}
if ext == ".jpg" or ext == ".jpeg":
options["optimize"] = True
options["progressive"] = True
if self.icc_profile is not None:
options["icc_profile"] = self.icc_profile
try:
self.image.save(img_buffer, FORMATS[ext], **options)
except IOError:
logger.warning("Could not save as improved image, consider to increase ImageFile.MAXBLOCK")
self.image.save(img_buffer, FORMATS[ext])
except KeyError:
# extension is not present or could not help determine format => force JPEG
# TODO : guess format by image headers maybe
if self.image.mode in ["P", "RGBA", "LA"]:
self.image.format = FORMATS[".png"]
self.image.save(img_buffer, FORMATS[".png"])
else:
self.image.format = FORMATS[".jpg"]
self.image.save(img_buffer, FORMATS[".jpg"])
results = img_buffer.getvalue()
img_buffer.close()
return results
开发者ID:hfeeki,项目名称:thumbor,代码行数:33,代码来源:pil.py
示例2: load
def load(context, path, callback):
key = (
context.config.RACKSPACE_PYRAX_REGION,
context.config.get('RACKSPACE_PYRAX_IDENTITY_TYPE','rackspace'),
context.config.RACKSPACE_PYRAX_CFG,
context.config.RACKSPACE_PYRAX_PUBLIC,
context.config.RACKSPACE_LOADER_CONTAINER
)
if key not in CONNECTIONS:
if(context.config.RACKSPACE_PYRAX_REGION):
pyrax.set_default_region(context.config.RACKSPACE_PYRAX_REGION)
pyrax.set_setting('identity_type', context.config.get('RACKSPACE_PYRAX_IDENTITY_TYPE','rackspace'))
pyrax.set_credential_file(expanduser(context.config.RACKSPACE_PYRAX_CFG))
cf = pyrax.connect_to_cloudfiles(public=context.config.RACKSPACE_PYRAX_PUBLIC)
CONNECTIONS[key] = cf.get_container(context.config.RACKSPACE_LOADER_CONTAINER)
cont = CONNECTIONS[key]
file_abspath = normalize_path(context, path)
logger.debug("[LOADER] getting from %s/%s" % (context.config.RACKSPACE_LOADER_CONTAINER, file_abspath))
try:
obj = cont.get_object(file_abspath)
if obj:
logger.debug("[LOADER] Found object at %s/%s" % (context.config.RACKSPACE_LOADER_CONTAINER, file_abspath))
else:
logger.warning("[LOADER] Unable to find object %s/%s" % (context.config.RACKSPACE_LOADER_CONTAINER, file_abspath ))
except:
callback(None)
else:
callback(obj.get())
开发者ID:Superbalist,项目名称:thumbor_rackspace,代码行数:30,代码来源:cloudfiles_loader.py
示例3: read
def read(self, extension=None, quality=None):
if quality is None: quality = self.context.request.quality
#returns image buffer in byte format.
img_buffer = StringIO()
ext = extension or self.extension
options = {
'quality': quality
}
if ext == '.jpg' or ext == '.jpeg':
options['optimize'] = True
options['progressive'] = True
if self.icc_profile is not None:
options['icc_profile'] = self.icc_profile
try:
self.image.save(img_buffer, FORMATS[ext], **options)
except IOError:
logger.warning('Could not save as improved image, consider to increase ImageFile.MAXBLOCK')
self.image.save(img_buffer, FORMATS[ext])
except KeyError:
#extension is not present or could not help determine format => force JPEG
#TODO : guess format by image headers maybe
if self.image.mode in ['P','RGBA','LA']:
self.image.format = FORMATS['.png']
self.image.save(img_buffer, FORMATS['.png'])
else:
self.image.format = FORMATS['.jpg']
self.image.save(img_buffer, FORMATS['.jpg'])
results = img_buffer.getvalue()
img_buffer.close()
return results
开发者ID:garthomite,项目名称:thumbor,代码行数:34,代码来源:pil.py
示例4: get
def get(self, **kw):
url = self.request.uri
if not self.validate(kw["image"]):
self._error(404, "No original image was specified in the given URL")
return
self.context.request = RequestParameters(**kw)
self.context.request.unsafe = self.context.request.unsafe == "unsafe"
if self.request.query:
self.context.request.image_url += "?%s" % self.request.query
self.context.request.image_url = quote(self.context.request.image_url, "/:?%=&")
has_none = not self.context.request.unsafe and not self.context.request.hash
has_both = self.context.request.unsafe and self.context.request.hash
if has_none or has_both:
self._error(404, "URL does not have hash or unsafe, or has both: %s" % url)
return
if self.context.request.unsafe and not self.context.config.ALLOW_UNSAFE_URL:
self._error(404, "URL has unsafe but unsafe is not allowed by the config: %s" % url)
return
url_signature = self.context.request.hash
if url_signature:
signer = Signer(self.context.server.security_key)
url_to_validate = url.replace("/%s/" % self.context.request.hash, "")
valid = signer.validate(url_signature, url_to_validate)
if not valid and self.context.config.STORES_CRYPTO_KEY_FOR_EACH_IMAGE:
# Retrieves security key for this image if it has been seen before
security_key = self.context.modules.storage.get_crypto(self.context.request.image_url)
if security_key is not None:
signer = Signer(security_key)
valid = signer.validate(url_signature, url_to_validate)
if not valid:
is_valid = True
if self.context.config.ALLOW_OLD_URLS:
cr = Cryptor(self.context.server.security_key)
options = cr.get_options(self.context.request.hash, self.context.request.image_url)
if options is None:
is_valid = False
else:
self.context.request = RequestParameters(**options)
logger.warning(
"OLD FORMAT URL DETECTED!!! This format of URL will be discontinued in upcoming versions. Please start using the new format as soon as possible. More info at https://github.com/globocom/thumbor/wiki/3.0.0-release-changes"
)
else:
is_valid = False
if not is_valid:
self._error(404, "Malformed URL: %s" % url)
return
return self.execute_image_operations()
开发者ID:johim,项目名称:thumbor,代码行数:60,代码来源:image.py
示例5: signal_handler
def signal_handler(server, config, sig, frame):
io_loop = tornado.ioloop.IOLoop.instance()
def stop_loop(now, deadline):
if now < deadline and (io_loop._callbacks or io_loop._timeouts):
logger.debug('Waiting for next tick')
now += 1
io_loop.add_timeout(now, stop_loop, now, deadline)
else:
io_loop.stop()
logger.debug('Shutdown finally')
def stop_server(now, deadline):
if now < deadline:
logger.debug('Waiting for next tick')
now += 1
io_loop.add_timeout(now, stop_server, now, deadline)
else:
server.stop()
logger.debug('Stopped http server.')
logger.debug('Will shutdown io in maximum %d seconds ...',
config.MAX_WAIT_SECONDS_BEFORE_IO_SHUTDOWN)
now = time.time()
stop_loop(now, now + config.MAX_WAIT_SECONDS_BEFORE_IO_SHUTDOWN)
def shutdown():
logger.debug('Stopping http server (i.e. stopping accepting new requests) in %d seconds ...',
config.MAX_WAIT_SECONDS_BEFORE_SERVER_SHUTDOWN)
now = time.time()
stop_server(now, now + config.MAX_WAIT_SECONDS_BEFORE_SERVER_SHUTDOWN)
logger.warning('Caught signal: %d. Shutting down server.', sig)
io_loop.add_callback_from_signal(shutdown)
开发者ID:caeugusmao,项目名称:thumbor,代码行数:33,代码来源:signal_handler.py
示例6: read
def read(self, extension=None, quality=None):
if quality is None: quality = self.context.request.quality
#returns image buffer in byte format.
img_buffer = StringIO()
ext = extension or self.extension
options = {
'quality': quality
}
if ext == '.jpg' or ext == '.jpeg':
options['optimize'] = True
options['progressive'] = True
if self.icc_profile is not None:
options['icc_profile'] = self.icc_profile
try:
self.image.save(img_buffer, FORMATS[ext], **options)
except IOError:
logger.warning('Could not save as improved image, consider to increase ImageFile.MAXBLOCK')
self.image.save(img_buffer, FORMATS[ext])
results = img_buffer.getvalue()
img_buffer.close()
return results
开发者ID:mikelikespie,项目名称:thumbor,代码行数:25,代码来源:pil.py
示例7: icc_profile_apply
def icc_profile_apply(self, profile=None):
# Check whether input image has color management.
if not self.engine.icc_profile:
logger.info('ICC: Image has no embedded profile. Skipping this image.')
return
# Sanitize profile parameter.
if profile != None:
profile = os.path.basename(profile).lstrip('.')
if len(profile) == 0:
logger.warning('ICC: Invalid profile name.')
return
# Find output profile.
outprofile = self._find_profile(profile)
if not outprofile:
logger.warning('ICC: Failed to load profile: {:s}'.format(profile))
return
try:
ext = self.engine.extension
fmt = Image.EXTENSION[ext.lower()]
except:
logger.exception('ICC: Failed to determine image format and extension before attempting to apply profile: {:s}'.format(profile))
return
try:
inmode = self.engine.get_image_mode()
insize = self.engine.size
inimg = Image.frombytes(inmode, insize, self.engine.get_image_data())
# In PIL>=3.0.0 / Thumbor 6, icc_profile is sometimes a tuple :/
# https://github.com/python-pillow/Pillow/issues/1462
profile_data = self.engine.icc_profile
if type(profile_data) == tuple:
profile_data = profile_data[0]
inprofile = StringIO(profile_data)
outmode = 'RGBA' if 'A' in inmode else 'RGB'
except:
logger.exception('ICC: Failed to determine image properties before attempting to apply profile: {:s}'.format(profile))
return
logger.info('ICC: Attempting to apply profile: {:s}, inmode: {:s}, outmode: {:s}'.format(profile, inmode, outmode))
try:
outimg = ImageCms.profileToProfile(inimg, inprofile, outprofile, outputMode=outmode)
except:
logger.exception('ICC: Failed to apply profile: {:s}, inmode: {:s}, outmode: {:s}'.format(profile, inmode, outmode))
return
# Reload the image into the engine.
outbuf = StringIO()
try:
outimg.save(outbuf, fmt)
self.engine.load(outbuf.getvalue(), ext)
except:
logger.exception('ICC: Failed load the image with an applied profile: {:s}, inmode: {:s}, outmode: {:s}'.format(profile, inmode, outmode))
return
finally:
outbuf.close()
开发者ID:znerol,项目名称:thumbor-icc,代码行数:60,代码来源:icc_profile_apply.py
示例8: get_image
def get_image(self):
try:
result = yield self._fetch(self.context.request.image_url)
if not result.successful:
if result.loader_error == LoaderResult.ERROR_NOT_FOUND:
self._error(404)
return
elif result.loader_error == LoaderResult.ERROR_UPSTREAM:
# Return a Bad Gateway status if the error came from upstream
self._error(502)
return
elif result.loader_error == LoaderResult.ERROR_TIMEOUT:
# Return a Gateway Timeout status if upstream timed out (i.e. 599)
self._error(504)
return
else:
self._error(500)
return
except Exception as e:
msg = "[BaseHandler] get_image failed for url `{url}`. error: `{error}`".format(
url=self.context.request.image_url, error=e
)
self.log_exception(*sys.exc_info())
if "cannot identify image file" in e.message:
logger.warning(msg)
self._error(400)
else:
logger.error(msg)
self._error(500)
return
normalized = result.normalized
buffer = result.buffer
engine = result.engine
req = self.context.request
if engine is None:
if buffer is None:
self._error(504)
return
engine = self.context.request.engine
engine.load(buffer, self.context.request.extension)
def transform():
self.normalize_crops(normalized, req, engine)
if req.meta:
self.context.request.engine = JSONEngine(engine, req.image_url, req.meta_callback)
after_transform_cb = functools.partial(self.after_transform, self.context)
Transformer(self.context).transform(after_transform_cb)
self.filters_runner.apply_filters(thumbor.filters.PHASE_AFTER_LOAD, transform)
开发者ID:nyimbi,项目名称:thumbor,代码行数:59,代码来源:__init__.py
示例9: read
def read(self, extension=None, quality=options.QUALITY):
#returns image buffer in byte format.
img_buffer = StringIO()
ext = extension or self.extension
options = {
'quality': quality
}
if ext == '.jpg' or ext == '.jpeg':
options['optimize'] = True
options['progressive'] = True
try:
self.image.save(img_buffer, FORMATS[ext], **options)
except IOError, e:
logger.warning('Could not save as improved image, consider to increase ImageFile.MAXBLOCK')
self.image.save(img_buffer, FORMATS[ext])
开发者ID:cezarsa,项目名称:thumbor,代码行数:17,代码来源:pil.py
示例10: get
def get(self):
cf = pyrax.cloudfiles
cont = cf.get_container(self.context.config.RACKSPACE_RESULT_STORAGES_CONTAINER)
file_abspath = self.normalize_path(self.context.request.url)
try:
logger.debug("[RESULT_STORAGE] getting from %s/%s" % (self.context.config.RACKSPACE_RESULT_STORAGES_CONTAINER, file_abspath))
obj = cont.get_object(file_abspath)
if obj:
logger.debug("[RESULT_STORAGE] Found object at %s/%s" % (self.context.config.RACKSPACE_RESULT_STORAGES_CONTAINER, file_abspath))
if(self.context.config.RACKSPACE_RESULT_STORAGE_EXPIRES):
cont.delete_object_in_seconds(obj=obj,seconds=str(self.context.config.RESULT_STORAGE_EXPIRATION_SECONDS))
return obj.get()
else:
logger.warning("[RESULT_STORAGE] Unable to find object %s/%s" % (self.context.config.RACKSPACE_RESULT_STORAGES_CONTAINER, file_abspath ))
except:
return None
return None
开发者ID:heynemann,项目名称:thumbor_rackspace,代码行数:18,代码来源:cloudfile_storage.py
示例11: import_community_modules
def import_community_modules(cls, instance):
for module in cls._community_modules:
setattr(instance, module['config_key'].lower(), None)
# Autoload
for module in cls._community_modules:
config_key = module['config_key']
if hasattr(instance.config, config_key):
instance.import_item(config_key, module['class_name'])
else:
logger.warning(
"Configuration not found for module " \
"{config_key} {config_name}".format(
config_key=config_key,
class_name=module['class_name']
)
)
开发者ID:Bladrak,项目名称:core,代码行数:18,代码来源:importer.py
示例12: __init__
def __init__(self, context, importer):
'''
:param context:
:param importer:
'''
ThumborContextImporter.__init__(self, context, importer)
# Dynamically load registered modules
for name in self._community_modules:
if hasattr(importer, name):
instance = getattr(importer, name)(context)
setattr(self, name, instance)
else:
logger.warning("Module {name} is not configured.".format(
name=name.upper()
))
setattr(self, name, None)
开发者ID:Bladrak,项目名称:core,代码行数:18,代码来源:context_importer.py
示例13: get_image
def get_image(self):
try:
normalized, buffer, engine = yield self._fetch(
self.context.request.image_url
)
except Exception as e:
msg = '[BaseHandler] get_image failed for url `{url}`. error: `{error}`'.format(
url=self.context.request.image_url,
error=e
)
self.log_exception(*sys.exc_info())
if 'cannot identify image file' in e.message:
logger.warning(msg)
self._error(400)
else:
logger.error(msg)
self._error(500)
return
req = self.context.request
if engine is None:
if buffer is None:
self._error(504)
return
engine = self.context.request.engine
engine.load(buffer, self.context.request.extension)
def transform():
self.normalize_crops(normalized, req, engine)
if req.meta:
self.context.request.engine = JSONEngine(engine, req.image_url, req.meta_callback)
after_transform_cb = functools.partial(self.after_transform, self.context)
Transformer(self.context).transform(after_transform_cb)
self.filters_runner.apply_filters(thumbor.filters.PHASE_AFTER_LOAD, transform)
开发者ID:xialisun,项目名称:thumbor,代码行数:41,代码来源:__init__.py
示例14: __init__
def __init__(self, context, importer):
'''
:param context:
:param importer:
'''
ThumborContextImporter.__init__(self, context, importer)
# Dynamically load registered modules
for name in self._community_modules:
if hasattr(importer, name):
init = getattr(importer, name)
if not hasattr(init, '__call__'):
logger.error("Attr {attr} of object {obj} is not callable".format(
attr=name,
obj=importer,
))
instance = getattr(importer, name)(context)
setattr(self, name, instance)
else:
logger.warning("Module {name} is not configured.".format(
name=name.upper()
))
setattr(self, name, None)
开发者ID:thumbor-community,项目名称:core,代码行数:24,代码来源:context_importer.py
示例15: create_image
def create_image(self, buffer):
try:
img = Image.open(BytesIO(buffer))
except Image.DecompressionBombWarning as e:
logger.warning("[PILEngine] create_image failed: {0}".format(e))
return None
self.icc_profile = img.info.get('icc_profile')
self.transparency = img.info.get('transparency')
self.exif = img.info.get('exif')
self.subsampling = JpegImagePlugin.get_sampling(img)
if (self.subsampling == -1): # n/a for this file
self.subsampling = None
self.qtables = getattr(img, 'quantization', None)
if self.context.config.ALLOW_ANIMATED_GIFS and self.extension == '.gif':
frames = []
for frame in ImageSequence.Iterator(img):
frames.append(frame.convert('P'))
img.seek(0)
self.frame_count = len(frames)
return frames
return img
开发者ID:raphamorim,项目名称:thumbor,代码行数:24,代码来源:pil.py
示例16: get_image
def get_image(self):
"""
This function is called after the PRE_LOAD filters have been applied.
It applies the AFTER_LOAD filters on the result, then crops the image.
"""
try:
result = yield self._fetch(
self.context.request.image_url
)
if not result.successful:
if result.loader_error == LoaderResult.ERROR_NOT_FOUND:
self._error(404)
return
elif result.loader_error == LoaderResult.ERROR_UPSTREAM:
# Return a Bad Gateway status if the error came from upstream
self._error(502)
return
elif result.loader_error == LoaderResult.ERROR_TIMEOUT:
# Return a Gateway Timeout status if upstream timed out (i.e. 599)
self._error(504)
return
elif isinstance(result.loader_error, int):
self._error(result.loader_error)
return
elif hasattr(result, 'engine_error') and result.engine_error == EngineResult.COULD_NOT_LOAD_IMAGE:
self._error(400)
return
else:
self._error(500)
return
except Exception as e:
msg = '[BaseHandler] get_image failed for url `{url}`. error: `{error}`'.format(
url=self.context.request.image_url,
error=e
)
self.log_exception(*sys.exc_info())
if 'cannot identify image file' in e.message:
logger.warning(msg)
self._error(400)
else:
logger.error(msg)
self._error(500)
return
normalized = result.normalized
buffer = result.buffer
engine = result.engine
req = self.context.request
if engine is None:
if buffer is None:
self._error(504)
return
engine = self.context.request.engine
try:
engine.load(buffer, self.context.request.extension)
except Exception:
self._error(504)
return
self.context.transformer = Transformer(self.context)
def transform():
self.normalize_crops(normalized, req, engine)
if req.meta:
self.context.transformer.engine = \
self.context.request.engine = \
JSONEngine(engine, req.image_url, req.meta_callback)
self.context.transformer.transform(self.after_transform)
self.filters_runner.apply_filters(thumbor.filters.PHASE_AFTER_LOAD, transform)
开发者ID:caeugusmao,项目名称:thumbor,代码行数:79,代码来源:__init__.py
示例17: check_image
def check_image(self, kw):
if self.context.config.MAX_ID_LENGTH > 0:
# Check if an image with an uuid exists in storage
exists = yield gen.maybe_future(self.context.modules.storage.exists(kw['image'][:self.context.config.MAX_ID_LENGTH]))
if exists:
kw['image'] = kw['image'][:self.context.config.MAX_ID_LENGTH]
url = self.request.uri
if not self.validate(kw['image']):
self._error(400, 'No original image was specified in the given URL')
return
kw['request'] = self.request
self.context.request = RequestParameters(**kw)
has_none = not self.context.request.unsafe and not self.context.request.hash
has_both = self.context.request.unsafe and self.context.request.hash
if has_none or has_both:
self._error(400, 'URL does not have hash or unsafe, or has both: %s' % url)
return
if self.context.request.unsafe and not self.context.config.ALLOW_UNSAFE_URL:
self._error(400, 'URL has unsafe but unsafe is not allowed by the config: %s' % url)
return
if self.context.config.USE_BLACKLIST:
blacklist = yield self.get_blacklist_contents()
if self.context.request.image_url in blacklist:
self._error(400, 'Source image url has been blacklisted: %s' % self.context.request.image_url )
return
url_signature = self.context.request.hash
if url_signature:
signer = Signer(self.context.server.security_key)
url_to_validate = Url.encode_url(url).replace('/%s/' % self.context.request.hash, '')
valid = signer.validate(url_signature, url_to_validate)
if not valid and self.context.config.STORES_CRYPTO_KEY_FOR_EACH_IMAGE:
# Retrieves security key for this image if it has been seen before
security_key = yield gen.maybe_future(self.context.modules.storage.get_crypto(self.context.request.image_url))
if security_key is not None:
signer = Signer(security_key)
valid = signer.validate(url_signature, url_to_validate)
if not valid:
is_valid = True
if self.context.config.ALLOW_OLD_URLS:
cr = Cryptor(self.context.server.security_key)
options = cr.get_options(self.context.request.hash, self.context.request.image_url)
if options is None:
is_valid = False
else:
options['request'] = self.request
self.context.request = RequestParameters(**options)
logger.warning(
'OLD FORMAT URL DETECTED!!! This format of URL will be discontinued in ' +
'upcoming versions. Please start using the new format as soon as possible. ' +
'More info at https://github.com/globocom/thumbor/wiki/3.0.0-release-changes'
)
else:
is_valid = False
if not is_valid:
self._error(400, 'Malformed URL: %s' % url)
return
self.execute_image_operations()
开发者ID:rdkls,项目名称:thumbor,代码行数:71,代码来源:imaging.py
示例18: get
def get(self, **kw):
# Check if an image with an uuid exists in storage
if self.context.modules.storage.exists(kw['image'][:32]):
kw['image'] = kw['image'][:32]
url = self.request.uri
if not self.validate(kw['image']):
self._error(404, 'No original image was specified in the given URL')
return
self.context.request = RequestParameters(**kw)
self.context.request.unsafe = self.context.request.unsafe == 'unsafe'
if (self.request.query):
self.context.request.image_url += '?%s' % self.request.query
self.context.request.image_url = self.encode_url(self.context.request.image_url.encode('utf-8'))
has_none = not self.context.request.unsafe and not self.context.request.hash
has_both = self.context.request.unsafe and self.context.request.hash
if has_none or has_both:
self._error(404, 'URL does not have hash or unsafe, or has both: %s' % url)
return
if self.context.request.unsafe and not self.context.config.ALLOW_UNSAFE_URL:
self._error(404, 'URL has unsafe but unsafe is not allowed by the config: %s' % url)
return
url_signature = self.context.request.hash
if url_signature:
signer = Signer(self.context.server.security_key)
url_to_validate = self.encode_url(url).replace('/%s/' % self.context.request.hash, '')
valid = signer.validate(url_signature, url_to_validate)
if not valid and self.context.config.STORES_CRYPTO_KEY_FOR_EACH_IMAGE:
# Retrieves security key for this image if it has been seen before
security_key = self.context.modules.storage.get_crypto(self.context.request.image_url)
if security_key is not None:
signer = Signer(security_key)
valid = signer.validate(url_signature, url_to_validate)
if not valid:
is_valid = True
if self.context.config.ALLOW_OLD_URLS:
cr = Cryptor(self.context.server.security_key)
options = cr.get_options(self.context.request.hash, self.context.request.image_url)
if options is None:
is_valid = False
else:
self.context.request = RequestParameters(**options)
logger.warning('OLD FORMAT URL DETECTED!!! This format of URL will be discontinued in upcoming versions. Please start using the new format as soon as possible. More info at https://github.com/globocom/thumbor/wiki/3.0.0-release-changes')
else:
is_valid = False
if not is_valid:
self._error(404, 'Malformed URL: %s' % url)
return
return self.execute_image_operations()
开发者ID:chicovisck,项目名称:thumbor,代码行数:63,代码来源:imaging.py
注:本文中的thumbor.utils.logger.warning函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论