Skip to content

Commit 9fc7110

Browse files
authored
Merge pull request #315 from roboflow/dedicated-deployment-update-args
Dedicated deployment: update args; add roboflow --version and whoami
2 parents 86cd5bf + 2099a94 commit 9fc7110

File tree

4 files changed

+132
-61
lines changed

4 files changed

+132
-61
lines changed

roboflow/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from roboflow.models import CLIPModel, GazeModel # noqa: F401
1616
from roboflow.util.general import write_line
1717

18-
__version__ = "1.1.40"
18+
__version__ = "1.1.41"
1919

2020

2121
def check_key(api_key, model, notebook, num_retries=0):

roboflow/adapters/deploymentapi.py

Lines changed: 30 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,55 +9,49 @@ class DeploymentApiError(Exception):
99

1010
def add_deployment(api_key, machine_type, duration, delete_on_expiration, deployment_name, inference_version):
1111
url = f"{DEDICATED_DEPLOYMENT_URL}/add"
12-
response = requests.post(
13-
url,
14-
json={
15-
"api_key": api_key,
16-
# "security_level": security_level,
17-
"machine_type": machine_type,
18-
"duration": duration,
19-
"delete_on_expiration": delete_on_expiration,
20-
"deployment_name": deployment_name,
21-
"inference_version": inference_version,
22-
},
23-
)
12+
params = {
13+
"api_key": api_key,
14+
# "security_level": security_level,
15+
"duration": duration,
16+
"delete_on_expiration": delete_on_expiration,
17+
"deployment_name": deployment_name,
18+
"inference_version": inference_version,
19+
}
20+
if machine_type is not None:
21+
params["machine_type"] = machine_type
22+
response = requests.post(url, json=params)
2423
if response.status_code != 200:
25-
raise DeploymentApiError(f"{response.status_code}: {response.text}")
26-
result = response.json()
27-
return result
24+
return response.status_code, response.text
25+
return response.status_code, response.json()
2826

2927

30-
def get_deployment(api_key, deployment_id):
31-
url = f"{DEDICATED_DEPLOYMENT_URL}/get"
32-
response = requests.get(url, json={"api_key": api_key, "deployment_id": deployment_id})
28+
def get_deployment(api_key, deployment_name):
29+
url = f"{DEDICATED_DEPLOYMENT_URL}/get?api_key={api_key}&deployment_name={deployment_name}"
30+
response = requests.get(url)
3331
if response.status_code != 200:
34-
raise DeploymentApiError(f"{response.status_code}: {response.text}")
35-
result = response.json()
36-
return result
32+
return response.status_code, response.text
33+
return response.status_code, response.json()
3734

3835

3936
def list_deployment(api_key):
40-
url = f"{DEDICATED_DEPLOYMENT_URL}/list"
41-
response = requests.get(url, json={"api_key": api_key})
37+
url = f"{DEDICATED_DEPLOYMENT_URL}/list?api_key={api_key}"
38+
response = requests.get(url)
4239
if response.status_code != 200:
43-
raise DeploymentApiError(f"{response.status_code}: {response.text}")
44-
result = response.json()
45-
return result
40+
return response.status_code, response.text
41+
return response.status_code, response.json()
4642

4743

48-
def delete_deployment(api_key, deployment_id):
44+
def delete_deployment(api_key, deployment_name):
4945
url = f"{DEDICATED_DEPLOYMENT_URL}/delete"
50-
response = requests.post(url, json={"api_key": api_key, "deployment_id": deployment_id})
46+
response = requests.post(url, json={"api_key": api_key, "deployment_name": deployment_name})
5147
if response.status_code != 200:
52-
raise DeploymentApiError(f"{response.status_code}: {response.text}")
53-
result = response.json()
54-
return result
48+
return response.status_code, response.text
49+
return response.status_code, response.json()
5550

5651

5752
def list_machine_types(api_key):
58-
url = f"{DEDICATED_DEPLOYMENT_URL}/machine_types"
59-
response = requests.get(url, json={"api_key": api_key})
53+
url = f"{DEDICATED_DEPLOYMENT_URL}/machine_types?api_key={api_key}"
54+
response = requests.get(url)
6055
if response.status_code != 200:
61-
raise DeploymentApiError(f"{response.status_code}: {response.text}")
62-
result = response.json()
63-
return result
56+
return response.status_code, response.text
57+
return response.status_code, response.json()

