Mercurial > p > roundup > code
comparison roundup/cgi/templating.py @ 7021:4e25815961a7
flake8: remove trailing whitespace; blank lines for definitions
E305 expected 2 blank lines after class or function definition, found 1
E306 expected 1 blank line before a nested definition, found 0
W291 trailing whitespace
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 09 Oct 2022 17:30:47 -0400 |
| parents | 86312ca47ad7 |
| children | f4bfc1af5d95 |
comparison
equal
deleted
inserted
replaced
| 7020:86312ca47ad7 | 7021:4e25815961a7 |
|---|---|
| 65 | 65 |
| 66 | 66 |
| 67 def _import_markdown2(): | 67 def _import_markdown2(): |
| 68 try: | 68 try: |
| 69 import markdown2, re | 69 import markdown2, re |
| 70 | |
| 70 class Markdown(markdown2.Markdown): | 71 class Markdown(markdown2.Markdown): |
| 71 # don't allow disabled protocols in links | 72 # don't allow disabled protocols in links |
| 72 _safe_protocols = re.compile('(?!' + ':|'.join([re.escape(s) for s in _disable_url_schemes]) + ':)', re.IGNORECASE) | 73 _safe_protocols = re.compile('(?!' + ':|'.join([re.escape(s) for s in _disable_url_schemes]) + ':)', re.IGNORECASE) |
| 73 | 74 |
| 74 def _extras(config): | 75 def _extras(config): |
| 176 | 177 |
| 177 values = { | 178 values = { |
| 178 'content': escape(content), | 179 'content': escape(content), |
| 179 'href': escape_link(link), | 180 'href': escape_link(link), |
| 180 'rel': self.rel_value, | 181 'rel': self.rel_value, |
| 181 'title': escape(title) if title else '', | 182 'title': escape(title) if title else '', |
| 182 } | 183 } |
| 183 | 184 |
| 184 if title: | 185 if title: |
| 185 return '<a href="%(href)s" rel="%(rel)s" ' \ | 186 return '<a href="%(href)s" rel="%(rel)s" ' \ |
| 186 'title="%(title)s">%(content)s</a>' % values | 187 'title="%(title)s">%(content)s</a>' % values |
| 196 markdown = lambda s, c: mistune.markdown(s, **_options(c)) | 197 markdown = lambda s, c: mistune.markdown(s, **_options(c)) |
| 197 except ImportError: | 198 except ImportError: |
| 198 markdown = None | 199 markdown = None |
| 199 | 200 |
| 200 return markdown | 201 return markdown |
| 202 | |
| 201 | 203 |
| 202 markdown = _import_markdown2() or _import_markdown() or _import_mistune() | 204 markdown = _import_markdown2() or _import_markdown() or _import_mistune() |
| 203 | 205 |
| 204 # bring in the templating support | 206 # bring in the templating support |
| 205 from roundup.cgi import ZTUtils | 207 from roundup.cgi import ZTUtils |
| 336 def check(self, name): | 338 def check(self, name): |
| 337 for l in self.loaders: | 339 for l in self.loaders: |
| 338 if l.check(name): | 340 if l.check(name): |
| 339 return True | 341 return True |
| 340 | 342 |
| 341 def load(self, name): | 343 def load(self, name): |
| 342 for l in self.loaders: | 344 for l in self.loaders: |
| 343 if l.check(name): | 345 if l.check(name): |
| 344 return l.load(name) | 346 return l.load(name) |
| 345 | 347 |
| 346 def __getitem__(self, name): | 348 def __getitem__(self, name): |
| 504 l = sorted(self._client.db.classes.keys()) | 506 l = sorted(self._client.db.classes.keys()) |
| 505 m = [] | 507 m = [] |
| 506 for item in l: | 508 for item in l: |
| 507 m.append(HTMLClass(self._client, item)) | 509 m.append(HTMLClass(self._client, item)) |
| 508 return m | 510 return m |
| 511 | |
| 509 | 512 |
| 510 num_re = re.compile(r'^-?\d+$') | 513 num_re = re.compile(r'^-?\d+$') |
| 511 | 514 |
| 512 | 515 |
| 513 def lookupIds(db, prop, ids, fail_ok=0, num_re=num_re, do_lookup=True): | 516 def lookupIds(db, prop, ids, fail_ok=0, num_re=num_re, do_lookup=True): |
| 579 <input required ..> not <input required="required" ...> | 582 <input required ..> not <input required="required" ...> |
| 580 The latter is xhtml. Recognize booleans by: | 583 The latter is xhtml. Recognize booleans by: |
| 581 value is None | 584 value is None |
| 582 Code can use None to indicate a pure boolean. | 585 Code can use None to indicate a pure boolean. |
| 583 ''' | 586 ''' |
| 584 return ' '.join(['%s="%s"'%(k,html_escape(str(v), True)) | 587 return ' '.join(['%s="%s"'%(k,html_escape(str(v), True)) |
| 585 if v != None else '%s'%(k) | 588 if v != None else '%s'%(k) |
| 586 for k,v in sorted(attrs.items())]) | 589 for k,v in sorted(attrs.items())]) |
| 587 | 590 |
| 588 | 591 |
| 589 def xhtml_cgi_escape_attrs(**attrs): | 592 def xhtml_cgi_escape_attrs(**attrs): |
| 2664 l = self._value[:] | 2667 l = self._value[:] |
| 2665 l.reverse() | 2668 l.reverse() |
| 2666 return self.viewableGenerator(l) | 2669 return self.viewableGenerator(l) |
| 2667 | 2670 |
| 2668 def sorted(self, property, reverse=False, NoneFirst=False): | 2671 def sorted(self, property, reverse=False, NoneFirst=False): |
| 2669 """ Return this multilink sorted by the given property | 2672 """ Return this multilink sorted by the given property |
| 2670 | 2673 |
| 2671 Set Nonefirst to True to sort None/unset property | 2674 Set Nonefirst to True to sort None/unset property |
| 2672 before a property with a valid value. | 2675 before a property with a valid value. |
| 2673 | 2676 |
| 2674 """ | 2677 """ |
| 2687 # determine orderprop for property if property is a link or multilink | 2690 # determine orderprop for property if property is a link or multilink |
| 2688 prop = self._db.getclass(self._classname).getprops()[property] | 2691 prop = self._db.getclass(self._classname).getprops()[property] |
| 2689 if type(prop) in [hyperdb.Link, hyperdb.Multilink]: | 2692 if type(prop) in [hyperdb.Link, hyperdb.Multilink]: |
| 2690 orderprop = value[0]._db.getclass(prop.classname).orderprop() | 2693 orderprop = value[0]._db.getclass(prop.classname).orderprop() |
| 2691 sort_by_link = True | 2694 sort_by_link = True |
| 2692 else: | 2695 else: |
| 2693 orderprop = property | 2696 orderprop = property |
| 2694 sort_by_link = False | 2697 sort_by_link = False |
| 2695 | 2698 |
| 2696 def keyfunc(v): | 2699 def keyfunc(v): |
| 2697 # Return tuples made of (group order (int), base python | 2700 # Return tuples made of (group order (int), base python |
| 2922 The list being sorted may contain mixed ids and labels. | 2925 The list being sorted may contain mixed ids and labels. |
| 2923 """ | 2926 """ |
| 2924 linkcl = db.getclass(classname) | 2927 linkcl = db.getclass(classname) |
| 2925 if sort_on is None: | 2928 if sort_on is None: |
| 2926 sort_on = linkcl.orderprop() | 2929 sort_on = linkcl.orderprop() |
| 2930 | |
| 2927 def keyfunc(a): | 2931 def keyfunc(a): |
| 2928 if num_re.match(a): | 2932 if num_re.match(a): |
| 2929 a = linkcl.get(a, sort_on) | 2933 a = linkcl.get(a, sort_on) |
| 2930 # In Python3 we may not compare strings and None | 2934 # In Python3 we may not compare strings and None |
| 2931 if a is None: | 2935 if a is None: |
| 3218 these elements. This wll prevent the function from creating | 3222 these elements. This wll prevent the function from creating |
| 3219 these elements in its output. | 3223 these elements in its output. |
| 3220 """ | 3224 """ |
| 3221 l = [] | 3225 l = [] |
| 3222 sc = self.special_char | 3226 sc = self.special_char |
| 3227 | |
| 3223 def add(k, v): | 3228 def add(k, v): |
| 3224 l.append(self.input(type="hidden", name=k, value=v)) | 3229 l.append(self.input(type="hidden", name=k, value=v)) |
| 3225 if columns and self.columns: | 3230 if columns and self.columns: |
| 3226 add(sc+'columns', ','.join(self.columns)) | 3231 add(sc+'columns', ','.join(self.columns)) |
| 3227 if sort: | 3232 if sort: |
