diff roundup/cgi/templating.py @ 6638:e1588ae185dc issue2550923_computed_property

merge from default branch. Fix travis.ci so CI builds don't error out
author John Rouillard <rouilj@ieee.org>
date Thu, 21 Apr 2022 16:54:17 -0400
parents 30358e334232 b7093aa16895
children ca90f7270cd4
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Fri Oct 08 00:37:16 2021 -0400
+++ b/roundup/cgi/templating.py	Thu Apr 21 16:54:17 2022 -0400
@@ -1244,7 +1244,9 @@
                                 try:
                                     if labelprop is not None and \
                                             labelprop != 'id':
-                                        label = linkcl.get(linkid, labelprop)
+                                        label = linkcl.get(linkid, labelprop,
+                                                     default=self._(
+                                                        "[label is missing]"))
                                         label = html_escape(label)
                                 except IndexError:
                                     comments['no_link'] = self._(
@@ -1271,7 +1273,8 @@
                         if labelprop is not None and labelprop != 'id':
                             try:
                                 label = html_escape(linkcl.get(args[k],
-                                    labelprop))
+                                    labelprop, default=self._(
+                                        "[label is missing]")))
                             except IndexError:
                                 comments['no_link'] = self._(
                                     "<strike>The linked node"
@@ -1281,7 +1284,7 @@
                                 label = None
                         if label is not None:
                             if hrefable:
-                                old = '<a ref="nofollow noopener" href="%s%s">%s</a>'%(classname,
+                                old = '<a rel="nofollow noopener" href="%s%s">%s</a>'%(classname,
                                     args[k], label)
                             else:
                                 old = label;
@@ -1612,7 +1615,7 @@
          (/[\w\-$.+!*(),;:@&=?/~\\#%]*)?   # path etc.
         )|
         (?P<email>[-+=%/\w\.]+@[\w\.\-]+)|
-        (?P<item>(?P<class>[A-Za-z_]+)(\s*)(?P<id>\d+))
+        (?P<item>(?P<class>[A-Za-z_]+)(\s*)(?P<id>\d+)(?P<fragment>\#[^][\#%^{}"<>\s]+)?)
     )''', re.X | re.I)
     protocol_re = re.compile('^(ht|f)tp(s?)://', re.I)
 
@@ -1630,7 +1633,7 @@
             return self._hyper_repl_email(match, '<a href="mailto:%s">%s</a>')
         elif len(match.group('id')) < 10:
             return self._hyper_repl_item(match,
-                '<a href="%(cls)s%(id)s">%(item)s</a>')
+                '<a href="%(cls)s%(id)s%(fragment)s">%(item)s</a>')
         else:
             # just return the matched text
             return match.group(0)
@@ -1664,6 +1667,9 @@
         item = match.group('item')
         cls = match.group('class').lower()
         id = match.group('id')
+        fragment = match.group('fragment')
+        if fragment is None:
+            fragment=""
         try:
             # make sure cls is a valid tracker classname
             cl = self._db.getclass(cls)
@@ -2422,7 +2428,8 @@
         k = linkcl.labelprop(1)
         if num_re.match(self._value):
             try:
-                value = str(linkcl.get(self._value, k))
+                value = str(linkcl.get(self._value, k,
+                                       default=self._("[label is missing]")))
             except IndexError:
                 value = self._value
         else :
@@ -2720,7 +2727,8 @@
         for v in self._value:
             if num_re.match(v):
                 try:
-                    label = linkcl.get(v, k)
+                    label = linkcl.get(v, k,
+                                       default=self._("[label is missing]"))
                 except IndexError:
                     label = None
                 # fall back to designator if label is None
@@ -3343,11 +3351,21 @@
         # get the list of ids we're batching over
         klass = self.client.db.getclass(self.classname)
         if self.search_text:
-            matches = self.client.db.indexer.search(
-                [u2s(w.upper()) for w in re.findall(
-                    r'(?u)\b\w{2,25}\b',
-                    s2u(self.search_text, "replace")
-                )], klass)
+            indexer = self.client.db.indexer
+            if indexer.query_language:
+                try:
+                    matches = indexer.search(
+                        [self.search_text], klass)
+                except Exception as e:
+                    self.client.add_error_message(" ".join(e.args))
+                    raise
+            else:
+                matches = indexer.search(
+                    [u2s(w.upper()) for w in re.findall(
+                        r'(?u)\b\w{%s,%s}\b' % (indexer.minlength,
+                                                indexer.maxlength),
+                        s2u(self.search_text, "replace")
+                    )], klass)
         else:
             matches = None
 

Roundup Issue Tracker: http://roundup-tracker.org/