def test_queries_all(db): db.purge_tables() assert db.table('t').insert({ 'int': 1, 'chars': 'abcd' }) == { 'id': 1, 'chars': 'abcd', 'int': 1 } assert db.table('t').insert({ 'int': 2, 'chars': 'ac' }) == { 'id': 2, 'chars': 'ac', 'int': 2 } assert db.table('t').insert({ 'int': 3, 'chars': 'x', 'char2': 'abcd' }) == { 'id': 3, 'chars': 'x', 'char2': 'abcd', 'int': 3 } assert len(db.table('t').search(Query()['chars'].all(['d']))) == 1 assert len(db.table('t').search(Query()['chars'].all(['c']))) == 2 assert len(db.table('t').search(Query()['chars'].all(['acd']))) == 0 assert len(db.table('t').search(Query()['chars'].all('acd'))) == 1
def test_queries_matches_ignore_case(db): db.purge_tables() assert db.table('t').insert({ 'int': 1, 'chars': 'abcd' }) == { 'id': 1, 'chars': 'abcd', 'int': 1 } assert db.table('t').insert({ 'int': 2, 'chars': 'ac' }) == { 'id': 2, 'chars': 'ac', 'int': 2 } assert len( db.table('t').search( Query()['chars'].matches_ignore_case('aBcd'))) == 1 assert len( db.table('t').search( Query()['chars'].matches_ignore_case('abcc'))) == 0 assert len( db.table('t').search(Query()['chars'].matches_ignore_case('Ab'))) == 1
def test_queries_search_ignore_case(db): db.purge_tables() assert db.table('t').insert({ 'int': 1, 'chars': 'abcd' }) == { 'id': 1, 'chars': 'abcd', 'int': 1 } assert db.table('t').insert({ 'int': 2, 'chars': 'ac' }) == { 'id': 2, 'chars': 'ac', 'int': 2 } assert len( db.table('t').search(Query()['chars'].search_ignore_case('Cd'))) == 1 assert len(db.table('t').search( Query()['chars'].search_ignore_case('D'))) == 1 assert len(db.table('t').search( Query()['chars'].search_ignore_case('a'))) == 2 assert len( db.table('t').search(Query()['chars'].search_ignore_case('aBcd'))) == 1 assert len( db.table('t').search(Query()['chars'].search_ignore_case('bcda'))) == 0
def test_queries_query(db): assert len(db.table('t').search(Query().char == 'a')) == 1 assert len(db.table('t').search(Query().char == 'b')) == 1 assert len( db.table('t').search((Query().char == 'c') & (Query().int == 1))) == 1 assert len( db.table('t').search((Query().char == 'c') | (Query().char == 'a'))) == 2 assert len( db.table('t').search((Query()['char'] == 'c') & (Query()['int'] == 1))) == 1 assert len( db.table('t').search((Query()['char'] == 'c') | (Query()['char'] == 'a'))) == 2
def post_to_space(objectset, database, logdb, bot_token, room_id): sql_query = Query() for item in objectset: incident_id_db = item["IncidentId"] last_updated_db = item["LastUpdated"] entry_exist = database.search((sql_query.IncidentId == incident_id_db)) #If entry is missing in the database. Insert into database and send to Webex. if not entry_exist: sendrespone = send_it(bot_token, room_id, item) msg_id = sendrespone.json() msg_id = msg_id["id"] item['msgId'] = msg_id database.insert(item) logdb.insert( log.log("New insert on object with incidentID of: " + incident_id_db)) else: new_entries = database.search( (sql_query.IncidentId == incident_id_db) & (sql_query.LastUpdated < last_updated_db)) #Update new entries that have newer lastUpdated and send to Webex. if new_entries: database.update(item, where('IncidentId') == incident_id_db) send_it(bot_token, room_id, item) logdb.insert( log.log("New update on object with incidentID of: " + incident_id_db))
async def on_voice_state_update(before, after): if str(before.voice_channel) == "None": print(after.name + " joined " + str(after.voice_channel)) getdata = tb.search(Query().uid == after.id) try: result_checkforuser = getdata[0]['uid'] except: db.table('stats').insert({'name': after.name, 'time': 0, 'uid': after.id }) try: getstartpoint = getdata[0]['time'] print('Startpoint is ' + str(getstartpoint)) except: print("error 1. No start point") def countlifepersecond(): global t getnewdata = tb.search(Query().uid == after.id) getnewstartpoint = getnewdata[0]['time'] timetoaddit = getnewstartpoint timetoaddit += 1 print(str(timetoaddit) + ' ' + str(after.name)) final_time = timetoaddit tb.update({'time': final_time}, where('time') == getnewstartpoint ) t = threading.Timer(1, countlifepersecond) t.start() countlifepersecond() elif str(after.voice_channel) == "None": t.cancel() print(after.name + " left " + str(before.voice_channel)) else: return
def countlifepersecond(): global t getnewdata = tb.search(Query().uid == after.id) getnewstartpoint = getnewdata[0]['time'] timetoaddit = getnewstartpoint timetoaddit += 1 print(str(timetoaddit) + ' ' + str(after.name)) final_time = timetoaddit tb.update({'time': final_time}, where('time') == getnewstartpoint ) t = threading.Timer(1, countlifepersecond) t.start()
def remove_stale_records(objectset, database, logdb): sql_query = Query() for i in database.all(): inc_id = i["IncidentId"] #entry_in_db = filter(lambda x: x['IncidentId'] == inc_id, objectset) entry_in_db = [i for i in objectset if i['IncidentId'] == inc_id] entry_in_db = list(entry_in_db) if not entry_in_db: database.remove(sql_query.IncidentId == inc_id) logdb.insert( log.log("New remove on object with incidentID of: " + inc_id))
def test_queries_all_in_list(db): db.purge_tables() assert db.table('t').insert({ 'int': 1, 'charList': ['abcd', 'a'] }) == { 'id': 1, 'charList': ['abcd', 'a'], 'int': 1 } assert db.table('t').insert({ 'int': 2, 'charList': ['ac'] }) == { 'id': 2, 'charList': ['ac'], 'int': 2 } assert len(db.table('t').search(Query()['charList'].all(['abcd']))) == 1 assert len(db.table('t').search(Query()['charList'].all(['a']))) == 1 assert len(db.table('t').search(Query()['charList'].all(['ac']))) == 1 assert len(db.table('t').search(Query()['charList'].all('abcd'))) == 0 assert len(db.table('t').search(Query()['charList'].all('ac'))) == 0
def get_search(): return Query(), recordsTable
https://tinydb.readthedocs.io/en/latest/ https://github.com/harryho/flata https://blog.ruanbekker.com/blog/2018/04/15/experimenting-with-python-and-flata-the-lightweight-document-orientated-database/ """ metadata_file = 'metadata.json' data_file = 'public/data.js' database_file = 'database.json' DATETIME_FORMAT = '%Y.%m.%dT%H:%M:%S%z' # FlataDB from flata import Flata, Query, where from flata.storages import JSONStorage db = Flata(database_file, storage=JSONStorage) q = Query() # Init metadata_uid = 1 metadataTable = db.table('metadata', id_field='uid') recordsTable = db.table('records', id_field='uid') def get_db(): return db # So we don't need to write strings category = 'category' sub_category = 'sub_category' producer = 'producer'
def __init__(self, table_name: str, id_field: str = "id"): self.db = self.setup(table_name, id_field) self.q = Query()
def __init__(self): self.db = self.setup("users") self.q = Query()