]> git.ipfire.org Git - pbs.git/blame - src/web/search.py
web: Drop self.pakfire from BaseHandler
[pbs.git] / src / web / search.py
CommitLineData
9137135a
MT
1#!/usr/bin/python
2
f6e6ff79
MT
3import re
4
0919f216 5from . import base
9137135a 6
0919f216 7class SearchHandler(base.BaseHandler):
9137135a 8 def get(self):
f6e6ff79
MT
9 pattern = self.get_argument("q", "")
10 if not pattern:
11 self.render("search-form.html", pattern="")
9137135a
MT
12 return
13
f6e6ff79
MT
14 # Check if the given search pattern is a UUID.
15 if re.match(r"^([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})$", pattern):
16 # Search for a matching object and redirect to it.
17
18 # Search in packages.
47130fc1 19 pkg = self.backend.packages.get_by_uuid(pattern)
f6e6ff79
MT
20 if pkg:
21 self.redirect("/package/%s" % pkg.uuid)
22 return
23
24 # Search in builds.
47130fc1 25 build = self.backend.builds.get_by_uuid(pattern)
f6e6ff79
MT
26 if build:
27 self.redirect("/build/%s" % build.uuid)
28 return
29
30 # Search in jobs.
47130fc1 31 job = self.backend.jobs.get_by_uuid(pattern)
f6e6ff79
MT
32 if job:
33 self.redirect("/job/%s" % job.uuid)
34 return
35
36 pkgs = files = users = []
37
38 if pattern.startswith("/"):
39 # Do a file search.
47130fc1 40 files = self.backend.packages.search_by_filename(pattern, limit=50)
f6e6ff79
MT
41
42 else:
43 # Make fulltext search in the packages.
47130fc1 44 pkgs = self.backend.packages.search(pattern, limit=50)
f6e6ff79
MT
45
46 # Search for users.
47130fc1 47 users = self.backend.users.search(pattern, limit=50)
f6e6ff79
MT
48
49 if len(pkgs) == 1 and not files and not users:
50 pkg = pkgs[0]
51
52 self.redirect("/package/%s" % pkg.name)
53 return
54
55 # If we have results, we show them.
56 if pkgs or files or users:
57 self.render("search-results.html", pattern=pattern,
58 pkgs=pkgs, files=files, users=users)
59 return
9137135a 60
f6e6ff79
MT
61 # If there were no results, we show the advanced search site.
62 self.render("search-form.html", pattern=pattern)