Skip to main content

A postgresql backed cache system

Project description

DBCACHE

This small library provides small and simple stores based on postgresql for the following purposes:

  • a cache store for bytes with an expiration timestamp
  • a key-value store with json serializable values
  • a versioned key-value store with values as bytes

To initialize the database schema, type:

$ dbcache init-db postgresql://foo:bar@postgresql/mydb

Example usage (cache):

  from time import sleep
  from datetime import timedelta
  from dbcache.api import dbcache

  cache = dbcache('postgresql://foo:bar@postgresql/mydb')

  assert cache.get('a') is None
  cache.set('a', b'aaa')
  assert cache.get('a') == b'aaa'

  cache.delete('a')
  assert cache.get('a') is None

  cache.set('b', b'bbb', lifetime=timedelta(seconds=1))
  assert cache.get('b') == b'bbb'
  sleep(1)
  assert cache.get('b') is None

Example usage (key/value store):

  from dbcache.api import kvstore
  store = kvstore('postgresql://foo:bar@postgresql/mydb')

  assert store.get('a') is None
  store.set('a', 'aaa')
  assert store.get('a') == 'aaa'
  store.set('a', 'newvalue')
  assert store.get('a') == 'newvalue'

  store.delete('a')
  assert store.get('a') is None

  store.set('int', 42)
  assert store.get('int') == 42

  store.set('float', 42.0)
  store.set('dict', {'a': [1, 2]})

  assert store.all() == {
      'dict': {'a': [1, 2]},
      'float': 42.0,
      'int': 42
  }

  assert store.keys() == ['dict', 'float', 'int']

Example usage (versioned key/value store):

  from dbcache.api import vkvstore
  vstore = vkvstore('postgresql://foo:bar@postgresql/mydb')

  assert vstore.get('html') is None
  v1 = datetime(2023, 1, 1, 12, 30, tzinfo=timezone.utc)
  vstore.set(
      'html',
      b'<html></html>',
      insertion_date=v1
  )
  assert vstore.get('html') == b'<html></html>'

  v2 = datetime(2023, 1, 2, 12, 30, tzinfo=timezone.utc)
  vstore.set(
      'html',
      b'<html>Hello, World</html>',
      insertion_date=v2
  )
  assert vstore.get('html') == b'<html>Hello, World</html>'
  assert vstore.get('html', insertion_date=v1) == b'<html></html>'

  assert vstore.versions('html') == [
      v1,
      v2
  ]
  assert vstore.versions('nope') == []

  vstore.delete('html')
  assert vstore.keys() == []
  assert vstore.get('html') is None

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

dbcache-0.5.0-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file dbcache-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: dbcache-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for dbcache-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dbc056ba0e0cda241a0a595c265db2e68a4a47593a883803001cdcbbac41f501
MD5 a9434b14cfa9527e0cf578ea30942e5f
BLAKE2b-256 089a0340994a7f82a4e13dbaad6732695cf666b0a91ea6c91337125b9dea2218

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page