roboflow/deployment.py

Lines changed: 79 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import json
2+
import time
3+
from datetime import datetime
24

35
from roboflow.adapters import deploymentapi
46
from roboflow.config import load_roboflow_api_key
@@ -19,78 +21,131 @@ def add_deployment_parser(subparsers):
1921
deployment_delete_parser = deployment_subparsers.add_parser("delete", help="delete a dedicated deployment")
2022

2123
deployment_machine_type_parser.set_defaults(func=list_machine_types)
22-
deployment_machine_type_parser.add_argument("-a", dest="api_key", help="api key")
24+
deployment_machine_type_parser.add_argument("-a", "--api_key", help="api key")
2325

2426
deployment_add_parser.set_defaults(func=add_deployment)
25-
deployment_add_parser.add_argument("-a", dest="api_key", help="api key")
27+
deployment_add_parser.add_argument("-a", "--api_key", help="api key")
28+
deployment_add_parser.add_argument(
29+
"deployment_name",
30+
help="deployment name, must contain 5-15 lowercase characters, first character must be a letter",
31+
)
2632
# deployment_add_parser.add_argument(
27-
# "-s", dest="security_level", help="security level (protected)", default="protected"
33+
# "-s", "--security_level", help="security level (protected)", default="protected"
2834
# )
2935
deployment_add_parser.add_argument(
30-
"-m", dest="machine_type", help="machine type, run `roboflow deployment machine_type` to see available options"
36+
"-m", "--machine_type", help="machine type, run `roboflow deployment machine_type` to see available options"
3137
)
3238
deployment_add_parser.add_argument(
3339
"-t",
34-
dest="duration",
40+
"--duration",
3541
help="duration, how long you want to keep the deployment (unit: hour, default: 3)",
3642
type=float,
3743
default=3,
3844
)
3945
deployment_add_parser.add_argument(
40-
"-e", dest="delete_on_expiration", help="delete when expired (default: True)", type=bool, default=True
46+
"-e", "--no_delete_on_expiration", help="keep when expired (default: False)", action="store_true"
4147
)
4248
deployment_add_parser.add_argument(
43-
"-n", dest="deployment_name", help="deployment name, must contain 3-10 lowercase characters"
49+
"-v",
50+
"--inference_version",
51+
help="inference server version (default: latest)",
52+
default="latest",
4453
)
4554
deployment_add_parser.add_argument(
46-
"-v", dest="inference_version", help="inference server version (default: latest)", default="latest"
55+
"-w", "--wait_on_pending", help="wait if deployment is pending", action="store_true"
4756
)
4857

4958
deployment_get_parser.set_defaults(func=get_deployment)
50-
deployment_get_parser.add_argument("-a", dest="api_key", help="api key")
51-
deployment_get_parser.add_argument("-d", dest="deployment_id", help="deployment id")
59+
deployment_get_parser.add_argument("-a", "--api_key", help="api key")
60+
deployment_get_parser.add_argument("deployment_name", help="deployment name")
61+
deployment_get_parser.add_argument(
62+
"-w", "--wait_on_pending", help="wait if deployment is pending", action="store_true"
63+
)
5264

5365
deployment_list_parser.set_defaults(func=list_deployment)
54-
deployment_list_parser.add_argument("-a", dest="api_key", help="api key")
66+
deployment_list_parser.add_argument("-a", "--api_key", help="api key")
5567

5668
deployment_delete_parser.set_defaults(func=delete_deployment)
57-
deployment_delete_parser.add_argument("-a", dest="api_key", help="api key")
58-
deployment_delete_parser.add_argument("-d", dest="deployment_id", help="deployment id")
69+
deployment_delete_parser.add_argument("-a", "--api_key", help="api key")
70+
deployment_delete_parser.add_argument("deployment_name", help="deployment name")
5971

6072

6173
def list_machine_types(args):
6274
api_key = args.api_key or load_roboflow_api_key(None)
63-
ret_json = deploymentapi.list_machine_types(api_key)
64-
print(json.dumps(ret_json, indent=2))
75+
if api_key is None:
76+
print("Please provide an api key")
77+
return
78+
status_code, msg = deploymentapi.list_machine_types(api_key)
79+
if status_code != 200:
80+
print(f"{status_code}: {msg}")
81+
return
82+
print(json.dumps(msg, indent=2))
6583

