openbayes-cli 0.4.5__py3-none-any.whl

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 (55) hide show
  1. bayes/__init__.py +0 -0
  2. bayes/client/__init__.py +0 -0
  3. bayes/client/base.py +20 -0
  4. bayes/client/dataset_version_client.py +91 -0
  5. bayes/client/gear_client.py +468 -0
  6. bayes/client/job_run_client.py +504 -0
  7. bayes/client/job_upload_client.py +114 -0
  8. bayes/client/org_client.py +67 -0
  9. bayes/client/resource_client.py +108 -0
  10. bayes/client/runtime_client.py +32 -0
  11. bayes/client/ssh_client.py +66 -0
  12. bayes/client/status_client.py +14 -0
  13. bayes/client/user_client.py +58 -0
  14. bayes/commands/__init__.py +0 -0
  15. bayes/commands/gear.py +691 -0
  16. bayes/commands/org.py +100 -0
  17. bayes/commands/ssh.py +70 -0
  18. bayes/error.py +9 -0
  19. bayes/model/__init__.py +0 -0
  20. bayes/model/dataset_version.py +14 -0
  21. bayes/model/file/__init__.py +0 -0
  22. bayes/model/file/data_bindings.py +42 -0
  23. bayes/model/file/openbayes_data.py +133 -0
  24. bayes/model/file/openbayes_gear.py +72 -0
  25. bayes/model/file/openbayes_ignore.py +75 -0
  26. bayes/model/file/openbayes_yaml.py +180 -0
  27. bayes/model/file/settings.py +157 -0
  28. bayes/model/party.py +35 -0
  29. bayes/model/resource.py +147 -0
  30. bayes/model/runtime.py +34 -0
  31. bayes/root.py +170 -0
  32. bayes/templates/openbayes_zh-Hans.yaml +134 -0
  33. bayes/templates/openbayesignore.yaml +3 -0
  34. bayes/usercases/__init__.py +0 -0
  35. bayes/usercases/archive_usecase.py +79 -0
  36. bayes/usercases/auth_usecase.py +35 -0
  37. bayes/usercases/dataset_version_usecase.py +61 -0
  38. bayes/usercases/disk_usecase.py +98 -0
  39. bayes/usercases/gear_download_usecese.py +113 -0
  40. bayes/usercases/gear_logs_usecase.py +44 -0
  41. bayes/usercases/gear_open_usecase.py +16 -0
  42. bayes/usercases/gear_run_usecase.py +123 -0
  43. bayes/usercases/gear_upload_usecase.py +248 -0
  44. bayes/usercases/gear_usecase.py +301 -0
  45. bayes/usercases/openbayes_data_usecase.py +73 -0
  46. bayes/usercases/org_usecase.py +85 -0
  47. bayes/usercases/resource_usecase.py +74 -0
  48. bayes/usercases/runtime_usecase.py +58 -0
  49. bayes/usercases/ssh_usecase.py +110 -0
  50. bayes/usercases/switch_usercase.py +19 -0
  51. bayes/utils.py +163 -0
  52. openbayes_cli-0.4.5.dist-info/METADATA +62 -0
  53. openbayes_cli-0.4.5.dist-info/RECORD +55 -0
  54. openbayes_cli-0.4.5.dist-info/WHEEL +4 -0
  55. openbayes_cli-0.4.5.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,108 @@
