Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
{'document_add': [{'description': '', 'id': 1, 'name': name}],
'id': 3})
poll_proj1 = self.poll_event(1, 3)
# Create document 2 in project 2
response = await self.apost('/api/project/2/document/new',
dict(name='otherdoc',
description='Other one'),
fmt='multipart',
files=dict(file=('../otherdoc.html',
'text/plain',
b'different content')))
self.assertEqual(response.code, 200)
self.assertEqual(response.body, b'{"created": 2}')
db = self.application.DBSession()
doc = db.query(database.Document).get(2)
self.assertEqual(doc.name, 'otherdoc')
self.assertEqual(doc.description, 'Other one')
self.assertEqual(doc.filename, 'otherdoc.html')
self.assertEqual(
await poll_proj2,
{'document_add': [{'description': 'Other one', 'id': 2,
'name': 'otherdoc'}], 'id': 4})
poll_proj2 = self.poll_event(2, 4)
# Create highlight 1 in document 1
response = await self.apost('/api/project/1/document/1/highlight/new',
dict(start_offset=3, end_offset=7,
tags=[1]),
fmt='json')
self.assertEqual(response.code, 200)
self.assertEqual(response.body, b'{"id": 1}')
raise MissingArgumentError('file')
content_type = file.content_type
filename = validate.filename(file.filename)
try:
body = await convert.to_html_chunks(
file.body, content_type, filename,
self.application.config,
)
except convert.ConversionError as err:
self.set_status(400)
return self.send_json({
'error': str(err),
})
else:
doc = database.Document(
name=name,
description=description,
filename=filename,
project=project,
contents=body,
)
self.db.add(doc)
self.db.flush() # Need to flush to get doc.id
cmd = database.Command.document_add(
self.current_user,
doc,
)
self.db.add(cmd)
logger.info("Document added to project %r: %r %r (%d bytes)",
project.id, doc.id, doc.name, len(doc.contents))
self.db.commit()
project = self.get_project(project_id)
if path:
tag = aliased(database.Tag)
hltag = aliased(database.HighlightTag)
highlights = (
self.db.query(database.Highlight)
.join(hltag, hltag.highlight_id == database.Highlight.id)
.join(tag, hltag.tag_id == tag.id)
.filter(tag.path.startswith(path))
.filter(tag.project == project)
).all()
else:
# Special case to select all highlights: we also need to select
# highlights that have no tag at all
document = aliased(database.Document)
highlights = (
self.db.query(database.Highlight)
.join(document, document.id == database.Highlight.document_id)
.filter(document.project == project)
).all()
self.send_json({
'highlights': [
{
'id': hl.id,
'document_id': hl.document_id,
'content': hl.snippet,
'tags': [t.id for t in hl.tags],
}
for hl in highlights
],
def get_document(self, project_id, document_id, contents=False):
try:
project_id = int(project_id)
document_id = int(document_id)
except ValueError:
raise HTTPError(404)
q = (
self.db.query(database.ProjectMember, database.Document)
.filter(database.Document.project_id == project_id)
.filter(database.Document.id == document_id)
.filter(database.ProjectMember.user_login == self.current_user)
.filter(database.ProjectMember.project_id == project_id)
)
if contents:
q = q.options(undefer(database.Document.contents))
res = q.one_or_none()
if res is None:
raise HTTPError(404)
member, document = res
return document, member.privileges
def get_document(self, project_id, document_id, contents=False):
try:
project_id = int(project_id)
document_id = int(document_id)
except ValueError:
raise HTTPError(404)
q = (
self.db.query(database.ProjectMember, database.Document)
.filter(database.Document.project_id == project_id)
.filter(database.Document.id == document_id)
.filter(database.ProjectMember.user_login == self.current_user)
.filter(database.ProjectMember.project_id == project_id)
)
if contents:
q = q.options(undefer(database.Document.contents))
res = q.one_or_none()
if res is None:
raise HTTPError(404)
member, document = res
return document, member.privileges
hltag = aliased(database.HighlightTag)
highlights = (
self.db.query(database.Highlight)
.options(joinedload(database.Highlight.document))
.join(hltag, hltag.highlight_id == database.Highlight.id)
.join(tag, hltag.tag_id == tag.id)
.filter(tag.path.startswith(path))
.filter(tag.project == project)
.order_by(database.Highlight.document_id,
database.Highlight.start_offset)
).all()
name = None
else:
# Special case to select all highlights: we also need to select
# highlights that have no tag at all
document = aliased(database.Document)
highlights = (
self.db.query(database.Highlight)
.join(document, document.id == database.Highlight.document_id)
.filter(document.project == project)
.order_by(database.Highlight.document_id,
database.Highlight.start_offset)
).all()
name = 'all_tags'
return name, highlights
def get_document(self, project_id, document_id, contents=False):
try:
project_id = int(project_id)
document_id = int(document_id)
except ValueError:
raise HTTPError(404)
q = (
self.db.query(database.Document)
.options(joinedload(database.Document.project)
.joinedload(database.Project.members))
.filter(database.Project.id == project_id)
.filter(database.ProjectMember.user_login == self.current_user)
.filter(database.Document.id == document_id)
)
if contents:
q = q.options(undefer(database.Document.contents))
document = q.one_or_none()
if document is None:
raise HTTPError(404)
return document
if path:
tag = aliased(database.Tag)
hltag = aliased(database.HighlightTag)
highlights = (
self.db.query(database.Highlight)
.join(hltag, hltag.highlight_id == database.Highlight.id)
.join(tag, hltag.tag_id == tag.id)
.filter(tag.path.startswith(path))
.filter(tag.project == project)
.order_by(database.Highlight.document_id,
database.Highlight.start_offset)
).all()
else:
# Special case to select all highlights: we also need to select
# highlights that have no tag at all
document = aliased(database.Document)
highlights = (
self.db.query(database.Highlight)
.join(document, document.id == database.Highlight.document_id)
.filter(document.project == project)
.order_by(database.Highlight.document_id,
database.Highlight.start_offset)
).all()
return self.send_json({
'highlights': [
{
'id': hl.id,
'document_id': hl.document_id,
'content': hl.snippet,
'tags': [t.id for t in hl.tags],
}
def get_document(self, project_id, document_id, contents=False):
try:
project_id = int(project_id)
document_id = int(document_id)
except ValueError:
raise HTTPError(404)
q = (
self.db.query(database.ProjectMember, database.Document)
.filter(database.Document.project_id == project_id)
.filter(database.Document.id == document_id)
.filter(database.ProjectMember.user_login == self.current_user)
.filter(database.ProjectMember.project_id == project_id)
)
if contents:
q = q.options(undefer(database.Document.contents))
res = q.one_or_none()
if res is None:
raise HTTPError(404)
member, document = res
return document, member.privileges