Coverage for e2xgrader/server_extensions/apps/help/apihandlers.py: 34%
32 statements
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
« prev ^ index » next coverage.py v7.4.2, created at 2024-03-14 13:22 +0100
1import json
2import os
4from e2xcore import urljoin
5from e2xcore.handlers import E2xApiHandler
6from tornado import web
9class ListFilesHandler(E2xApiHandler):
10 def list_files(self, path_id, path):
11 self.log.info(f"Listing files from {path}")
12 if path is None or not os.path.exists(path):
13 return []
14 file_list = []
15 exclude_dirs = []
17 for root, dirs, files in os.walk(path):
18 for name in dirs:
19 if name.startswith("."):
20 exclude_dirs.append(name)
21 elif os.path.isfile(os.path.join(root, name, "index.html")):
22 exclude_dirs.append(name)
23 file_list.append(
24 (
25 os.path.join(root, name),
26 os.path.join(root, name, "index.html"),
27 )
28 )
30 dirs[:] = [d for d in dirs if d not in exclude_dirs]
32 for name in files:
33 file_list.append((os.path.join(root, name), os.path.join(root, name)))
35 file_list = [
36 (
37 os.path.relpath(name, path),
38 os.path.join(path_id, os.path.relpath(url, path)),
39 )
40 for name, url in file_list
41 ]
43 return file_list
45 @web.authenticated
46 def get(self):
47 files = []
48 for path_id, path in self.settings.get("e2xhelp_shared_dirs", dict()).items():
49 files.extend(self.list_files(path_id, path))
50 self.write(json.dumps(files))
53api_url = urljoin("e2x", "help", "api")
54default_handlers = [
55 (urljoin(api_url, "files"), ListFilesHandler),
56]