From 9f9f5980b026fe2c43a62abb6695353f1a0ff72d Mon Sep 17 00:00:00 2001 From: John Vinyard Date: Sat, 24 Jun 2017 18:23:38 -0500 Subject: [PATCH] Raise a more specific error when the model already exists --- featureflow/__init__.py | 2 +- featureflow/model.py | 12 ++++++++++-- featureflow/test_integration.py | 4 ++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/featureflow/__init__.py b/featureflow/__init__.py index 860c765..cd5d5a3 100644 --- a/featureflow/__init__.py +++ b/featureflow/__init__.py @@ -1,4 +1,4 @@ -__version__ = '1.17.14' +__version__ = '1.18.14' from model import BaseModel diff --git a/featureflow/model.py b/featureflow/model.py index ef56d95..b6d09d4 100644 --- a/featureflow/model.py +++ b/featureflow/model.py @@ -46,6 +46,13 @@ class NoPersistenceSettingsError(Exception): pass +class ModelExistsError(Exception): + """ + Error raised when a model has already been computed and persisted + """ + pass + + class BaseModel(object): __metaclass__ = MetaModel @@ -95,8 +102,9 @@ def process(cls, raise_if_exists=False, **kwargs): feature_key = feature.feature_key(_id, cls) # check if that feature is already stored if feature_key in cls.database: - raise ValueError( - '{_id} is already stored in the database'.format(**locals())) + raise ModelExistsError( + '{_id} is already stored in the database'.format( + **locals())) graph = cls._build_extractor(_id) graph.remove_dead_nodes(cls.features.itervalues()) diff --git a/featureflow/test_integration.py b/featureflow/test_integration.py index 7fa2824..7d16875 100644 --- a/featureflow/test_integration.py +++ b/featureflow/test_integration.py @@ -8,7 +8,7 @@ from extractor import NotEnoughData, Aggregator, Node, InvalidProcessMethod from iteratornode import IteratorNode -from model import BaseModel, NoPersistenceSettingsError +from model import BaseModel, NoPersistenceSettingsError, ModelExistsError from feature import Feature, JSONFeature, CompressedFeature from data import * from bytestream import ByteStream, ByteStreamFeature @@ -804,7 +804,7 @@ class Document(BaseModel, settings): Document.process(stream='humpty', _id='blah', raise_if_exists=True) # processing the same id a second time should raise an error - self.assertRaises(ValueError, lambda: Document.process( + self.assertRaises(ModelExistsError, lambda: Document.process( stream='humpty', _id='blah', raise_if_exists=True)) def test_can_have_multiple_producer_like_nodes(self):