Пример #1
0
class Collectionname(db.Model):
    """Represent a Collectionname record."""

    __tablename__ = 'collectionname'

    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              nullable=False,
                              primary_key=True)
    ln = db.Column(db.Char(5),
                   nullable=False,
                   primary_key=True,
                   server_default='')
    type = db.Column(db.Char(3),
                     nullable=False,
                     primary_key=True,
                     server_default='sn')
    value = db.Column(db.String(255), nullable=False)

    @db.hybrid_property
    def ln_type(self):
        """Get ln type."""
        return (self.ln, self.type)

    @ln_type.setter
    def set_ln_type(self, value):
        """Set ln type."""
        (self.ln, self.type) = value
Пример #2
0
class Collectionboxname(db.Model):
    """Represent a Collectionboxname record."""

    __tablename__ = 'collectionboxname'

    TYPES = {
        'v': 'Focus on:',
        'r': 'Narrow by collection:',
        'l': 'Latest additions:',
    }

    id_collection = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(Collection.id),
                              nullable=False,
                              primary_key=True)
    ln = db.Column(db.Char(5),
                   nullable=False,
                   primary_key=True,
                   server_default='')
    type = db.Column(db.Char(3),
                     nullable=False,
                     primary_key=True,
                     server_default='r')
    value = db.Column(db.String(255), nullable=False)

    @db.hybrid_property
    def ln_type(self):
        return (self.ln, self.type)

    @ln_type.setter
    def set_ln_type(self, value):
        (self.ln, self.type) = value
Пример #3
0
class Fieldname(db.Model):
    """Represent a Fieldname record."""
    __tablename__ = 'fieldname'
    id_field = db.Column(db.MediumInteger(9, unsigned=True),
                         db.ForeignKey(Field.id),
                         primary_key=True)
    ln = db.Column(db.Char(5), primary_key=True, server_default='')
    type = db.Column(db.Char(3), primary_key=True, server_default='sn')
    value = db.Column(db.String(255), nullable=False)
    field = db.relationship(Field, backref='names')
Пример #4
0
class IdxINDEXNAME(db.Model):
    """Represent a IdxINDEXNAME record."""

    __tablename__ = 'idxINDEXNAME'
    id_idxINDEX = db.Column(db.MediumInteger(9, unsigned=True),
                            db.ForeignKey(IdxINDEX.id),
                            primary_key=True)
    ln = db.Column(db.Char(5), primary_key=True, server_default='')
    type = db.Column(db.Char(3), primary_key=True, server_default='sn')
    value = db.Column(db.String(255), nullable=False)
    idxINDEX = db.relationship(IdxINDEX, backref='names')
Пример #5
0
class RnkMETHODNAME(db.Model):
    """Represent a RnkMETHODNAME record."""

    __tablename__ = 'rnkMETHODNAME'
    id_rnkMETHOD = db.Column(db.MediumInteger(9, unsigned=True),
                             db.ForeignKey(RnkMETHOD.id),
                             primary_key=True)
    ln = db.Column(db.Char(5), primary_key=True, server_default='')
    type = db.Column(db.Char(3), primary_key=True, server_default='sn')
    value = db.Column(db.String(255), nullable=False)
    method = db.relationship(RnkMETHOD,
                             backref=db.backref('names', lazy='dynamic'))
Пример #6
0
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)
Пример #7
0
class OaiHARVESTLOG(db.Model):
    """Represents a OaiHARVESTLOG record."""

    __tablename__ = 'oaiHARVESTLOG'
    id_oaiHARVEST = db.Column(db.MediumInteger(9, unsigned=True),
                              db.ForeignKey(OaiHARVEST.id),
                              nullable=False)
    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True),
                          db.ForeignKey(Bibrec.id),
                          nullable=False,
                          server_default='0')
    bibupload_task_id = db.Column(db.Integer(11),
                                  db.ForeignKey(SchTASK.id),
                                  nullable=False,
                                  server_default='0',
                                  primary_key=True)
    oai_id = db.Column(db.String(40),
                       nullable=False,
                       server_default='',
                       primary_key=True)
    date_harvested = db.Column(db.DateTime,
                               nullable=False,
                               server_default='1900-01-01 00:00:00',
                               primary_key=True)
    date_inserted = db.Column(db.DateTime,
                              nullable=False,
                              server_default='1900-01-01 00:00:00')
    inserted_to_db = db.Column(db.Char(1), nullable=False, server_default='P')
    bibrec = db.relationship(Bibrec, backref='harvestlogs')
    schtask = db.relationship(SchTASK)
