Skip to content

Commit e214b8d

Browse files
authored
Merge pull request #21 from rekcurd/feature/apply-latest-rekcurd
Merged!
2 parents 480af39 + e5373b4 commit e214b8d

8 files changed

Lines changed: 58 additions & 117 deletions

File tree

README.md

Lines changed: 11 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,46 +34,30 @@ pip install rekcurd_client
3434
```
3535

3636
## How to use
37-
Example code is available [here](./example/sample.py).
37+
Example code is available [here](https://github.com/rekcurd/rekcurd-client-example). When you use Kubernetes and Rekcurd dashboard, you need to specify `application_name`, `service_level` and `rekcurd_grpc_version` correctly.
3838

3939
```python
4040
from rekcurd_client import RekcurdWorkerClient
41-
from rekcurd_client.logger import logger
4241

4342

44-
host = 'localhost:5000'
45-
client = RekcurdWorkerClient(logger=logger, host=host)
43+
host = 'localhost'
44+
port = 5000
45+
application_name = "sample"
46+
service_level = "development"
47+
rekcurd_grpc_version = "v2"
4648

47-
input = [0,0,0,1,11,0,0,0,0,0,
48-
0,7,8,0,0,0,0,0,1,13,
49-
6,2,2,0,0,0,7,15,0,9,
50-
8,0,0,5,16,10,0,16,6,0,
51-
0,4,15,16,13,16,1,0,0,0,
52-
0,3,15,10,0,0,0,0,0,2,
53-
16,4,0,0]
54-
response = client.run_predict_arrint_arrint(input)
55-
```
56-
57-
When you use Kubernetes and deploy Rekcurd service via Rekcurd dashboard, you can access your Rekcurd service like the below.
58-
59-
```python
60-
from rekcurd_client import RekcurdWorkerClient
61-
from rekcurd_client.logger import logger
62-
63-
64-
domain = 'example.com'
65-
app = 'rekcurd-sample'
66-
env = 'development'
67-
client = RekcurdWorkerClient(logger=logger, domain=domain, app=app, env=env)
49+
client = RekcurdWorkerClient(
50+
host=host, port=port,
51+
application_name=application_name, service_level=service_level, rekcurd_grpc_version=rekcurd_grpc_version)
6852

