Search for servo configs in system site-packages directory.

This is to make server.cros.firmware_programmer work on a CrOS host.

BUG=chrome-os-partner:29159
TEST=manually on my moblab host

Change-Id: Ib7f52160b580f36685783e23b26eb5ac2f0d3bff
Reviewed-on: https://chromium-review.googlesource.com/201476
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Queue: Ricky Liang <jcliang@chromium.org>
Tested-by: Ricky Liang <jcliang@chromium.org>
diff --git a/server/cros/servo/firmware_programmer.py b/server/cros/servo/firmware_programmer.py
index d3b734e..0b20509 100644
--- a/server/cros/servo/firmware_programmer.py
+++ b/server/cros/servo/firmware_programmer.py
@@ -15,6 +15,7 @@
 import logging
 import os
 import re
+import site
 
 from autotest_lib.client.common_lib import error
 from autotest_lib.server.cros.faft.config.config import Config as FAFTConfig
@@ -205,9 +206,16 @@
 
         @return A list of valid board names.
         """
-        SERVOD_CONFIG_DATA_DIR = os.path.join(
-                os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
-                'site-packages', 'servo', 'data')
+        site_packages_paths = site.getsitepackages()
+        SERVOD_CONFIG_DATA_DIR = None
+        for p in site_packages_paths:
+            servo_data_path = os.path.join(p, 'servo', 'data')
+            if os.path.exists(servo_data_path):
+                SERVOD_CONFIG_DATA_DIR = servo_data_path
+                break
+        if not SERVOD_CONFIG_DATA_DIR:
+            raise ProgrammerError(
+                    'Unable to locate data directory of Python servo module')
         SERVOFLEX_V2_R0_P50_CONFIG = 'servoflex_v2_r0_p50.xml'
         SERVO_CONFIG_REGEXP = 'servo_(?P<board>.+)_overlay.xml'