]>
Commit | Line | Data |
---|---|---|
9137135a MT |
1 | #!/usr/bin/python |
2 | ||
f6e6ff79 MT |
3 | import re |
4 | ||
0919f216 | 5 | from . import base |
9137135a | 6 | |
0919f216 | 7 | class 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) |