Пример #8
0
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))
Пример #9
0
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')
Пример #10
0
class SbmCOLLECTIONSbmDOCTYPE(db.Model):
    """Represents a SbmCOLLECTIONSbmDOCTYPE record."""

    __tablename__ = 'sbmCOLLECTION_sbmDOCTYPE'
    id = db.Column(db.Integer(11),
                   nullable=False,
                   autoincrement=True,
                   primary_key=True)
    _id_father = db.Column(db.Integer(11),
                           db.ForeignKey(SbmCOLLECTION.id),
                           nullable=True,
                           name="id_father")
    id_son = db.Column(db.Char(10),
                       db.ForeignKey(SbmDOCTYPE.sdocname),
                       nullable=False)
    catalogue_order = db.Column(db.Integer(11),
                                nullable=False,
                                server_default='0')

    father = db.relationship(
        SbmCOLLECTION,
        backref=db.backref('sonDoctype', uselist=False),
    )

    @db.hybrid_property
    def id_father(self):
        """Get id_father."""
        return self._id_father

    @id_father.setter
    def id_father(self, value):
        """Set id_father."""
        self._id_father = value or None
Пример #11
0
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))
Пример #12
0
class WebQuery(db.Model):
    """Represent a WebQuery record."""
    __tablename__ = 'query'
    id = db.Column(db.Integer(15, unsigned=True),
                   primary_key=True,
                   autoincrement=True)
    type = db.Column(db.Char(1), nullable=False, server_default='r')
    urlargs = db.Column(db.Text(100), nullable=False, index=True)
Пример #13
0
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__)
Пример #14
0
class SbmIMPLEMENT(db.Model):
    """Represents a SbmIMPLEMENT record."""
    __tablename__ = 'sbmIMPLEMENT'
    docname = db.Column(db.String(10), nullable=True)
    actname = db.Column(db.Char(3), nullable=True)
    displayed = db.Column(db.Char(1), nullable=True)
    subname = db.Column(db.String(13), nullable=True, primary_key=True)
    nbpg = db.Column(db.Integer(11),
                     nullable=True,
                     primary_key=True,
                     autoincrement=False)
    cd = db.Column(db.Date, nullable=True)
    md = db.Column(db.Date, nullable=True)
    buttonorder = db.Column(db.Integer(11), nullable=True)
    statustext = db.Column(db.Text, nullable=True)
    level = db.Column(db.Char(1), nullable=False, server_default='')
    score = db.Column(db.Integer(11), nullable=False, server_default='0')
    stpage = db.Column(db.Integer(11), nullable=False, server_default='0')
    endtxt = db.Column(db.String(100), nullable=False, server_default='')
Пример #15
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)
Пример #16
0
class SbmACTION(db.Model):
    """Represents a SbmACTION record."""
    __tablename__ = 'sbmACTION'
    lactname = db.Column(db.Text, nullable=True)
    sactname = db.Column(db.Char(3),
                         nullable=False,
                         server_default='',
                         primary_key=True)
    dir = db.Column(db.Text, nullable=True)
    cd = db.Column(db.Date, nullable=True)
    md = db.Column(db.Date, nullable=True)
    actionbutton = db.Column(db.Text, nullable=True)
    statustext = db.Column(db.Text, nullable=True)
