コード例 #1
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class BibdocBibdoc(db.Model):
    """Represent a BibdocBibdoc record."""

    __tablename__ = 'bibdoc_bibdoc'
    id = db.Column(db.MediumInteger(9, unsigned=True),
                   primary_key=True,
                   nullable=False,
                   autoincrement=True)
    id_bibdoc1 = db.Column(db.MediumInteger(9, unsigned=True),
                           db.ForeignKey(Bibdoc.id),
                           nullable=True)
    version1 = db.Column(db.TinyInteger(4, unsigned=True))
    format1 = db.Column(db.String(50))
    id_bibdoc2 = db.Column(db.MediumInteger(9, unsigned=True),
                           db.ForeignKey(Bibdoc.id),
                           nullable=True)
    version2 = db.Column(db.TinyInteger(4, unsigned=True))
    format2 = db.Column(db.String(50))
    rel_type = db.Column(db.String(255), nullable=True)
    bibdoc1 = db.relationship(Bibdoc,
                              backref='bibdoc2s',
                              primaryjoin=Bibdoc.id == id_bibdoc1)
    bibdoc2 = db.relationship(Bibdoc,
                              backref='bibdoc1s',
                              primaryjoin=Bibdoc.id == id_bibdoc2)
コード例 #2
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class CollectionFieldFieldvalue(db.Model):
    """Represent a CollectionFieldFieldvalue record."""

    __tablename__ = 'collection_field_fieldvalue'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              primary_key=True,
                              nullable=False)
    id_field = db.Column(db.MediumInteger(9, unsigned=True),
                         db.ForeignKey(Field.id),
                         primary_key=True,
                         nullable=False)
    id_fieldvalue = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Fieldvalue.id),
                              primary_key=True,
                              nullable=True)
    type = db.Column(db.Char(3), nullable=False, server_default='src')
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    score_fieldvalue = db.Column(db.TinyInteger(4, unsigned=True),
                                 nullable=False,
                                 server_default='0')

    collection = db.relationship(Collection,
                                 backref='field_fieldvalues',
                                 order_by=score)
    field = db.relationship(Field,
                            backref='collection_fieldvalues',
                            lazy='joined')
    fieldvalue = db.relationship(Fieldvalue,
                                 backref='collection_fields',
                                 lazy='joined')
コード例 #3
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class LnkENTRYURLTITLE(db.Model):
    """Represents a LnkENTRYURLTITLE record."""
    __tablename__ = 'lnkENTRYURLTITLE'

    id = db.Column(db.Integer(15, unsigned=True),
                   primary_key=True,
                   nullable=False)
    url = db.Column(db.String(100), nullable=False, unique=True)
    title = db.Column(db.String(100), nullable=False, index=True)
    manual_set = db.Column(db.TinyInteger(1),
                           nullable=False,
                           server_default='0')
    broken_count = db.Column(db.Integer(5), server_default='0')
    broken = db.Column(db.TinyInteger(1), nullable=False, server_default='0')
コード例 #4
0
class BsrMETHODDATABUCKET(db.Model):

    """Represent a BsrMETHODDATABUCKET record."""

    __tablename__ = 'bsrMETHODDATABUCKET'

    id_bsrMETHOD = db.Column(db.MediumInteger(9, unsigned=True),
                             db.ForeignKey(BsrMETHOD.id), autoincrement=False,
                             primary_key=True, nullable=False)
    bucket_no = db.Column(db.TinyInteger(2), primary_key=True, nullable=False,
                          autoincrement=False)
    bucket_data = db.Column(db.LargeBinary)
    bucket_last_value = db.Column(db.String(255))
    last_updated = db.Column(db.DateTime)

    method = db.relationship(BsrMETHOD, backref=db.backref(
        "buckets",
        collection_class=attribute_mapped_collection("bucket_no"),
        cascade="all, delete-orphan"
        )
    )

    @property
    def data(self):
        """Return bucket data as intbitset."""
        return intbitset(self.bucket_data)
