예제 #1
0
def update_post_notes(post: model.Post, notes: Any) -> None:
    assert post
    post.notes = []
    for note in notes:
        for field in ('polygon', 'text'):
            if field not in note:
                raise InvalidPostNoteError('메모의 %r 필드가 누락되었습니다.' % field)
        if not note['text']:
            raise InvalidPostNoteError('메모의 텍스트가 반드시 필요합니다.')
        if not isinstance(note['polygon'], (list, tuple)):
            raise InvalidPostNoteError('메모의 폴리곤은 점의 리스트여야 합니다.')
        if len(note['polygon']) < 3:
            raise InvalidPostNoteError('메모의 폴리곤은 최소 3개의 점이 포함되어야 합니다.')
        for point in note['polygon']:
            if not isinstance(point, (list, tuple)):
                raise InvalidPostNoteError('메모의 폴리곤 점은 길이 2인 리스트여야 합니다.')
            if len(point) != 2:
                raise InvalidPostNoteError('메모의 폴리곤 점은 두 좌표축을 포함해야 합니다.')
            try:
                pos_x = float(point[0])
                pos_y = float(point[1])
                if not 0 <= pos_x <= 1 or not 0 <= pos_y <= 1:
                    raise InvalidPostNoteError(
                        '메모의 모든 폴리곤 점은 이미지 내부에 존재해야 합니다 (0 ~ 1 범위).')
            except ValueError:
                raise InvalidPostNoteError('메모의 폴리곤 점은 숫자여야 합니다.')
        if util.value_exceeds_column_size(note['text'], model.PostNote.text):
            raise InvalidPostNoteError('메모 텍스트가 너무 깁니다.')
        post.notes.append(
            model.PostNote(polygon=note['polygon'], text=str(note['text'])))
예제 #2
0
파일: tags.py 프로젝트: hnamquoc/szurubooru
def update_tag_names(tag, names):
    names = util.icase_unique([name for name in names if name])
    if not len(names):
        raise InvalidTagNameError('At least one name must be specified.')
    for name in names:
        _verify_name_validity(name)
    expr = sqlalchemy.sql.false()
    for name in names:
        if util.value_exceeds_column_size(name, db.TagName.name):
            raise InvalidTagNameError('Name is too long.')
        expr = expr | db.TagName.name.ilike(name)
    if tag.tag_id:
        expr = expr & (db.TagName.tag_id != tag.tag_id)
    existing_tags = db.session.query(db.TagName).filter(expr).all()
    if len(existing_tags):
        raise TagAlreadyExistsError(
            'One of names is already used by another tag.')
    tag_names_to_remove = []
    for tag_name in tag.names:
        if not _check_name_intersection([tag_name.name], names):
            tag_names_to_remove.append(tag_name)
    for tag_name in tag_names_to_remove:
        tag.names.remove(tag_name)
    for name in names:
        if not _check_name_intersection(_get_plain_names(tag), [name]):
            tag.names.append(db.TagName(name))
예제 #3
0
def update_post_notes(post: model.Post, notes: Any) -> None:
    assert post
    post.notes = []
    for note in notes:
        for field in ('polygon', 'text'):
            if field not in note:
                raise InvalidPostNoteError('Note is missing %r field.' % field)
        if not note['text']:
            raise InvalidPostNoteError('A note\'s text cannot be empty.')
        if not isinstance(note['polygon'], (list, tuple)):
            raise InvalidPostNoteError(
                'A note\'s polygon must be a list of points.')
        if len(note['polygon']) < 3:
            raise InvalidPostNoteError(
                'A note\'s polygon must have at least 3 points.')
        for point in note['polygon']:
            if not isinstance(point, (list, tuple)):
                raise InvalidPostNoteError(
                    'A note\'s polygon point must be a list of length 2.')
            if len(point) != 2:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must have two coordinates.')
            try:
                pos_x = float(point[0])
                pos_y = float(point[1])
                if not 0 <= pos_x <= 1 or not 0 <= pos_y <= 1:
                    raise InvalidPostNoteError(
                        'All points must fit in the image (0..1 range).')
            except ValueError:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must be numeric.')
        if util.value_exceeds_column_size(note['text'], model.PostNote.text):
            raise InvalidPostNoteError('Note text is too long.')
        post.notes.append(
            model.PostNote(polygon=note['polygon'], text=str(note['text'])))
