summaryrefslogtreecommitdiffstats
path: root/qtip/loader/file.py
diff options
context:
space:
mode:
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}