kopia lustrzana https://github.com/dsblank/activitypub
Ensure all databases give the same answers
rodzic
2a0f01d6f3
commit
6e8d6be29a
|
@ -18,3 +18,10 @@ class Database():
|
|||
if attr not in self._tables:
|
||||
self._tables[attr] = self.Table(self, attr)
|
||||
return self._tables[attr]
|
||||
|
||||
def table_exists(self, table):
|
||||
return table in self._tables
|
||||
|
||||
def build_table(self, name):
|
||||
self._tables[name] = self.Table(self, name)
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ class ListTable(Table):
|
|||
if i is not None:
|
||||
self.data[i] = dictionary
|
||||
|
||||
def drop(self):
|
||||
def clear(self):
|
||||
self.data.clear()
|
||||
|
||||
def sort(self, sort_key, sort_order):
|
||||
|
@ -381,7 +381,8 @@ class ListTable(Table):
|
|||
else:
|
||||
return len(self.data)
|
||||
|
||||
count_documents = count
|
||||
def count_documents(self, query):
|
||||
return self.count(query)
|
||||
|
||||
class ListDatabase(Database):
|
||||
Table = ListTable
|
||||
|
|
|
@ -45,6 +45,9 @@ class MongoTable(Table):
|
|||
else:
|
||||
self.__dict__[attr] = value
|
||||
|
||||
def clear(self):
|
||||
self.collection.drop()
|
||||
|
||||
class MongoDatabase(Database):
|
||||
Table = MongoTable
|
||||
def __init__(self, uri, db_name):
|
||||
|
@ -53,3 +56,6 @@ class MongoDatabase(Database):
|
|||
self.client = MongoClient(self.uri)
|
||||
self.db_name = db_name
|
||||
self.DB = self.client[self.db_name]
|
||||
|
||||
def table_exists(self, table):
|
||||
return table in self.client.database_names()
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
|
||||
from activitypub.database import *
|
||||
from activitypub.manager import Manager
|
||||
|
||||
def test_all():
|
||||
for db in [
|
||||
ListDatabase(),
|
||||
SQLDatabase("sqlite://"),
|
||||
SQLDatabase("sqlite:///sqlite.db"),
|
||||
MongoDatabase("mongodb://localhost:27017", "dsblank_localhost:5005"),
|
||||
RedisDatabase("redis://localhost:6379/0"),
|
||||
]:
|
||||
print("Testing", db.__class__.__name__, "...")
|
||||
manager = Manager(database=db)
|
||||
if manager.database.table_exists("activities"):
|
||||
manager.database.activities.clear()
|
||||
else:
|
||||
manager.database.build_table("activities")
|
||||
manager.database.activities.clear()
|
||||
manager.database.actors.clear()
|
||||
|
||||
assert manager.database.actors.count_documents(
|
||||
{"$or": [{'id': 'https://example.com/alyssa'},
|
||||
{'id': 'https://example.com/alyssa'}]}) == 0
|
||||
assert manager.database.actors.count_documents(
|
||||
{"$or": [{'id': 'https://example.com/alyssa'},
|
||||
{'id': 'https://example.com/alyssa'}]}) == 0
|
||||
|
||||
p1 = manager.Person(id="alyssa")
|
||||
p2 = manager.Person(id="brenda")
|
||||
|
||||
manager.database.actors.insert_one(p1.to_dict())
|
||||
manager.database.actors.insert_one(p2.to_dict())
|
||||
|
||||
assert manager.database.actors.count_documents(
|
||||
{"$or": [{'id': 'https://example.com/alyssa'},
|
||||
{'id': 'https://example.com/brenda'}]}) == 2
|
||||
assert len(list(manager.database.actors.find(
|
||||
{"$or": [{'id': 'https://example.com/alyssa'},
|
||||
{'id': 'https://example.com/brenda'}]}))) == 2
|
||||
|
||||
assert manager.database.actors.count_documents(
|
||||
{'id': 'https://example.com/alyssa'}) == 1
|
||||
assert manager.database.actors.count_documents({}) == 2
|
||||
|
||||
## Clean up
|
||||
manager.database.activities.clear()
|
||||
manager.database.actors.clear()
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_all()
|
Ładowanie…
Reference in New Issue