예제 #4
0
파일: posts.py 프로젝트: rr-/szurubooru
def update_post_notes(post: model.Post, notes: Any) -> None:
    assert post
    post.notes = []
    for note in notes:
        for field in ('polygon', 'text'):
            if field not in note:
                raise InvalidPostNoteError('Note is missing %r field.' % field)
        if not note['text']:
            raise InvalidPostNoteError('A note\'s text cannot be empty.')
        if not isinstance(note['polygon'], (list, tuple)):
            raise InvalidPostNoteError(
                'A note\'s polygon must be a list of points.')
        if len(note['polygon']) < 3:
            raise InvalidPostNoteError(
                'A note\'s polygon must have at least 3 points.')
        for point in note['polygon']:
            if not isinstance(point, (list, tuple)):
                raise InvalidPostNoteError(
                    'A note\'s polygon point must be a list of length 2.')
            if len(point) != 2:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must have two coordinates.')
            try:
                pos_x = float(point[0])
                pos_y = float(point[1])
                if not 0 <= pos_x <= 1 or not 0 <= pos_y <= 1:
                    raise InvalidPostNoteError(
                        'All points must fit in the image (0..1 range).')
            except ValueError:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must be numeric.')
        if util.value_exceeds_column_size(note['text'], model.PostNote.text):
            raise InvalidPostNoteError('Note text is too long.')
        post.notes.append(
            model.PostNote(polygon=note['polygon'], text=str(note['text'])))
예제 #5
0
def update_post_notes(post, notes):
    post.notes = []
    for note in notes:
        for field in ('polygon', 'text'):
            if field not in note:
                raise InvalidPostNoteError('Note is missing %r field.' % field)
        if not note['text']:
            raise InvalidPostNoteError('A note\'s text cannot be empty.')
        if len(note['polygon']) < 3:
            raise InvalidPostNoteError(
                'A note\'s polygon must have at least 3 points.')
        for point in note['polygon']:
            if len(point) != 2:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must have two coordinates.')
            try:
                pos_x = float(point[0])
                pos_y = float(point[1])
                if not 0 <= pos_x <= 1 or not 0 <= pos_y <= 1:
                    raise InvalidPostNoteError(
                        'A point in note\'s polygon must be in 0..1 range.')
            except ValueError:
                raise InvalidPostNoteError(
                    'A point in note\'s polygon must be numeric.')
        if util.value_exceeds_column_size(note['text'], db.PostNote.text):
            raise InvalidPostNoteError('Note text is too long.')
        post.notes.append(
            db.PostNote(polygon=note['polygon'], text=note['text']))
예제 #6
0
def update_user_token_note(user_token: model.UserToken, note: str) -> None:
    assert user_token
    note = note.strip() if note is not None else ''
    note = None if len(note) == 0 else note
    if util.value_exceeds_column_size(note, model.UserToken.note):
        raise InvalidNoteError('Note is too long.')
    user_token.note = note
    update_user_token_edit_time(user_token)
예제 #7
0
파일: users.py 프로젝트: yf-dev/yfbooru
def update_user_email(user: model.User, email: str) -> None:
    assert user
    email = email.strip()
    if util.value_exceeds_column_size(email, model.User.email):
        raise InvalidEmailError('이메일이 너무 깁니다.')
    if not util.is_valid_email(email):
        raise InvalidEmailError('잘못된 이메일입니다.')
    user.email = email or None
예제 #8
0
파일: users.py 프로젝트: zeazje/szurubooru
def update_user_email(user: model.User, email: str) -> None:
    assert user
    email = email.strip()
    if util.value_exceeds_column_size(email, model.User.email):
        raise InvalidEmailError('Email is too long.')
    if not util.is_valid_email(email):
        raise InvalidEmailError('E-mail is invalid.')
    user.email = email or None
예제 #9
0
def update_category_color(category, color):
    if not color:
        raise InvalidTagCategoryNameError('Color cannot be empty.')
    if not re.match(r'^#?[0-9a-z]+$', color):
        raise InvalidTagCategoryNameError('Invalid color.')
    if util.value_exceeds_column_size(color, db.TagCategory.color):
        raise InvalidTagCategoryColorError('Color is too long.')
    category.color = color
예제 #10
0
파일: users.py 프로젝트: rr-/szurubooru
def update_user_email(user: model.User, email: str) -> None:
    assert user
    email = email.strip()
    if util.value_exceeds_column_size(email, model.User.email):
        raise InvalidEmailError('Email is too long.')
    if not util.is_valid_email(email):
        raise InvalidEmailError('E-mail is invalid.')
    user.email = email or None