コード例 #5
0
ファイル: models.py プロジェクト: pombredanne/invenio-3
class CollectionExternalcollection(db.Model):
    """Represent a CollectionExternalcollection record."""

    __tablename__ = 'collection_externalcollection'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              primary_key=True,
                              server_default='0')
    id_externalcollection = db.Column(db.MediumInteger(9, unsigned=True),
                                      db.ForeignKey(Externalcollection.id),
                                      primary_key=True,
                                      server_default='0')
    type = db.Column(db.TinyInteger(4, unsigned=True),
                     server_default='0',
                     nullable=False)

    def _collection_type(type_):
        return db.relationship(
            Collection,
            primaryjoin=lambda: db.and_(
                CollectionExternalcollection.id_collection == Collection.id,
                CollectionExternalcollection.type == type_),
            backref='_externalcollections_{0}'.format(str(type_)))

    collection_0 = _collection_type(0)
    collection_1 = _collection_type(1)
    collection_2 = _collection_type(2)

    externalcollection = db.relationship(Externalcollection)
コード例 #6
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class Bibdocfsinfo(db.Model):
    """Represents a Bibdocfsinfo record."""
    __tablename__ = 'bibdocfsinfo'

    id_bibdoc = db.Column(db.MediumInteger(9, unsigned=True),
                          db.ForeignKey(Bibdoc.id),
                          primary_key=True,
                          nullable=False,
                          autoincrement=False)
    version = db.Column(db.TinyInteger(4, unsigned=True),
                        primary_key=True,
                        nullable=False,
                        autoincrement=False)
    format = db.Column(db.String(50),
                       primary_key=True,
                       nullable=False,
                       index=True)
    last_version = db.Column(db.Boolean, nullable=False, index=True)
    cd = db.Column(db.DateTime, nullable=False, index=True)
    md = db.Column(db.DateTime, nullable=False, index=True)
    checksum = db.Column(db.Char(32), nullable=False)
    filesize = db.Column(db.BigInteger(15, unsigned=True),
                         nullable=False,
                         index=True)
    mime = db.Column(db.String(100), nullable=False, index=True)
    master_format = db.Column(db.String(50))
コード例 #7
0
class Bibfmt(db.Model):
    """Represent a Bibfmt record."""

    __tablename__ = 'bibfmt'

    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True),
                          db.ForeignKey(Bibrec.id),
                          nullable=False,
                          server_default='0',
                          primary_key=True,
                          autoincrement=False)

    format = db.Column(db.String(10),
                       nullable=False,
                       server_default='',
                       primary_key=True,
                       index=True)

    kind = db.Column(db.String(10),
                     nullable=False,
                     server_default='',
                     index=True)

    last_updated = db.Column(db.DateTime,
                             nullable=False,
                             server_default='1900-01-01 00:00:00',
                             index=True)

    value = db.Column(db.iLargeBinary)

    needs_2nd_pass = db.Column(db.TinyInteger(1), server_default='0')

    bibrec = db.relationship(Bibrec, backref='bibfmt')
コード例 #8
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class FieldTag(db.Model):
    """Represent a FieldTag record."""
    __tablename__ = 'field_tag'
    id_field = db.Column(db.MediumInteger(9, unsigned=True),
                         db.ForeignKey('field.id'),
                         nullable=False,
                         primary_key=True)
    id_tag = db.Column(db.MediumInteger(9, unsigned=True),
                       db.ForeignKey('tag.id'),
                       nullable=False,
                       primary_key=True)
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    tag = db.relationship(Tag, backref='fields', order_by=score)
    field = db.relationship(Field, backref='tags', order_by=score)

    def __init__(self, score=None, tup=None, *args, **kwargs):
        if score is not None:
            self.score = score
        if tup is not None:
            self.tag = Tag(tup)
        super(FieldTag, self).__init__(*args, **kwargs)

    @property
    def as_tag(self):
        """ Returns Tag record directly."""
        return self.tag
