コード例 #1
0
class Flag(BaseModel):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    annotator_id = db.Column(db.Integer, db.ForeignKey('annotator.id'))
    annotator = db.relationship('Annotator',
                                foreign_keys=[annotator_id],
                                uselist=False)
    item_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    item = db.relationship('Item', foreign_keys=[item_id], uselist=False)
    reason = db.Column(db.Text, nullable=False)
    resolved = db.Column(db.Boolean, default=False, nullable=False)
    time = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)

    _default_fields = ["annotator_id", "item_id", "reason", "resolved", "time"]

    relations_keys = ("item", "annotator")

    def __init__(self, annotator, item, reason):
        self.annotator = annotator
        self.item = item
        self.reason = reason

    def __repr__(self):
        return '<Flag %r>' % self.id

    @classmethod
    def by_id(cls, uid):
        if uid is None:
            return None
        try:
            flag = cls.query.with_for_update().get(uid)
        except NoResultFound:
            flag = None
        return flag
コード例 #2
0
ファイル: annotator.py プロジェクト: gmen1/gavel-1
class Annotator(BaseModel):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    name = db.Column(db.String(120), nullable=False)
    email = db.Column(db.String(120), nullable=False)
    active = db.Column(db.Boolean, default=True, nullable=False)
    stop_next = db.Column(db.Boolean, default=False, nullable=False)
    read_welcome = db.Column(db.Boolean, default=False, nullable=False)
    description = db.Column(db.Text, nullable=False)
    secret = db.Column(db.String(32), unique=True, nullable=False)
    next_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    next = db.relationship('Item', foreign_keys=[next_id], uselist=False)
    updated = db.Column(db.DateTime)
    prev_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    prev = db.relationship('Item', foreign_keys=[prev_id], uselist=False)
    ignore = db.relationship('Item', secondary=ignore_table)

    alpha = db.Column(db.Float)
    beta = db.Column(db.Float)

    _default_fields = [
        "name", "email", "active", "stop_next", "read_welcome", "description",
        "next_id", "prev_id", "ignore", "updated"
    ]
    _secret_fields = ["secret"]

    relations_keys = ("next", "prev", "ignore")

    def __init__(self, name, email, description):
        self.name = name
        self.email = email
        self.description = description
        self.alpha = crowd_bt.ALPHA_PRIOR
        self.beta = crowd_bt.BETA_PRIOR
        self.secret = utils.gen_secret(32)

    def update_next(self, new_next):
        if new_next is not None:
            new_next.prioritized = False  # it's now assigned, so cancel the prioritization
            # it could happen that the judge skips the project, but that
            # doesn't re-prioritize the project
            self.updated = datetime.utcnow()
        self.next = new_next

    @classmethod
    def by_secret(cls, secret):
        try:
            annotator = cls.query.filter(cls.secret == secret).one()
        except NoResultFound:
            annotator = None
        return annotator

    @classmethod
    def by_id(cls, uid):
        if uid is None:
            return None
        try:
            annotator = cls.query.with_for_update().get(uid)
        except NoResultFound:
            annotator = None
        return annotator
コード例 #3
0
class ItemCategory(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    item_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    mu = db.Column(db.Float)
    sigma_sq = db.Column(db.Float)
    prioritized = db.Column(db.Boolean, default=False, nullable=False)

    viewed = db.relationship('Annotator', secondary=view_table)
    item = db.relationship('Item')
    category = db.relationship('Category')


    def __init__(self, item_id, category_id):
        self.item_id = item_id
        self.category_id = category_id
        self.mu = crowd_bt.MU_PRIOR
        self.sigma_sq = crowd_bt.SIGMA_SQ_PRIOR

    @classmethod
    def by_id(cls, uid):
        if uid is None:
            return None
        try:
            annotator = cls.query.with_for_update().get(uid)
        except NoResultFound:
            annotator = None
        return annotator
コード例 #4
0
class Decision(db.Model):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    annotator_id = db.Column(db.Integer, db.ForeignKey('annotator.id'))
    annotator = db.relationship('Annotator', foreign_keys=[annotator_id], uselist=False)
    winner_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    winner = db.relationship('Item', foreign_keys=[winner_id], uselist=False)
    loser_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    loser = db.relationship('Item', foreign_keys=[loser_id], uselist=False)
    time = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)

    def __init__(self, annotator, winner, loser):
        self.annotator = annotator
        self.winner = winner
        self.loser = loser
コード例 #5
0
class Feedback(db.Model):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    annotator_id = db.Column(db.Integer, db.ForeignKey('annotator.id'))
    annotator = db.relationship('Annotator',
                                foreign_keys=[annotator_id],
                                uselist=False)
    item_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    item = db.relationship('Item', foreign_keys=[item_id], uselist=False)
    feedback_type = db.Column(db.String(10))
    feedback = db.Column(db.String(250))
    time = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)

    def __init__(self, annotator, item, feedback_type, feedback):
        self.annotator = annotator
        self.item = item
        self.feedback_type = feedback_type
        self.feedback = feedback
コード例 #6
0
ファイル: item.py プロジェクト: prateekagr18/gavel
from gavel.models import db
import gavel.crowd_bt as crowd_bt
from sqlalchemy.orm.exc import NoResultFound
from urllib.parse import urlparse
from urllib.parse import parse_qs

view_table = db.Table(
    'view', db.Column('item_id', db.Integer, db.ForeignKey('item.id')),
    db.Column('annotator_id', db.Integer, db.ForeignKey('annotator.id')))


class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    name = db.Column(db.Text, nullable=False)
    location = db.Column(db.Text, nullable=False)
    description = db.Column(db.Text, nullable=False)
    active = db.Column(db.Boolean, default=True, nullable=False)
    viewed = db.relationship('Annotator', secondary=view_table)
    prioritized = db.Column(db.Boolean, default=False, nullable=False)

    mu = db.Column(db.Float)
    sigma_sq = db.Column(db.Float)

    def __init__(self, name, location, description):
        self.name = name
        self.location = location
        self.description = description
        self.mu = crowd_bt.MU_PRIOR
        self.sigma_sq = crowd_bt.SIGMA_SQ_PRIOR

    @classmethod
コード例 #7
0
from gavel.models import db
from gavel.models.category import Category
import gavel.crowd_bt as crowd_bt
from sqlalchemy.orm.exc import NoResultFound

view_table = db.Table('view',
    db.Column('item_category_id', db.Integer, db.ForeignKey('item_category.id')),
    db.Column('annotator_id', db.Integer, db.ForeignKey('annotator.id'))
)

class ItemCategory(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    item_id = db.Column(db.Integer, db.ForeignKey('item.id'))
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    mu = db.Column(db.Float)
    sigma_sq = db.Column(db.Float)
    prioritized = db.Column(db.Boolean, default=False, nullable=False)

    viewed = db.relationship('Annotator', secondary=view_table)
    item = db.relationship('Item')
    category = db.relationship('Category')


    def __init__(self, item_id, category_id):
        self.item_id = item_id
        self.category_id = category_id
        self.mu = crowd_bt.MU_PRIOR
        self.sigma_sq = crowd_bt.SIGMA_SQ_PRIOR

    @classmethod
    def by_id(cls, uid):