Source code for honeybee_energy.result.osw

# coding=utf-8
"""Module for parsing OpenStudio Workflow (OSW) files."""
from __future__ import division

import os
import json

[docs]class OSW(object): """Object for parsing OpenStudio Workflow (OSW) files. Args: file_path: Full path to an OSW file. Properties: * file_path * file_dict * stdout * warnings * errors * error_tracebacks """ def __init__(self, file_path): """Initialize OSW""" assert os.path.isfile(file_path), 'No file was found at {}'.format(file_path) assert file_path.endswith('.osw'), \ '{} is not an OSW file ending in .osw.'.format(file_path) self._file_path = file_path self._load_contents() self._parse_contents() @property def file_path(self): """Get the path to the .osw file.""" return self._file_path @property def file_dict(self): """Get a dictionary of all contents in the file.""" return self._file_dict @property def stdout(self): """Get a list of strings for all of the stdout of each step of the .osw file.""" return self._stdout @property def warnings(self): """Get a list of strings for all of the warnings found in the .osw file.""" return self._warnings @property def errors(self): """Get a list of strings for all of the fatal errors found in the .osw file.""" return self._errors @property def error_tracebacks(self): """Get a list of strings for the tracebacks found in the .osw file.""" return self._error_tracebacks def _load_contents(self): """Parse all of the contents of a file path.""" with open(self._file_path) as json_file: self._file_dict = json.load(json_file) def _parse_contents(self): """Sort the contents of the error file into warnings and errors.""" self._stdout = [] self._warnings = [] self._errors = [] self._error_tracebacks = [] try: for step in self.file_dict['steps']: result = step['result'] self._stdout.append(result['stdout']) self._warnings.extend(result['step_warnings']) for error in result['step_errors']: self._error_tracebacks.append(error) self._errors.append(error.split('\n')[0]) except KeyError: # no results yet pass
[docs] def ToString(self): """Overwrite .NET ToString.""" return self.__repr__()
def __repr__(self): return 'OSW: {}'.format(self.file_path)