예제 #11
0
def update_category_color(category, color):
    if not color:
        raise InvalidTagCategoryNameError('Color cannot be empty.')
    if not re.match(r'^#?[0-9a-z]+$', color):
        raise InvalidTagCategoryNameError('Invalid color.')
    if util.value_exceeds_column_size(color, db.TagCategory.color):
        raise InvalidTagCategoryColorError('Color is too long.')
    category.color = color
예제 #12
0
def update_category_color(category: model.TagCategory, color: str) -> None:
    assert category
    if not color:
        raise InvalidTagCategoryColorError("Color cannot be empty.")
    if not re.match(r"^#?[0-9a-z]+$", color):
        raise InvalidTagCategoryColorError("Invalid color.")
    if util.value_exceeds_column_size(color, model.TagCategory.color):
        raise InvalidTagCategoryColorError("Color is too long.")
    category.color = color
예제 #13
0
def update_category_color(category: model.TagCategory, color: str) -> None:
    assert category
    if not color:
        raise InvalidTagCategoryColorError('색상은 빈 값일 수 없습니다.')
    if not re.match(r'^#?[0-9A-Za-z]+$', color):
        raise InvalidTagCategoryColorError('잘못된 색상.')
    if util.value_exceeds_column_size(color, model.TagCategory.color):
        raise InvalidTagCategoryColorError('색상이 너무 깁니다.')
    category.color = color
예제 #14
0
def update_user_email(user, email):
    if email:
        email = email.strip()
    if not email:
        email = None
    if email and util.value_exceeds_column_size(email, db.User.email):
        raise InvalidEmailError('Email is too long.')
    if not util.is_valid_email(email):
        raise InvalidEmailError('E-mail is invalid.')
    user.email = email
예제 #15
0
def update_email(user, email):
    if email:
        email = email.strip()
    if not email:
        email = None
    if email and util.value_exceeds_column_size(email, db.User.email):
        raise InvalidEmailError('Email is too long.')
    if not util.is_valid_email(email):
        raise InvalidEmailError('E-mail is invalid.')
    user.email = email
예제 #16
0
def update_name(category, name):
    if not name:
        raise InvalidTagCategoryNameError('Name cannot be empty.')
    expr = db.TagCategory.name.ilike(name)
    if category.tag_category_id:
        expr = expr & (db.TagCategory.tag_category_id != category.tag_category_id)
    already_exists = db.session.query(db.TagCategory).filter(expr).count() > 0
    if already_exists:
        raise TagCategoryAlreadyExistsError(
            'A category with this name already exists.')
    if util.value_exceeds_column_size(name, db.TagCategory.name):
        raise InvalidTagCategoryNameError('Name is too long.')
    _verify_name_validity(name)
    category.name = name
예제 #17
0
def update_user_name(user, name):
    if not name:
        raise InvalidUserNameError('Name cannot be empty.')
    if util.value_exceeds_column_size(name, db.User.name):
        raise InvalidUserNameError('User name is too long.')
    other_user = try_get_user_by_name(name)
    if other_user and other_user.user_id != user.user_id:
        raise UserAlreadyExistsError('User %r already exists.' % name)
    name = name.strip()
    name_regex = config.config['user_name_regex']
    if not re.match(name_regex, name):
        raise InvalidUserNameError('User name %r must satisfy regex %r.' %
                                   (name, name_regex))
    user.name = name
예제 #18
0
def update_name(user, name, auth_user):
    if not name:
        raise InvalidUserNameError('Name cannot be empty.')
    if util.value_exceeds_column_size(name, db.User.name):
        raise InvalidUserNameError('User name is too long.')
    other_user = get_user_by_name(name)
    if other_user and other_user.user_id != auth_user.user_id:
        raise UserAlreadyExistsError('User %r already exists.' % name)
    name = name.strip()
    name_regex = config.config['user_name_regex']
    if not re.match(name_regex, name):
        raise InvalidUserNameError(
            'User name %r must satisfy regex %r.' % (name, name_regex))
    user.name = name
예제 #19
0
def update_category_name(category, name):
    if not name:
        raise InvalidTagCategoryNameError('Name cannot be empty.')
    expr = db.TagCategory.name.ilike(name)
    if category.tag_category_id:
        expr = expr & (db.TagCategory.tag_category_id !=
                       category.tag_category_id)
    already_exists = db.session.query(db.TagCategory).filter(expr).count() > 0
    if already_exists:
        raise TagCategoryAlreadyExistsError(
            'A category with this name already exists.')
    if util.value_exceeds_column_size(name, db.TagCategory.name):
        raise InvalidTagCategoryNameError('Name is too long.')
    _verify_name_validity(name)
    category.name = name
