Ejemplo n.º 1
0
    def resolve(self, key=None):
        if self.task.source:
            state = self.task.get_state()
            error = self.task.target.models.errors
            table = self.task.source.table

            if key is None:
                self.task.target.engine.execute(
                    error.delete(error.c.state_id == state.id))
            elif self.task.target.samedb and self.task.source.samedb:
                query = (sa.select([error.c.id]).select_from(
                    table.join(error, table.c.id == error.c.row_id)).where(
                        sa.and_(error.c.state_id == state.id,
                                table.c.key == serkey(key))))

                if self.bot.engine.name == 'mysql':
                    # http://stackoverflow.com/a/45498/475477
                    query = sa.select([query.alias().c.id])

                self.task.target.engine.execute(
                    error.delete(error.c.id.in_(query)))
            else:
                query = table.select(table.c.key == serkey(key))
                row_ids = {
                    row['id']
                    for row in self.task.source.engine.execute(query)
                }
                if row_ids:
                    query = error.delete(
                        sa.and_(error.c.state_id == state.id,
                                error.c.row_id.in_(row_ids)))
                    self.task.target.engine.execute(query)
Ejemplo n.º 2
0
    def resolve(self, key=None):
        if self.task.source:
            state = self.task.get_state()
            error = self.task.target.models.errors
            table = self.task.source.table

            if key is None:
                self.task.target.engine.execute(error.delete(error.c.state_id == state.id))
            elif self.task.target.samedb and self.task.source.samedb:
                query = (
                    sa.select([error.c.id]).
                    select_from(table.join(error, table.c.id == error.c.row_id)).
                    where(sa.and_(error.c.state_id == state.id, table.c.key == serkey(key)))
                )

                if self.bot.engine.name == 'mysql':
                    # http://stackoverflow.com/a/45498/475477
                    query = sa.select([query.alias().c.id])

                self.task.target.engine.execute(error.delete(error.c.id.in_(query)))
            else:
                query = table.select(table.c.key == serkey(key))
                row_ids = {row['id'] for row in self.task.source.engine.execute(query)}
                if row_ids:
                    query = error.delete(sa.and_(error.c.state_id == state.id, error.c.row_id.in_(row_ids)))
                    self.task.target.engine.execute(query)
Ejemplo n.º 3
0
    def last(self, key=None):
        if key:
            query = self.table.select().where(self.table.c.key == serkey(key)).order_by(self.table.c.id.desc())
        else:
            query = self.table.select().order_by(self.table.c.id.desc())

        row = self.engine.execute(query).first()
        return create_row(row) if row else None
Ejemplo n.º 4
0
def test_serkey():
    assert serkey(1) == 'bf8b4530d8d246dd74ac53a13471bba17941dff7'
    assert serkey('1') == 'deb12f0578a40628ec941aa2bd60d7a838765ed0'
    assert serkey([1, 2]) == 'a4001841d163db31660e03679efe46d9f99a54eb'
    assert serkey((1, 2)) == 'a4001841d163db31660e03679efe46d9f99a54eb'

    with pytest.raises(AssertionError):
        serkey({1, 2})

    with pytest.raises(AssertionError):
        serkey({1: 2})
Ejemplo n.º 5
0
    def last(self, key=None):
        if key:
            query = self.table.select().where(
                self.table.c.key == serkey(key)).order_by(
                    self.table.c.id.desc())
        else:
            query = self.table.select().order_by(self.table.c.id.desc())

        row = self.engine.execute(query).first()
        return create_row(row) if row else None
Ejemplo n.º 6
0
 def getall(self, key, reverse=False):
     order_by = self.table.c.id.desc() if reverse else self.table.c.id
     query = self.table.select().where(
         self.table.c.key == serkey(key)).order_by(order_by)
     for row in windowed_query(self.engine, query, self.table.c.id):
         yield create_row(row)
Ejemplo n.º 7
0
 def exists(self, key):
     query = sa.select([sa.exists().where(self.table.c.key == serkey(key))])
     return self.engine.execute(query).scalar()
Ejemplo n.º 8
0
 def fetchrow(key, column):
     query = pipe.table.select(pipe.table.c.key == serkey(key))
     row = bot.engine.execute(query).fetchone()
     return row[column]
Ejemplo n.º 9
0
 def fetchrow(key, column):
     query = pipe.table.select(pipe.table.c.key == serkey(key))
     row = bot.engine.execute(query).fetchone()
     return row[column]
Ejemplo n.º 10
0
 def getall(self, key, reverse=False):
     order_by = self.table.c.id.desc() if reverse else self.table.c.id
     query = self.table.select().where(self.table.c.key == serkey(key)).order_by(order_by)
     for row in windowed_query(self.engine, query, self.table.c.id):
         yield create_row(row)
Ejemplo n.º 11
0
 def exists(self, key):
     query = sa.select([sa.exists().where(self.table.c.key == serkey(key))])
     return self.engine.execute(query).scalar()