(path_pattern, filter)
| 29 | # Find in json files |
| 30 | # Return: [{u'body': u'Hello Topic 1!!', 'inner_path': '1KRxE1...beEp6', u'added': 1422740732, u'message_id': 1},...] |
| 31 | def 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 | |
| 65 | if __name__ == "__main__": |
no test coverage detected