コード例 #9
0
ファイル: models.py プロジェクト: pombredanne/invenio-3
class CollectionCollection(db.Model):
    """Represent a CollectionCollection record."""

    __tablename__ = 'collection_collection'
    id_dad = db.Column(db.MediumInteger(9, unsigned=True),
                       db.ForeignKey(Collection.id),
                       primary_key=True)
    id_son = db.Column(db.MediumInteger(9, unsigned=True),
                       db.ForeignKey(Collection.id),
                       primary_key=True)
    type = db.Column(db.Char(1), nullable=False, server_default='r')
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    son = db.relationship(
        Collection,
        primaryjoin=id_son == Collection.id,
        backref='dads',
        # FIX
        # collection_class=db.attribute_mapped_collection('score'),
        order_by=db.asc(score))
    dad = db.relationship(Collection,
                          primaryjoin=id_dad == Collection.id,
                          backref='sons',
                          order_by=db.asc(score))
コード例 #10
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class HstDOCUMENT(db.Model):
    """Represent a HstDOCUMENT record."""

    __tablename__ = 'hstDOCUMENT'
    id = db.Column(db.Integer(15, unsigned=True),
                   primary_key=True,
                   nullable=False,
                   autoincrement=True)
    id_bibdoc = db.Column(db.MediumInteger(9, unsigned=True),
                          db.ForeignKey(Bibdoc.id),
                          primary_key=True,
                          nullable=False,
                          autoincrement=False)
    docname = db.Column(db.String(250), nullable=False, index=True)
    docformat = db.Column(db.String(50), nullable=False, index=True)
    docversion = db.Column(db.TinyInteger(4, unsigned=True), nullable=False)
    docsize = db.Column(db.BigInteger(15, unsigned=True), nullable=False)
    docchecksum = db.Column(db.Char(32), nullable=False)
    doctimestamp = db.Column(db.DateTime, nullable=False, index=True)
    action = db.Column(db.String(50), nullable=False, index=True)
    job_id = db.Column(db.MediumInteger(15, unsigned=True),
                       nullable=True,
                       index=True)
    job_name = db.Column(db.String(255), nullable=True, index=True)
    job_person = db.Column(db.String(255), nullable=True, index=True)
    job_date = db.Column(db.DateTime, nullable=True, index=True)
    job_details = db.Column(db.iBinary, nullable=True)
コード例 #11
0
ファイル: models.py プロジェクト: pombredanne/invenio-3
class CollectionFieldFieldvalue(db.Model):
    """Represent a CollectionFieldFieldvalue record."""

    __tablename__ = 'collection_field_fieldvalue'

    id = db.Column(db.MediumInteger(9, unsigned=True),
                   autoincrement=True,
                   primary_key=True,
                   nullable=False)
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              nullable=False)
    id_field = db.Column(db.MediumInteger(9, unsigned=True),
                         db.ForeignKey(Field.id),
                         nullable=False)
    _id_fieldvalue = db.Column(db.MediumInteger(9, unsigned=True),
                               db.ForeignKey(Fieldvalue.id),
                               nullable=True,
                               default=None,
                               name="id_fieldvalue")
    type = db.Column(db.Char(3), nullable=False, server_default='src')
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    score_fieldvalue = db.Column(db.TinyInteger(4, unsigned=True),
                                 nullable=False,
                                 server_default='0')

    collection = db.relationship(Collection,
                                 backref='field_fieldvalues',
                                 order_by=score)
    field = db.relationship(Field,
                            backref='collection_fieldvalues',
                            lazy='joined')
    fieldvalue = db.relationship(Fieldvalue,
                                 backref='collection_fields',
                                 lazy='joined')

    @db.hybrid_property
    def id_fieldvalue(self):
        """Get id_fieldvalue."""
        return self._id_fieldvalue

    @id_fieldvalue.setter
    def id_fieldvalue(self, value):
        """Set id_fieldvalue."""
        self._id_fieldvalue = value or None
コード例 #12
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class XtrJOB(db.Model):
    """Represents a XtrJOB record."""

    __tablename__ = 'xtrJOB'

    id = db.Column(db.TinyInteger(4), primary_key=True, nullable=False)
    name = db.Column(db.String(30), nullable=False)
    last_updated = db.Column(db.DateTime, nullable=False)
    last_recid = db.Column(db.MediumInteger(8, unsigned=True), nullable=False)
