Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
at main 67 lines 2.2 kB view raw
1import json 2import re 3import os 4 5 6def queryFile(file_path, filter_path, filter_key=None, filter_val=None): 7 back = [] 8 data = json.load(open(file_path)) 9 if filter_path == ['']: 10 return [data] 11 for key in filter_path: # Get to the point 12 data = data.get(key) 13 if not data: 14 return 15 16 if type(data) == list: 17 for row in data: 18 if filter_val: # Filter by value 19 if row[filter_key] == filter_val: 20 back.append(row) 21 else: 22 back.append(row) 23 else: 24 back.append({"value": data}) 25 26 return back 27 28 29# Find in json files 30# Return: [{u'body': u'Hello Topic 1!!', 'inner_path': '1KRxE1...beEp6', u'added': 1422740732, u'message_id': 1},...] 31def query(path_pattern, filter): 32 if "=" in filter: # Filter by value 33 filter_path, filter_val = filter.split("=") 34 filter_path = filter_path.split(".") 35 filter_key = filter_path.pop() # Last element is the key 36 filter_val = int(filter_val) 37 else: # No filter 38 filter_path = filter 39 filter_path = filter_path.split(".") 40 filter_key = None 41 filter_val = None 42 43 if "/*/" in path_pattern: # Wildcard search 44 root_dir, file_pattern = path_pattern.replace("\\", "/").split("/*/") 45 else: # No wildcard 46 root_dir, file_pattern = re.match("(.*)/(.*?)$", path_pattern.replace("\\", "/")).groups() 47 for root, dirs, files in os.walk(root_dir, topdown=False): 48 root = root.replace("\\", "/") 49 inner_path = root.replace(root_dir, "").strip("/") 50 for file_name in files: 51 if file_pattern != file_name: 52 continue 53 54 try: 55 res = queryFile(root + "/" + file_name, filter_path, filter_key, filter_val) 56 if not res: 57 continue 58 except Exception: # Json load error 59 continue 60 for row in res: 61 row["inner_path"] = inner_path 62 yield row 63 64 65if __name__ == "__main__": 66 for row in list(query("../../data/12Hw8rTgzrNo4DSh2AkqwPRqDyTticwJyH/data/users/*/data.json", "")): 67 print(row)