Пример #17
0
class UsergroupBskBASKET(db.Model):
    """Represents a UsergroupBskBASKET record."""
    __tablename__ = 'usergroup_bskBASKET'
    id_usergroup = db.Column(db.Integer(15, unsigned=True),
                db.ForeignKey(Usergroup.id), nullable=False,
                server_default='0', primary_key=True)
    id_bskBASKET = db.Column(db.Integer(15, unsigned=True),
                db.ForeignKey(BskBASKET.id), nullable=False,
                server_default='0', primary_key=True)
    topic = db.Column(db.String(50), nullable=False,
                server_default='')
    date_shared = db.Column(db.DateTime, nullable=False,
                server_default='1900-01-01 00:00:00')
    share_level = db.Column(db.Char(2), nullable=False, server_default='')
    usergroup = db.relationship(Usergroup, backref='usergroup_baskets')
    usergroup_basket = db.relationship(BskBASKET, backref='usergroups')
Пример #18
0
class SbmCOLLECTIONSbmDOCTYPE(db.Model):
    """Represents a SbmCOLLECTIONSbmDOCTYPE record."""
    __tablename__ = 'sbmCOLLECTION_sbmDOCTYPE'
    id_father = db.Column(db.Integer(11),
                          db.ForeignKey(SbmCOLLECTION.id),
                          nullable=False,
                          server_default='0',
                          primary_key=True)
    id_son = db.Column(db.Char(10),
                       db.ForeignKey(SbmDOCTYPE.sdocname),
                       nullable=False,
                       server_default='0',
                       primary_key=True)
    catalogue_order = db.Column(db.Integer(11),
                                nullable=False,
                                server_default='0')
Пример #19
0
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
Пример #20
0
class SbmFIELD(db.Model):
    """Represents a SbmFIELD record."""
    __tablename__ = 'sbmFIELD'
    subname = db.Column(db.String(13), nullable=True, primary_key=True)
    pagenb = db.Column(db.Integer(11),
                       nullable=True,
                       primary_key=True,
                       autoincrement=False)
    fieldnb = db.Column(db.Integer(11), nullable=True)
    fidesc = db.Column(db.String(15), nullable=True, primary_key=True)
    fitext = db.Column(db.Text, nullable=True)
    level = db.Column(db.Char(1), nullable=True)
    sdesc = db.Column(db.Text, nullable=True)
    checkn = db.Column(db.Text, nullable=True)
    cd = db.Column(db.Date, nullable=True)
    md = db.Column(db.Date, nullable=True)
    fiefi1 = db.Column(db.Text, nullable=True)
    fiefi2 = db.Column(db.Text, nullable=True)
def do_upgrade():
    """ Implement your upgrades here  """
    m = db.MetaData(bind=db.engine)
    m.reflect()

    tpid = db.Table(
        'pid',
        m,
        db.Column('id', db.Integer(15, unsigned=True), primary_key=True, nullable=False),
        db.Column('type', db.String(length=6), nullable=False),
        db.Column('pid', db.String(length=255), nullable=False),
        db.Column('status', db.Char(length=1), nullable=False),
        db.Column('created', db.DateTime(), nullable=False),
        db.Column('last_modified', db.DateTime(), nullable=False),
        db.Index('uidx_type_pid', 'type', 'pid', unique=True),
        db.Index('idx_status', 'status'),
        mysql_engine='MyISAM',
    )

    tpidlog = db.Table(
        'pidLOG',
        m,
        db.Column('id', db.Integer(15, unsigned=True), primary_key=True, nullable=False),
        db.Column('id_pid', db.Integer(15, unsigned=True), ForeignKey('pid.id')),
        db.Column('timestamp', DateTime(), nullable=False),
        db.Column('action', db.String(length=10), nullable=False),
        db.Column('message', Text(), nullable=False),
        db.Index('idx_action', 'action'),
        mysql_engine='MyISAM',
    )

    tpidregistry = db.Table(
        'pidREGISTRY',
        m,
        db.Column('object_type', db.String(length=3), primary_key=True, nullable=False),
        db.Column('object_id', db.String(length=255), nullable=False),
        db.Column('id_pid', db.Integer(15, unsigned=True), ForeignKey('pid.id'), primary_key=True, nullable=False),
        db.Index('idx_type_id', 'object_type', 'object_id'),
        mysql_engine='MyISAM',
    )

    tpid.create()
    tpidlog.create()
    tpidregistry.create()
