Hi Everyone,
I have followed the tutorial about Data Model. I have created a Basic service for test
from dataclasses import dataclass
# Zato
from zato.common.typing_ import list_, optional_
from zato.server.service import Model, Service
from zato.common import DATA_FORMAT
@dataclass(init=False)
class Phone(Model):
imei: str
owner_id: int
owner_name: str
identifier: optional_[str]
@dataclass(init=False)
class GetPhoneListRequest(Model):
client_id: int
name: str
@dataclass(init=False)
class GetPhoneListResponse(Model):
phone_list: list_[Phone]
response_type: str
client_id: str
class BaseService(Service):
def before_handle(self):
self.logger.info('In BASE handle')
self.response.content_type = 'application/json'
class GetPhoneDetails(BaseService):
name = 'api.user.get-phone'
class SimpleIO:
input = GetPhoneListRequest
output = GetPhoneListResponse
def handle(self):
# Enable type checking and type completion
self.logger.info('START')
request = self.request.input # typeGetPhoneListRequest
# Log details of our request
self.logger.info('Processing client `%s`', request.client_id, extra={'cid': self.cid})
# Build our response now - in a full service this information
# would be read from an exteran system or database.
# Our list of phones to return
phone_list = []
# Build the fist phone ..
phone1 = Phone()
phone1.imei = '123'
phone1.owner_id = 456
phone1.owner_name = 'John Doe'
# .. the second one ..
phone2 = Phone()
phone2.imei = '789'
phone2.owner_id = 999
phone2.owner_name = 'Jane Doe'
phone2.identifier = 'JDaef4400bfsH'
# .. populate the container for phones tha we return ..
phone_list.append(phone1)
phone_list.append(phone2)
# .. build the top-level response element ..
response = GetPhoneListResponse()
response.response_type = 'RZH'
response.client_id = request.client_id
response.phone_list = phone_list
# .. and return the response to our caller
self.response.payload = response
I have created a Phone model and I have set an optional field identifier
. After editing my file I’ve had the following error
zato38 | 2022-05-13 20:20:10,989 - INFO - 3065:Dummy-581 - zato.hot-deploy.create:0 - Creating tar archive
zato38 | 2022-05-13 20:20:10,990 - INFO - 3065:Dummy-581 - zato.hot-deploy.create:0 - Creating tar archive
zato38 | 2022-05-13 20:20:11,003 - ERROR - 3065:Dummy-581 - zato.server.service.store:0 - Could not load source, file_name:`/opt/hot-deploy/services/TestPhoneNumber.py`, e:`Traceback (most recent call last):
zato38 | File "/opt/zato/3.2.0/code/zato-server/src/zato/server/service/store.py", line 1184, in import_objects_from_file
zato38 | mod_info = import_module_from_path(file_name, base_dir)
zato38 | File "/opt/zato/3.2.0/code/zato-common/src/zato/common/util/api.py", line 600, in import_module_from_path
zato38 | spec.loader.exec_module(mod)
zato38 | File "<frozen importlib._bootstrap_external>", line 848, in exec_module
zato38 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
zato38 | File "/opt/hot-deploy/services/TestPhoneNumber.py", line 4, in <module>
zato38 | from zato.common.typing_ import list_, optional_
zato38 | ImportError: cannot import name 'optional_' from 'zato.common.typing_' (/opt/zato/3.2.0/code/zato-common/src/zato/common/typing_.py)
zato38 | `
zato38 | 2022-05-13 20:20:11,082 - ERROR - 3065:Dummy-581 - zato.server.service.store:0 - Could not load source, file_name:`/opt/hot-deploy/services/TestPhoneNumber.py`, e:`Traceback (most recent call last):
zato38 | File "/opt/zato/3.2.0/code/zato-server/src/zato/server/service/store.py", line 1184, in import_objects_from_file
zato38 | mod_info = import_module_from_path(file_name, base_dir)
zato38 | File "/opt/zato/3.2.0/code/zato-common/src/zato/common/util/api.py", line 600, in import_module_from_path
zato38 | spec.loader.exec_module(mod)
zato38 | File "<frozen importlib._bootstrap_external>", line 848, in exec_module
zato38 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
zato38 | File "/opt/hot-deploy/services/TestPhoneNumber.py", line 4, in <module>
zato38 | from zato.common.typing_ import list_, optional_
zato38 | ImportError: cannot import name 'optional_' from 'zato.common.typing_' (/opt/zato/3.2.0/code/zato-common/src/zato/common/typing_.py)
zato38 | `
zato38 | 2022-05-13 20:20:11,133 - WARNING - 3065:Dummy-581 - zato.hot-deploy.create:0 - No services nor models were deployed from module `TestPhoneNumber.py`
zato38 | 2022-05-13 20:20:12,126 - INFO - 3065:Dummy-583 - zato.hot-deploy.create:0 - Creating tar archive
zato38 | 2022-05-13 20:20:12,126 - INFO - 3065:Dummy-583 - zato.hot-deploy.create:0 - Creating tar archive
Do i need to install a package before using zato common?
Thank you very much for your help