コード例 #13
0
class BibARXIVPDF(db.Model):

    """Represent a bibARXIVPDF record."""

    __tablename__ = 'bibARXIVPDF'
    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True), primary_key=True)
    status = db.Column(db.Enum('ok', 'missing', name='bibarxivpdf_status'),
                       nullable=False, index=True)
    date_harvested = db.Column(db.DateTime, nullable=False)
    version = db.Column(db.TinyInteger(2), nullable=False)
コード例 #14
0
class CollectionExample(db.Model):

    """Represent a CollectionExample record."""

    __tablename__ = 'collection_example'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id), primary_key=True)
    id_example = db.Column(db.MediumInteger(9, unsigned=True),
                           db.ForeignKey(Example.id), primary_key=True)
    score = db.Column(db.TinyInteger(4, unsigned=True), nullable=False,
                      server_default='0')
    collection = db.relationship(Collection, backref='_examples',
                                 order_by=score)
    example = db.relationship(Example, backref='collections', order_by=score)
コード例 #15
0
class CollectionRnkMETHOD(db.Model):
    """Represent a CollectionRnkMETHOD record."""

    __tablename__ = 'collection_rnkMETHOD'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              primary_key=True,
                              nullable=False)
    id_rnkMETHOD = db.Column(db.MediumInteger(9, unsigned=True),
                             db.ForeignKey(RnkMETHOD.id),
                             primary_key=True,
                             nullable=False)
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    collection = db.relationship(Collection, backref='rnkMETHODs')
    rnkMETHOD = db.relationship(RnkMETHOD, backref='collections')
コード例 #16
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class BsrMETHODDATABUCKET(db.Model):
    """Represents a BsrMETHODDATABUCKET record."""

    __tablename__ = 'bsrMETHODDATABUCKET'

    id_bsrMETHOD = db.Column(db.MediumInteger(9, unsigned=True),
                             db.ForeignKey(BsrMETHOD.id),
                             autoincrement=False,
                             primary_key=True,
                             nullable=False)
    bucket_no = db.Column(db.TinyInteger(2),
                          primary_key=True,
                          nullable=False,
                          autoincrement=False)
    bucket_data = db.Column(db.LargeBinary)
    bucket_last_value = db.Column(db.String(255))
    last_updated = db.Column(db.DateTime)
コード例 #17
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class SbmCATEGORIES(db.Model):
    """Represents a SbmCATEGORIES record."""
    __tablename__ = 'sbmCATEGORIES'
    doctype = db.Column(db.String(10),
                        nullable=False,
                        server_default='',
                        primary_key=True,
                        index=True)
    sname = db.Column(db.String(75),
                      nullable=False,
                      server_default='',
                      primary_key=True,
                      index=True)
    lname = db.Column(db.String(75), nullable=False, server_default='')
    score = db.Column(db.TinyInteger(3, unsigned=True),
                      nullable=False,
                      server_default='0')
コード例 #18
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class CollectionFormat(db.Model):
    """Represent a CollectionFormat record."""
    __tablename__ = 'collection_format'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              primary_key=True)
    id_format = db.Column(db.MediumInteger(9, unsigned=True),
                          db.ForeignKey(Format.id),
                          primary_key=True)
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    collection = db.relationship(Collection,
                                 backref='formats',
                                 order_by=db.desc(score))
    format = db.relationship(Format,
                             backref='collections',
                             order_by=db.desc(score))
コード例 #19
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class Bibdocmoreinfo(db.Model):
    """Represents a Bibdocmoreinfo record."""
    __tablename__ = 'bibdocmoreinfo'

    id = db.Column(db.MediumInteger(9, unsigned=True), primary_key=True)
    id_bibdoc = db.Column(db.MediumInteger(9, unsigned=True),
                          db.ForeignKey(Bibdoc.id),
                          nullable=True)
    version = db.Column(db.TinyInteger(4, unsigned=True), nullable=True)
    format = db.Column(db.String(50), nullable=True)
    id_rel = db.Column(db.MediumInteger(9, unsigned=True), nullable=True)
    namespace = db.Column(db.Char(25), nullable=True)
    data_key = db.Column(db.Char(25))
    data_value = db.Column(db.LargeBinary)

    __table_args__ = (db.Index('bibdocmoreinfo_key', id_bibdoc, version,
                               format, id_rel, namespace,
                               data_key), db.Model.__table_args__)
