-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimple_ayon_rest_commands.py
123 lines (105 loc) · 3.63 KB
/
simple_ayon_rest_commands.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""
This was made for learning about writing custom rest commands.
However, it's recommended to use ayon_api.
"""
import os
import httpx
class SimpleAyonRestCommands:
def __init__(self, ayon_server_url, username, password):
self.ayon_server_url = ayon_server_url
self.credentials = {
"name": username,
"password":password
}
self.headers = {}
self.ayon_login()
def ayon_login(self):
req = f"{self.ayon_server_url}/api/auth/login"
response = httpx.post(
req,
json=self.credentials,
)
self.token = response.json().get("token")
self.headers["Authorization"] = f"Bearer {self.token}"
def get_projects(self):
req = f"{self.ayon_server_url}/api/projects"
response = httpx.get(
req,
headers=self.headers
)
return response.json().get("projects")
def get_bundles(self):
req = f"{self.ayon_server_url}/api/bundles"
response = httpx.get(
req,
params={
"archived": False
},
headers=self.headers
)
return response.json()
def get_addons(self):
req = f"{self.ayon_server_url}/api/addons"
response = httpx.get(
req,
headers=self.headers
)
return response.json()
def delete_addon_version(self, addon_name, addon_version):
req = f"{self.ayon_server_url}/api/addons/{addon_name}/{addon_version}"
response = httpx.delete(
req,
params={
"purge" : True
},
headers=self.headers
)
return response.json()
def upload_addon_zip_url(self, addon_url, addon_name, addon_version):
req = f"{self.ayon_server_url}/api/addons/install"
response = httpx.post(
req,
params = {
"url" : addon_url,
"addonName": addon_name,
"addonVersion" :addon_version
},
headers=self.headers
)
return response.json()
def upload_addon_zip_file(self, addon_filepath):
chunk_size = 1024 * 1024
req = f"{self.ayon_server_url}/api/addons/install"
with open(addon_filepath, "rb") as stream:
response = httpx.post(
req,
data=self.upload_chunks_iter(stream, chunk_size),
headers=self.headers
)
response.raise_for_status()
return response.json()
@staticmethod
def upload_chunks_iter(file_stream, chunk_size):
while True:
chunk = file_stream.read(chunk_size)
if not chunk:
break
yield chunk
if __name__ == "__main__":
# get ayon server credentials
username = "admin"
password = "admin"
ayon_server_url = "http://192.168.1.4:5000"
addon_path = "E:/Ynput/ayon-core/server_addon/packages/houdini-0.2.13.zip"
my_ayon = SimpleAyonRestCommands(ayon_server_url,
username,
password)
file_name = os.path.basename(addon_path).rstrip(".zip")
addon_name, addon_version = file_name.split("-", 1)
## Delete and addon by version
print("Delete addon: {}, version: {}".format(addon_name, addon_version))
my_ayon.delete_addon_version(addon_name, addon_version)
# Upload Addon from file on disk
print("Upload addon: {}, version: {}".format(addon_name, addon_version))
res = my_ayon.upload_addon_zip_file(addon_path)
print (res)