Skip to content

Commit 4b0f606

Browse files
authored
Merge pull request #81 from henilp105/main
add: fpm search
2 parents 8396f65 + 76bf1f4 commit 4b0f606

File tree

1 file changed

+85
-2
lines changed

1 file changed

+85
-2
lines changed

backend/packages.py

+85-2
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def search_packages():
8585
if sorted_by.lower() in parameters.keys()
8686
else "name"
8787
)
88-
page = int(page) if page else 0
88+
page = int_validation(page,0)
8989
query = unquote(query.strip().lower())
9090
packages_per_page = 10
9191

@@ -118,7 +118,7 @@ def search_packages():
118118
"updated_at": 1,
119119
},
120120
)
121-
.sort(sorted_by, -1)
121+
.sort(sorted_by, sort)
122122
.limit(packages_per_page)
123123
.skip(page * packages_per_page)
124124
)
@@ -152,6 +152,89 @@ def search_packages():
152152
404,
153153
)
154154

155+
def int_validation(param,default_value):
156+
try:
157+
return int(param)
158+
except:
159+
return default_value
160+
161+
@app.route("/packages_cli", methods=["GET"])
162+
@swag_from("documentation/search_packages_cli.yaml", methods=["GET"])
163+
def search_packages_cli():
164+
query = request.args.get("query")
165+
page = request.args.get("page")
166+
license = request.args.get("license")
167+
namespace = request.args.get("namespace")
168+
package = request.args.get("package")
169+
packages_per_page = request.args.get("limit")
170+
sorted_by = request.args.get("sorted_by")
171+
sort = request.args.get("sort")
172+
sorted_by = sorted_by.lower() if sorted_by else "name"
173+
query = query if query else "fortran"
174+
sort = -1 if sort == "desc" else 1
175+
sorted_by = (
176+
parameters[sorted_by.lower()]
177+
if sorted_by.lower() in parameters.keys()
178+
else "name"
179+
)
180+
query = unquote(query.strip().lower())
181+
page = int_validation(page,0)-1
182+
packages_per_page = int_validation(packages_per_page,10)
183+
184+
conditions = [
185+
{"namespace_name": {"$regex": namespace, "$options": "i"}} if namespace else None,
186+
{"license": {"$regex": license, "$options": "i"}} if license else None,
187+
{"name": {"$regex": package, "$options": "i"}} if package else None,
188+
]
189+
190+
mongo_db_query = {
191+
"$and": [
192+
{
193+
"$or": [
194+
{"registry_description": {"$regex": query, "$options": "i"}},
195+
{"description": {"$regex": query, "$options": "i"}},
196+
]
197+
},
198+
{"is_deprecated": False},
199+
]
200+
}
201+
mongo_db_query["$and"].extend(cond for cond in conditions if cond)
202+
total_documents = db.packages.count_documents(mongo_db_query)
203+
204+
packages_per_page = total_documents if packages_per_page > total_documents else packages_per_page
205+
206+
packages = (
207+
db.packages.find(mongo_db_query)
208+
.sort(sorted_by, sort)
209+
.limit(packages_per_page)
210+
.skip(page * packages_per_page)
211+
)
212+
213+
if packages:
214+
total_pages = math.ceil(total_documents / packages_per_page)
215+
216+
search_packages = []
217+
for i in packages:
218+
package_obj = Package.from_json(i)
219+
220+
search_packages.append({
221+
"name": package_obj.name,
222+
"namespace": package_obj.namespace_name,
223+
"description": package_obj.description,
224+
"version": package_obj.versions[-1].version,
225+
})
226+
return (
227+
jsonify(
228+
{"code": 200, "packages": search_packages, "total_pages": total_pages}
229+
),
230+
200,
231+
)
232+
else:
233+
return (
234+
jsonify({"status": "error", "message": "packages not found", "code": 404}),
235+
404,
236+
)
237+
155238

156239
@app.route("/packages", methods=["POST"])
157240
@swag_from("documentation/package_upload.yaml", methods=["POST"])

0 commit comments

Comments
 (0)