pyrate_limiter.buckets.sqlite_bucket module#
Bucket implementation using SQLite
- class pyrate_limiter.buckets.sqlite_bucket.Queries#
Bases:
object
- COUNT_ALL = "SELECT COUNT(*) FROM '{table}'"#
- COUNT_BEFORE_INSERT = "\n SELECT :interval{index} as interval, COUNT(*) FROM '{table}'\n WHERE item_timestamp >= :current_timestamp - :interval{index}\n "#
- COUNT_BEFORE_LEAK = "SELECT COUNT(*) FROM '{table}' WHERE item_timestamp < {current_timestamp} - {interval}"#
- CREATE_BUCKET_TABLE = "\n CREATE TABLE IF NOT EXISTS '{table}' (\n name VARCHAR,\n item_timestamp INTEGER\n )\n "#
- CREATE_INDEX_ON_TIMESTAMP = "\n CREATE INDEX IF NOT EXISTS '{index_name}' ON '{table_name}' (item_timestamp)\n "#
- DROP_INDEX = "DROP INDEX IF EXISTS '{index}'"#
- DROP_TABLE = "DROP TABLE IF EXISTS '{table}'"#
- FLUSH = "DELETE FROM '{table}'"#
- GET_ALL_ITEM = "SELECT * FROM '{table}' ORDER BY item_timestamp ASC"#
- GET_FIRST_ITEM = "SELECT name, item_timestamp FROM '{table}' ORDER BY item_timestamp ASC"#
- GET_LAG = "\n SELECT (strftime ('%s', 'now') || substr(strftime ('%f', 'now'), 4)) - (\n SELECT item_timestamp\n FROM '{table}'\n ORDER BY item_timestamp\n ASC\n LIMIT 1\n )\n "#
- LEAK = 'DELETE FROM "{table}" WHERE rowid IN (\n SELECT rowid FROM "{table}" ORDER BY item_timestamp ASC LIMIT {count});'#
- PEEK = 'SELECT * FROM "{table}" ORDER BY item_timestamp DESC LIMIT 1 OFFSET {count}'#
- PUT_ITEM = "\n INSERT INTO '{table}' (name, item_timestamp) VALUES %s\n "#
- class pyrate_limiter.buckets.sqlite_bucket.SQLiteBucket(rates, conn, table)#
Bases:
pyrate_limiter.abstracts.bucket.AbstractBucket
For sqlite bucket, we are using the sql time function as the clock item’s timestamp wont matter here
- conn#
- full_count_query#
- classmethod init_from_file(rates, table='rate_bucket', db_path=None, create_new_table=True)#
- Return type
- lock#
- peek(index)#
Peek at the rate-item at a specific index in latest-to-earliest order NOTE: The reason we cannot peek from the start of the queue(earliest-to-latest) is we can’t really tell how many outdated items are still in the queue
- put(item)#
Put an item (typically the current time) in the bucket return true if successful, otherwise false
- Return type
- rates#
- table#