eclinical-requester 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. eclinical_requester-1.0.0/LICENSE +19 -0
  2. eclinical_requester-1.0.0/MANIFEST.in +3 -0
  3. eclinical_requester-1.0.0/PKG-INFO +19 -0
  4. eclinical_requester-1.0.0/README.md +1 -0
  5. eclinical_requester-1.0.0/setup.cfg +4 -0
  6. eclinical_requester-1.0.0/setup.py +47 -0
  7. eclinical_requester-1.0.0/src/api_requester/__init__.py +9 -0
  8. eclinical_requester-1.0.0/src/api_requester/core/admin/api/auth_api.py +34 -0
  9. eclinical_requester-1.0.0/src/api_requester/core/admin/api/user_on_board_application_api.py +31 -0
  10. eclinical_requester-1.0.0/src/api_requester/core/admin/service/auth_service.py +34 -0
  11. eclinical_requester-1.0.0/src/api_requester/core/admin/service/impl/system_env_service_impl.py +39 -0
  12. eclinical_requester-1.0.0/src/api_requester/core/admin/service/impl/user_on_board_application_service_impl.py +23 -0
  13. eclinical_requester-1.0.0/src/api_requester/core/admin/service/user_on_board_application_service.py +35 -0
  14. eclinical_requester-1.0.0/src/api_requester/core/call_api.py +64 -0
  15. eclinical_requester-1.0.0/src/api_requester/core/common/api/system_env_api.py +24 -0
  16. eclinical_requester-1.0.0/src/api_requester/core/common/service/system_env_service.py +27 -0
  17. eclinical_requester-1.0.0/src/api_requester/docs/application.yaml +46 -0
  18. eclinical_requester-1.0.0/src/api_requester/dto/admin/cross_user_user_on_board_dto.py +20 -0
  19. eclinical_requester-1.0.0/src/api_requester/dto/admin/jwt_authentication_request.py +20 -0
  20. eclinical_requester-1.0.0/src/api_requester/dto/admin/user_on_board_dto.py +29 -0
  21. eclinical_requester-1.0.0/src/api_requester/dto/base_dto.py +167 -0
  22. eclinical_requester-1.0.0/src/api_requester/dto/biz_base.py +31 -0
  23. eclinical_requester-1.0.0/src/api_requester/dto/user.py +39 -0
  24. eclinical_requester-1.0.0/src/api_requester/http/app_url.py +31 -0
  25. eclinical_requester-1.0.0/src/api_requester/http/authorize.py +156 -0
  26. eclinical_requester-1.0.0/src/api_requester/http/eclinical_requests.py +264 -0
  27. eclinical_requester-1.0.0/src/api_requester/http/exceptions.py +72 -0
  28. eclinical_requester-1.0.0/src/api_requester/http/gateway.py +105 -0
  29. eclinical_requester-1.0.0/src/api_requester/http/sample_headers.py +23 -0
  30. eclinical_requester-1.0.0/src/api_requester/http/token_manager.py +30 -0
  31. eclinical_requester-1.0.0/src/api_requester/utils/constant.py +108 -0
  32. eclinical_requester-1.0.0/src/api_requester/utils/json_utils.py +83 -0
  33. eclinical_requester-1.0.0/src/api_requester/utils/lib.py +456 -0
  34. eclinical_requester-1.0.0/src/api_requester/utils/log.py +91 -0
  35. eclinical_requester-1.0.0/src/api_requester/utils/path.py +21 -0
  36. eclinical_requester-1.0.0/src/api_requester/utils/placeholder_replacer.py +22 -0
  37. eclinical_requester-1.0.0/src/api_requester/utils/read_file.py +94 -0
  38. eclinical_requester-1.0.0/src/api_requester/utils/rsa.py +36 -0
  39. eclinical_requester-1.0.0/src/api_requester/utils/time_utils.py +27 -0
  40. eclinical_requester-1.0.0/src/eclinical_requester.egg-info/PKG-INFO +19 -0
  41. eclinical_requester-1.0.0/src/eclinical_requester.egg-info/SOURCES.txt +42 -0
  42. eclinical_requester-1.0.0/src/eclinical_requester.egg-info/dependency_links.txt +1 -0
  43. eclinical_requester-1.0.0/src/eclinical_requester.egg-info/requires.txt +7 -0
  44. eclinical_requester-1.0.0/src/eclinical_requester.egg-info/top_level.txt +1 -0
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2018 The Python Packaging Authority
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ global-exclude __pycache__
2
+ recursive-include src *.yaml *.py
3
+ exclude *.log
@@ -0,0 +1,19 @@
1
+ Metadata-Version: 2.1
2
+ Name: eclinical_requester
3
+ Version: 1.0.0
4
+ Summary: edetek api requester
5
+ Home-page: http://example.com
6
+ Author: xiaodong.li
7
+ Author-email:
8
+ Classifier: Programming Language :: Python :: 3.9
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: lxml>=5.3.0
12
+ Requires-Dist: requests>=2.32.3
13
+ Requires-Dist: PyYAML>=6.0.2
14
+ Requires-Dist: requests-toolbelt>=1.0.0
15
+ Requires-Dist: python-dateutil>=2.9.0.post0
16
+ Requires-Dist: numpy>=2.0.2
17
+ Requires-Dist: pycryptodome>=3.21.0
18
+
19
+ api_requester
@@ -0,0 +1 @@
1
+ api_requester
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,47 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 1/8/2025 3:04 PM
6
+ @Description: Description
7
+ @File: setup.py
8
+ """
9
+
10
+ import re
11
+
12
+ import setuptools
13
+ from setuptools import find_packages
14
+
15
+ version = ""
16
+ with open('src/api_requester/__init__.py', 'r') as fd:
17
+ version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]',
18
+ fd.read(), re.MULTILINE).group(1)
19
+
20
+ with open("README.md", "r") as fh:
21
+ long_description = fh.read()
22
+
23
+ setuptools.setup(
24
+ name="eclinical_requester",
25
+ version=version,
26
+ author="xiaodong.li",
27
+ author_email="",
28
+ description="edetek api requester",
29
+ long_description=long_description,
30
+ long_description_content_type="text/markdown",
31
+ url="http://example.com",
32
+ install_requires=[
33
+ 'lxml>=5.3.0',
34
+ 'requests>=2.32.3',
35
+ 'PyYAML>=6.0.2',
36
+ 'requests-toolbelt>=1.0.0',
37
+ 'python-dateutil>=2.9.0.post0',
38
+ 'numpy>=2.0.2',
39
+ 'pycryptodome>=3.21.0',
40
+ ],
41
+ packages=find_packages(where='src'),
42
+ package_dir={'': 'src'},
43
+ classifiers=[
44
+ "Programming Language :: Python :: 3.9",
45
+ ],
46
+ include_package_data=True,
47
+ )
@@ -0,0 +1,9 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 1/8/2025 3:52 PM
6
+ @Description: Description
7
+ @File: __init__.py.py
8
+ """
9
+ __version__ = "1.0.0"
@@ -0,0 +1,34 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/04/26 19:01
6
+ @Description: Description
7
+ @File: auth_api.py
8
+ """
9
+ from api_requester.http.eclinical_requests import *
10
+
11
+
12
+ class AdminAuthApi:
13
+ """
14
+ The AdminAuthApi was generated by Generator from the AuthController.java file.
15
+ """
16
+
17
+ @post('/auth')
18
+ def create_authentication_token_api(self, *args, **kwargs): ...
19
+
20
+ @get('/refresh')
21
+ def refresh_and_get_authentication_token_api(self, *args, **kwargs): ...
22
+
23
+ @get('/auth/logout')
24
+ def logout_api(self, *args, **kwargs): ...
25
+
26
+ @get('/auth/all/logout')
27
+ def logout_all_api(self, *args, **kwargs): ...
28
+
29
+ @get('/me')
30
+ def me_api(self, *args, **kwargs): ...
31
+
32
+ @post('/auth/sso/token')
33
+ def auth_sso_token_api(self, *args, **kwargs): ...
34
+
@@ -0,0 +1,31 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/04/24 20:45
6
+ @Description: Description
7
+ @File: user_on_board_application_api.py
8
+ """
9
+ from api_requester.http.eclinical_requests import *
10
+
11
+
12
+ class AdminUserOnBoardApplicationApi:
13
+ """
14
+ The AdminUserOnBoardApplicationApi was generated by Generator from the UserOnBoardApplicationController.java file.
15
+ """
16
+
17
+ @get('/user/onboard/company')
18
+ def get_company_list_api(self, *args, **kwargs): ...
19
+
20
+ @get('/user/onboard/applications')
21
+ def get_user_onboard_application_list_api(self, *args, **kwargs): ...
22
+
23
+ @post('/user/onboard')
24
+ def on_board_api(self, *args, **kwargs): ...
25
+
26
+ @get('/user/entry/portal')
27
+ def entry_portal_api(self, *args, **kwargs): ...
28
+
29
+ @post('/user/entry/portal')
30
+ def login_portal_api(self, *args, **kwargs): ...
31
+
@@ -0,0 +1,34 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/09/06 14:40
6
+ @Description: Description
7
+ @File: auth_service.py
8
+ """
9
+ from api_requester.core.admin.api.auth_api import AdminAuthApi
10
+ from api_requester.dto.admin.jwt_authentication_request import JwtAuthenticationRequest
11
+
12
+
13
+ class AdminAuthService(AdminAuthApi):
14
+ """
15
+ The AdminAuthService was generated by Generator from the AuthController.java file.
16
+ """
17
+
18
+ def __init__(self):
19
+ AdminAuthApi.__init__(self)
20
+
21
+ def create_authentication_token(self, authentication_request: JwtAuthenticationRequest = None):
22
+ return self.create_authentication_token_api(json=authentication_request)
23
+
24
+ def refresh_and_get_authentication_token(self):
25
+ return self.refresh_and_get_authentication_token_api()
26
+
27
+ def logout(self):
28
+ return self.logout_api()
29
+
30
+ def logout_all(self, login_name: str = None):
31
+ return self.logout_all_api(params=dict(loginName=login_name))
32
+
33
+ def me(self):
34
+ return self.me_api()
@@ -0,0 +1,39 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 4/29/2024 2:41 PM
6
+ @Description: Description
7
+ @File: system_env_service_impl.py
8
+ """
9
+ from api_requester.core.common.service.system_env_service import CommonSystemEnvService
10
+ from api_requester.http.token_manager import apply_token_to_headers
11
+ from api_requester.utils.log import Logger
12
+
13
+
14
+ class CommonSystemEnvServiceImpl(CommonSystemEnvService):
15
+ """
16
+ CommonSystemEnvServiceImpl
17
+ """
18
+
19
+ def __init__(self):
20
+ CommonSystemEnvService.__init__(self)
21
+
22
+ def switch_role(self, role, env=None):
23
+ payload = self.get_current_system_env()
24
+ if payload.get("role").get("code") == role or (env is not None and payload.get("env").get("name") == env):
25
+ return
26
+ items = self.sponsor_env_list()
27
+ if not items:
28
+ return
29
+ for item in items:
30
+ if item.get("defaultEnv"):
31
+ pass
32
+ if env is None and item.get("defaultEnv") or item.get("name") == env:
33
+ onboard_role_list = item.get("onboardRoleList")
34
+ onboard_role = next((role_dto for role_dto in onboard_role_list if role_dto.get("name") == role), None)
35
+ if onboard_role:
36
+ self.switch_env(env_id=item.get("id"), role_id=onboard_role.get("id"))
37
+ apply_token_to_headers(self)
38
+ Logger().info(f"The user switches the {role} role successfully.")
39
+ return
@@ -0,0 +1,23 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/03/19 13:55
6
+ @Description: Description
7
+ @File: user_on_board_application_service_impl.py
8
+ """
9
+ from api_requester.core.admin.service.user_on_board_application_service import AdminUserOnBoardApplicationService
10
+ from api_requester.utils.lib import get_val_from_list
11
+
12
+
13
+ class AdminUserOnBoardApplicationServiceImpl(AdminUserOnBoardApplicationService):
14
+ """
15
+ AdminUserOnBoardApplicationServiceImpl
16
+ """
17
+
18
+ def __init__(self):
19
+ AdminUserOnBoardApplicationService.__init__(self)
20
+
21
+ @get_val_from_list()
22
+ def get_company_id(self, name=None):
23
+ return self.get_company_list()
@@ -0,0 +1,35 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/09/06 14:41
6
+ @Description: Description
7
+ @File: user_on_board_application_service.py
8
+ """
9
+ from api_requester.core.admin.api.user_on_board_application_api import AdminUserOnBoardApplicationApi
10
+ from api_requester.dto.admin.cross_user_user_on_board_dto import CrossUserUserOnBoardDto
11
+ from api_requester.dto.admin.user_on_board_dto import UserOnBoardDto
12
+
13
+
14
+ class AdminUserOnBoardApplicationService(AdminUserOnBoardApplicationApi):
15
+ """
16
+ The AdminUserOnBoardApplicationService was generated by Generator from the UserOnBoardApplicationController.java file.
17
+ """
18
+
19
+ def __init__(self):
20
+ AdminUserOnBoardApplicationApi.__init__(self)
21
+
22
+ def get_company_list(self):
23
+ return self.get_company_list_api()
24
+
25
+ def get_user_onboard_application_list(self, company_id: int = None):
26
+ return self.get_user_onboard_application_list_api(params=dict(companyId=company_id))
27
+
28
+ def on_board(self, user_on_board_dto: UserOnBoardDto = None):
29
+ return self.on_board_api(json=user_on_board_dto)
30
+
31
+ def entry_portal(self):
32
+ return self.entry_portal_api()
33
+
34
+ def login_portal(self, cross_user_user_on_board_dto: CrossUserUserOnBoardDto = None):
35
+ return self.login_portal_api(json=cross_user_user_on_board_dto)
@@ -0,0 +1,64 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 12/27/2024 2:59 PM
6
+ @Description: Description
7
+ @File: call_api.py
8
+ """
9
+ from requests import request
10
+
11
+ from api_requester.dto.admin.user_on_board_dto import UserOnBoardDto
12
+ from api_requester.dto.biz_base import BizBase
13
+ from api_requester.dto.user import EClinicalUser
14
+ from api_requester.http.app_url import AppUrl
15
+ from api_requester.http.authorize import Authorize
16
+ from api_requester.utils.placeholder_replacer import PlaceholderReplacer
17
+
18
+
19
+ class CallApi(BizBase):
20
+
21
+ def __init__(self, username=None, password=None, sponsor=None, study=None, test_env=None, app_env=None, app=None,
22
+ company=None, role=None, external=False):
23
+ u = EClinicalUser(
24
+ username=username,
25
+ password=password,
26
+ sponsor=sponsor,
27
+ study=study,
28
+ test_env=test_env,
29
+ app_env=app_env,
30
+ app=app,
31
+ company=company,
32
+ role=role,
33
+ external=external
34
+ )
35
+ super().__init__(u)
36
+ self.headers = dict()
37
+ self.user_onboard_dto: UserOnBoardDto = UserOnBoardDto(-1)
38
+
39
+ def login(self):
40
+ auth = Authorize(self.user)
41
+ auth.login()
42
+ self.headers = auth.headers
43
+ self.time_mills = auth.time_mills
44
+ self.user_onboard_dto = auth.user_onboard_dto
45
+ return self
46
+
47
+ def run(self, method, api, **kwargs):
48
+ self.login()
49
+ replacer = PlaceholderReplacer({
50
+ "Sponsor ID": self.user_onboard_dto.sponsorId,
51
+ "Study ID": self.user_onboard_dto.studyId,
52
+ "Env ID": self.user_onboard_dto.envId,
53
+ "Sponsor Name": self.user.sponsor,
54
+ "Study Name": self.user.study,
55
+ "Lifecycle": self.user.app_env,
56
+ })
57
+ url = replacer.replace(api)
58
+ for key, value in kwargs.items():
59
+ kwargs[key] = replacer.replace(value)
60
+ if self.user.external is False:
61
+ url = AppUrl(self.user.app, self.user.test_env).which_url(self.user.app)(url)
62
+ else:
63
+ url = AppUrl(self.user.app, self.user.test_env).external_url(url)
64
+ request(method, url, headers=self.headers, **kwargs)
@@ -0,0 +1,24 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/11/01 17:01
6
+ @Description: Description
7
+ @File: system_env_api.py
8
+ """
9
+ from api_requester.http.eclinical_requests import *
10
+
11
+
12
+ class CommonSystemEnvApi:
13
+ """
14
+ The CommonSystemEnvApi was generated by Generator from the SystemEnvController.java file.
15
+ """
16
+
17
+ @get('/system/env')
18
+ def get_current_system_env_api(self, *args, **kwargs): ...
19
+
20
+ @get('/system/env/list')
21
+ def sponsor_env_list_api(self, *args, **kwargs): ...
22
+
23
+ @put('/system/env/{envId}/role/{roleId}')
24
+ def switch_env_api(self, *args, **kwargs): ...
@@ -0,0 +1,27 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/11/01 17:01
6
+ @Description: Description
7
+ @File: system_env_service.py
8
+ """
9
+ from api_requester.core.common.api.system_env_api import CommonSystemEnvApi
10
+
11
+
12
+ class CommonSystemEnvService(CommonSystemEnvApi):
13
+ """
14
+ The CommonSystemEnvService was generated by Generator from the SystemEnvController.java file.
15
+ """
16
+
17
+ def __init__(self):
18
+ CommonSystemEnvApi.__init__(self)
19
+
20
+ def get_current_system_env(self):
21
+ return self.get_current_system_env_api()
22
+
23
+ def sponsor_env_list(self):
24
+ return self.sponsor_env_list_api()
25
+
26
+ def switch_env(self, env_id: int, role_id: int):
27
+ return self.switch_env_api(url_kwargs=dict(envId=env_id, roleId=role_id))
@@ -0,0 +1,46 @@
1
+ serverUrl:
2
+ dev03: http://dev-03-app-01.chengdudev.edetekapps.cn
3
+ dev04: http://dev-04-app-01.chengdudev.edetekapps.cn
4
+ dev01: http://dev-01-app-01.chengdudev.edetekapps.cn
5
+ test01: http://test-01-app-01.chengdudev.edetekapps.cn
6
+ us.dev: https://ec.eclinical-dev.edetekapps.com
7
+ us.demo: https://ec4.ec4demo.edetekapps.com
8
+
9
+ admin:
10
+ urlPrefix: /api/admin
11
+ blacklist:
12
+ - request /administration/coding/**
13
+ - request /monitor/{tokenBase64}/api/{monitorServerBase64}/**
14
+ filters:
15
+ - RewritePath=/api/external/admin(?P<segment>/?.*),/admin/api/external\g<segment>
16
+
17
+ design:
18
+ urlPrefix: /api/design
19
+
20
+ ctms:
21
+ urlPrefix: /api/ctms
22
+ filters:
23
+ - RewritePath=/api/external/facade(?P<segment>/?.*),/api/external\g<segment>
24
+
25
+ etmf:
26
+ urlPrefix: /api/etmf
27
+
28
+ edc:
29
+ urlPrefix: /api/edc
30
+ filters:
31
+ - RewritePath=/api/external/facade(?P<segment>/?.*),/api/external/edc\g<segment>
32
+
33
+ iwrs:
34
+ urlPrefix: /api/iwrs
35
+
36
+ external:
37
+ urlPrefix: /api/external
38
+
39
+ coding:
40
+ urlPrefix: /api/coding
41
+
42
+ imaging:
43
+ urlPrefix: /api/imaging
44
+
45
+ pv:
46
+ urlPrefix: /api/pv
@@ -0,0 +1,20 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/04/24 20:45
6
+ @Description: Description
7
+ @File: cross_user_user_on_board_dto.py
8
+ """
9
+ from dataclasses import dataclass
10
+
11
+ from api_requester.dto.base_dto import BaseDto
12
+
13
+
14
+ @dataclass
15
+ class CrossUserUserOnBoardDto(BaseDto):
16
+ """
17
+ The CrossUserUserOnBoardDto was generated by Generator from the CrossUserUserOnBoardDto.java file.
18
+ """
19
+ companyId: int = None
20
+ redirectUrl: str = None
@@ -0,0 +1,20 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/04/24 20:45
6
+ @Description: Description
7
+ @File: jwt_authentication_request.py
8
+ """
9
+ from dataclasses import dataclass
10
+
11
+ from api_requester.dto.base_dto import BaseDto
12
+
13
+
14
+ @dataclass
15
+ class JwtAuthenticationRequest(BaseDto):
16
+ """
17
+ The JwtAuthenticationRequest was generated by Generator from the JwtAuthenticationRequest.java file.
18
+ """
19
+ userName: str
20
+ password: str
@@ -0,0 +1,29 @@
1
+ # !/usr/bin/python3
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ @Author: xiaodong.li
5
+ @Time: 2024/04/24 20:45
6
+ @Description: Description
7
+ @File: user_on_board_dto.py
8
+ """
9
+ from dataclasses import dataclass
10
+
11
+ from api_requester.dto.base_dto import BaseDto
12
+
13
+
14
+ @dataclass
15
+ class UserOnBoardDto(BaseDto):
16
+ """
17
+ The UserOnBoardDto was generated by Generator from the UserOnBoardDto.java file.
18
+ """
19
+ applicationId: int
20
+ sponsorId: int = None
21
+ studyId: int = None
22
+ envId: int = None
23
+ workForCompanyId: int = None
24
+ userId: int = None
25
+ userType: str = None
26
+ roleId: int = None
27
+ token: str = None
28
+ permissionId: int = None
29
+ companyLevelLogin: bool = False