Skip to content

Commit b7cdfeb

Browse files
committed
remove interface file
1 parent a04e5f3 commit b7cdfeb

5 files changed

Lines changed: 77 additions & 107 deletions

File tree

.pre-commit-config.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ repos:
99
# line too long and line before binary operator (black is ok with these)
1010
types:
1111
- python
12+
args:
13+
- "--max-line-length=90"
1214
- id: trailing-whitespace
1315
- id: end-of-file-fixer
1416
- id: check-yaml

vetiver/__init__.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
from .meta import * # noqa
1515
from .write_docker import write_docker # noqa
1616
from .write_fastapi import write_app # noqa
17-
from .handlers._interface import create_handler, InvalidModelError # noqa
18-
from .handlers.base import VetiverHandler # noqa
17+
from .handlers.base import VetiverHandler, create_handler, InvalidModelError # noqa
1918
from .handlers.sklearn import SKLearnHandler # noqa
2019
from .handlers.torch import TorchHandler # noqa
21-
from .rsconnect import deploy_rsconnect # noqa
22-
from .monitor import compute_metrics, pin_metrics, plot_metrics, _rolling_df # noqa
20+
from .rsconnect import deploy_rsconnect # noqa
21+
from .monitor import compute_metrics, pin_metrics, plot_metrics, _rolling_df # noqa

vetiver/handlers/_interface.py

Lines changed: 0 additions & 99 deletions
This file was deleted.

vetiver/handlers/base.py

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,59 @@
1-
from abc import ABCMeta
1+
from vetiver.handlers import base
2+
from functools import singledispatch
3+
from contextlib import suppress
24

35
from ..ptype import vetiver_create_ptype
46
from ..meta import _model_meta
57

68

7-
class VetiverHandler(metaclass=ABCMeta):
9+
class InvalidModelError(Exception):
10+
"""
11+
Throw an error if `model` is not registered.
12+
"""
13+
14+
def __init__(
15+
self,
16+
message="The `model` argument must be a scikit-learn or torch model.",
17+
):
18+
self.message = message
19+
super().__init__(self.message)
20+
21+
22+
@singledispatch
23+
def create_handler(model, ptype_data):
24+
"""check for model type to handle prediction
25+
26+
Parameters
27+
----------
28+
model: object
29+
Description of parameter `x`.
30+
ptype_data : object
31+
An object with information (data) whose layout is to be determined.
32+
33+
Returns
34+
-------
35+
handler
36+
Handler class for specified model type
37+
38+
39+
Examples
40+
--------
41+
>>> import vetiver
42+
>>> X, y = vetiver.mock.get_mock_data()
43+
>>> model = vetiver.mock.get_mock_model()
44+
>>> handler = vetiver.create_handler(model, X)
45+
>>> handler.describe()
46+
"Scikit-learn <class 'sklearn.dummy.DummyRegressor'> model"
47+
"""
48+
49+
raise InvalidModelError(
50+
"Model must be an sklearn or torch model, or a \
51+
custom handler must be used. See the docs for more info on custom handlers. \
52+
https://rstudio.github.io/vetiver-python/advancedusage/custom_handler.html"
53+
)
54+
55+
56+
class VetiverHandler:
857
"""Base handler class for creating VetiverModel of different type.
958
1059
Parameters
@@ -15,6 +64,16 @@ class VetiverHandler(metaclass=ABCMeta):
1564
An object with information (data) whose layout is to be determined.
1665
"""
1766

67+
@classmethod
68+
def __init_subclass__(cls, **kwargs):
69+
super().__init_subclass__(**kwargs)
70+
with suppress(AttributeError, NameError):
71+
create_handler.register(cls.base_class, cls)
72+
73+
def __new__(cls, value=None):
74+
implementation_cls = create_handler.registry[type(value)]
75+
return super().__new__(implementation_cls)
76+
1877
def __init__(self, model, ptype_data):
1978
self.model = model
2079
self.ptype_data = ptype_data
@@ -79,3 +138,11 @@ def handler_predict(self, input_data, check_ptype):
79138
Prediction from model
80139
"""
81140
...
141+
142+
143+
@create_handler.register
144+
def _(model: base.VetiverHandler, ptype_data):
145+
if model.ptype_data is None and ptype_data is not None:
146+
model.ptype_data = ptype_data
147+
148+
return model

vetiver/vetiver_model.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22

3-
from vetiver.handlers._interface import create_handler
3+
from vetiver.handlers.base import create_handler
44
from .meta import _model_meta
55
from .write_fastapi import _choose_version
66

@@ -33,7 +33,8 @@ class VetiverModel:
3333
versioned :
3434
Should the model be versioned when created?
3535
description : str
36-
A detailed description of the model. If omitted, a brief description will be generated.
36+
A detailed description of the model.
37+
If omitted, a brief description will be generated.
3738
metadata : dict
3839
Other details to be saved and accessed for serving
3940

0 commit comments

Comments
 (0)