summaryrefslogtreecommitdiff
path: root/vendor/withsqlite/withsqlite.py
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/withsqlite/withsqlite.py')
-rw-r--r--vendor/withsqlite/withsqlite.py197
1 files changed, 0 insertions, 197 deletions
diff --git a/vendor/withsqlite/withsqlite.py b/vendor/withsqlite/withsqlite.py
deleted file mode 100644
index 45d66c1..0000000
--- a/vendor/withsqlite/withsqlite.py
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-
-"""
-withsqlite - uses an sqlite db as a back end for a dict-like object,
-kind of like shelve but with json and sqlite3.
-
-Copyright 2011 James Vasile
-Released under the GNU General Public License, version 3 or later.
-See https://www.gnu.org/licenses/gpl-3.0.html for terms.
-
-Repo is at <http://github.com/jvasile/withsqlite>. Patches welcome!
-
-This file was developed as part of planeteria <http://github.com/jvasile/planeteria>
-
-"""
-import os, sys, sqlite3, time
-import simplejson as json
-
-def to_json(python_object):
- if isinstance(python_object, time.struct_time):
- return {'__class__': 'time.asctime',
- '__value__': time.asctime(python_object)}
-
- return {'__class__': 'basestring',
- '__value__': str(python_object)}
-
-class sqlite_db():
- """
-Backends a dict on an sqlite db. This class aims to present like a
-dict wherever it can.
-
-USE:
-import sqlite_db from withsqlite
-with sqlite_db("filename") as db:
- db['aaa'] = {'test':'ok'}
- print db.items()
-
-BUGS:
-
-vals are json serialized before being written, so if you can't
-serialize it, you can't put it in the dict.
-
-Unimplemented mapping API:
-a.copy() a (shallow) copy of a
-a.update([b]) updates a with key/value pairs from b, overwriting existing keys, returns None
-a.fromkeys(seq[, value]) Creates a new dictionary with keys from seq and values set to value
-a.setdefault(k[, x]) a[k] if k in a, else x (also setting it)
-a.pop(k[, x]) a[k] if k in a, else x (and remove k)
-a.popitem() remove and return an arbitrary (key, value) pair
-a.iteritems() return an iterator over (key, value) pairs
-a.iterkeys() return an iterator over the mapping's keys
-a.itervalues() return an iterator over the mapping's values
-
->>> with sqlite_db("test") as db:
-... db.clear()
-... db.items()
-...
-[]
->>> with sqlite_db("test") as db:
-... db['a']="test"
-... db.items()
-...
-[(u'a', u'test')]
->>> with sqlite_db("test") as db:
-... db['as']="test"
-... db.items()
-...
-[(u'a', u'test'), (u'as', u'test')]
->>> with sqlite_db("test") as db:
-... db['b']=[1,2,3,4,5]
-... del db['b']
-...
->>> with sqlite_db("test") as db:
-... db.items()
-... len(db)
-...
-[(u'a', u'test'), (u'as', u'test')]
-2
->>> with sqlite_db("test") as db:
-... db.keys()
-...
-[u'a', u'as']
->>> with sqlite_db("test") as db:
-... db.values()
-...
-[u'test', u'test']
->>> with sqlite_db("test") as db:
-... db.get('b',5)
-...
-5
->>> with sqlite_db("test") as db:
-... db.get('b')
-...
->>> with sqlite_db("test") as db:
-... db.get('c',5)
-...
-5
->>> with sqlite_db("test") as db:
-... 'as' in db
-...
-True
->>> with sqlite_db("test") as db:
-... 'asdf' not in db
-...
-True
->>> with sqlite_db("test") as db:
-... db.has_key('as')
-...
-True
->>>
-"""
-
- def __init__(self, fname, autocommit=False, check_same_thread=False):
- self.fname = fname + ".sqlite3"
- self.autocommit = autocommit
- self.check_same_thread = check_same_thread
- def __enter__(self):
- if not os.path.exists(self.fname):
- self.make_db()
- self.conn = sqlite3.connect(self.fname, check_same_thread = self.check_same_thread)
- self.crsr = self.conn.cursor()
- return self
- def __exit__(self, type, value, traceback):
- self.conn.commit()
- self.crsr.close()
- def make_db(self):
- conn = sqlite3.connect(self.fname)
- c = conn.cursor()
- c.execute('''create table store (key text unique, val text)''')
- conn.commit()
- c.close()
- def __delitem__(self, key):
- """del a[k] remove a[k] from a"""
- self.crsr.execute("delete from store where key=?", [key])
- def jsonize(self,val):
- "If it's just a string, serialize it ourselves"
- if isinstance(val, basestring):
- return '"%s"' % val
- return json.dumps(val, default=to_json, sort_keys=True, indent=3)
- def __setitem__(self, key, val):
- """a[k] = v set a[k] to v """
-
- try:
- if val == self.__getitem__(key):
- return
- self.crsr.execute("update or fail store set val=? where key==?", [self.jsonize(val), key])
- except KeyError:
- self.crsr.execute("insert into store values (?, ?)", [key, self.jsonize(val)])
-
- if self.autocommit: self.commit()
- def __getitem__(self, key):
- """a[k] the item of a with key k (1), (10)"""
- self.crsr.execute('select val from store where key=?', [key])
- try:
- f = self.crsr.fetchone()[0]
- except TypeError:
- raise KeyError, key
- return json.loads(f)
- def __contains__(self, key):
- """k in a True if a has a key k, else False
- k not in a Equivalent to not k in a"""
- self.crsr.execute("select COUNT(*) from store where key=?", [key])
- return self.crsr.fetchone()[0] != 0
- def has_key(self, key):
- return self.__contains__(key)
- def __len__(self):
- """len(a) the number of items in a"""
- self.crsr.execute("select COUNT(*) from store")
- return self.crsr.fetchone()[0]
- def keys(self):
- """a.keys() a copy of a's list of keys"""
- self.crsr.execute("select key from store")
- return [f[0] for f in self.crsr.fetchall()]
- def values(self):
- """a.values() a copy of a's list of values"""
- self.crsr.execute("select val from store")
- return [json.loads(f[0]) for f in self.crsr.fetchall()]
- def items(self):
- """a.items() a copy of a's list of (key, value) pairs"""
- self.crsr.execute("select * from store")
- return [(f[0], json.loads(f[1])) for f in self.crsr.fetchall()]
- def get(self, k, x=None):
- """a.get(k[, x]) a[k] if k in a, else x """
- try:
- return self.__getitem__(k)
- except KeyError:
- return x
- def commit(self):
- self.conn.commit()
- def clear(self):
- """a.clear() remove all items from a"""
- self.crsr.execute("delete from store")
- if self.autocommit: self.commit()
-
-if __name__=="__main__":
- import doctest
- doctest.testmod()