Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_project(self):
db = self.application.DBSession()
projects = [
database.Project(name="first project", description=""),
database.Project(name="a test", description="Test project"),
database.Project(name="private P", description="admin can't see"),
database.Project(name="last project", description="Other"),
]
for project in projects:
db.add(project)
db.commit()
for i in [1, 2, 4]:
db.add(database.ProjectMember(
project_id=i,
user_login='admin',
privileges=database.Privileges.ADMIN))
db.commit()
# Authenticate with token
response = self.get('/?token=' + self.application.single_user_token)
self.assertEqual(response.code, 302)
self.assertEqual(response.headers['Location'], '/')
# Check project list
response = self.get('/')
self.assertEqual(response.code, 200)
self.assertIn(b"first project", response.body)
self.assertIn(b"a test", response.body)
self.assertNotIn(b"private P", response.body)
self.assertIn(b"last project", response.body)
def post(self):
name = self.get_body_argument('name', '')
description = self.get_body_argument('description', '')
try:
validate.project_name(name)
validate.project_description(description)
# Create project
project = database.Project(name=name, description=description)
self.db.add(project)
# Add user as admin
membership = database.ProjectMember(
project=project,
user_login=self.current_user,
privileges=database.Privileges.ADMIN
)
self.db.add(membership)
# Add default tags
self.db.add(database.Tag(
project=project,
# TRANSLATORS: Default tag name
path=self.gettext("interesting"),
# TRANSLATORS: Default tag description
description=self.gettext("Further review required")),
)
self.db.commit()
return self.redirect(self.reverse_url('project', project.id))
except validate.InvalidFormat as e:
logger.info("Error validating ProjectAdd: %r", e)
return self.render('project_new.html',
def post(self):
name = self.get_body_argument('name', '')
description = self.get_body_argument('description', '')
if not name:
return self.render('project_new.html',
name=name, description=description,
error="Please enter a name")
# Create project
project = database.Project(name=name, description=description)
self.db.add(project)
# Add user as admin
membership = database.ProjectMember(
project=project,
user_login=self.current_user,
privileges=database.Privileges.ADMIN
)
self.db.add(membership)
# Add default set of tags
self.db.add(database.Tag(project=project, path='interesting',
description="Further review required"))
self.db.add(database.Tag(project=project, path='people',
description="Known people"))
self.db.commit()
self.redirect(self.reverse_url('project', project.id))
for login, user in obj.items():
login = validate.user_login(login)
if login == self.current_user:
logger.warning("User tried to change own privileges")
continue
if not user and login in members:
self.db.delete(members[login])
cmd = database.Command.member_remove(
self.current_user, project.id,
login,
)
self.db.add(cmd)
commands.append(cmd)
else:
try:
privileges = database.Privileges[user['privileges']]
except KeyError:
self.set_status(400)
return self.send_json({'error': "Invalid privileges %r" %
user.get('privileges')})
if login in members:
members[login].privileges = privileges
else:
self.db.add(
database.ProjectMember(project=project,
user_login=login,
privileges=privileges)
)
cmd = database.Command.member_add(
self.current_user, project.id,
login, privileges,
)
Privileges.TAG)
can_delete_highlight = can_add_highlight
class ProjectMember(Base):
__tablename__ = 'project_members'
project_id = Column(Integer, ForeignKey('projects.id', ondelete='CASCADE'),
primary_key=True, index=True)
project = relationship('Project')
user_login = Column(String,
ForeignKey('users.login',
ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, index=True)
user = relationship('User')
privileges = Column(Enum(Privileges), nullable=False)
class Document(Base):
__tablename__ = 'documents'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
description = Column(Text, nullable=False)
filename = Column(String, nullable=True)
created = Column(DateTime, nullable=False,
server_default=functions.now())
project_id = Column(Integer, ForeignKey('projects.id', ondelete='CASCADE'),
nullable=False, index=True)
project = relationship('Project', back_populates='documents')
contents = deferred(Column(Text, nullable=False))
group = relationship('Group', secondary='document_groups')
def can_edit_document(self):
return self in (Privileges.ADMIN, Privileges.MANAGE_DOCS)
can_delete_document = can_edit_document
def can_update_tag(self):
return self in (Privileges.ADMIN, Privileges.MANAGE_DOCS,
Privileges.TAG)
can_add_tag = can_update_tag
def member_add(cls, user_login, project_id, member_login, privileges):
assert isinstance(project_id, int)
assert isinstance(privileges, Privileges)
return cls(
user_login=user_login,
project_id=project_id,
payload={'type': 'member_add', # keep in sync above
'member': member_login,
'privileges': privileges.name}
)