You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by fb...@apache.org on 2015/01/06 00:52:03 UTC
ambari git commit: AMBARI-8317 Refactor the OS-dependent Ambari
Server Windows components
Repository: ambari
Updated Branches:
refs/heads/trunk 1767fcfa4 -> e4b2d34b6
AMBARI-8317 Refactor the OS-dependent Ambari Server Windows components
Pass 1.1
Preliminary changes. Introducing OS-dependent abstraction for functions.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e4b2d34b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e4b2d34b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e4b2d34b
Branch: refs/heads/trunk
Commit: e4b2d34b6bf1f1c31944576277cb71f8d771c2e8
Parents: 1767fcf
Author: Florian Barca <fb...@hortonworks.com>
Authored: Mon Jan 5 15:51:48 2015 -0800
Committer: Florian Barca <fb...@hortonworks.com>
Committed: Mon Jan 5 15:51:48 2015 -0800
----------------------------------------------------------------------
.../python/ambari_commons/os_family_impl.py | 42 +++++++++++++++++---
1 file changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/e4b2d34b/ambari-common/src/main/python/ambari_commons/os_family_impl.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/os_family_impl.py b/ambari-common/src/main/python/ambari_commons/os_family_impl.py
index f8a3379..65a502a 100644
--- a/ambari-common/src/main/python/ambari_commons/os_family_impl.py
+++ b/ambari-common/src/main/python/ambari_commons/os_family_impl.py
@@ -17,17 +17,20 @@ limitations under the License.
'''
import types
-from os_check import OSCheck
+from ambari_commons import OSCheck
class OsFamilyImpl(object):
"""
- Base class for os depended factory. Usage::
+ Base class for os dependent factory. Usage::
class BaseFoo(object): pass
- @Factory("windows")
- class OsFoo(object):pass
- print BaseFoo()# OsFoo
+ @OsFamilyImpl(os_family="windows")
+ class OsFooW(BaseFoo):pass
+ print BaseFoo()# OsFooW
+ @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
+ class OsFooD(BaseFoo):pass
+ print BaseFoo()# OsFooD
"""
@@ -62,3 +65,32 @@ class OsFamilyImpl(object):
base_cls.__new__ = types.MethodType(new, base_cls)
return cls
+
+class OsFamilyFuncImpl(object):
+ """
+ Base class for os dependent function. Usage::
+
+ @OSFamilyFuncImpl(os_family="windows")
+ def os_foo(...):pass
+
+ """
+ _func_impls = {}
+
+ def _createFunctionInstance(self, func):
+ self._func_impls[func.__module__ + "." + func.__name__ + "." + self.os_const] = func
+
+ def thunk(*args, **kwargs):
+ fn_id_base = func.__module__ + "." + func.__name__
+ fn_id = fn_id_base + "." + OSCheck.get_os_family()
+ if fn_id not in self._func_impls:
+ fn_id = fn_id_base + "." + OsFamilyImpl.DEFAULT
+
+ fn = self._func_impls[fn_id]
+ return fn(*args, **kwargs)
+ return thunk
+
+ def __init__(self, os_family):
+ self.os_const = os_family
+
+ def __call__(self, func):
+ return self._createFunctionInstance(func)