author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Sat, 17 Jun 2017 18:43:27 +0200 | |
changeset 33002 | 6d983e8af49c |
parent 33001 | 0d757af1ea67 |
child 33004 | 2529e2ae9f4c |
permissions | -rw-r--r-- |
33001
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 |
# configitems.py - centralized declaration of configuration option |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
# |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 |
# Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net> |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
# |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
|
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 |
from __future__ import absolute_import |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 |
|
33002
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
10 |
from . import ( |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
11 |
error, |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
12 |
) |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
13 |
|
33001
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
14 |
class configitem(object): |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
15 |
"""represent a known config item |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 |
|
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 |
:section: the official config section where to find this item, |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 |
:name: the official name within the section, |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 |
:default: default value for this item, |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 |
""" |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 |
|
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
22 |
def __init__(self, section, name, default=None): |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
23 |
self.section = section |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
24 |
self.name = name |
0d757af1ea67
configitems: add a basic class to hold config item information
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
25 |
self.default = default |
33002
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
26 |
|
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
27 |
coreitems = {} |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
28 |
|
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
29 |
def coreconfigitem(*args, **kwargs): |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
30 |
item = configitem(*args, **kwargs) |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
31 |
section = coreitems.setdefault(item.section, {}) |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
32 |
if item.name in section: |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
33 |
msg = "duplicated config item registration for '%s.%s'" |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
34 |
raise error.ProgrammingError(msg % (item.section, item.name)) |
6d983e8af49c
configitems: introduce a central registry for config option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33001
diff
changeset
|
35 |
section[item.name] = item |