예제 #20
0
def update_category_name(category: model.TagCategory, name: str) -> None:
    assert category
    if not name:
        raise InvalidTagCategoryNameError('이름은 빈 값일 수 없습니다.')
    expr = sa.func.lower(model.TagCategory.name) == name.lower()
    if category.tag_category_id:
        expr = expr & (model.TagCategory.tag_category_id !=
                       category.tag_category_id)
    already_exists = (db.session.query(model.TagCategory).filter(expr).count()
                      > 0)
    if already_exists:
        raise TagCategoryAlreadyExistsError('동일한 이름의 카테고리자 존재합니다.')
    if util.value_exceeds_column_size(name, model.TagCategory.name):
        raise InvalidTagCategoryNameError('이름이 너무 깁니다.')
    _verify_name_validity(name)
    category.name = name
    cache.remove(DEFAULT_CATEGORY_NAME_CACHE_KEY)
예제 #21
0
파일: users.py 프로젝트: yf-dev/yfbooru
def update_user_name(user: model.User, name: str) -> None:
    assert user
    if not name:
        raise InvalidUserNameError('닉네임(ID)은 빈 값일 수 없습니다.')
    if util.value_exceeds_column_size(name, model.User.name):
        raise InvalidUserNameError('닉네임(ID)이 너무 깁니다.')
    name = name.strip()
    name_regex = config.config['user_name_regex']
    if not re.match(name_regex, name):
        raise InvalidUserNameError('닉네임(ID) %r 은(는) 다음의 정규식을 만족해야 합니다: %r' %
                                   (name, name_regex))
    other_user = try_get_user_by_name(name)
    if other_user and other_user.user_id != user.user_id:
        raise UserAlreadyExistsError('사용자 %r 은(는) 이미 존재합니다.' % name)
    if user.name and files.has(get_avatar_path(user.name)):
        files.move(get_avatar_path(user.name), get_avatar_path(name))
    user.name = name
예제 #22
0
파일: users.py 프로젝트: zeazje/szurubooru
def update_user_name(user: model.User, name: str) -> None:
    assert user
    if not name:
        raise InvalidUserNameError('Name cannot be empty.')
    if util.value_exceeds_column_size(name, model.User.name):
        raise InvalidUserNameError('User name is too long.')
    name = name.strip()
    name_regex = config.config['user_name_regex']
    if not re.match(name_regex, name):
        raise InvalidUserNameError('User name %r must satisfy regex %r.' %
                                   (name, name_regex))
    other_user = try_get_user_by_name(name)
    if other_user and other_user.user_id != user.user_id:
        raise UserAlreadyExistsError('User %r already exists.' % name)
    if user.name and files.has(get_avatar_path(user.name)):
        files.move(get_avatar_path(user.name), get_avatar_path(name))
    user.name = name
예제 #23
0
def update_category_name(category, name):
    assert category
    if not name:
        raise InvalidTagCategoryNameError('Name cannot be empty.')
    expr = sqlalchemy.func.lower(db.TagCategory.name) == name.lower()
    if category.tag_category_id:
        expr = expr & (
            db.TagCategory.tag_category_id != category.tag_category_id)
    already_exists = db.session.query(db.TagCategory).filter(expr).count() > 0
    if already_exists:
        raise TagCategoryAlreadyExistsError(
            'A category with this name already exists.')
    if util.value_exceeds_column_size(name, db.TagCategory.name):
        raise InvalidTagCategoryNameError('Name is too long.')
    _verify_name_validity(name)
    category.name = name
    cache.remove(DEFAULT_CATEGORY_NAME_CACHE_KEY)
예제 #24
0
파일: users.py 프로젝트: rr-/szurubooru
def update_user_name(user: model.User, name: str) -> None:
    assert user
    if not name:
        raise InvalidUserNameError('Name cannot be empty.')
    if util.value_exceeds_column_size(name, model.User.name):
        raise InvalidUserNameError('User name is too long.')
    name = name.strip()
    name_regex = config.config['user_name_regex']
    if not re.match(name_regex, name):
        raise InvalidUserNameError(
            'User name %r must satisfy regex %r.' % (name, name_regex))
    other_user = try_get_user_by_name(name)
    if other_user and other_user.user_id != user.user_id:
        raise UserAlreadyExistsError('User %r already exists.' % name)
    if user.name and files.has(get_avatar_path(user.name)):
        files.move(get_avatar_path(user.name), get_avatar_path(name))
    user.name = name
