krz/crumb

A local alternative to your browser's history. browser-history cli local-first privacy

Commit d4166e0398

d4166e03980177c3395fddac85977645ee2a4294

parent: 2c8b05646b

Verified · cmc

cmc <hello@cleberg.net> · 2025-06-04 18:32 UTC

feat: format python files

Layout: unified · split

search.py +16 −3
@@ -1,15 +1,24 @@
1import sys
2import os 1import os
2import sys
3 3
4LOG_PATH = os.path.expanduser("~/.crumb/history.org") 4LOG_PATH = os.path.expanduser("~/.crumb/history.org")
5 5
6def search_log(query): 6def search_log(query):
7 """
8 Search for a given query string within the crumb history log file and print matching entries.
9
10 Args:
11 query (str): The search term to look for in the history entries.
12
13 Returns:
14 None
15 """
7 if not os.path.exists(LOG_PATH): 16 if not os.path.exists(LOG_PATH):
8 print("No history file found.") 17 print("No history file found.")
9 return 18 return
10 19
11 with open(LOG_PATH, "r") as f: 20 with open(LOG_PATH, "r") as f:
12 entries = f.read().split("* ")[1:] # split on org-mode headings 21 entries = f.read().split("* ")[1:]
13 22
14 found = 0 23 found = 0
15 for entry in entries: 24 for entry in entries:
@@ -21,7 +30,11 @@ def search_log(query):
21 print("No matches found.") 30 print("No matches found.")
22 31
23if __name__ == "__main__": 32if __name__ == "__main__":
33 """
34 Entry point for the script. Parses command line arguments and calls the search function.
35 Usage: search_crumb.py <search term>
36 """
24 if len(sys.argv) < 2: 37 if len(sys.argv) < 2:
25 print("Usage: search_crumb.py <search term>") 38 print("Usage: search_crumb.py <search term>")
26 else: 39 else:
27 search_log(sys.argv[1])\ No newline at end of file 40 search_log(sys.argv[1])
server.py +35 −9
@@ -1,22 +1,44 @@
1from flask import Flask, request, jsonify, make_response
2import os 1import os
3from datetime import datetime 2from datetime import datetime
3from flask import Flask, request
4 4
5app = Flask(__name__) 5app = Flask(__name__)
6LOG_PATH = os.path.expanduser("~/.crumb/history.org") 6LOG_PATH = os.path.expanduser("~/.crumb/history.org")
7 7
8os.makedirs(os.path.dirname(LOG_PATH), exist_ok=True) 8os.makedirs(os.path.dirname(LOG_PATH), exist_ok=True)
9 9
10
10@app.after_request 11@app.after_request
11def add_cors_headers(response): 12def add_cors_headers(response):
12 response.headers['Access-Control-Allow-Origin'] = '*' 13 """
13 response.headers['Access-Control-Allow-Headers'] = 'Content-Type' 14 Add CORS headers to the response to allow cross-origin requests.
15
16 Args:
17 response (flask.Response): The response object to modify.
18
19 Returns:
20 flask.Response: The modified response object with CORS headers.
21 """
22 response.headers["Access-Control-Allow-Origin"] = "*"
23 response.headers["Access-Control-Allow-Headers"] = "Content-Type"
14 return response 24 return response
15 25
16@app.route('/', methods=['POST', 'OPTIONS']) 26
27@app.route("/", methods=["POST", "OPTIONS"])
17def log_visit(): 28def log_visit():
18 if request.method == 'OPTIONS': 29 """
19 return '', 204 30 Handle POST requests to log visit information and OPTIONS requests for CORS preflight.
31
32 For POST requests, parse JSON data from the request, extract visit details,
33 and append them to the log file in org-mode format.
34
35 For OPTIONS requests, return a 204 No Content response.
36
37 Returns:
38 tuple: An empty string and the HTTP status code 204.
39 """
40 if request.method == "OPTIONS":
41 return "", 204
20 42
21 data = request.json 43 data = request.json
22 title = data.get("title", "No Title") 44 title = data.get("title", "No Title")
@@ -44,7 +66,11 @@ def log_visit():
44 f.write(f":FAVICON: {favicon}\n") 66 f.write(f":FAVICON: {favicon}\n")
45 f.write(":END:\n\n") 67 f.write(":END:\n\n")
46 68
47 return '', 204 69 return "", 204
70
48 71
49if __name__ == '__main__': 72if __name__ == "__main__":
50 app.run(port=3555)\ No newline at end of file 73 """
74 Run the Flask application on port 3555 when executed as the main program.
75 """
76 app.run(port=3555)