Пример #22
0
class UserMsgMESSAGE(db.Model):
    """Represents a UserMsgMESSAGE record."""
    __tablename__ = 'user_msgMESSAGE'
    id_user_to = db.Column(db.Integer(15, unsigned=True),
                           db.ForeignKey(User.id),
                           nullable=False,
                           server_default='0',
                           primary_key=True)
    id_msgMESSAGE = db.Column(db.Integer(15, unsigned=True),
                              db.ForeignKey(MsgMESSAGE.id),
                              nullable=False,
                              server_default='0',
                              primary_key=True)
    status = db.Column(db.Char(1), nullable=False, server_default='N')
    user_to = db.relationship(User,
                              backref='received_messages',
                              collection_class=set)
    message = db.relationship(MsgMESSAGE,
                              backref='sent_to_users',
                              collection_class=set)
Пример #23
0
class UserQueryBasket(db.Model):
    """Represent a UserQueryBasket record."""

    __tablename__ = 'user_query_basket'

    id_user = db.Column(db.Integer(15, unsigned=True),
                        db.ForeignKey(User.id),
                        nullable=False,
                        server_default='0',
                        primary_key=True)
    id_query = db.Column(db.Integer(15, unsigned=True),
                         db.ForeignKey(WebQuery.id),
                         nullable=False,
                         server_default='0',
                         primary_key=True,
                         index=True)
    id_basket = db.Column(db.Integer(15, unsigned=True),
                          db.ForeignKey(BskBASKET.id),
                          nullable=False,
                          server_default='0',
                          primary_key=True,
                          index=True)
    frequency = db.Column(db.String(5),
                          nullable=False,
                          server_default='',
                          primary_key=True)
    date_creation = db.Column(db.Date, nullable=True)
    date_lastrun = db.Column(db.Date,
                             nullable=True,
                             server_default='1900-01-01')
    alert_name = db.Column(db.String(30),
                           nullable=False,
                           server_default='',
                           index=True)
    alert_desc = db.Column(db.Text)
    alert_recipient = db.Column(db.Text)
    notification = db.Column(db.Char(1), nullable=False, server_default='y')

    user = db.relationship(User, backref='query_baskets')
    webquery = db.relationship(WebQuery, backref='user_baskets')
    basket = db.relationship(BskBASKET, backref='user_queries')
Пример #24
0
class SbmFIELDDESC(db.Model):
    """Represents a SbmFIELDDESC record."""
    __tablename__ = 'sbmFIELDDESC'
    name = db.Column(
        db.String(15),  #db.ForeignKey(SbmFIELD.fidesc),
        nullable=False,
        server_default='',
        primary_key=True)
    alephcode = db.Column(db.String(50), nullable=True)
    marccode = db.Column(db.String(50), nullable=False, server_default='')
    type = db.Column(db.Char(1), nullable=True)
    size = db.Column(db.Integer(11), nullable=True)
    rows = db.Column(db.Integer(11), nullable=True)
    cols = db.Column(db.Integer(11), nullable=True)
    maxlength = db.Column(db.Integer(11), nullable=True)
    val = db.Column(db.Text, nullable=True)
    fidesc = db.Column(db.Text, nullable=True)
    cd = db.Column(db.Date, nullable=True)
    md = db.Column(db.Date, nullable=True)
    modifytext = db.Column(db.Text, nullable=True)
    fddfi2 = db.Column(db.Text, nullable=True)
    cookie = db.Column(db.Integer(11), nullable=True, server_default='0')
Пример #25
0
class Tag(db.Model):
    """Represent a Tag record."""
    __tablename__ = 'tag'
    id = db.Column(db.MediumInteger(9, unsigned=True), primary_key=True)
    name = db.Column(db.String(255), nullable=False)
    value = db.Column(db.Char(6), nullable=False, server_default='')
    recjson_value = db.Column(db.Text, nullable=False)

    def __init__(self, tup=None, *args, **kwargs):
        if tup is not None and isinstance(tup, tuple):
            self.name, self.value = tup
            super(Tag, self).__init__(*args, **kwargs)
        else:
            if tup is None:
                super(Tag, self).__init__(*args, **kwargs)
            else:
                super(Tag, self).__init__(tup, *args, **kwargs)

    @property
    def as_tag(self):
        """Returns tupple with name and value."""
        return self.name, self.value