6684

6785
def add_deployment(args):
6886
api_key = args.api_key or load_roboflow_api_key(None)
69-
ret_json = deploymentapi.add_deployment(
87+
if api_key is None:
88+
print("Please provide an api key")
89+
return
90+
status_code, msg = deploymentapi.add_deployment(
7091
api_key,
7192
# args.security_level,
7293
args.machine_type,
7394
args.duration,
74-
args.delete_on_expiration,
95+
(not args.no_delete_on_expiration),
7596
args.deployment_name,
7697
args.inference_version,
7798
)
78-
print(json.dumps(ret_json, indent=2))
99+
100+
if status_code != 200:
101+
print(f"{status_code}: {msg}")
102+
return
103+
else:
104+
print(f"Deployment {args.deployment_name} created successfully")
105+
print(json.dumps(msg, indent=2))
106+
107+
if args.wait_on_pending:
108+
get_deployment(args)
79109

80110

81111
def get_deployment(args):
82112
api_key = args.api_key or load_roboflow_api_key(None)
83-
ret_json = deploymentapi.get_deployment(api_key, args.deployment_id)
84-
print(json.dumps(ret_json, indent=2))
113+
if api_key is None:
114+
print("Please provide an api key")
115+
return
116+
while True:
117+
status_code, msg = deploymentapi.get_deployment(api_key, args.deployment_name)
118+
if status_code != 200:
119+
print(f"{status_code}: {msg}")
120+
return
121+
122+
if (not args.wait_on_pending) or msg["status"] != "pending":
123+
print(json.dumps(msg, indent=2))
124+
break
125+
126+
print(f'{datetime.now().strftime("%H:%M:%S")} Waiting for deployment {args.deployment_name} to be ready...\n')
127+
time.sleep(30)
85128

86129

87130
def list_deployment(args):
88131
api_key = args.api_key or load_roboflow_api_key(None)
89-
ret_json = deploymentapi.list_deployment(api_key)
90-
print(json.dumps(ret_json, indent=2))
132+
if api_key is None:
133+
print("Please provide an api key")
134+
return
135+
status_code, msg = deploymentapi.list_deployment(api_key)
136+
if status_code != 200:
137+
print(f"{status_code}: {msg}")
138+
return
139+
print(json.dumps(msg, indent=2))
91140

92141

93142
def delete_deployment(args):
94143
api_key = args.api_key or load_roboflow_api_key(None)
95-
ret_json = deploymentapi.delete_deployment(api_key, args.deployment_id)
96-
print(json.dumps(ret_json, indent=2))
144+
if api_key is None:
145+
print("Please provide an api key")
146+
return
147+
status_code, msg = deploymentapi.delete_deployment(api_key, args.deployment_name)
148+
if status_code != 200:
149+
print(f"{status_code}: {msg}")
150+
return
151+
print(json.dumps(msg, indent=2))

roboflow/roboflowpy.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,32 @@ def _argparser():
194194
_add_get_workspace_project_version_parser(subparsers)
195195
_add_run_video_inference_api_parser(subparsers)
196196
deployment.add_deployment_parser(subparsers)
197+
_add_whoami_parser(subparsers)
198+
199+
parser.add_argument("-v", "--version", help="show version info", action="store_true")
200+
parser.set_defaults(func=show_version)
197201

198202
return parser
199203

200204

205+
def show_version(args):
206+
print(roboflow.__version__)
207+
208+
209+
def show_whoami(args):
210+
RF_WORKSPACES = get_conditional_configuration_variable("workspaces", default={})
211+
workspaces_by_url = {w["url"]: w for w in RF_WORKSPACES.values()}
212+
default_workspace_url = get_conditional_configuration_variable("RF_WORKSPACE", default=None)
213+
default_workspace = workspaces_by_url.get(default_workspace_url, None)
214+
default_workspace["apiKey"] = "**********"
215+
print(json.dumps(default_workspace, indent=2))
216+
217+
218+
def _add_whoami_parser(subparsers):
219+
download_parser = subparsers.add_parser("whoami", help="show current user info")
220+
download_parser.set_defaults(func=show_whoami)
221+
222+
201223
def _add_download_parser(subparsers):
202224
download_parser = subparsers.add_parser(
203225
"download",

0 commit comments

Comments
 (0)