presentation tiramisu
[tiramisu.git] / option.py
index 23bc191..e305d4a 100644 (file)
--- a/option.py
+++ b/option.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-"pretty small and local configuration management tool"
+"option types and option description for the configuration management"
 # Copyright (C) 2012 Team tiramisu (see README for all contributors)
 #
 # This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,9 @@
 # The original `Config` design model is unproudly borrowed from 
 # the rough gus of pypy: pypy: http://codespeak.net/svn/pypy/dist/pypy/config/
 # the whole pypy projet is under MIT licence
+# ____________________________________________________________
+from autolib import special_owners
+from basetype import HiddenBaseType, DisabledBaseType, ModeBaseType, modes
 from error import (ConfigError, ConflictConfigError, NotFoundError, 
                                                                   RequiresError)
 available_actions = ['hide', 'show', 'enable', 'disable'] 
@@ -27,37 +30,6 @@ reverse_actions = {'hide': 'show', 'show': 'hide',
 # ____________________________________________________________
 # OptionDescription authorized group_type values
 group_types = ['default', 'family', 'group', 'master']
-# Option and OptionDescription modes
-modes = ['normal', 'expert']
-# ____________________________________________________________
-# interfaces
-class HiddenBaseType(object):
-    hidden = False
-    def hide(self):
-        self.hidden = True
-    def show(self):
-        self.hidden = False
-    def _is_hidden(self):
-        # dangerous method: how an Option can determine its status by itself ? 
-        return self.hidden
-
-class DisabledBaseType(object):
-    disabled = False   
-    def disable(self):
-        self.disabled = True
-    def enable(self):
-        self.disabled = False
-    def _is_disabled(self):
-        return self.disabled
-
-class ModeBaseType(object):
-    mode = 'normal'
-    def get_mode(self):
-        return self.mode
-    def set_mode(self, mode):
-        if mode not in modes:
-            raise TypeError("Unknown mode: {0}".format(mode))
-        self.mode = mode    
 # ____________________________________________________________
 class Option(HiddenBaseType, DisabledBaseType, ModeBaseType):
     #reminder: an Option object is **not** a container for the value
@@ -95,7 +67,7 @@ class Option(HiddenBaseType, DisabledBaseType, ModeBaseType):
         name = self._name
         if self._frozen:
             raise TypeError("trying to change a frozen option's owner: %s" % name)
-        if who in ['auto', 'fill']: # XXX special_owners to be imported from config
+        if who in special_owners:
             if self.callback == None:
                 raise SpecialOwnersError("no callback specified for" 
                                                       "option {0}".format(name))