Пример #26
0
class CmtACTIONHISTORY(db.Model):
    """Represents a CmtACTIONHISTORY record."""
    __tablename__ = 'cmtACTIONHISTORY'
    id_cmtRECORDCOMMENT = db.Column(db.Integer(15, unsigned=True),
                                    db.ForeignKey(CmtRECORDCOMMENT.id),
                                    nullable=True,
                                    primary_key=True)
    id_bibrec = db.Column(db.MediumInteger(8, unsigned=True),
                          db.ForeignKey(Bibrec.id),
                          nullable=True,
                          primary_key=True)
    id_user = db.Column(db.Integer(15, unsigned=True),
                        db.ForeignKey(User.id),
                        nullable=True,
                        primary_key=True)
    client_host = db.Column(db.Integer(10, unsigned=True), nullable=True)
    action_time = db.Column(db.DateTime,
                            nullable=False,
                            server_default='1900-01-01 00:00:00')
    action_code = db.Column(db.Char(1), nullable=False, index=True)
    recordcomment = db.relationship(CmtRECORDCOMMENT, backref='actionhistory')
    bibrec = db.relationship(Bibrec)
    user = db.relationship(User)
Пример #27
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()
Пример #28
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()
Пример #29
0
class KnwKB(db.Model):
    """Represent a KnwKB record."""

    KNWKB_TYPES = {
        'written_as': 'w',
        'dynamic': 'd',
        'taxonomy': 't',
    }

    __tablename__ = 'knwKB'
    id = db.Column(db.MediumInteger(8, unsigned=True),
                   nullable=False,
                   primary_key=True,
                   autoincrement=True)
    _name = db.Column(db.String(255),
                      server_default='',
                      unique=True,
                      name="name")
    _description = db.Column(db.Text,
                             nullable=False,
                             name="description",
                             default="")
    _kbtype = db.Column(db.Char(1), nullable=True, default='w', name="kbtype")
    slug = db.Column(db.String(255), unique=True, nullable=False, default="")
    # Enable or disable the access from REST API
    is_api_accessible = db.Column(db.Boolean, default=True, nullable=False)

    @db.hybrid_property
    def name(self):
        """Get name."""
        return self._name

    @name.setter
    def name(self, value):
        """Set name and generate the slug."""
        self._name = value
        # generate slug
        if not self.slug:
            self.slug = KnwKB.generate_slug(value)

    @db.hybrid_property
    def description(self):
        """Get description."""
        return self._description

    @description.setter
    def description(self, value):
        """Set description."""
        # TEXT in mysql don't support default value
        # @see http://bugs.mysql.com/bug.php?id=21532
        self._description = value or ''

    @db.hybrid_property
    def kbtype(self):
        """Get kbtype."""
        return self._kbtype

    @kbtype.setter
    def kbtype(self, value):
        """Set kbtype."""
        if value is None:
            # set the default value
            return
        # or set one of the available values
        kbtype = value[0] if len(value) > 0 else 'w'
        if kbtype not in ['t', 'd', 'w']:
            raise ValueError('unknown type "{value}", please use one of \
                             following values: "taxonomy", "dynamic" or \
                             "written_as"'.format(value=value))
        self._kbtype = kbtype

    def is_dynamic(self):
        """Return true if the type is dynamic."""
        return self._kbtype == 'd'

    def to_dict(self):
        """Return a dict representation of KnwKB."""
        mydict = {
            'id': self.id,
            'name': self.name,
            'description': self.description,
            'kbtype': self.kbtype
        }
        if self.kbtype == 'd':
            mydict.update((self.kbdefs.to_dict() if self.kbdefs else {}) or {})

        return mydict

    def get_kbr_items(self, searchkey="", searchvalue="", searchtype='s'):
        """
        Return dicts of 'key' and 'value' from a knowledge base.

        :param kb_name the name of the knowledge base
        :param searchkey search using this key
        :param searchvalue search using this value
        :param searchtype s=substring, e=exact, sw=startswith
        :return a list of dictionaries [{'key'=>x, 'value'=>y},..]
        """
        import warnings
        warnings.warn("The function is deprecated. Please use the "
                      "`KnwKBRVAL.query_kb_mappings()` instead. "
                      "E.g. [kval.to_dict() for kval in "
                      "KnwKBRVAL.query_kb_mappings(kb_id).all()]")
        if searchtype == 's' and searchkey:
            searchkey = '%' + searchkey + '%'
        if searchtype == 's' and searchvalue:
            searchvalue = '%' + searchvalue + '%'
        if searchtype == 'sw' and searchvalue:  # startswith
            searchvalue = searchvalue + '%'
        if not searchvalue:
            searchvalue = '%'
        if not searchkey:
            searchkey = '%'

        kvals = KnwKBRVAL.query.filter(KnwKBRVAL.id_knwKB.like(self.id),
                                       KnwKBRVAL.m_value.like(searchvalue),
                                       KnwKBRVAL.m_key.like(searchkey)).all()
        return [kval.to_dict() for kval in kvals]

    def get_kbr_values(self, searchkey="", searchvalue="", searchtype='s'):
        """
        Return dicts of 'key' and 'value' from a knowledge base.

        :param kb_name the name of the knowledge base
        :param searchkey search using this key
        :param searchvalue search using this value
        :param searchtype s=substring, e=exact, sw=startswith
        :return a list of dictionaries [{'key'=>x, 'value'=>y},..]
        """
        import warnings
        warnings.warn("The function is deprecated. Please use the "
                      "`KnwKBRVAL.query_kb_mappings()` instead. "
                      "E.g. [(kval.m_value,) for kval in "
                      "KnwKBRVAL.query_kb_mappings(kb_id).all()]")
        # prepare filters
        if searchtype == 's':
            searchkey = '%' + searchkey + '%'
        if searchtype == 's' and searchvalue:
            searchvalue = '%' + searchvalue + '%'
        if searchtype == 'sw' and searchvalue:  # startswith
            searchvalue = searchvalue + '%'
        if not searchvalue:
            searchvalue = '%'
        # execute query
        return db.session.execute(
            db.select([KnwKBRVAL.m_value],
                      db.and_(KnwKBRVAL.id_knwKB.like(self.id),
                              KnwKBRVAL.m_value.like(searchvalue),
                              KnwKBRVAL.m_key.like(searchkey))))

    @session_manager
    def set_dyn_config(self, field, expression, collection=None):
        """Set dynamic configuration."""
        if self.kbdefs:
            # update
            self.kbdefs.output_tag = field
            self.kbdefs.search_expression = expression
            self.kbdefs.collection = collection
            db.session.merge(self.kbdefs)
        else:
            # insert
            self.kbdefs = KnwKBDDEF(output_tag=field,
                                    search_expression=expression,
                                    collection=collection)

    @staticmethod
    def generate_slug(name):
        """Generate a slug for the knowledge.

        :param name: text to slugify
        :return: slugified text
        """
        slug = slugify(name)

        i = KnwKB.query.filter(
            db.or_(
                KnwKB.slug.like(slug),
                KnwKB.slug.like(slug + '-%'),
            )).count()

        return slug + ('-{0}'.format(i) if i > 0 else '')

    @staticmethod
    def exists(kb_name):
        """Return True if a kb with the given name exists.

        :param kb_name: the name of the knowledge base
        :return: True if kb exists
        """
        return KnwKB.query_exists(KnwKB.name.like(kb_name))

    @staticmethod
    def query_exists(filters):
        """Return True if a kb with the given filters exists.

        E.g: KnwKB.query_exists(KnwKB.name.like('FAQ'))

        :param filters: filter for sqlalchemy
        :return: True if kb exists
        """
        return db.session.query(KnwKB.query.filter(filters).exists()).scalar()

    def get_filename(self):
        """Construct the file name for taxonomy knoledge."""
        return cfg['CFG_WEBDIR'] + "/kbfiles/" \
            + str(self.id) + ".rdf"
