Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
02157fb
Return default value when possible
samuelduchesne Aug 5, 2019
cc29bbe
Code cleanup
samuelduchesne Aug 6, 2019
1ebec2a
Adds a test for default values
samuelduchesne Aug 6, 2019
610a345
samuelduchesne Aug 6, 2019
7d3ccf4
Adds more types to parse_idd_type
samuelduchesne Aug 6, 2019
4f9ea7a
Extends the default logic to all returned values that are equal to an…
samuelduchesne Aug 6, 2019
a4ec709
Adds another test
samuelduchesne Aug 6, 2019
b713149
Fixes an issue where run errors could not be read because of suffix d…
samuelduchesne Aug 6, 2019
fd8789c
Adds expandobject=True to testrunners to assert tests
samuelduchesne Aug 6, 2019
79db7d1
Merge branch 'develop' into feature/defaults
samuelduchesne Aug 20, 2019
a0d2ef5
Revert "Adds expandobject=True to testrunners to assert tests"
samuelduchesne Aug 6, 2019
e6375ac
Black
samuelduchesne Jul 8, 2020
1422b91
addresses issue #303
samuelduchesne Sep 2, 2020
8216057
Merge branch 'develop' into 303-eppy-suffers-from-performance-issues
samuelduchesne Sep 3, 2020
8f8eba0
Moves the creation of the IDD index and the addition of idd groups to…
samuelduchesne Sep 3, 2020
a84753c
Merge branch 'develop' into feature/defaults
samuelduchesne Sep 3, 2020
eb671c7
Merge branch '303-eppy-suffers-from-performance-issues' into feature/…
samuelduchesne Sep 3, 2020
cab7bda
Using regex improves speed (a little bit slower then encode/decode) b…
samuelduchesne Sep 3, 2020
588b3fe
group info must happen before idd_index
samuelduchesne Sep 3, 2020
841d376
Merge branch '303-eppy-suffers-from-performance-issues' into feature/…
samuelduchesne Sep 3, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions eppy/bunch_subclass.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,13 +319,26 @@ def __getattr__(self, name):
elif name in self.fieldnames:
i = self.fieldnames.index(name)
try:
return self.fieldvalues[i]
i_ = self.fieldvalues[i]
if i_ == "":
return self.get_default(name)
else:
return i_
except IndexError:
return ""
# try to return the default value if defined in IDD.
return self.get_default(name)
else:
astr = "unable to find field %s" % (name,)
raise BadEPFieldError(astr)

def get_default(self, name):
if "default" in self.getfieldidd(name).keys():
_type = _parse_idd_type(self, name)
default_ = next(iter(self.getfieldidd_item(name, "default")), None)
return _type(default_)
else:
return ""

def __getitem__(self, key):
if key in ("obj", "objls", "objidd", "__functions", "__aliases", "theidf"):
return super(EpBunch, self).__getitem__(key)
Expand Down Expand Up @@ -394,6 +407,30 @@ def __dir__(self):
return super(EpBunch, self).__dir__() + fnames + func_names


def _parse_idd_type(epbunch, name):
"""parse the fieldvalue type into a python type. eg.: 'real' returns
'float'.

Possible types are:
- integer -> int
- real -> float
- alpha -> str (arbitrary string),
- choice -> str (alpha with specific list of choices, see \key)
- object-list -> str (link to a list of objects defined elsewhere, see \object-list and \reference)
- external-list -> str (uses a special list from an external source, see \external-list)
- node -> str (name used in connecting HVAC components)
"""
_type = next(iter(epbunch.getfieldidd_item(name, "type")), "").lower()
if _type == "real":
return float
elif _type == "alpha":
return str
elif _type == "integer":
return int
else:
return str


def getrange(bch, fieldname):
"""get the ranges for this field"""
keys = ["maximum", "minimum", "maximum<", "minimum>", "type"]
Expand Down
4 changes: 3 additions & 1 deletion eppy/runner/run_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from __future__ import print_function
from __future__ import unicode_literals

import glob
import os
import platform
import pydoc
Expand Down Expand Up @@ -361,7 +362,8 @@ def parse_error(output_dir):
"""
sys.stderr.seek(0)
std_err = sys.stderr.read().decode("utf-8")
err_file = os.path.join(output_dir, "eplusout.err")
err_file = os.path.join(output_dir, "*out.err")
err_file = next(iter(glob.glob(err_file)), None)
if os.path.isfile(err_file):
with open(err_file, "r") as f:
ep_err = f.read()
Expand Down
12 changes: 8 additions & 4 deletions eppy/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,20 @@
TEST_OLD_IDD = "Energy+V7_2_0.idd"


@pytest.fixture()
@pytest.fixture(scope="module")
def test_idf():
idd_file = os.path.join(IDD_FILES, TEST_IDD)
idf_file = os.path.join(IDF_FILES, TEST_IDF)
modeleditor.IDF.setiddname(idd_file, testing=True)
modeleditor.IDF.iddname = idd_file
idf = modeleditor.IDF(idf_file, TEST_EPW)
try:
ep_version = idf.idd_version
assert ep_version == versiontuple(VERSION)
except AttributeError:
raise
return idf
yield idf

del idf


@pytest.fixture()
Expand All @@ -47,4 +49,6 @@ def base_idf():
idftxt = ""
idfhandle = StringIO(idftxt)
idf = IDF(idfhandle)
return idf
yield idf

del idf
Loading