def _sync_post_content(post: model.Post) -> None: regenerate_thumb = False if hasattr(post, '__content'): content = getattr(post, '__content') files.save(get_post_content_path(post), content) delattr(post, '__content') regenerate_thumb = True if post.post_id and post.type in ( model.Post.TYPE_IMAGE, model.Post.TYPE_ANIMATION): image_hash.delete_image(post.post_id) image_hash.add_image(post.post_id, content) if hasattr(post, '__thumbnail'): if getattr(post, '__thumbnail'): files.save( get_post_thumbnail_backup_path(post), getattr(post, '__thumbnail')) else: files.delete(get_post_thumbnail_backup_path(post)) delattr(post, '__thumbnail') regenerate_thumb = True if regenerate_thumb: generate_post_thumbnail(post)
def _sync_post_content(post: model.Post) -> None: regenerate_thumb = False if hasattr(post, '__content'): content = getattr(post, '__content') files.save(get_post_content_path(post), content) delattr(post, '__content') regenerate_thumb = True if post.post_id and post.type in ( model.Post.TYPE_IMAGE, model.Post.TYPE_ANIMATION): image_hash.delete_image(post.post_id) image_hash.add_image(post.post_id, content) if hasattr(post, '__thumbnail'): if getattr(post, '__thumbnail'): files.save( get_post_thumbnail_backup_path(post), getattr(post, '__thumbnail')) else: files.delete(get_post_thumbnail_backup_path(post)) delattr(post, '__thumbnail') regenerate_thumb = True if regenerate_thumb: generate_post_thumbnail(post)
def update_post_thumbnail(post, content=None, delete=True): if content is None: content = files.get(get_post_content_path(post)) if delete: files.delete(get_post_thumbnail_backup_path(post)) else: files.save(get_post_thumbnail_backup_path(post), content) generate_post_thumbnail(post)
def generate_post_thumbnail(post): if files.has(get_post_thumbnail_backup_path(post)): content = files.get(get_post_thumbnail_backup_path(post)) else: content = files.get(get_post_content_path(post)) try: image = images.Image(content) image.resize_fill( int(config.config['thumbnails']['post_width']), int(config.config['thumbnails']['post_height'])) files.save(get_post_thumbnail_path(post), image.to_jpeg()) except errors.ProcessingError: files.save(get_post_thumbnail_path(post), EMPTY_PIXEL)
def update_user_avatar(user, avatar_style, avatar_content): if avatar_style == 'gravatar': user.avatar_style = user.AVATAR_GRAVATAR elif avatar_style == 'manual': user.avatar_style = user.AVATAR_MANUAL if not avatar_content: raise InvalidAvatarError('Avatar content missing.') image = images.Image(avatar_content) image.resize_fill(int(config.config['thumbnails']['avatar_width']), int(config.config['thumbnails']['avatar_height'])) files.save('avatars/' + user.name.lower() + '.png', image.to_png()) else: raise InvalidAvatarError( 'Avatar style %r is invalid. Valid avatar styles: %r.' % (avatar_style, ['gravatar', 'manual']))
def update_avatar(user, avatar_style, avatar_content): if avatar_style == 'gravatar': user.avatar_style = user.AVATAR_GRAVATAR elif avatar_style == 'manual': user.avatar_style = user.AVATAR_MANUAL if not avatar_content: raise InvalidAvatarError('Avatar content missing.') image = images.Image(avatar_content) image.resize_fill( int(config.config['thumbnails']['avatar_width']), int(config.config['thumbnails']['avatar_height'])) files.save('avatars/' + user.name.lower() + '.jpg', image.to_jpeg()) else: raise InvalidAvatarError( 'Avatar style %r is invalid. Valid avatar styles: %r.' % ( avatar_style, ['gravatar', 'manual']))
def generate_post_thumbnail(post: model.Post) -> None: assert post if files.has(get_post_thumbnail_backup_path(post)): content = files.get(get_post_thumbnail_backup_path(post)) else: content = files.get(get_post_content_path(post)) try: assert content image = images.Image(content) image.resize_fill( int(config.config["thumbnails"]["post_width"]), int(config.config["thumbnails"]["post_height"]), ) files.save(get_post_thumbnail_path(post), image.to_jpeg()) except errors.ProcessingError: files.save(get_post_thumbnail_path(post), EMPTY_PIXEL)
def _sync_post_content(post: model.Post) -> None: regenerate_thumb = False if hasattr(post, '__content'): content = getattr(post, '__content') files.save(get_post_content_path(post), content) delattr(post, '__content') regenerate_thumb = True if hasattr(post, '__thumbnail'): if getattr(post, '__thumbnail'): files.save(get_post_thumbnail_backup_path(post), getattr(post, '__thumbnail')) else: files.delete(get_post_thumbnail_backup_path(post)) delattr(post, '__thumbnail') regenerate_thumb = True if regenerate_thumb: generate_post_thumbnail(post)
def update_user_avatar(user, avatar_style, avatar_content=None): assert user if avatar_style == 'gravatar': user.avatar_style = user.AVATAR_GRAVATAR elif avatar_style == 'manual': user.avatar_style = user.AVATAR_MANUAL avatar_path = 'avatars/' + user.name.lower() + '.png' if not avatar_content: if files.has(avatar_path): return raise InvalidAvatarError('Avatar content missing.') image = images.Image(avatar_content) image.resize_fill( int(config.config['thumbnails']['avatar_width']), int(config.config['thumbnails']['avatar_height'])) files.save(avatar_path, image.to_png()) else: raise InvalidAvatarError( 'Avatar style %r is invalid. Valid avatar styles: %r.' % ( avatar_style, ['gravatar', 'manual']))
def update_user_avatar(user: model.User, avatar_style: str, avatar_content: Optional[bytes] = None) -> None: assert user if avatar_style == 'gravatar': user.avatar_style = user.AVATAR_GRAVATAR elif avatar_style == 'manual': user.avatar_style = user.AVATAR_MANUAL avatar_path = 'avatars/' + user.name.lower() + '.png' if not avatar_content: if files.has(avatar_path): return raise InvalidAvatarError('아바타 컨텐츠가 누락되었습니다.') image = images.Image(avatar_content) image.resize_fill(int(config.config['thumbnails']['avatar_width']), int(config.config['thumbnails']['avatar_height'])) files.save(avatar_path, image.to_png()) else: raise InvalidAvatarError('아바타 스타일 %r 은(는) 잘못된 값입니다. 올바른 스타일 값: %r.' % (avatar_style, ['gravatar', 'manual']))
def generate_post_thumbnail(post: model.Post) -> None: assert post if files.has(get_post_thumbnail_backup_path(post)): content = files.get(get_post_thumbnail_backup_path(post)) else: content = files.get(get_post_content_path(post)) try: assert content if post.type == model.Post.TYPE_IMAGE: media = images.Image(content) elif post.type == model.Post.TYPE_VIDEO: media = images.Video(content) thumb = media.to_thumbnail( int(config.config["thumbnails"]["post_width"]), int(config.config["thumbnails"]["post_height"]), ) files.save(get_post_thumbnail_path(post), thumb) except errors.ProcessingError: files.save(get_post_thumbnail_path(post), EMPTY_PIXEL)
def update_user_avatar(user: model.User, avatar_style: str, avatar_content: Optional[bytes] = None) -> None: assert user if avatar_style == "gravatar": user.avatar_style = user.AVATAR_GRAVATAR elif avatar_style == "manual": user.avatar_style = user.AVATAR_MANUAL avatar_path = "avatars/" + user.name.lower() + ".png" if not avatar_content: if files.has(avatar_path): return raise InvalidAvatarError("Avatar content missing.") image = images.Image(avatar_content) image.resize_fill( int(config.config["thumbnails"]["avatar_width"]), int(config.config["thumbnails"]["avatar_height"]), ) files.save(avatar_path, image.to_png()) else: raise InvalidAvatarError( "Avatar style %r is invalid. Valid avatar styles: %r." % (avatar_style, ["gravatar", "manual"]))
def update_post_content(post, content): if not content: raise InvalidPostContentError('Post content missing.') post.mime_type = mime.get_mime_type(content) if mime.is_flash(post.mime_type): post.type = db.Post.TYPE_FLASH elif mime.is_image(post.mime_type): if mime.is_animated_gif(content): post.type = db.Post.TYPE_ANIMATION else: post.type = db.Post.TYPE_IMAGE elif mime.is_video(post.mime_type): post.type = db.Post.TYPE_VIDEO else: raise InvalidPostContentError('Unhandled file type: %r' % post.mime_type) post.checksum = util.get_md5(content) other_post = db.session \ .query(db.Post) \ .filter(db.Post.checksum == post.checksum) \ .filter(db.Post.post_id != post.post_id) \ .one_or_none() if other_post: raise PostAlreadyUploadedError( 'Post already uploaded (%d)' % other_post.post_id) post.file_size = len(content) try: image = images.Image(content) post.canvas_width = image.width post.canvas_height = image.height except errors.ProcessingError: post.canvas_width = None post.canvas_height = None files.save(get_post_content_path(post), content) update_post_thumbnail(post, content=None, delete=False)
def save(content: bytes) -> str: checksum = util.get_sha1(content) path = _get_path(checksum) if not files.has(path): files.save(path, content) return checksum
def save(content: bytes) -> str: checksum = util.get_sha1(content) path = _get_path(checksum) if not files.has(path): files.save(path, content) return checksum