Update tag

This commit is contained in:
RemiZOffAlex
2020-05-06 15:47:27 +03:00
parent eabf534e46
commit 1ec9e5516b
8 changed files with 422 additions and 400 deletions

View File

@@ -1,365 +0,0 @@
__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'https://remizoffalex.ru'
from . import jsonrpc, login_required
from .. import app, lib, models
@jsonrpc.method('tag.add(name=str)')
@login_required
def tag_add(name):
"""
Добавить новый тег
"""
exist = models.db_session.query(
models.Tag
).filter(
models.Tag.name == name
).first()
if exist:
raise ValueError
newTag = models.Tag(name)
models.db_session.add(newTag)
models.db_session.commit()
return newTag.as_dict()
@jsonrpc.method('tag.delete(id=int)')
@login_required
def tag_delete(id):
"""
Удалить тег
"""
exist = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'OK'
@jsonrpc.method('tag.exist(name=str)')
def tag_exist(name):
"""
Проверить существует ли тег и вернуть информацию о нём
"""
text = name.lower().strip()
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.name==text
).first()
if tagRow is None:
raise ValueError
result = {
'id': tagRow.id,
'name': tagRow.name
}
return result
@jsonrpc.method('tag.pages(id=int, page=int)')
def tag_pages_list(id, page):
"""
Список статей
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagPage.page_id
).filter(
models.TagPage.tag_id==id
)
pages = models.db_session.query(
models.Page
).filter(
models.Page.id.in_(indexes)
).order_by(
models.Page.title.asc()
)
pages = lib.getpage(
pages,
page,
app.config['ITEMS_ON_PAGE']
).all()
result = []
for page in pages:
newRow = page.as_dict()
newRow['user'] = page.user.as_dict()
newRow['tags'] = []
for tagLink in page.tags:
newRow['tags'].append(tagLink.tag.as_dict())
result.append(newRow)
return result
@jsonrpc.method('tag.pages.count(id=int)')
def tag_pages_count(id):
"""Общее количество статей
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagPage.page_id
).filter(
models.TagPage.tag_id==id
)
result = models.db_session.query(
models.Page
).filter(
models.Page.id.in_(indexes)
).count()
return result
@jsonrpc.method('tag.notes(id=int, page=int)')
@login_required
def tag_notes_list(id, page):
"""Список заметок
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagNote.note_id
).filter(
models.TagNote.tag_id==id
)
notes = models.db_session.query(
models.Note
).filter(
models.Note.user_id==lib.get_user().id,
models.Note.id.in_(indexes)
).order_by(
models.Note.title.asc()
)
notes = lib.getpage(
notes,
page,
app.config['ITEMS_ON_PAGE']
).all()
result = []
for note in notes:
newRow = note.as_dict()
newRow['tags'] = []
for tagLink in note.tags:
newRow['tags'].append(tagLink.tag.as_dict())
result.append(newRow)
return result
@jsonrpc.method('tag.notes.count(id=int)')
@login_required
def tag_notes_count(id):
"""Общее количество заметок
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagNote.note_id
).filter(
models.TagNote.tag_id==id
)
result = models.db_session.query(
models.Note
).filter(
models.Note.user_id==lib.get_user().id,
models.Note.id.in_(indexes)
).count()
return result
@jsonrpc.method('tags()')
def tags_list():
"""
Список тегов
"""
tags = models.db_session.query(
models.Tag
).all()
result = []
for tag in tags:
newRow = tag.as_dict()
result.append(newRow)
return result
@jsonrpc.method('tag.addToPage')
@login_required
def tag_addToPage(tag, id):
"""
Добавление тега на страницы
"""
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
page = models.db_session.query(
models.Page
).filter(
models.Page.id==id
).first()
if page is None:
raise ValueError
exist = models.db_session.query(
models.TagPage
).filter(
models.TagPage.tag_id==tagRow.id,
models.TagPage.page_id==page.id
).first()
if exist:
raise ValueError
newtagpage = models.TagPage(
page,
tagRow
)
models.db_session.add(newtagpage)
models.db_session.commit()
result = tagRow.as_dict()
return result
@jsonrpc.method('tag.deleteFromPage')
@login_required
def tag_deleteFromPage(tag, id):
"""
Удаление тега со страницы
"""
exist = models.db_session.query(
models.TagPage
).filter(
models.TagPage.tag_id==tag,
models.TagPage.page_id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'Тег {} удален'.format(id)
@jsonrpc.method('tag.addToNote(tag=int, id=int)')
@login_required
def tag_addToNote(tag, id):
"""
Добавление тега в заметку
"""
noteRow = models.db_session.query(
models.Note
).filter(
models.Note.id==id,
models.Note.user_id==lib.get_user().id
).first()
if noteRow is None:
raise ValueError
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
exist = models.db_session.query(
models.TagNote
).filter(
models.TagNote.tag_id==tagRow.id,
models.TagNote.note_id==noteRow.id
).first()
if exist:
raise ValueError
newtagNote = models.TagNote(
noteRow,
tagRow
)
models.db_session.add(newtagNote)
models.db_session.commit()
result = tagRow.as_dict()
return result
@jsonrpc.method('tag.deleteFromNote(tag=int, id=int)')
@login_required
def tag_deleteFromNote(tag, id):
"""
Удаление тега из заметки
"""
noteRow = models.db_session.query(
models.Note
).filter(
models.Note.id==id,
models.Note.user_id==lib.get_user().id
).first()
if noteRow is None:
raise ValueError
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
exist = models.db_session.query(
models.TagNote
).filter(
models.TagNote.tag_id==tag,
models.TagNote.note_id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'ok'
@jsonrpc.method('tags.groups')
def tags_groups():
"""
Облако тегов
"""
tags = models.db_session.query(
models.Tag
).order_by(
models.Tag.name
).all()
result = {}
for tag in tags:
tag_json = tag.as_dict()
if tag.name[0] in result:
result[tag.name[0]].append(tag_json)
else:
result[tag.name[0]] = [tag_json]
return result

View File

@@ -0,0 +1,12 @@
__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'https://remizoffalex.ru'
from . import (
note,
page,
tag
)

148
myapp/ns_api/tag/note.py Normal file
View File

@@ -0,0 +1,148 @@
__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'https://remizoffalex.ru'
from .. import jsonrpc, login_required
from ... import app, lib, models
@jsonrpc.method('tag.note.add(tag=int, id=int)')
@login_required
def tag_note_add(tag, id):
"""
Добавление тега в заметку
"""
noteRow = models.db_session.query(
models.Note
).filter(
models.Note.id==id,
models.Note.user_id==lib.get_user().id
).first()
if noteRow is None:
raise ValueError
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
exist = models.db_session.query(
models.TagNote
).filter(
models.TagNote.tag_id==tagRow.id,
models.TagNote.note_id==noteRow.id
).first()
if exist:
raise ValueError
newtagNote = models.TagNote(
noteRow,
tagRow
)
models.db_session.add(newtagNote)
models.db_session.commit()
result = tagRow.as_dict()
return result
@jsonrpc.method('tag.note.delete(tag=int, id=int)')
@login_required
def tag_note_delete(tag, id):
"""
Удаление тега из заметки
"""
noteRow = models.db_session.query(
models.Note
).filter(
models.Note.id==id,
models.Note.user_id==lib.get_user().id
).first()
if noteRow is None:
raise ValueError
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
exist = models.db_session.query(
models.TagNote
).filter(
models.TagNote.tag_id==tag,
models.TagNote.note_id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'ok'
@jsonrpc.method('tag.notes(id=int, page=int)')
@login_required
def tag_notes_list(id, page):
"""Список заметок
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagNote.note_id
).filter(
models.TagNote.tag_id==id
)
notes = models.db_session.query(
models.Note
).filter(
models.Note.user_id==lib.get_user().id,
models.Note.id.in_(indexes)
).order_by(
models.Note.title.asc()
)
notes = lib.getpage(
notes,
page,
app.config['ITEMS_ON_PAGE']
).all()
result = []
for note in notes:
newRow = note.as_dict()
newRow['tags'] = []
for tagLink in note.tags:
newRow['tags'].append(tagLink.tag.as_dict())
result.append(newRow)
return result
@jsonrpc.method('tag.notes.count(id=int)')
@login_required
def tag_notes_count(id):
"""Общее количество заметок
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagNote.note_id
).filter(
models.TagNote.tag_id==id
)
result = models.db_session.query(
models.Note
).filter(
models.Note.user_id==lib.get_user().id,
models.Note.id.in_(indexes)
).count()
return result

130
myapp/ns_api/tag/page.py Normal file
View File

@@ -0,0 +1,130 @@
__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'https://remizoffalex.ru'
from .. import jsonrpc, login_required
from ... import app, lib, models
@jsonrpc.method('tag.page.add(id=int, tag=int)')
@login_required
def tag_page_add(tag, id):
"""
Добавление тега на страницы
"""
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.id==tag
).first()
if tagRow is None:
raise ValueError
page = models.db_session.query(
models.Page
).filter(
models.Page.id==id
).first()
if page is None:
raise ValueError
exist = models.db_session.query(
models.TagPage
).filter(
models.TagPage.tag_id==tagRow.id,
models.TagPage.page_id==page.id
).first()
if exist:
raise ValueError
newtagpage = models.TagPage(
page,
tagRow
)
models.db_session.add(newtagpage)
models.db_session.commit()
result = tagRow.as_dict()
return result
@jsonrpc.method('tag.page.delete(id=int, tag=int)')
@login_required
def tag_page_delete(tag, id):
"""
Удаление тега со страницы
"""
exist = models.db_session.query(
models.TagPage
).filter(
models.TagPage.tag_id==tag,
models.TagPage.page_id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'Тег {} удален'.format(id)
@jsonrpc.method('tag.pages(id=int, page=int)')
def tag_pages_list(id, page):
"""
Список статей
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagPage.page_id
).filter(
models.TagPage.tag_id==id
)
pages = models.db_session.query(
models.Page
).filter(
models.Page.id.in_(indexes)
).order_by(
models.Page.title.asc()
)
pages = lib.getpage(
pages,
page,
app.config['ITEMS_ON_PAGE']
).all()
result = []
for page in pages:
newRow = page.as_dict()
newRow['user'] = page.user.as_dict()
newRow['tags'] = []
for tagLink in page.tags:
newRow['tags'].append(tagLink.tag.as_dict())
result.append(newRow)
return result
@jsonrpc.method('tag.pages.count(id=int)')
def tag_pages_count(id):
"""Общее количество статей
"""
tag = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if tag is None:
raise ValueError
indexes = models.db_session.query(
models.TagPage.page_id
).filter(
models.TagPage.tag_id==id
)
result = models.db_session.query(
models.Page
).filter(
models.Page.id.in_(indexes)
).count()
return result

103
myapp/ns_api/tag/tag.py Normal file
View File

@@ -0,0 +1,103 @@
__author__ = 'RemiZOffAlex'
__copyright__ = '(c) RemiZOffAlex'
__license__ = 'MIT'
__email__ = 'remizoffalex@mail.ru'
__url__ = 'https://remizoffalex.ru'
from .. import jsonrpc, login_required
from ... import app, lib, models
@jsonrpc.method('tag.add(name=str)')
@login_required
def tag_add(name):
"""
Добавить новый тег
"""
exist = models.db_session.query(
models.Tag
).filter(
models.Tag.name == name
).first()
if exist:
raise ValueError
newTag = models.Tag(name)
models.db_session.add(newTag)
models.db_session.commit()
return newTag.as_dict()
@jsonrpc.method('tag.delete(id=int)')
@login_required
def tag_delete(id):
"""
Удалить тег
"""
exist = models.db_session.query(
models.Tag
).filter(
models.Tag.id==id
).first()
if exist is None:
raise ValueError
models.db_session.delete(exist)
models.db_session.commit()
return 'OK'
@jsonrpc.method('tag.exist(name=str)')
def tag_exist(name):
"""
Проверить существует ли тег и вернуть информацию о нём
"""
text = name.lower().strip()
tagRow = models.db_session.query(
models.Tag
).filter(
models.Tag.name==text
).first()
if tagRow is None:
raise ValueError
result = {
'id': tagRow.id,
'name': tagRow.name
}
return result
@jsonrpc.method('tags()')
def tags_list():
"""
Список тегов
"""
tags = models.db_session.query(
models.Tag
).all()
result = []
for tag in tags:
newRow = tag.as_dict()
result.append(newRow)
return result
@jsonrpc.method('tags.groups')
def tags_groups():
"""
Облако тегов
"""
tags = models.db_session.query(
models.Tag
).order_by(
models.Tag.name
).all()
result = {}
for tag in tags:
tag_json = tag.as_dict()
if tag.name[0] in result:
result[tag.name[0]].append(tag_json)
else:
result[tag.name[0]] = [tag_json]
return result