vomebook commited on
Commit
a366e50
·
1 Parent(s): 31eab5a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -13
app.py CHANGED
@@ -30,6 +30,7 @@ folder_tree_data: dict[str, list[dict]] = {}
30
  folder_browser_data: dict[str, dict[str, dict]] = {}
31
  source_records_map: dict[str, list[int]] = {}
32
  extension_counts: dict[str, int] = {}
 
33
  word_index: dict[str, set[int]] = {}
34
 
35
  def query_tokens(text: str) -> list[str]:
@@ -156,13 +157,18 @@ def load_json_gz(path: Path):
156
  return json.loads(gzip.decompress(path.read_bytes()).decode("utf-8"))
157
 
158
  def build_indexes() -> None:
159
- global word_index, source_records_map, extension_counts
160
  word_index = {}
161
  source_records_map = {}
162
  extension_counts = {}
 
163
  for idx, rec in enumerate(records):
164
- source_records_map.setdefault(rec["source"], []).append(idx)
165
- extension_counts[rec["extension"]] = extension_counts.get(rec["extension"], 0) + 1
 
 
 
 
166
  file_text = " ".join([rec["display_name"], rec["source_name"]])
167
  path_text = rec["display_rel_path"]
168
  tokens = tokenize(f"{file_text} {path_text}")
@@ -270,7 +276,7 @@ def search(q="", sources_filter=None, folders=None, min_size=None, max_size=None
270
  if not q and sort == "relevance" and not has_filters(sources_filter, folders, min_size, max_size):
271
  result_items = [trim_record(rec) for rec in records[start:start + page_size]]
272
  result_items = add_summaries(result_items)
273
- return {"results": result_items, "total": len(records), "page": page, "page_size": page_size, "did_you_mean": None}
274
  if not q:
275
  indices = list(range(len(records)))
276
  filtered = apply_filters(indices, sources_filter, folders, min_size, max_size)
@@ -300,7 +306,7 @@ def search(q="", sources_filter=None, folders=None, min_size=None, max_size=None
300
  total = len(filtered)
301
  result_items = [trim_record(records[idx]) for idx in filtered[start:start + page_size]]
302
  result_items = add_summaries(result_items)
303
- return {"results": result_items, "total": total, "page": page, "page_size": page_size, "did_you_mean": None}
304
 
305
  def fulltext_search(q="", sources_filter=None, folders=None, min_size=None, max_size=None, page=1, page_size=100, sort="relevance", exact=False, search_paths=True):
306
  q = q.strip()
@@ -327,7 +333,7 @@ def fulltext_search(q="", sources_filter=None, folders=None, min_size=None, max_
327
  q,
328
  matched_snippets=True,
329
  )
330
- return {"results": result_items, "total": total, "page": page, "page_size": page_size, "did_you_mean": None}
331
 
332
  def get_doc_storage_path(doc: dict) -> Path:
333
  return BASE_DIR / doc["storage_root"] / doc["storage_rel_path"]
@@ -391,10 +397,7 @@ def api_sources():
391
  @app.get("/api/extensions")
392
 
393
  def api_extensions(source: Optional[str] = Query(default=None)):
394
- pool = [records[idx] for idx in source_records_map.get(source, [])] if source else records
395
- counts = {}
396
- for rec in pool:
397
- counts[rec["extension"]] = counts.get(rec["extension"], 0) + 1
398
  return JSONResponse([{"name": ext, "count": count} for ext, count in sorted(counts.items())])
399
  @app.get("/api/folders/{source_slug}")
400
 
@@ -407,10 +410,14 @@ def api_folder_contents(source_slug: str, path: str = Query(default="")):
407
  @app.get("/api/random")
408
 
409
  def api_random(source: Optional[str] = Query(default=None)):
410
- pool = [records[idx] for idx in source_records_map.get(source, [])] if source else records
411
- if not pool:
 
 
 
 
412
  return JSONResponse({"error": "no record"}, status_code=404)
413
- return JSONResponse(trim_record(random.choice(pool)))
414
  @app.get("/api/preview/{doc_id}")
415
 
416
  def api_preview(doc_id: str):
 
30
  folder_browser_data: dict[str, dict[str, dict]] = {}
31
  source_records_map: dict[str, list[int]] = {}
32
  extension_counts: dict[str, int] = {}
33
+ source_extension_counts: dict[str, dict[str, int]] = {}
34
  word_index: dict[str, set[int]] = {}
35
 
36
  def query_tokens(text: str) -> list[str]:
 
157
  return json.loads(gzip.decompress(path.read_bytes()).decode("utf-8"))
158
 
159
  def build_indexes() -> None:
160
+ global word_index, source_records_map, extension_counts, source_extension_counts
161
  word_index = {}
162
  source_records_map = {}
163
  extension_counts = {}
164
+ source_extension_counts = {}
165
  for idx, rec in enumerate(records):
166
+ source = rec["source"]
167
+ extension = rec["extension"]
168
+ source_records_map.setdefault(source, []).append(idx)
169
+ extension_counts[extension] = extension_counts.get(extension, 0) + 1
170
+ source_counts_for_ext = source_extension_counts.setdefault(source, {})
171
+ source_counts_for_ext[extension] = source_counts_for_ext.get(extension, 0) + 1
172
  file_text = " ".join([rec["display_name"], rec["source_name"]])
173
  path_text = rec["display_rel_path"]
174
  tokens = tokenize(f"{file_text} {path_text}")
 
276
  if not q and sort == "relevance" and not has_filters(sources_filter, folders, min_size, max_size):
277
  result_items = [trim_record(rec) for rec in records[start:start + page_size]]
278
  result_items = add_summaries(result_items)
279
+ return {"results": result_items, "total": len(records), "page": page, "page_size": page_size}
280
  if not q:
281
  indices = list(range(len(records)))
282
  filtered = apply_filters(indices, sources_filter, folders, min_size, max_size)
 
306
  total = len(filtered)
307
  result_items = [trim_record(records[idx]) for idx in filtered[start:start + page_size]]
308
  result_items = add_summaries(result_items)
309
+ return {"results": result_items, "total": total, "page": page, "page_size": page_size}
310
 
311
  def fulltext_search(q="", sources_filter=None, folders=None, min_size=None, max_size=None, page=1, page_size=100, sort="relevance", exact=False, search_paths=True):
312
  q = q.strip()
 
333
  q,
334
  matched_snippets=True,
335
  )
336
+ return {"results": result_items, "total": total, "page": page, "page_size": page_size}
337
 
338
  def get_doc_storage_path(doc: dict) -> Path:
339
  return BASE_DIR / doc["storage_root"] / doc["storage_rel_path"]
 
397
  @app.get("/api/extensions")
398
 
399
  def api_extensions(source: Optional[str] = Query(default=None)):
400
+ counts = source_extension_counts.get(source, {}) if source else extension_counts
 
 
 
401
  return JSONResponse([{"name": ext, "count": count} for ext, count in sorted(counts.items())])
402
  @app.get("/api/folders/{source_slug}")
403
 
 
410
  @app.get("/api/random")
411
 
412
  def api_random(source: Optional[str] = Query(default=None)):
413
+ if source:
414
+ indices = source_records_map.get(source, [])
415
+ if not indices:
416
+ return JSONResponse({"error": "no record"}, status_code=404)
417
+ return JSONResponse(trim_record(records[random.choice(indices)]))
418
+ if not records:
419
  return JSONResponse({"error": "no record"}, status_code=404)
420
+ return JSONResponse(trim_record(random.choice(records)))
421
  @app.get("/api/preview/{doc_id}")
422
 
423
  def api_preview(doc_id: str):