Source code for fluxscoreboard.models

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import, print_function
from pyramid.security import Allow, Everyone
from sqlalchemy import event
from sqlalchemy.ext.declarative.api import declarative_base, declared_attr
from sqlalchemy.orm.scoping import scoped_session
from sqlalchemy.orm.session import sessionmaker
from zope.sqlalchemy import register as zope_sa_register


DBSession = scoped_session(sessionmaker())
"""Database session factory. Returns the current threadlocal session."""
zope_sa_register(DBSession)


[docs]class BaseCFG(object): """ Class that contains custom configuration for a :func:`sqlalchemy.ext.declarative.declarative_base` to be used with the ORM. It automatically figures out a tablename (thus no need to set ``__tablename__``). """ @declared_attr def __tablename__(cls): # @NoSelf return cls.__name__.lower() def __str__(self): return unicode(self).encode("utf-8")
Base = declarative_base(cls=BaseCFG) """Base class for all ORM classes. Uses :class:`BaseCFG` configuration."""
[docs]class RootFactory(object): """Skeleton for simple ACL permission protection.""" def __init__(self, request): self.request = request def __acl__(self): from .settings import CTF_BEFORE, CTF_STARTED, CTF_ARCHIVE, CTF_ENDED permission_map = { CTF_BEFORE: [ ('group:team', ['teams', 'logged_in']), (Everyone, ['teams', 'login', 'register']), ], CTF_STARTED: [ ('group:team', ['scoreboard', 'challenges', 'logged_in']), (Everyone, ['scoreboard', 'login']), ], CTF_ENDED: [ ('group:team', ['scoreboard', 'challenges', 'logged_in']), (Everyone, ['scoreboard', 'login']), ], CTF_ARCHIVE: [ (Everyone, ['scoreboard', 'challenges']), ], } acl = [] ctf_state = self.request.settings.ctf_state for principal, permissions in permission_map[ctf_state]: acl.append((Allow, principal, permissions)) if self.request.session.get('test-login'): acl.append((Allow, principal, permission_map[CTF_STARTED][0][1])) return acl
from fluxscoreboard.models.challenge import Challenge, Submission, Category from fluxscoreboard.models.country import Country from fluxscoreboard.models.news import News, MassMail from fluxscoreboard.models.team import Team, TeamIP from fluxscoreboard.models.settings import Settings