Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit ff340ad

Browse files
authored
Add requirements of serializers to server (#516)
relates to #509
1 parent 8092b17 commit ff340ad

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

mlem/contrib/docker/base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,9 @@ def run_container(
495495
"The container died unexpectedly.", log
496496
)
497497
else:
498+
state.container_id = None
499+
state.container_name = None
500+
self.update_state(state)
498501
# Can't get logs from removed container
499502
raise DeploymentError(
500503
"The container died unexpectedly. Try to run the container "

mlem/contrib/fastapi.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818
from starlette.responses import JSONResponse, Response, StreamingResponse
1919

2020
from mlem.core.data_type import DataTypeSerializer
21-
from mlem.core.requirements import LibRequirementsMixin
21+
from mlem.core.requirements import LibRequirementsMixin, Requirements
2222
from mlem.runtime.interface import (
2323
Interface,
2424
InterfaceArgument,
2525
InterfaceMethod,
2626
)
2727
from mlem.runtime.server import Server
2828
from mlem.ui import EMOJI_NAILS, echo
29+
from mlem.utils.module import get_object_requirements
2930

3031
logger = logging.getLogger(__name__)
3132

@@ -203,6 +204,11 @@ def serve(self, interface: Interface):
203204
echo(f"Checkout openapi docs at <http://{self.host}:{self.port}/docs>")
204205
uvicorn.run(app, host=self.host, port=self.port)
205206

207+
def get_requirements(self) -> Requirements:
208+
return super().get_requirements() + get_object_requirements(
209+
[self.request_serializer, self.response_serializer, self.methods]
210+
)
211+
206212

207213
class _SpooledFileIOWrapper:
208214
"""https://stackoverflow.com/questions/47160211/why-doesnt-tempfile-spooledtemporaryfile-implement-readable-writable-seekable

mlem/core/base.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import shlex
2+
import sys
23
from collections import defaultdict
34
from inspect import isabstract
45
from typing import (
@@ -43,6 +44,7 @@ def load_impl_ext(
4344
...
4445

4546

47+
# pylint: disable=too-many-branches
4648
def load_impl_ext(
4749
abs_name: str, type_name: Optional[str], raise_on_missing: bool = True
4850
) -> Optional[Type["MlemABC"]]:
@@ -62,12 +64,18 @@ def load_impl_ext(
6264

6365
if type_name is not None and "." in type_name:
6466
try:
67+
# this is needed because if run from cli curdir is not checked for
68+
# modules to import
69+
sys.path.append(".")
70+
6571
obj = import_string(type_name)
6672
if not issubclass(obj, MlemABC):
6773
raise ValueError(f"{obj} is not subclass of MlemABC")
6874
return obj
6975
except ImportError:
7076
pass
77+
finally:
78+
sys.path.remove(".")
7179

7280
eps = load_entrypoints()
7381
for ep in eps.values():

0 commit comments

Comments
 (0)