コード例 #20
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class BibEDITCACHE(db.Model):
    """Represent a BibEDITCACHE record."""

    __tablename__ = 'bibEDITCACHE'
    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True),
                          db.ForeignKey(Bibrec.id),
                          autoincrement=False,
                          nullable=False,
                          primary_key=True)
    uid = db.Column(db.Integer(15, unsigned=True),
                    primary_key=True,
                    nullable=False,
                    autoincrement=False)
    data = db.Column(db.iBinary, nullable=False)
    post_date = db.Column(db.DateTime, nullable=False, index=True)
    is_active = db.Column(db.TinyInteger(1, unsigned=True),
                          server_default='1',
                          nullable=False)
コード例 #21
0
class CollectionFormat(db.Model):

    """Represent a CollectionFormat record."""

    __tablename__ = 'collection_format'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id), primary_key=True)
    format_code = db.Column('format', db.String(10), primary_key=True)
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False, server_default='0')

    collection = db.relationship(
        Collection, backref=db.backref(
            'formats', order_by=db.desc(score)
        ), order_by=db.desc(score))

    @property
    def format(self):
        """Return output format definition."""
        return output_formats[self.format_code]
コード例 #22
0
class CollectionPortalbox(db.Model):

    """Represent a CollectionPortalbox record."""

    __tablename__ = 'collection_portalbox'
    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id), primary_key=True)
    id_portalbox = db.Column(db.MediumInteger(9, unsigned=True),
                             db.ForeignKey(Portalbox.id), primary_key=True)
    ln = db.Column(db.Char(5), primary_key=True, server_default='',
                   nullable=False)
    position = db.Column(db.Char(3), nullable=False,
                         server_default='top')
    score = db.Column(db.TinyInteger(4, unsigned=True),
                      nullable=False,
                      server_default='0')
    collection = db.relationship(Collection, backref='portalboxes',
                                 order_by=score)
    portalbox = db.relationship(Portalbox, backref='collections',
                                order_by=score)
コード例 #23
0
class HstTASK(db.Model):
    """Represents a HstTASK record."""

    __tablename__ = 'hstTASK'
    id = db.Column(db.Integer(15, unsigned=True),
                   nullable=False,
                   primary_key=True,
                   autoincrement=False)
    proc = db.Column(db.String(255), nullable=False)
    host = db.Column(db.String(255), nullable=False, server_default='')
    user = db.Column(db.String(50), nullable=False)
    runtime = db.Column(db.DateTime, nullable=False, index=True)
    sleeptime = db.Column(db.String(20), nullable=True)
    arguments = db.Column(db.iMediumBinary, nullable=True)
    status = db.Column(db.String(50), nullable=True, index=True)
    progress = db.Column(db.String(255), nullable=True)
    priority = db.Column(db.TinyInteger(4),
                         nullable=False,
                         server_default='0',
                         index=True)
    sequenceid = db.Column(db.Integer(15, unsigned=True),
                           db.ForeignKey(SeqSTORE.id))
コード例 #24
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class SbmFUNCTIONS(db.Model):
    """Represents a SbmFUNCTIONS record."""
    __tablename__ = 'sbmFUNCTIONS'
    action = db.Column(db.String(10),
                       nullable=False,
                       server_default='',
                       primary_key=True)
    doctype = db.Column(db.String(10),
                        nullable=False,
                        server_default='',
                        primary_key=True)
    function = db.Column(db.String(40),
                         nullable=False,
                         server_default='',
                         primary_key=True)
    score = db.Column(db.Integer(11),
                      nullable=False,
                      server_default='0',
                      primary_key=True)
    step = db.Column(db.TinyInteger(4),
                     nullable=False,
                     server_default='1',
                     primary_key=True)
