##// END OF EJS Templates
configitems: extract the logic to build a registrar on any configtable...
marmoute -
r33126:c2ca511c default
parent child Browse files
Show More
@@ -1,50 +1,57 b''
1 # configitems.py - centralized declaration of configuration option
1 # configitems.py - centralized declaration of configuration option
2 #
2 #
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import functools
11
10 from . import (
12 from . import (
11 error,
13 error,
12 )
14 )
13
15
14 class configitem(object):
16 class configitem(object):
15 """represent a known config item
17 """represent a known config item
16
18
17 :section: the official config section where to find this item,
19 :section: the official config section where to find this item,
18 :name: the official name within the section,
20 :name: the official name within the section,
19 :default: default value for this item,
21 :default: default value for this item,
20 """
22 """
21
23
22 def __init__(self, section, name, default=None):
24 def __init__(self, section, name, default=None):
23 self.section = section
25 self.section = section
24 self.name = name
26 self.name = name
25 self.default = default
27 self.default = default
26
28
27 coreitems = {}
29 coreitems = {}
28
30
29 def coreconfigitem(*args, **kwargs):
31 def _register(configtable, *args, **kwargs):
30 item = configitem(*args, **kwargs)
32 item = configitem(*args, **kwargs)
31 section = coreitems.setdefault(item.section, {})
33 section = configtable.setdefault(item.section, {})
32 if item.name in section:
34 if item.name in section:
33 msg = "duplicated config item registration for '%s.%s'"
35 msg = "duplicated config item registration for '%s.%s'"
34 raise error.ProgrammingError(msg % (item.section, item.name))
36 raise error.ProgrammingError(msg % (item.section, item.name))
35 section[item.name] = item
37 section[item.name] = item
36
38
37 # Registering actual config items
39 # Registering actual config items
38
40
41 def getitemregister(configtable):
42 return functools.partial(_register, configtable)
43
44 coreconfigitem = getitemregister(coreitems)
45
39 coreconfigitem('patch', 'fuzz',
46 coreconfigitem('patch', 'fuzz',
40 default=2,
47 default=2,
41 )
48 )
42 coreconfigitem('ui', 'clonebundleprefers',
49 coreconfigitem('ui', 'clonebundleprefers',
43 default=[],
50 default=[],
44 )
51 )
45 coreconfigitem('ui', 'interactive',
52 coreconfigitem('ui', 'interactive',
46 default=None,
53 default=None,
47 )
54 )
48 coreconfigitem('ui', 'quiet',
55 coreconfigitem('ui', 'quiet',
49 default=False,
56 default=False,
50 )
57 )
General Comments 0
You need to be logged in to leave comments. Login now