From b659a9296223b7f63a89bedbc0dad281117de936 Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Thu, 19 Jan 2017 15:10:01 +0800 Subject: Formalize constants for property names Change-Id: I68560b2299c2a815219bc0d0399124e0c269a2c0 Signed-off-by: Yujun Zhang --- qtip/base/constant.py | 29 ++++++++++++++++++++++++++--- qtip/loader/base.py | 15 ++++++++------- qtip/loader/plan.py | 5 +++-- qtip/loader/qpi.py | 14 +++++++------- qtip/runner/__init__.py | 10 +++++----- 5 files changed, 49 insertions(+), 24 deletions(-) (limited to 'qtip') diff --git a/qtip/base/constant.py b/qtip/base/constant.py index 76481b47..58cc0cc1 100644 --- a/qtip/base/constant.py +++ b/qtip/base/constant.py @@ -25,26 +25,49 @@ class PkgName(object): SPEC = 'spec' -class PropName(object): +class BaseProp(object): """property names""" # list NAME = 'name' CONTENT = 'content' ABSPATH = 'abspath' + # content - name = 'name' DESCRIPTION = 'description' + + +class SpecProp(BaseProp): # spec SECTIONS = 'sections' WEIGHT = 'weight' FORMULA = 'formula' METRICS = 'metrics' WORKLOADS = 'workloads' + + +class PlanProp(BaseProp): # plan - CONFIG = 'config' + INFO = 'info' + FACILITY = 'facility' ENGINEER = 'engineer' + + CONFIG = 'config' + DRIVER = 'driver' COLLECTOR = 'collector' REPORTER = 'reporter' + QPIS = 'QPIs' + + +class CollectorProp(BaseProp): + LOGS = 'logs' + FILENAME = 'filename' + PATTERNS = 'patterns' + MATCH = 'match' + CAPTURE = 'capture' + + +class ReporterBaseProp(BaseProp): + TRANSFORMER = 'transformer' diff --git a/qtip/loader/base.py b/qtip/loader/base.py index d3a7e1d3..a0e5d031 100644 --- a/qtip/loader/base.py +++ b/qtip/loader/base.py @@ -7,13 +7,14 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +from collections import defaultdict from itertools import chain from os import listdir from os import path import yaml from qtip.base.error import InvalidFormat, NotFound -from qtip.base.constant import PropName +from qtip.base.constant import BaseProp ROOT_DIR = path.join(path.dirname(__file__), path.pardir, path.pardir, @@ -28,15 +29,15 @@ class BaseLoader(object): def __init__(self, name, paths=None): self._file = name self._abspath = self._find(name, paths=paths) + content = defaultdict(lambda: None) try: - content = yaml.safe_load(file(self._abspath)) + content.update(yaml.safe_load(file(self._abspath))) except yaml.YAMLError: # TODO(yujunz) log yaml error raise InvalidFormat(self._abspath) - self.name = content[PropName.NAME] if PropName.NAME in content \ - else path.splitext(name)[0] + self.name = content[BaseProp.NAME] or path.splitext(name)[0] self.content = content def _find(self, name, paths=None): @@ -57,6 +58,6 @@ class BaseLoader(object): for name in names: item = cls(name, paths=paths) yield { - PropName.NAME: name, - PropName.ABSPATH: item._abspath, - PropName.CONTENT: item.content} + BaseProp.NAME: name, + BaseProp.ABSPATH: item._abspath, + BaseProp.CONTENT: item.content} diff --git a/qtip/loader/plan.py b/qtip/loader/plan.py index cf517ea2..c1ee00be 100644 --- a/qtip/loader/plan.py +++ b/qtip/loader/plan.py @@ -8,7 +8,7 @@ ############################################################################## -from qtip.base.constant import PropName +from qtip.base.constant import PlanProp from qtip.loader.base import BaseLoader from qtip.loader.qpi import QPISpec @@ -24,4 +24,5 @@ class Plan(BaseLoader): super(Plan, self).__init__(name, paths) self.qpis = [QPISpec(qpi, paths=paths) - for qpi in self.content[PropName.QPIS]] + for qpi in self.content[PlanProp.QPIS]] + self.info = self.content[PlanProp.INFO] diff --git a/qtip/loader/qpi.py b/qtip/loader/qpi.py index fe2323dd..ef6e065e 100644 --- a/qtip/loader/qpi.py +++ b/qtip/loader/qpi.py @@ -10,7 +10,7 @@ from base import BaseLoader from metric import MetricSpec -from qtip.base.constant import PropName +from qtip.base.constant import SpecProp from qtip.util.formula import Formula @@ -24,15 +24,15 @@ class QPISpec(BaseLoader): def __init__(self, name, paths=None): super(QPISpec, self).__init__(name, paths=paths) content = self.content - self.formula = Formula(content[PropName.FORMULA]) + self.formula = Formula(content[SpecProp.FORMULA]) self.sections = [Section(record, paths=paths) - for record in content[PropName.SECTIONS]] + for record in content[SpecProp.SECTIONS]] class Section(object): def __init__(self, content, paths=None): - self.name = content[PropName.NAME] - self.weight = content[PropName.WEIGHT] - self.formula = Formula(content[PropName.FORMULA]) + self.name = content[SpecProp.NAME] + self.weight = content[SpecProp.WEIGHT] + self.formula = Formula(content[SpecProp.FORMULA]) self.metrics = [MetricSpec(record, paths=paths) - for record in content[PropName.METRICS]] + for record in content[SpecProp.METRICS]] diff --git a/qtip/runner/__init__.py b/qtip/runner/__init__.py index eab81156..1db8498e 100644 --- a/qtip/runner/__init__.py +++ b/qtip/runner/__init__.py @@ -7,7 +7,7 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -from qtip.base.constant import PkgName, PropName +from qtip.base.constant import PkgName, BaseProp from qtip.base.error import NotFound from qtip.collector.stdout import StdoutCollector from qtip.driver.random import RandomDriver @@ -17,11 +17,11 @@ from qtip.reporter.console import ConsoleReporter class Runner(object): def __init__(self, spec, config=None): if config is None: - config = spec[PropName.CONFIG] + config = spec[BaseProp.CONFIG] - driver_name = config[PropName.DRIVER] - collector_name = config[PropName.COLLECTOR] - reporter_name = config[PropName.REPORTER] + driver_name = config[BaseProp.DRIVER] + collector_name = config[BaseProp.COLLECTOR] + reporter_name = config[BaseProp.REPORTER] # TODO(yujunz) dynamically load modules by name -- cgit 1.2.3-korg