コード例 #25
0
class AccMAILCOOKIE(db.Model):

    """Represent an email cookie."""

    __tablename__ = 'accMAILCOOKIE'

    AUTHORIZATIONS_KIND = (
        'pw_reset', 'mail_activation', 'role', 'authorize_action',
        'comment_msg', 'generic'
    )

    id = db.Column(db.Integer(15, unsigned=True), primary_key=True,
                   autoincrement=True)
    _data = db.Column('data', db.iBinary, nullable=False)
    expiration = db.Column(db.DateTime, nullable=False,
                           server_default='9999-12-31 23:59:59', index=True)
    kind = db.Column(db.String(32), nullable=False)
    onetime = db.Column(db.TinyInteger(1), nullable=False, server_default='0')
    status = db.Column(db.Char(1), nullable=False, server_default='W')

    @validates('kind')
    def validate_kind(self, key, kind):
        """Validate cookie kind."""
        assert kind in self.AUTHORIZATIONS_KIND
        return kind

    @classmethod
    def get(cls, cookie, delete=False):
        """Get cookie if it is valid."""
        try:
            password = cookie[:16]+cookie[-16:]
            cookie_id = int(cookie[16:-16], 16)
        except ValueError:
            raise InvenioWebAccessMailCookieError("Cookie is corrupted")

        obj, data = db.session.query(
            cls,
            db.func.aes_decrypt(
                cls._data, bindparam('password')
            ).label('decrypted')
        ).params(password=password).filter_by(id=cookie_id).one()
        obj.data = loads(data)

        (kind_check, params, expiration, onetime_check) = obj.data
        assert obj.kind in cls.AUTHORIZATIONS_KIND

        if not (obj.kind == kind_check and obj.onetime == onetime_check):
            raise InvenioWebAccessMailCookieError("Cookie is corrupted")
        if obj.status == 'D':
            raise InvenioWebAccessMailCookieDeletedError(
                "Cookie has been deleted")
        if obj.onetime or delete:
            obj.status = 'D'
            db.session.merge(obj)
            db.session.commit()
        return obj

    @classmethod
    def create(cls, kind, params, cookie_timeout=timedelta(days=1),
               onetime=False):
        """Create cookie with given params."""
        expiration = datetime.today() + cookie_timeout
        data = (kind, params, expiration, onetime)
        password = md5(str(random())).hexdigest()
        cookie = cls(
            expiration=expiration,
            kind=kind,
            onetime=int(onetime),
        )
        cookie._data = db.func.aes_encrypt(dumps(data), password)
        db.session.add(cookie)
        db.session.commit()
        db.session.refresh(cookie)
        return password[:16]+hex(cookie.id)[2:-1]+password[-16:]

    @classmethod
    @session_manager
    def gc(cls):
        """Remove expired items."""
        return cls.query.filter(cls.expiration<db.func.now()).delete()