예제 #25
0
def update_category_name(category: model.TagCategory, name: str) -> None:
    assert category
    if not name:
        raise InvalidTagCategoryNameError("Name cannot be empty.")
    expr = sa.func.lower(model.TagCategory.name) == name.lower()
    if category.tag_category_id:
        expr = expr & (model.TagCategory.tag_category_id !=
                       category.tag_category_id)
    already_exists = (db.session.query(model.TagCategory).filter(expr).count()
                      > 0)
    if already_exists:
        raise TagCategoryAlreadyExistsError(
            "A category with this name already exists.")
    if util.value_exceeds_column_size(name, model.TagCategory.name):
        raise InvalidTagCategoryNameError("Name is too long.")
    _verify_name_validity(name)
    category.name = name
    cache.remove(DEFAULT_CATEGORY_NAME_CACHE_KEY)
예제 #26
0
def _verify_name_validity(name: str) -> None:
    if util.value_exceeds_column_size(name, model.PoolName.name):
        raise InvalidPoolNameError("Name is too long.")
    name_regex = config.config["pool_name_regex"]
    if not re.match(name_regex, name):
        raise InvalidPoolNameError("Name must satisfy regex %r." % name_regex)
예제 #27
0
파일: posts.py 프로젝트: rr-/szurubooru
def update_post_source(post: model.Post, source: Optional[str]) -> None:
    assert post
    if util.value_exceeds_column_size(source, model.Post.source):
        raise InvalidPostSourceError('Source is too long.')
    post.source = source or None
예제 #28
0
def update_pool_description(pool: model.Pool, description: str) -> None:
    assert pool
    if util.value_exceeds_column_size(description, model.Pool.description):
        raise InvalidPoolDescriptionError("Description is too long.")
    pool.description = description or None
예제 #29
0
파일: tags.py 프로젝트: rr-/szurubooru
def _verify_name_validity(name: str) -> None:
    if util.value_exceeds_column_size(name, model.TagName.name):
        raise InvalidTagNameError('Name is too long.')
    name_regex = config.config['tag_name_regex']
    if not re.match(name_regex, name):
        raise InvalidTagNameError('Name must satisfy regex %r.' % name_regex)
예제 #30
0
def update_post_source(post: model.Post, source: Optional[str]) -> None:
    assert post
    if util.value_exceeds_column_size(source, model.Post.source):
        raise InvalidPostSourceError('Source is too long.')
    post.source = source or None
예제 #31
0
def update_tag_description(tag: model.Tag, description: str) -> None:
    assert tag
    if util.value_exceeds_column_size(description, model.Tag.description):
        raise InvalidTagDescriptionError("Description is too long.")
    tag.description = description or None
예제 #32
0
파일: tags.py 프로젝트: rr-/szurubooru
def update_tag_description(tag: model.Tag, description: str) -> None:
    assert tag
    if util.value_exceeds_column_size(description, model.Tag.description):
        raise InvalidTagDescriptionError('Description is too long.')
    tag.description = description or None
예제 #33
0
def update_tag_description(tag, description):
    assert tag
    if util.value_exceeds_column_size(description, db.Tag.description):
        raise InvalidTagDescriptionError('Description is too long.')
    tag.description = description
예제 #34
0
파일: tags.py 프로젝트: paul1409/fumobooru
def _verify_name_validity(name: str) -> None:
    if util.value_exceeds_column_size(name, model.TagName.name):
        raise InvalidTagNameError('Name is too long.')
    name_regex = config.config['tag_name_regex']
    if not re.match(name_regex, name):
        raise InvalidTagNameError('Name must satisfy regex %r.' % name_regex)
예제 #35
0
def _verify_name_validity(name: str) -> None:
    if util.value_exceeds_column_size(name, model.TagName.name):
        raise InvalidTagNameError('이름이 너무 깁니다.')
    name_regex = config.config['tag_name_regex']
    if not re.match(name_regex, name):
        raise InvalidTagNameError('이름은 다음 정규식을 만족해야 합니다: %r' % name_regex)
예제 #36
0
def update_post_source(post, source):
    if util.value_exceeds_column_size(source, db.Post.source):
        raise InvalidPostSourceError('Source is too long.')
    post.source = source
예제 #37
0
def update_color(category, color):
    if not color:
        raise InvalidTagCategoryNameError('Color cannot be empty.')
    if util.value_exceeds_column_size(color, db.TagCategory.color):
        raise InvalidTagCategoryColorError('Color is too long.')
    category.color = color