Пример #30
0
def do_upgrade():
    """Implement your upgrades here."""
    # Table sbmCOLLECTION_sbmCOLLECTION

    # add column "id" in the table
    op.add_column('sbmCOLLECTION_sbmCOLLECTION',
                  db.Column('id', db.Integer(11), nullable=False))

    # set all new ids
    records = run_sql("""SELECT id_father, id_son FROM """
                      """sbmCOLLECTION_sbmCOLLECTION AS ssc """
                      """ORDER BY ssc.id_father, ssc.id_son""")
    for index, rec in enumerate(records):
        run_sql("""UPDATE sbmCOLLECTION_sbmCOLLECTION
                SET id = %s WHERE id_father = %s AND id_son = %s """,
                (index + 1, rec[0], rec[1]))

    # drop primary keys
    try:
        op.drop_constraint(None, 'sbmCOLLECTION_sbmCOLLECTION',
                           type_='primary')
    except OperationalError:
        # the primary key is already dropped
        warnings.warn("""Primary key of sbmCOLLECTION_sbmCOLLECTION """
                      """table has been already dropped.""")

    # create new primary key with id
    op.create_primary_key('pk_sbmCOLLECTION_sbmCOLLECTION_id',
                          'sbmCOLLECTION_sbmCOLLECTION', ['id'])
    # set id as autoincrement
    op.alter_column('sbmCOLLECTION_sbmCOLLECTION', 'id',
                    existing_type=db.Integer(11),
                    existing_nullable=False, autoincrement=True)
    # fix columns id_father and id_son
    op.alter_column('sbmCOLLECTION_sbmCOLLECTION', 'id_father',
                    existing_type=db.Integer(11),
                    nullable=True, server_default=None)
    op.alter_column('sbmCOLLECTION_sbmCOLLECTION', 'id_son',
                    existing_type=db.Integer(11),
                    nullable=False, server_default=None)
    op.create_index('id_father', 'sbmCOLLECTION_sbmCOLLECTION',
                    columns=['id_father'])

    # Table sbmCOLLECTION_sbmDOCTYPE

    # add column "id" in the table
    op.add_column('sbmCOLLECTION_sbmDOCTYPE',
                  db.Column('id', db.Integer(11), nullable=False))

    # set all new ids
    records = run_sql("""SELECT id_father, id_son
                      FROM sbmCOLLECTION_sbmDOCTYPE AS ssd
                      ORDER BY ssd.id_father, ssd.id_son""")
    for index, rec in enumerate(records):
        run_sql("""UPDATE sbmCOLLECTION_sbmDOCTYPE
                SET id = %s WHERE id_father = %s AND id_son = %s """,
                (index + 1, rec[0], rec[1]))

    # drop primary keys
    op.drop_constraint('id_father', 'sbmCOLLECTION_sbmDOCTYPE', type_='primary')
    # create new primary key with id
    op.create_primary_key('pk_sbmCOLLECTION_sbmDOCTYPE_id',
                          'sbmCOLLECTION_sbmDOCTYPE', ['id'])
    # set id as autoincrement
    op.alter_column('sbmCOLLECTION_sbmDOCTYPE', 'id',
                    existing_type=db.Integer(11),
                    existing_nullable=False, autoincrement=True)
    # fix columns id_father and id_son
    op.alter_column('sbmCOLLECTION_sbmDOCTYPE', 'id_father',
                    existing_type=db.Integer(11),
                    nullable=True, server_default=None)
    op.alter_column('sbmCOLLECTION_sbmDOCTYPE', 'id_son',
                    existing_type=db.Char(10),
                    nullable=False, server_default=None)
    op.create_index('id_father', 'sbmCOLLECTION_sbmDOCTYPE',
                    columns=['id_father'])