Index: recipe_modules/platform/api.py |
diff --git a/recipe_modules/platform/api.py b/recipe_modules/platform/api.py |
index ecd5f673cc345f4165edc7bc51bf8313e44e5bfa..9d9ec6b2dbdb2cb9fc00fe75aa9a9314df698bbd 100644 |
--- a/recipe_modules/platform/api.py |
+++ b/recipe_modules/platform/api.py |
@@ -2,27 +2,9 @@ |
# Use of this source code is governed under the Apache License, Version 2.0 |
# that can be found in the LICENSE file. |
-import sys |
-import platform |
- |
from recipe_engine import recipe_api |
-def norm_plat(plat): |
- if plat.startswith('linux'): |
- return 'linux' |
- elif plat.startswith(('win', 'cygwin')): |
- return 'win' |
- elif plat.startswith(('darwin', 'mac')): |
- return 'mac' |
- else: # pragma: no cover |
- raise ValueError('Don\'t understand platform "%s"' % plat) |
- |
- |
-def norm_bits(arch): |
- return 64 if '64' in str(arch) else 32 |
- |
- |
class PlatformApi(recipe_api.RecipeApi): |
""" |
Provides host-platform-detection properties. |
@@ -33,60 +15,47 @@ class PlatformApi(recipe_api.RecipeApi): |
bits (int): Either 32 or 64. |
""" |
- def __init__(self, **kwargs): |
- super(PlatformApi, self).__init__(**kwargs) |
- self._name = norm_plat(sys.platform) |
+ platform_client = recipe_api.RequireClient('platform') |
- self._arch = 'intel' |
- self._bits = norm_bits(platform.machine()) |
- |
- if self._test_data.enabled: |
- # Default to linux/64, unless test case says otherwise. |
- self._name = norm_plat(self._test_data.get('name', 'linux')) |
- self._bits = norm_bits(self._test_data.get('bits', 64)) |
- else: # pragma: no cover |
- # platform.machine is based on running kernel. It's possible to use 64-bit |
- # kernel with 32-bit userland, e.g. to give linker slightly more memory. |
- # Distinguish between different userland bitness by querying |
- # the python binary. |
- if (self._name == 'linux' and |
- self._bits == 64 and |
- platform.architecture()[0] == '32bit'): |
- self._bits = 32 |
- # On Mac, the inverse of the above is true: the kernel is 32-bit but the |
- # CPU and userspace both are capable of running 64-bit programs. |
- elif (self._name == 'mac' and |
- self._bits == 32 and |
- platform.architecture()[0] == '64bit'): |
- self._bits = 64 |
+ def initialize(self): |
+ # Pass-through platform constants. |
+ self.WIN = self.platform_client.WIN |
+ self.LINUX = self.platform_client.LINUX |
+ self.MAC = self.platform_client.MAC |
@property |
def is_win(self): |
- return self.name == 'win' |
+ return self.name == self.WIN |
@property |
def is_mac(self): |
- return self.name == 'mac' |
+ return self.name == self.MAC |
@property |
def is_linux(self): |
- return self.name == 'linux' |
+ return self.name == self.LINUX |
@property |
def name(self): |
- return self._name |
+ if self._test_data.enabled: |
+ # Default to linux, unless test case says otherwise. |
+ return self.platform_client.norm_plat( |
+ self._test_data.get('name', 'linux')) |
+ return self.platform_client.name # pragma: no cover |
@property |
def bits(self): |
# The returned bitness corresponds to the userland. If anyone ever wants |
# to query for bitness of the kernel, another accessor should be added. |
- return self._bits |
+ if self._test_data.enabled: |
+ # Default to 64-bit, unless test case says otherwise. |
+ return self.platform_client.norm_bits(self._test_data.get('bits', 64)) |
+ return self.platform_client.bits # pragma: no cover |
@property |
def arch(self): |
- return self._arch |
+ return self.platform_client.arch |
- @staticmethod |
def normalize_platform_name(platform): |
"""One of python's sys.platform values -> 'win', 'linux' or 'mac'.""" |
- return norm_plat(platform) # pragma: no cover |
+ return self.platform_client.norm_plat(platform) # pragma: no cover |