11
11
from bs4 .element import Comment
12
12
from tinydb import Query , TinyDB
13
13
14
- from docat .models import ProjectDetail , Projects , ProjectVersion , ProjectWithVersionCount
14
+ from docat .models import Project , ProjectDetail , Projects , ProjectVersion
15
15
16
16
NGINX_CONFIG_PATH = Path ("/etc/nginx/locations.d" )
17
17
UPLOAD_FOLDER = "doc"
@@ -109,36 +109,32 @@ def is_forbidden_project_name(name: str) -> bool:
109
109
return name in ["upload" , "claim" , "delete" , "search" , "help" ]
110
110
111
111
112
- def get_all_projects (upload_folder_path : Path ) -> Projects :
112
+ def get_all_projects (upload_folder_path : Path , include_hidden : bool ) -> Projects :
113
113
"""
114
114
Returns all projects in the upload folder.
115
115
"""
116
+ projects : list [Project ] = []
116
117
117
- def count_not_hidden_versions (project ) -> int :
118
- path = upload_folder_path / project
119
- versions = [
120
- version
121
- for version in (upload_folder_path / project ).iterdir ()
122
- if (path / version ).is_dir () and not (path / version ).is_symlink () and not (path / version / ".hidden" ).exists ()
123
- ]
124
- return len (versions )
118
+ for project in upload_folder_path .iterdir ():
119
+ if not project .is_dir ():
120
+ continue
125
121
126
- projects : list [ ProjectWithVersionCount ] = []
122
+ details = get_project_details ( upload_folder_path , project . name , include_hidden )
127
123
128
- for project in upload_folder_path .iterdir ():
129
- if project .is_dir ():
130
- versions = count_not_hidden_versions (project )
131
- if versions < 1 :
132
- continue
124
+ if details is None :
125
+ continue
133
126
134
- project_name = str (project .relative_to (upload_folder_path ))
135
- project_has_logo = (upload_folder_path / project / "logo" ).exists ()
136
- projects .append (ProjectWithVersionCount (name = project_name , logo = project_has_logo , versions = versions ))
127
+ if len (details .versions ) < 1 :
128
+ continue
129
+
130
+ project_name = str (project .relative_to (upload_folder_path ))
131
+ project_has_logo = (upload_folder_path / project / "logo" ).exists ()
132
+ projects .append (Project (name = project_name , logo = project_has_logo , versions = details .versions ))
137
133
138
134
return Projects (projects = projects )
139
135
140
136
141
- def get_project_details (upload_folder_path : Path , project_name : str ) -> ProjectDetail | None :
137
+ def get_project_details (upload_folder_path : Path , project_name : str , include_hidden : bool ) -> ProjectDetail | None :
142
138
"""
143
139
Returns all versions and tags for a project.
144
140
"""
@@ -149,16 +145,23 @@ def get_project_details(upload_folder_path: Path, project_name: str) -> ProjectD
149
145
150
146
tags = [x for x in docs_folder .iterdir () if x .is_dir () and x .is_symlink ()]
151
147
148
+ def should_include (name : str ) -> bool :
149
+ if include_hidden :
150
+ return True
151
+
152
+ return not (docs_folder / name / ".hidden" ).exists ()
153
+
152
154
return ProjectDetail (
153
155
name = project_name ,
154
156
versions = sorted (
155
157
[
156
158
ProjectVersion (
157
159
name = str (x .relative_to (docs_folder )),
158
160
tags = [str (t .relative_to (docs_folder )) for t in tags if t .resolve () == x ],
161
+ hidden = (docs_folder / x .name / ".hidden" ).exists (),
159
162
)
160
163
for x in docs_folder .iterdir ()
161
- if x .is_dir () and not x .is_symlink () and not ( docs_folder / x .name / ".hidden" ). exists ( )
164
+ if x .is_dir () and not x .is_symlink () and should_include ( x .name )
162
165
],
163
166
key = lambda k : k .name ,
164
167
reverse = True ,
@@ -179,7 +182,7 @@ def index_all_projects(
179
182
index_db .table ("projects" )
180
183
index_db .table ("files" )
181
184
182
- all_projects = get_all_projects (upload_folder_path ).projects
185
+ all_projects = get_all_projects (upload_folder_path , include_hidden = False ).projects
183
186
184
187
for project in all_projects :
185
188
update_version_index_for_project (upload_folder_path , index_db , project .name )
@@ -193,7 +196,7 @@ def update_file_index_for_project(upload_folder_path: Path, index_db: TinyDB, pr
193
196
files_table = index_db .table ("files" )
194
197
files_table .remove (Query ().project == project )
195
198
196
- project_details = get_project_details (upload_folder_path , project )
199
+ project_details = get_project_details (upload_folder_path , project , include_hidden = False )
197
200
198
201
if not project_details :
199
202
return
@@ -233,7 +236,7 @@ def update_version_index_for_project(upload_folder_path: Path, index_db: TinyDB,
233
236
Project = Query ()
234
237
project_table .remove (Project .name == project )
235
238
236
- details = get_project_details (upload_folder_path , project )
239
+ details = get_project_details (upload_folder_path , project , include_hidden = False )
237
240
238
241
if not details :
239
242
return
0 commit comments