Beispiel #1
0
Datei: fun.py Projekt: vhata/ibid
class Item(Base):
    __table__ = Table('bucket_items',
                      Base.metadata,
                      Column('id', Integer, primary_key=True),
                      Column('description',
                             IbidUnicodeText(case_insensitive=True),
                             nullable=False,
                             index=True),
                      Column('determiner',
                             IbidUnicodeText(case_insensitive=True),
                             index=True),
                      Column('carried', Boolean, nullable=False, index=True),
                      Column('giver_id',
                             Integer,
                             ForeignKey('identities.id'),
                             nullable=False),
                      useexisting=True)

    __table__.versioned_schema = VersionedSchema(__table__, 1)

    giver = relation(Identity)

    def __init__(self, description, determiner, giver):
        self.description = description
        self.determiner = determiner
        self.carried = True
        self.giver_id = giver

    @classmethod
    def carried_items(cls, session):
        return session.query(cls).filter_by(carried=True)

    @classmethod
    def take_item(cls, session):
        items = cls.carried_items(session)
        num = items.count()
        if num:
            item = items[randrange(0, num)]
        else:
            raise EmptyBucketException

        item.carried = False
        session.save_or_update(item)

        return item

    def __unicode__(self):
        if self.determiner:
            return self.determiner + u' ' + self.description
        else:
            return self.description
Beispiel #2
0
 def upgrade_7_to_8(self):
     self.drop_index(self.table.c._name)
     self.alter_column(Column('name',
                              IbidUnicodeText(32, case_insensitive=True),
                              key='_name', nullable=False, unique=True,
                              index=True), force_rebuild=True)
     self.add_index(self.table.c._name)
Beispiel #3
0
 def upgrade_5_to_6(self):
     self.alter_column(
         Column('name',
                IbidUnicodeText(32),
                key='_name',
                nullable=False,
                unique=True,
                index=True))
Beispiel #4
0
class FactoidName(Base):
    __table__ = Table('factoid_names',
                      Base.metadata,
                      Column('id', Integer, primary_key=True),
                      Column('name',
                             IbidUnicodeText(32, case_insensitive=True),
                             key='_name',
                             nullable=False,
                             unique=True,
                             index=True),
                      Column('factoid_id',
                             Integer,
                             ForeignKey('factoids.id'),
                             nullable=False,
                             index=True),
                      Column('identity_id',
                             Integer,
                             ForeignKey('identities.id'),
                             index=True),
                      Column('time', DateTime, nullable=False),
                      Column('factpack',
                             Integer,
                             ForeignKey('factpacks.id'),
                             index=True),
                      Column('wild',
                             Boolean,
                             nullable=False,
                             default=False,
                             index=True),
                      useexisting=True)

    class FactoidNameSchema(VersionedSchema):
        def upgrade_1_to_2(self):
            self.add_column(
                Column('factpack', Integer, ForeignKey('factpacks.id')))

        def upgrade_2_to_3(self):
            self.add_index(self.table.c.name)

        def upgrade_3_to_4(self):
            self.add_index(self.table.c.name)
            self.add_index(self.table.c.factoid_id)
            self.add_index(self.table.c.identity_id)
            self.add_index(self.table.c.factpack)

        def upgrade_4_to_5(self):
            self.alter_column(
                Column('name',
                       IbidUnicode(64),
                       key='_name',
                       nullable=False,
                       unique=True,
                       index=True))

        def upgrade_5_to_6(self):
            self.alter_column(
                Column('name',
                       IbidUnicodeText(32),
                       key='_name',
                       nullable=False,
                       unique=True,
                       index=True))

        def upgrade_6_to_7(self):
            self.add_column(
                Column('wild',
                       Boolean,
                       PassiveDefault('0'),
                       nullable=False,
                       index=True,
                       default=False))
            for row in self.upgrade_session.query(FactoidName) \
                    .filter(FactoidName.name.like('%#_#%%', escape='#')) \
                    .all():
                row.wild = True
                self.upgrade_session.add(row)

        def upgrade_7_to_8(self):
            self.drop_index(self.table.c._name)
            self.alter_column(Column('name',
                                     IbidUnicodeText(32,
                                                     case_insensitive=True),
                                     key='_name',
                                     nullable=False,
                                     unique=True,
                                     index=True),
                              force_rebuild=True)
            self.add_index(self.table.c._name)

        def upgrade_8_to_9(self):
            for row in self.upgrade_session.query(FactoidName) \
                    .filter_by(name=u'') \
                    .all():
                self.upgrade_session.delete(row)
                if len(row.factoid.names) == 0:
                    self.upgrade_session.delete(row.factoid)

    __table__.versioned_schema = FactoidNameSchema(__table__, 9)

    def __init__(self, name, identity_id, factoid_id=None, factpack=None):
        self.name = name
        self.factoid_id = factoid_id
        self.identity_id = identity_id
        self.time = datetime.utcnow()
        self.factpack = factpack

    def __repr__(self):
        return u'<FactoidName %s %s>' % (self.name, self.factoid_id)

    def _get_name(self):
        return unescape_name(self._name)

    def _set_name(self, name):
        self.wild = u'$arg' in name
        self._name = escape_name(name)

    name = synonym('_name', descriptor=property(_get_name, _set_name))