diff options
-rw-r--r-- | pyapd/objects.py | 6 | ||||
-rw-r--r-- | pyapd/stores/sqlite.py | 14 |
2 files changed, 15 insertions, 5 deletions
diff --git a/pyapd/objects.py b/pyapd/objects.py index 2fa2e03..690c3f9 100644 --- a/pyapd/objects.py +++ b/pyapd/objects.py @@ -62,5 +62,11 @@ class Object(): def to_jsons(self): return json.dumps(self.to_jsonable()) + def __eq__(self, other): + for i in self.PROPERTIES: + if getattr(self, "ap_"+i, "") != getattr(other, "ap_"+i, ""): + return False + return True + def _generate_id(self): raise NotImplementedError diff --git a/pyapd/stores/sqlite.py b/pyapd/stores/sqlite.py index a2a8145..54af554 100644 --- a/pyapd/stores/sqlite.py +++ b/pyapd/stores/sqlite.py @@ -13,9 +13,12 @@ class Store(): def add(self, obj: objects.Object): obj_type = type(obj).__name__.lower() c = self.db.cursor() - # cur.execute("insert into pickled(data) values (?)", (sqlite3.Binary(pickle.dumps(p1, protocol=2)),)) - c.execute('insert or replace into objects(type, oid, obj) values ( :type, :oid, :obj )', - (obj_type, obj.ap_id, sqlite3.Binary(pickle.dumps(obj, protocol=2)))) + c.execute('''insert or replace + into objects(type, oid, obj) + values ( :type, :oid, :obj )''', + (obj_type, obj.ap_id, sqlite3.Binary( + pickle.dumps(obj, protocol=2))) + ) self.db.commit() c.close() @@ -26,7 +29,8 @@ class Store(): def get(self, obj_type: str, oid: str) -> objects.Object: c = self.db.cursor() c.execute( - 'select obj from objects where type = :type and oid = :oid', (obj_type, oid)) + 'select obj from objects' + ' where type = :type and oid = :oid', (obj_type, oid)) row = c.fetchone() if row is None: raise exceptions.DoesNotExist( @@ -36,7 +40,7 @@ class Store(): def createdb(self): c = self.db.cursor() c.execute('create table objects(type text, oid text, obj blob)') - c.execute('create index idx on objects(type, oid)') + c.execute('create unique index idx on objects(type, oid)') if __name__ == '__main__': |