Changeset 14509
- Timestamp:
- Feb 9, 2016, 5:24:34 PM (10 years ago)
- Location:
- trunk/trac
- Files:
-
- 5 edited
-
config.py (modified) (12 diffs)
-
mimeview/pygments.py (modified) (1 diff)
-
tests/config.py (modified) (2 diffs)
-
wiki/macros.py (modified) (2 diffs)
-
wiki/tests/macros.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/trac/config.py
r14195 r14509 25 25 from trac.util.compat import OrderedDict, wait_for_file_mtime_change 26 26 from trac.util.text import cleandoc, printout, to_unicode, to_utf8 27 from trac.util.translation import _, N_, tag_27 from trac.util.translation import N_, _, dgettext, tag_ 28 28 29 29 __all__ = ['Configuration', 'ConfigSection', 'Option', 'BoolOption', … … 57 57 items = [item for item in items if item not in (None, '')] 58 58 return items 59 60 61 def _getdoc(option_or_section): 62 doc = to_unicode(option_or_section.__doc__) 63 if doc: 64 doc = dgettext(option_or_section.doc_domain, doc, 65 **(option_or_section.doc_args or {})) 66 return doc 59 67 60 68 … … 631 639 return _get_registry(ConfigSection, compmgr) 632 640 633 def __init__(self, name, doc, doc_domain='tracini' ):641 def __init__(self, name, doc, doc_domain='tracini', doc_args=None): 634 642 """Create the configuration section.""" 635 643 self.name = name … … 637 645 self.__doc__ = cleandoc(doc) 638 646 self.doc_domain = doc_domain 647 self.doc_args = doc_args 639 648 640 649 def __get__(self, instance, owner): … … 648 657 return '<%s [%s]>' % (self.__class__.__name__, self.name) 649 658 659 @property 660 def doc(self): 661 """Return localized document of the section""" 662 return _getdoc(self) 663 650 664 651 665 class Option(object): … … 668 682 669 683 def __init__(self, section, name, default=None, doc='', 670 doc_domain='tracini' ):684 doc_domain='tracini', doc_args=None): 671 685 """Create the configuration option. 672 686 … … 683 697 self.__doc__ = cleandoc(doc) 684 698 self.doc_domain = doc_domain 699 self.doc_args = doc_args 685 700 686 701 def __get__(self, instance, owner): … … 699 714 return '<%s [%s] %r>' % (self.__class__.__name__, self.section, 700 715 self.name) 716 717 @property 718 def doc(self): 719 """Return localized document of the option""" 720 return _getdoc(self) 701 721 702 722 def dumps(self, value): … … 763 783 764 784 def __init__(self, section, name, default=None, sep=',', keep_empty=False, 765 doc='', doc_domain='tracini' ):785 doc='', doc_domain='tracini', doc_args=None): 766 786 self.sep = sep 767 787 self.keep_empty = keep_empty 768 Option.__init__(self, section, name, default, doc, doc_domain) 788 Option.__init__(self, section, name, default, doc, doc_domain, 789 doc_args) 769 790 770 791 def accessor(self, section, name, default): … … 790 811 """ 791 812 792 def __init__(self, section, name, choices, doc='', doc_domain='tracini'): 813 def __init__(self, section, name, choices, doc='', doc_domain='tracini', 814 doc_args=None): 793 815 Option.__init__(self, section, name, to_unicode(choices[0]), doc, 794 doc_domain )816 doc_domain, doc_args) 795 817 self.choices = set(to_unicode(c).strip() for c in choices) 796 818 … … 824 846 825 847 def __init__(self, section, name, interface, default=None, doc='', 826 doc_domain='tracini'): 827 Option.__init__(self, section, name, default, doc, doc_domain) 848 doc_domain='tracini', doc_args=None): 849 Option.__init__(self, section, name, default, doc, doc_domain, 850 doc_args) 828 851 self.xtnpt = ExtensionPoint(interface) 829 852 … … 854 877 855 878 def __init__(self, section, name, interface, default=None, 856 include_missing=True, doc='', doc_domain='tracini'): 879 include_missing=True, doc='', doc_domain='tracini', 880 doc_args=None): 857 881 ListOption.__init__(self, section, name, default, doc=doc, 858 doc_domain=doc_domain )882 doc_domain=doc_domain, doc_args=doc_args) 859 883 self.xtnpt = ExtensionPoint(interface) 860 884 self.include_missing = include_missing -
trunk/trac/mimeview/pygments.py
r14208 r14509 63 63 from the end. The lexer //short names// can also be used in place 64 64 of the lexer name. 65 """ %{'url': 'http://pygments.org/docs/lexers/'})65 """, doc_args={'url': 'http://pygments.org/docs/lexers/'}) 66 66 67 67 default_style = Option('mimeviewer', 'pygments_default_style', 'trac', -
trunk/trac/tests/config.py
r14502 r14509 1126 1126 1127 1127 1128 class OptionDocTestCase(BaseTestCase): 1129 1130 def test_config_section(self): 1131 class Dummy(object): 1132 section_a = (ConfigSection)('a', 'Doc for a') 1133 section_b = (ConfigSection)( 1134 'b', 'Doc for [%(page)s@%(version)d b]', 1135 doc_args={'page': 'WikiStart', 'version': 42}) 1136 section_c = (ConfigSection)('c', '') 1137 1138 self.assertEqual('Doc for a', Dummy.section_a.__doc__) 1139 self.assertEqual(None, Dummy.section_a.doc_args) 1140 self.assertEqual('Doc for a', Dummy.section_a.doc) 1141 self.assertEqual('Doc for [%(page)s@%(version)d b]', 1142 Dummy.section_b.__doc__) 1143 self.assertEqual({'page': 'WikiStart', 'version': 42}, 1144 Dummy.section_b.doc_args) 1145 self.assertEqual('Doc for [WikiStart@42 b]', Dummy.section_b.doc) 1146 self.assertEqual('', Dummy.section_c.__doc__) 1147 self.assertEqual(None, Dummy.section_c.doc_args) 1148 self.assertEqual('', Dummy.section_c.doc) 1149 1150 def test_options(self): 1151 class IDummy(Interface): 1152 pass 1153 class Dummy(Component): 1154 implements(IDummy) 1155 opt_nodoc = (Option)('a', 'option_nodoc', 'default') 1156 opt = (Option)( 1157 'a', 'option', 'default', 1158 doc='Doc for %(name)s', doc_args={'name': 'opt'}) 1159 bool_opt = (BoolOption)( 1160 'a', 'bool_opt', 'false', 1161 doc='Doc for %(name)s', doc_args={'name': 'bool_opt'}) 1162 int_opt = (IntOption)( 1163 'a', 'int_opt', '42', 1164 doc='Doc for %(name)s', doc_args={'name': 'int_opt'}) 1165 float_opt = (IntOption)( 1166 'a', 'float_opt', '4.2', 1167 doc='Doc for %(name)s', doc_args={'name': 'float_opt'}) 1168 list_opt = (ListOption)( 1169 'a', 'list_opt', 'foo,bar,baz', 1170 doc='Doc for %(name)s', doc_args={'name': 'list_opt'}) 1171 path_opt = (PathOption)( 1172 'a', 'path_opt', 'trac.ini', 1173 doc='Doc for %(name)s', doc_args={'name': 'path_opt'}) 1174 ext_opt = (ExtensionOption)( 1175 'a', 'ext_opt', IDummy, 'Dummy', 1176 doc='Doc for %(name)s', doc_args={'name': 'ext_opt'}) 1177 ordered_ext_opt = (OrderedExtensionsOption)( 1178 'a', 'ordered_ext_opt', IDummy, 'Dummy,Dummy', 1179 doc='Doc for %(name)s', doc_args={'name': 'ordered_ext_opt'}) 1180 1181 self.assertEqual('', Dummy.opt_nodoc.__doc__) 1182 self.assertEqual(None, Dummy.opt_nodoc.doc_args) 1183 self.assertEqual('', Dummy.opt_nodoc.doc) 1184 self.assertEqual('Doc for %(name)s', Dummy.opt.__doc__) 1185 self.assertEqual({'name': 'opt'}, Dummy.opt.doc_args) 1186 self.assertEqual('Doc for opt', Dummy.opt.doc) 1187 self.assertEqual('Doc for %(name)s', Dummy.bool_opt.__doc__) 1188 self.assertEqual({'name': 'bool_opt'}, Dummy.bool_opt.doc_args) 1189 self.assertEqual('Doc for bool_opt', Dummy.bool_opt.doc) 1190 self.assertEqual('Doc for %(name)s', Dummy.int_opt.__doc__) 1191 self.assertEqual({'name': 'int_opt'}, Dummy.int_opt.doc_args) 1192 self.assertEqual('Doc for int_opt', Dummy.int_opt.doc) 1193 self.assertEqual('Doc for %(name)s', Dummy.float_opt.__doc__) 1194 self.assertEqual({'name': 'float_opt'}, Dummy.float_opt.doc_args) 1195 self.assertEqual('Doc for float_opt', Dummy.float_opt.doc) 1196 self.assertEqual('Doc for %(name)s', Dummy.list_opt.__doc__) 1197 self.assertEqual({'name': 'list_opt'}, Dummy.list_opt.doc_args) 1198 self.assertEqual('Doc for list_opt', Dummy.list_opt.doc) 1199 self.assertEqual('Doc for %(name)s', Dummy.path_opt.__doc__) 1200 self.assertEqual({'name': 'path_opt'}, Dummy.path_opt.doc_args) 1201 self.assertEqual('Doc for path_opt', Dummy.path_opt.doc) 1202 self.assertEqual('Doc for %(name)s', Dummy.ext_opt.__doc__) 1203 self.assertEqual({'name': 'ext_opt'}, Dummy.ext_opt.doc_args) 1204 self.assertEqual('Doc for ext_opt', Dummy.ext_opt.doc) 1205 self.assertEqual('Doc for %(name)s', Dummy.ordered_ext_opt.__doc__) 1206 self.assertEqual({'name': 'ordered_ext_opt'}, 1207 Dummy.ordered_ext_opt.doc_args) 1208 self.assertEqual('Doc for ordered_ext_opt', Dummy.ordered_ext_opt.doc) 1209 1210 1128 1211 def suite(): 1129 1212 suite = unittest.TestSuite() … … 1136 1219 print("SKIP: trac.tests.config.ConfigurationSetDefaultsTestCase " 1137 1220 "(__name__ is not trac.tests.config)") 1221 suite.addTest(unittest.makeSuite(OptionDocTestCase)) 1138 1222 return suite 1139 1223 -
trunk/trac/wiki/macros.py
r14284 r14509 779 779 key_filter = args.pop(0).strip() 780 780 781 def getdoc(option_or_section):782 doc = to_unicode(option_or_section.__doc__)783 if doc:784 doc = dgettext(option_or_section.doc_domain, doc)785 return doc786 787 781 registry = ConfigSection.get_registry(self.compmgr) 788 sections = dict((name, getdoc(section))782 sections = dict((name, section.doc) 789 783 for name, section in registry.iteritems() 790 784 if name.startswith(section_filter)) … … 810 804 tag.table(class_='wiki')(tag.tbody( 811 805 tag.tr(tag.td(tag.code(option.name)), 812 tag.td(format_to_oneliner( 813 self.env, formatter.context, getdoc(option))),806 tag.td(format_to_oneliner(self.env, formatter.context, 807 option.doc)), 814 808 default_cell(option), 815 809 class_='odd' if idx % 2 else 'even') -
trunk/trac/wiki/tests/macros.py
r14481 r14509 521 521 <tr class="even"><td><code>option1</code></td><td></td><td class="default"><code>value</code></td></tr>\ 522 522 <tr class="odd"><td><code>option2</code></td><td>blah</td><td class="default"><code>value</code></td></tr>\ 523 <tr class="even"><td><code>option3</code></td><td>Doc for option3</td><td class="default"><code>value</code></td></tr>\ 523 524 </tbody></table>\ 524 525 </div><p> … … 560 561 option_a1 = (Option)('section-42', 'option1', 'value', doc='') 561 562 option_a2 = (Option)('section-42', 'option2', 'value', doc='blah') 563 option_a3 = (Option)('section-42', 'option3', 'value', 564 doc='Doc for %(name)s', 565 doc_args={'name': 'option3'}) 562 566 option_l1 = (ListOption)('section-list', 'option1', 563 567 [4.2, '42', 42, None, 0, True], sep='|',
Note:
See TracChangeset
for help on using the changeset viewer.