69-
input = [0,0,0,1,11,0,0,0,0,0,
53+
idata = [0,0,0,1,11,0,0,0,0,0,
7054
0,7,8,0,0,0,0,0,1,13,
7155
6,2,2,0,0,0,7,15,0,9,
7256
8,0,0,5,16,10,0,16,6,0,
7357
0,4,15,16,13,16,1,0,0,0,
7458
0,3,15,10,0,0,0,0,0,2,
7559
16,4,0,0]
76-
response = client.run_predict_arrint_arrint(input)
60+
response = client.run_predict_arrint_string(idata)
7761
```
7862

7963
### RekcurdWorkerClient

example/sample.py

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

rekcurd_client/core/rekcurd_worker_client.py

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import grpc
88

99
from rekcurd_client.protobuf import rekcurd_pb2, rekcurd_pb2_grpc
10-
from rekcurd_client.logger import SystemLoggerInterface
10+
from rekcurd_client.logger import SystemLoggerInterface, JsonSystemLogger
1111

1212

1313
def error_handling(error_response):
@@ -39,27 +39,40 @@ def _wrapper(*args, **kwargs):
3939

4040

4141
class RekcurdWorkerClient:
42-
def __init__(self, logger: SystemLoggerInterface,
43-
host: str = None,
44-
domain: str = None, app: str = None,
45-
env: str = None, version: int = None):
46-
self.logger = logger
47-
self.stub = None
48-
if host is None and (domain is None or app is None or env is None):
49-
raise RuntimeError("You must specify url or domain+app+env.")
50-
51-
if version is None:
52-
v_str = rekcurd_pb2.DESCRIPTOR.GetOptions().Extensions[rekcurd_pb2.rekcurd_grpc_proto_version]
42+
_logger: SystemLoggerInterface = None
43+
44+
def __init__(self, host: str = None, port: int = None,
45+
application_name: str = None, service_level: str = None,
46+
rekcurd_grpc_version: str = None):
47+
self._logger = JsonSystemLogger()
48+
49+
_host = "127.0.0.1"
50+
_port = 5000
51+
host = host or _host
52+
port = int(port or _port)
53+
54+
if rekcurd_grpc_version is None:
55+
rekcurd_grpc_version = rekcurd_pb2.DESCRIPTOR.GetOptions().Extensions[rekcurd_pb2.rekcurd_grpc_proto_version]
5356
else:
54-
v_str = rekcurd_pb2.EnumVersionInfo.Name(version)
57+
rekcurd_pb2.EnumVersionInfo.Value(rekcurd_grpc_version)
58+
59+
self.__metadata = [('x-rekcurd-application-name', application_name),
60+
('x-rekcurd-sevice-level', service_level),
61+
('x-rekcurd-grpc-version', rekcurd_grpc_version)]
62+
63+
channel = grpc.insecure_channel("{0}:{1}".format(host, port))
64+
self.stub = rekcurd_pb2_grpc.RekcurdWorkerStub(channel)
5565

56-
self.__metadata = [('x-rekcurd-application-name', app),
57-
('x-rekcurd-sevice-level', env),
58-
('x-rekcurd-grpc-version', v_str)]
59-
if host is None:
60-
self.__change_domain_app_env(domain, app, env, v_str)
66+
@property
67+
def logger(self):
68+
return self._logger
69+
70+
@logger.setter
71+
def logger(self, logger: SystemLoggerInterface):
72+
if isinstance(logger, SystemLoggerInterface):
73+
self._logger = logger
6174
else:
62-
self.__change_host(host)
75+
raise TypeError("Invalid logger type.")
6376

6477
def on_error(self, error: Exception):
6578
""" Postprocessing on error
@@ -74,18 +87,9 @@ def on_error(self, error: Exception):
7487
self.logger.error(str(error))
7588
self.logger.error(traceback.format_exc())
7689

77-
def __change_domain_app_env(self, domain: str, app: str, env: str, version: str):
78-
host = "{0}-{1}-{2}.{3}".format(app,version,env,domain)
79-
self.__change_host(host)
80-
81-
def __change_host(self, host: str):
82-
channel = grpc.insecure_channel(host)
83-
self.stub = rekcurd_pb2_grpc.RekcurdWorkerStub(channel)
84-
8590
def __byte_input_request(self, input, option="{}"):
8691
yield rekcurd_pb2.BytesInput(input=input, option=rekcurd_pb2.Option(val=option))
8792

88-
8993
@error_handling(rekcurd_pb2.StringOutput())
9094
def run_predict_string_string(self, input, option="{}"):
9195
request = rekcurd_pb2.StringInput()

rekcurd_client/logger/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,3 @@
44
from .logger_interface import SystemLoggerInterface
55
from .logger_jsonlogger import JsonSystemLogger
66
from .logger_fluent import FluentSystemLogger
7-
8-
9-
logger = JsonSystemLogger()

test/__init__.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
import os
1+
from .dummy_app import DummyApp
22

3-
from rekcurd.logger import JsonServiceLogger, JsonSystemLogger
4-
import rekcurd.rekcurd_worker_servicer
3+
from rekcurd import RekcurdWorkerServicer
4+
from rekcurd.logger import JsonServiceLogger
55

6-
from test.dummy_app import DummyApp
7-
from rekcurd_client.logger import logger
8-
9-
10-
os.environ["REKCURD_TEST_MODE"] = "True"
11-
os.environ["REKCURD_SETTINGS_YAML"] = "test/test-settings.yml"
126

137
app = DummyApp()
14-
service_logger = JsonServiceLogger(app.config)
15-
system_logger = JsonSystemLogger(app.config)
16-
Type = rekcurd.rekcurd_worker_servicer.RekcurdWorkerServicer.Type
17-
client_logger = logger
8+
app.service_logger = JsonServiceLogger()
9+
Type = RekcurdWorkerServicer.Type

test/core/_client_application.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55

66
from rekcurd.utils import PredictResult
77

8-
import rekcurd_client.core.rekcurd_worker_client
98
from rekcurd_client.protobuf import rekcurd_pb2_grpc
10-
from rekcurd_client.logger import logger
119
from rekcurd_client import RekcurdWorkerClient
1210

1311

@@ -409,7 +407,9 @@ def _run_arrstring_arrstring(client: RekcurdWorkerClient):
409407

410408
def run(scenario, channel):
411409
stub = rekcurd_pb2_grpc.RekcurdWorkerStub(channel)
412-
client = rekcurd_client.core.rekcurd_worker_client.RekcurdWorkerClient(logger=logger, domain='example.com', app='rekcurd-sample', env='development')
410+
client = RekcurdWorkerClient(
411+
host="example.com", port=80, application_name="rekcurd-sample",
412+
service_level="development")
413413
client.stub = stub
414414
try:
415415
return _IMPLEMENTATIONS[scenario](client)

test/core/test_worker_client_e2e.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from concurrent import futures
33

44
from test import *
5+
from rekcurd_client import RekcurdWorkerClient
56
from rekcurd_client.protobuf import rekcurd_pb2_grpc
67
import unittest
78
from functools import wraps
89
from unittest.mock import patch, Mock
910

1011
from rekcurd.utils import PredictResult
11-
import rekcurd_client.core.rekcurd_worker_client
1212

1313

1414
def patch_predictor(input_type, output_type):
@@ -81,13 +81,11 @@ def assertArrStringResponse(self, response):
8181
def setUpClass(cls):
8282
server = grpc.server(futures.ThreadPoolExecutor(max_workers=1))
8383
rekcurd_pb2_grpc.add_RekcurdWorkerServicer_to_server(
84-
rekcurd.rekcurd_worker_servicer.RekcurdWorkerServicer(
85-
logger=service_logger, app=app),
86-
server)
84+
RekcurdWorkerServicer(app=app, predictor=None), server)
8785
server.add_insecure_port("[::]:5000")
8886
server.start()
8987
cls.server = server
90-
cls.client = rekcurd_client.core.rekcurd_worker_client.RekcurdWorkerClient(logger=client_logger, host='127.0.0.1:5000')
88+
cls.client = RekcurdWorkerClient(host='127.0.0.1', port=5000)
9189

9290
@classmethod
9391
def tearDownClass(cls):

test/dummy_app.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
1-
#!/usr/bin/python
2-
# -*- coding: utf-8 -*-
3-
4-
51
from rekcurd import Rekcurd
6-
from rekcurd.utils import PredictLabel, PredictResult, EvaluateResult, EvaluateResultDetail, EvaluateDetail
7-
from typing import List, Generator
82

93

104
class DummyApp(Rekcurd):
11-
def __init__(self, config_file: str = None):
12-
super().__init__(config_file)
13-
14-
def load_model(self) -> None:
5+
def load_model(self, **kwargs):
156
pass
167

17-
def predict(self, input: PredictLabel, option: dict = None) -> PredictResult:
8+
def predict(self, **kwargs):
189
pass
1910

20-
def evaluate(self, file: bytes) -> EvaluateResult:
11+
def evaluate(self, **kwargs):
2112
pass
2213

23-
def get_evaluate_detail(self, file_path: str, results: List[EvaluateResultDetail]) -> Generator[EvaluateDetail, None, None]:
14+
def get_evaluate_detail(self, **kwargs):
2415
pass

0 commit comments

Comments
 (0)