1
+ from gql.transport.exceptions import TransportQueryError
2
+
3
+ from bayes.client.base import BayesGQLClient
4
+ from bayes.error import Error
5
+ from bayes.model.resource import ResourceData, Quota, Limitations
6
+
7
+
8
+ def get_resources(client: BayesGQLClient, partyId, type, labels):
9
+ query = """
10
+ query NormalClusterResources($partyId: String, $type: [DeployType], $labels: [String]) {
11
+ normalClusterResources(partyId: $partyId, type: $type, labels: $labels) {
12
+ name
13
+ memory
14
+ type
15
+ cpu {
16
+ type
17
+ millicores
18
+ count
19
+ }
20
+ disk {
21
+ type
22
+ size
23
+ }
24
+ gpu {
25
+ verboseName
26
+ vendor
27
+ type
28
+ name
29
+ mode
30
+ memory
31
+ group
32
+ description
33
+ count
34
+ }
35
+ verboseName
36
+ gpuResource
37
+ labels
38
+ }
39
+ }
40
+ """
41
+ variables = {"partyId": partyId, "type": type, "labels": labels}
42
+ try:
43
+ response = client.exec(query, variables)
44
+ except TransportQueryError as e:
45
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
46
+
47
+ resource_data_list = response.get("normalClusterResources", [])
48
+ if resource_data_list is None or not resource_data_list:
49
+ return None
50
+
51
+ return [ResourceData(**resource_data) for resource_data in resource_data_list]
52
+
53
+
54
+ def get_resource_quota(client: BayesGQLClient, partyId):
55
+ query = """
56
+ query Quota($partyId: ID!) {
57
+ party(id: $partyId) {
58
+ quota {
59
+ computationQuota {
60
+ value {
61
+ availableMinutes
62
+ }
63
+ key
64
+ }
65
+ }
66
+ }
67
+ }
68
+ """
69
+ variables = {"partyId": partyId}
70
+ try:
71
+ response = client.exec(query, variables)
72
+ except TransportQueryError as e:
73
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
74
+
75
+ result = response.get("party", {}).get("quota", {})
76
+ if not result:
77
+ return None
78
+
79
+ return Quota(**result)
80
+
81
+
82
+ def get_resource_limitation(client: BayesGQLClient, partyId):
83
+ query = """
84
+ query Resources($partyId: ID!) {
85
+ party(id: $partyId) {
86
+ limitations {
87
+ resources {
88
+ key
89
+ value {
90
+ current
91
+ limit
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ """
98
+ variables = {"partyId": partyId}
99
+ try:
100
+ response = client.exec(query, variables)
101
+ except TransportQueryError as e:
102
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
103
+
104
+ result = response.get("party", {}).get("limitations", {})
105
+ if not result:
106
+ return None
107
+
108
+ return Limitations(**result)
@@ -0,0 +1,32 @@
1
+ from gql.transport.exceptions import TransportQueryError
2
+
3
+ from bayes.client.base import BayesGQLClient
4
+ from bayes.error import Error
5
+ from bayes.model.runtime import ClusterRuntime
6
+
7
+
8
+ def get_runtimes(client: BayesGQLClient, partyId, type, labels, runtimeType):
9
+ query = """
10
+ query NormalClusterRuntimes($partyId: String, $type: [DeployType], $labels: [String!], $runtimeType: [RuntimeType]) {
11
+ normalClusterRuntimes(partyId: $partyId, type: $type, labels: $labels, runtimeType: $runtimeType) {
12
+ framework
13
+ name
14
+ version
15
+ type
16
+ device
17
+ deprecated
18
+ labels
19
+ }
20
+ }
21
+ """
22
+ variables = {"partyId": partyId, "type": type, "labels": labels, "runtimeType": runtimeType}
23
+ try:
24
+ response = client.exec(query, variables)
25
+ except TransportQueryError as e:
26
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
27
+
28
+ runtime_data_list = response.get("normalClusterRuntimes", [])
29
+ if runtime_data_list is None or not runtime_data_list:
30
+ return None
31
+
32
+ return [ClusterRuntime(**runtime_data) for runtime_data in runtime_data_list]
@@ -0,0 +1,66 @@
1
+ import sys
2
+ from datetime import datetime
3
+
4
+ from gql.transport.exceptions import TransportQueryError
5
+ from pydantic import BaseModel
6
+
7
+ from bayes.client.base import BayesGQLClient
8
+
9
+
10
+ class SSHKey(BaseModel):
11
+ id: int
12
+ name: str
13
+ fingerprint: str
14
+ createdAt: datetime
15
+
16
+
17
+ def get_keys(client: BayesGQLClient, username: str):
18
+ query = """
19
+ query Keys($userId: String!) {
20
+ keys(userId: $userId) {
21
+ id
22
+ name
23
+ fingerprint
24
+ createdAt
25
+ }
26
+ }
27
+ """
28
+ variables = {"userId": username}
29
+ try:
30
+ response = client.exec(query, variables)
31
+ except TransportQueryError as e:
32
+ error_message = e.errors[0]['message'] if e.errors else str(e)
33
+ print(error_message, file=sys.stderr)
34
+ sys.exit(1)
35
+
36
+ keys_list = response.get("keys", [])
37
+ if keys_list is None or not keys_list:
38
+ return None
39
+
40
+ return [SSHKey(**key) for key in keys_list]
41
+
42
+
43
+ def create_key(client: BayesGQLClient, userId, name, content):
44
+ query = """
45
+ mutation CreateSSHKey($userId: String!, $name: String!, $content: String!) {
46
+ createSSHKey(userId: $userId, name: $name, content: $content) {
47
+ id
48
+ name
49
+ fingerprint
50
+ createdAt
51
+ }
52
+ }
53
+ """
54
+ variables = {"userId": userId, "name": name, "content": content}
55
+ try:
56
+ response = client.exec(query, variables)
57
+ except TransportQueryError as e:
58
+ error_message = e.errors[0]['message'] if e.errors else str(e)
59
+ print(error_message, file=sys.stderr)
60
+ sys.exit(1)
61
+
62
+ result = response.get("createSSHKey")
63
+ if result is None:
64
+ raise Exception("create SSHKey result is none")
65
+
66
+ return SSHKey(**result)
@@ -0,0 +1,14 @@
1
+ from .base import BayesGQLClient
2
+
3
+
4
+ def health_check(endpoint):
5
+ client = BayesGQLClient(endpoint, None)
6
+ query = """
7
+ query { __typename }
8
+ """
9
+
10
+ try:
11
+ response = client.exec(query)
12
+ return response is not None
13
+ except Exception as e:
14
+ return False
@@ -0,0 +1,58 @@
1
+ from gql.transport.exceptions import TransportQueryError
2
+
3
+ from .base import BayesGQLClient
4
+
5
+ from pydantic import BaseModel
6
+
7
+ from ..error import Error
8
+
9
+
10
+ class LoginModel(BaseModel):
11
+ email: str
12
+ token: str
13
+ username: str
14
+
15
+
16
+ def login(client: BayesGQLClient, username: str, password: str) -> LoginModel:
17
+ query = """
18
+ mutation Login($username: String!, $password: String!) {
19
+ login(username: $username, password: $password) {
20
+ email
21
+ token
22
+ username
23
+ }
24
+ }
25
+ """
26
+ variables = {"username": username, "password": password}
27
+ try:
28
+ response = client.exec(query, variables)
29
+ except TransportQueryError as e:
30
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
31
+
32
+ login_data = response.get("login")
33
+ if login_data is None:
34
+ raise Error("Login failed: Unexpected response format")
35
+
36
+ return LoginModel(**login_data)
37
+
38
+
39
+ def login_with_token(client: BayesGQLClient, token):
40
+ query = """
41
+ query LoginWithToken($token: String!) {
42
+ loginWithToken(token: $token) {
43
+ email
44
+ username
45
+ }
46
+ }
47
+ """
48
+ variables = {"token": token}
49
+ try:
50
+ response = client.exec(query, variables)
51
+ except TransportQueryError as e:
52
+ raise Error(e.errors[0]['message'] if e.errors else str(e))
53
+
54
+ login_data = response.get("loginWithToken")
55
+ if login_data is None:
56
+ raise Error("Login failed: Unexpected response format")
57
+
58
+ return LoginModel(token=token, **login_data)
File without changes