Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/templateutil.py @ 38254:12b6ee9e88f3
templater: move getdictitem() to hybrid class
Since a raw dict will never be returned by evalwrapped(), we don't need
to support d.get(key).
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 21 Mar 2018 01:39:44 +0900 |
parents | ad06a4264daf |
children | 06d11cd90516 |
comparison
equal
deleted
inserted
replaced
38253:ad06a4264daf | 38254:12b6ee9e88f3 |
---|---|
125 self._gen = gen # generator or function returning generator | 125 self._gen = gen # generator or function returning generator |
126 self._values = values | 126 self._values = values |
127 self._makemap = makemap | 127 self._makemap = makemap |
128 self._joinfmt = joinfmt | 128 self._joinfmt = joinfmt |
129 self.keytype = keytype # hint for 'x in y' where type(x) is unresolved | 129 self.keytype = keytype # hint for 'x in y' where type(x) is unresolved |
130 | |
131 def getmember(self, context, mapping, key): | |
132 # TODO: maybe split hybrid list/dict types? | |
133 if not util.safehasattr(self._values, 'get'): | |
134 raise error.ParseError(_('not a dictionary')) | |
135 return self._wrapvalue(key, self._values.get(key)) | |
136 | |
137 def _wrapvalue(self, key, val): | |
138 if val is None: | |
139 return | |
140 return wraphybridvalue(self, key, val) | |
130 | 141 |
131 def itermaps(self, context): | 142 def itermaps(self, context): |
132 makemap = self._makemap | 143 makemap = self._makemap |
133 for x in self._values: | 144 for x in self._values: |
134 yield makemap(x) | 145 yield makemap(x) |
665 d = evalwrapped(context, mapping, darg) | 676 d = evalwrapped(context, mapping, darg) |
666 if util.safehasattr(d, 'tomap'): | 677 if util.safehasattr(d, 'tomap'): |
667 lm = context.overlaymap(mapping, d.tomap()) | 678 lm = context.overlaymap(mapping, d.tomap()) |
668 return runsymbol(context, lm, memb) | 679 return runsymbol(context, lm, memb) |
669 try: | 680 try: |
670 if util.safehasattr(d, 'get'): | 681 if util.safehasattr(d, 'getmember'): |
671 return getdictitem(d, memb) | 682 return d.getmember(context, mapping, memb) |
672 raise error.ParseError | 683 raise error.ParseError |
673 except error.ParseError: | 684 except error.ParseError: |
674 sym = findsymbolicname(darg) | 685 sym = findsymbolicname(darg) |
675 if sym: | 686 if sym: |
676 raise error.ParseError(_("keyword '%s' has no member") % sym) | 687 raise error.ParseError(_("keyword '%s' has no member") % sym) |
691 try: | 702 try: |
692 return func(left, right) | 703 return func(left, right) |
693 except ZeroDivisionError: | 704 except ZeroDivisionError: |
694 raise error.Abort(_('division by zero is not defined')) | 705 raise error.Abort(_('division by zero is not defined')) |
695 | 706 |
696 def getdictitem(dictarg, key): | |
697 val = dictarg.get(key) | |
698 if val is None: | |
699 return | |
700 return wraphybridvalue(dictarg, key, val) | |
701 | |
702 def joinitems(itemiter, sep): | 707 def joinitems(itemiter, sep): |
703 """Join items with the separator; Returns generator of bytes""" | 708 """Join items with the separator; Returns generator of bytes""" |
704 first = True | 709 first = True |
705 for x in itemiter: | 710 for x in itemiter: |
706 if first: | 711 if first: |