summaryrefslogtreecommitdiffstats
path: root/qtip/loader/file.py
diff options
context:
space:
mode:
authorYujun Zhang <zhang.yujunz@zte.com.cn>2017-01-19 16:58:46 +0800
committerYujun Zhang <zhang.yujunz@zte.com.cn>2017-01-29 20:34:56 +0800
commitf2d021c72b38845954755bab54aa13b4b2aad725 (patch)
tree384b0aa7772facb1e8f836a4741f8151ef119901 /qtip/loader/file.py
parenta42b9a6ac576b11403955ff38df6cc58cf02abb7 (diff)
Refactor loader classes
- rename BaseLoader to YamlFileLoader as base class of QTIP specs loader - create an abstract BaseLoader - create FileLoader for logfile collector Change-Id: I0c992cd847fc0dce4fdd73a13c1cdbc406c84532 Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
Diffstat (limited to 'qtip/loader/file.py')
-rw-r--r--qtip/loader/file.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/qtip/loader/file.py b/qtip/loader/file.py
new file mode 100644
index 00000000..00f94818
--- /dev/null
+++ b/qtip/loader/file.py
@@ -0,0 +1,50 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corp and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+from itertools import chain
+from os import listdir
+from os import path
+
+from qtip.base.constant import BaseProp
+from qtip.base.error import NotFound
+from qtip.loader.base import BaseLoader
+
+
+ROOT_DIR = path.join(path.dirname(__file__), path.pardir, path.pardir,
+ 'benchmarks')
+
+
+class FileLoader(BaseLoader):
+ RELATIVE_PATH = '.'
+ _paths = [ROOT_DIR]
+
+ def __init__(self, name, paths=None):
+ self._file = name
+ self._abspath = self._find(name, paths=paths)
+
+ def _find(self, name, paths=None):
+ """find a specification in searching paths"""
+ paths = self._paths if paths is None else paths
+ for p in paths:
+ abspath = path.join(p, self.RELATIVE_PATH, name)
+ if path.exists(abspath):
+ return abspath
+ raise NotFound(name, paths)
+
+ @classmethod
+ def list_all(cls, paths=None):
+ """list all available specification"""
+ paths = cls._paths if paths is None else paths
+ names = chain.from_iterable([listdir(path.join(p, cls.RELATIVE_PATH))
+ for p in paths])
+ for name in names:
+ item = cls(name, paths=paths)
+ yield {
+ BaseProp.NAME: name,
+ BaseProp.ABSPATH: item._abspath}