コード例 #26
0
class CmtRECORDCOMMENT(db.Model):
    """Represents a CmtRECORDCOMMENT record."""

    __tablename__ = 'cmtRECORDCOMMENT'

    id = db.Column(db.Integer(15, unsigned=True),
                   nullable=False,
                   primary_key=True,
                   autoincrement=True)
    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True),
                          db.ForeignKey(Bibrec.id),
                          nullable=False,
                          server_default='0')
    id_user = db.Column(db.Integer(15, unsigned=True),
                        db.ForeignKey(User.id),
                        nullable=False,
                        server_default='0')
    title = db.Column(db.String(255), nullable=False, server_default='')
    body = db.Column(db.Text, nullable=False)
    date_creation = db.Column(db.DateTime,
                              nullable=False,
                              server_default='1900-01-01 00:00:00')
    star_score = db.Column(db.TinyInteger(5, unsigned=True),
                           nullable=False,
                           server_default='0')
    nb_votes_yes = db.Column(db.Integer(10),
                             nullable=False,
                             server_default='0')
    nb_votes_total = db.Column(db.Integer(10, unsigned=True),
                               nullable=False,
                               server_default='0')
    nb_abuse_reports = db.Column(db.Integer(10),
                                 nullable=False,
                                 server_default='0')
    status = db.Column(db.Char(2),
                       nullable=False,
                       index=True,
                       server_default='ok')
    round_name = db.Column(db.String(255), nullable=False, server_default='')
    restriction = db.Column(db.String(50), nullable=False, server_default='')
    in_reply_to_id_cmtRECORDCOMMENT = db.Column(db.Integer(15, unsigned=True),
                                                db.ForeignKey(id),
                                                nullable=False,
                                                server_default='0')
    reply_order_cached_data = db.Column(db.Binary, nullable=True)
    bibrec = db.relationship(Bibrec, backref='recordcomments')
    user = db.relationship(User, backref='recordcomments')
    replies = db.relationship('CmtRECORDCOMMENT',
                              backref=db.backref('parent',
                                                 remote_side=[id],
                                                 order_by=date_creation))

    @property
    def is_deleted(self):
        """Check if is deleted."""
        return self.status != 'ok'

    def is_collapsed(self, id_user):
        """Return true if the comment is collapsed by user."""
        return CmtCOLLAPSED.query.filter(
            db.and_(CmtCOLLAPSED.id_bibrec == self.id_bibrec,
                    CmtCOLLAPSED.id_cmtRECORDCOMMENT == self.id,
                    CmtCOLLAPSED.id_user == id_user)).count() > 0

    @session_manager
    def collapse(self, id_user):
        """Collapse comment beloging to user."""
        c = CmtCOLLAPSED(id_bibrec=self.id_bibrec,
                         id_cmtRECORDCOMMENT=self.id,
                         id_user=id_user)
        db.session.add(c)
        db.session.commit()

    def expand(self, id_user):
        """Expand comment beloging to user."""
        CmtCOLLAPSED.query.filter(
            db.and_(CmtCOLLAPSED.id_bibrec == self.id_bibrec,
                    CmtCOLLAPSED.id_cmtRECORDCOMMENT == self.id,
                    CmtCOLLAPSED.id_user == id_user)).delete(
                        synchronize_session=False)

    __table_args__ = (db.Index('cmtRECORDCOMMENT_reply_order_cached_data',
                               reply_order_cached_data,
                               mysql_length=40), db.Model.__table_args__)

    @classmethod
    def count(cls, *criteria, **filters):
        """Count how many comments."""
        return cls.query.filter(*criteria).filter_by(**filters).count()
コード例 #27
0
ファイル: models.py プロジェクト: chokribr/invenio-1
class Format(db.Model):
    """Represents a Format record."""
    __tablename__ = 'format'

    id = db.Column(
        db.MediumInteger(9, unsigned=True),
        primary_key=True,
        autoincrement=True)

    name = db.Column(db.String(255), nullable=False)

    code = db.Column(db.String(20), nullable=False, unique=True)

    description = db.Column(db.String(255), server_default='')

    content_type = db.Column(db.String(255), server_default='')

    mime_type = db.Column(db.String(255), unique=True, nullable=True)

    visibility = db.Column(
        db.TinyInteger(4),
        nullable=False,
        server_default='1')

    last_updated = db.Column(db.DateTime, nullable=True)

    @classmethod
    def get_export_formats(cls):
        return cls.query.filter(db.and_(
            Format.content_type != 'text/html',
            Format.visibility == 1)
        ).order_by(Format.name).all()

    def set_name(self, name, lang="generic", type='ln'):
        """
        Sets the name of an output format.

        if 'type' different from 'ln' or 'sn', do nothing
        if 'name' exceeds 256 chars, 'name' is truncated to first 256 chars.

        The localized names of output formats are located in formatname table.

        :param type: either 'ln' (for long name) and 'sn' (for short name)
        :param lang: the language in which the name is given
        :param name: the name to give to the output format
        """

        if len(name) > 256:
            name = name[:256]
        if type.lower() != "sn" and type.lower() != "ln":
            return

        if lang == "generic" and type.lower() == "ln":
            self.name = name
        else:
            # Save inside formatname table for name variations
            fname = db.session.query(Formatname)\
                        .get((self.id, lang, type.lower()))

            if not fname:
                fname = db.session.merge(Formatname())
                fname.id_format = self.id
                fname.ln = lang
                fname.type = type.lower()

            fname.value = name
            db.session.save(fname)

        db.session.add(self)
        db.session.commit()