bizydraft 0.1.28__py3-none-any.whl → 0.1.30__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.

Potentially problematic release.


This version of bizydraft might be problematic. Click here for more details.

@@ -1,15 +1,15 @@
1
- import math
2
- import os
3
1
  import asyncio
2
+ import math
4
3
  import mimetypes
4
+ import os
5
5
  import uuid
6
6
 
7
- from aiohttp import web, ClientSession, ClientTimeout
7
+ from aiohttp import ClientSession, ClientTimeout, web
8
8
  from loguru import logger
9
9
 
10
10
  try:
11
- from server import PromptServer
12
11
  import execution
12
+ from server import PromptServer
13
13
 
14
14
  comfy_server = PromptServer.instance
15
15
  except ImportError:
bizydraft/server.py CHANGED
@@ -2,6 +2,7 @@ import os
2
2
  from typing import Union
3
3
 
4
4
  from loguru import logger
5
+
5
6
  from .workflow_io import parse_workflow_io
6
7
 
7
8
  try:
@@ -12,7 +13,7 @@ except ImportError:
12
13
  )
13
14
  exit(1)
14
15
 
15
- from .resp import OKResponse, ErrResponse, JsonResponse
16
+ from .resp import ErrResponse, JsonResponse, OKResponse
16
17
 
17
18
  _API_PREFIX = "bizyair"
18
19
  _SERVER_MODE_HC_FLAG = True
@@ -53,7 +54,6 @@ class BizyDraftServer:
53
54
  except Exception as e:
54
55
  logger.error(f"解析 request.json() 失败: {e}")
55
56
  return ErrResponse(400)
56
-
57
57
  try:
58
58
  response = parse_workflow_io(data)
59
59
  return JsonResponse(200, response)
@@ -43,7 +43,7 @@ app.registerExtension({
43
43
  // return item.url
44
44
  })
45
45
  const image_widget = this.widgets.find(w => w.name === 'image');
46
-
46
+
47
47
 
48
48
  let image_path_widget = this.widgets.find(w => w.name === 'image_path');
49
49
  if (!image_path_widget) {
@@ -64,7 +64,7 @@ app.registerExtension({
64
64
  image_widget.value = image_list[0].name
65
65
  const defaultImageUrl = decodeURIComponent(image_list[0].url);
66
66
  image_path_widget.value = defaultImageUrl;
67
-
67
+
68
68
  previewImage(node, defaultImageUrl)
69
69
  }
70
70
  image_widget.callback = function(e) {
@@ -74,7 +74,7 @@ app.registerExtension({
74
74
  }
75
75
  return true
76
76
  }
77
-
77
+
78
78
  await getData()
79
79
 
80
80
 
@@ -90,7 +90,7 @@ app.registerExtension({
90
90
  image_widget.value = temp.name
91
91
  image_widget.options.values = image_list.map(item => item.name)
92
92
  previewImage(node, temp.url)
93
-
93
+
94
94
  requestAnimationFrame(() => {
95
95
  previewImage(node, temp.url)
96
96
  })
@@ -123,7 +123,7 @@ function previewImage(node, image_url) {
123
123
  } else {
124
124
  console.warn('[BizyAir] 无法访问graph对象进行重绘');
125
125
  }
126
-
126
+
127
127
  console.log('[BizyAir] 图片预览加载成功');
128
128
  };
129
129
  img.onerror = function(err) {
@@ -10,28 +10,28 @@ app.registerExtension({
10
10
  socket: null,
11
11
  isConnecting: false,
12
12
  taskRunning: false,
13
-
13
+
14
14
  // 心跳检测
15
15
  pingInterval: 5000, // 5秒发送一次心跳
16
16
  pingTimer: null,
17
17
  pingTimeout: 3000,
18
- pongReceived: false,
18
+ pongReceived: false,
19
19
  pingTimeoutTimer: null, // ping超时计时器
20
-
20
+
21
21
  /**
22
22
  * 开始心跳检测
23
23
  */
24
24
  startPing() {
25
25
  this.stopPing();
26
-
26
+
27
27
  if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
28
28
  return;
29
29
  }
30
-
30
+
31
31
  // 立即发送一次ping消息
32
32
  this.pongReceived = false;
33
33
  this.socket.send('ping');
34
-
34
+
35
35
  // 设置ping超时检测
36
36
  this.pingTimeoutTimer = setTimeout(() => {
37
37
  if (!this.pongReceived) {
@@ -39,12 +39,12 @@ app.registerExtension({
39
39
  this.reconnect();
40
40
  }
41
41
  }, this.pingTimeout);
42
-
42
+
43
43
  // 设置定时发送ping
44
44
  this.pingTimer = setInterval(() => {
45
45
  if (this.socket && this.socket.readyState === WebSocket.OPEN) {
46
46
  this.pongReceived = false;
47
- this.socket.send('ping');
47
+ this.socket.send('ping');
48
48
  // 设置ping超时检测
49
49
  this.pingTimeoutTimer = setTimeout(() => {
50
50
  // 如果没有收到pong响应
@@ -59,7 +59,7 @@ app.registerExtension({
59
59
  }
60
60
  }, this.pingInterval);
61
61
  },
62
-
62
+
63
63
  /**
64
64
  * 停止心跳检测
65
65
  */
@@ -68,25 +68,25 @@ app.registerExtension({
68
68
  clearInterval(this.pingTimer);
69
69
  this.pingTimer = null;
70
70
  }
71
-
71
+
72
72
  if (this.pingTimeoutTimer) {
73
73
  clearTimeout(this.pingTimeoutTimer);
74
74
  this.pingTimeoutTimer = null;
75
75
  }
76
76
  },
77
-
77
+
78
78
  /**
79
79
  * 重新连接
80
80
  */
81
81
  reconnect() {
82
82
  if (this.isConnecting) {
83
83
  return;
84
- }
85
- const url = this.socket ? this.socket.url : app.api.socket.url;
86
- this.closeSocket();
84
+ }
85
+ const url = this.socket ? this.socket.url : app.api.socket.url;
86
+ this.closeSocket();
87
87
  this.createSocket(url);
88
88
  },
89
-
89
+
90
90
  /**
91
91
  * 创建新的WebSocket连接
92
92
  */
@@ -96,21 +96,21 @@ app.registerExtension({
96
96
  console.log('WebSocket连接已在创建中,避免重复创建');
97
97
  return null;
98
98
  }
99
-
99
+
100
100
  // 标记为连接中
101
101
  this.isConnecting = true;
102
-
102
+
103
103
  // 先关闭现有连接
104
104
  this.closeSocket();
105
-
105
+
106
106
  const url = customUrl || app.api.socket.url;
107
107
  console.log('创建WebSocket连接:', url);
108
-
108
+
109
109
  try {
110
110
  const socket = new WebSocket(url);
111
111
  const dispatchCustomEvent = this.dispatchCustomEvent;
112
112
  const self = this;
113
-
113
+
114
114
  socket.onopen = function() {
115
115
  console.log('WebSocket连接已打开');
116
116
  // 清除连接中标志
@@ -122,19 +122,19 @@ app.registerExtension({
122
122
  // 开始心跳检测
123
123
  self.startPing();
124
124
  };
125
-
125
+
126
126
  socket.onmessage = function (event) {
127
127
  try {
128
128
  // 处理心跳响应
129
129
  if (event.data === 'pong') {
130
130
  // 标记收到pong响应
131
131
  self.pongReceived = true;
132
- return;
133
- }
132
+ return;
133
+ }
134
134
  if (event.data instanceof ArrayBuffer) {
135
135
  const view = new DataView(event.data);
136
136
  const eventType = view.getUint32(0);
137
-
137
+
138
138
  let imageMime;
139
139
  switch (eventType) {
140
140
  case 3:
@@ -177,20 +177,20 @@ app.registerExtension({
177
177
  self.closeSocket(1000);
178
178
  return;
179
179
  }
180
-
180
+
181
181
  const msg = JSON.parse(event.data);
182
182
  window.parent.postMessage({
183
183
  type: 'functionResult',
184
184
  method: 'progress_info_change',
185
185
  result: msg.progress_info
186
186
  }, '*');
187
-
187
+
188
188
  switch (msg.type) {
189
189
  case 'status':
190
190
  if (msg.data.sid) {
191
191
  const clientId = msg.data.sid;
192
- window.name = clientId;
193
- sessionStorage.setItem('clientId', clientId);
192
+ window.name = clientId;
193
+ sessionStorage.setItem('clientId', clientId);
194
194
  socket.clientId = clientId;
195
195
  }
196
196
  dispatchCustomEvent('status', msg.data.status ?? null);
@@ -229,7 +229,7 @@ app.registerExtension({
229
229
  default:
230
230
  const registeredTypes = socket.registeredTypes || new Set();
231
231
  const reportedUnknownMessageTypes = socket.reportedUnknownMessageTypes || new Set();
232
-
232
+
233
233
  if (registeredTypes.has(msg.type)) {
234
234
  app.dispatchEvent(
235
235
  new CustomEvent(msg.type, { detail: msg.data })
@@ -244,7 +244,7 @@ app.registerExtension({
244
244
  console.warn('Unhandled message:', event.data, error);
245
245
  }
246
246
  };
247
-
247
+
248
248
  socket.onerror = function(error) {
249
249
  console.log('WebSocket 错误:', error);
250
250
  // 清除连接中标志
@@ -252,7 +252,7 @@ app.registerExtension({
252
252
  // 停止心跳
253
253
  self.stopPing();
254
254
  };
255
-
255
+
256
256
  socket.onclose = function(event) {
257
257
  console.log('WebSocket 连接已关闭, 状态码:', event.code, event.reason);
258
258
  // 清除连接中标志
@@ -264,10 +264,10 @@ app.registerExtension({
264
264
  // 停止心跳
265
265
  self.stopPing();
266
266
  };
267
-
267
+
268
268
  socket.registeredTypes = new Set();
269
269
  socket.reportedUnknownMessageTypes = new Set();
270
-
270
+
271
271
  // 返回创建的socket,但不要立即使用,等待onopen
272
272
  return socket;
273
273
  } catch (error) {
@@ -288,7 +288,7 @@ app.registerExtension({
288
288
  resolve(this.socket);
289
289
  return;
290
290
  }
291
-
291
+
292
292
  // 如果连接正在创建中,等待一段时间后检查
293
293
  if (this.isConnecting) {
294
294
  console.log('WebSocket连接创建中,等待...');
@@ -303,26 +303,26 @@ app.registerExtension({
303
303
  }, 100); // 每100ms检查一次
304
304
  return;
305
305
  }
306
-
306
+
307
307
  // 创建新连接
308
308
  const socket = this.createSocket(customUrl);
309
309
  if (!socket) {
310
310
  reject(new Error('创建WebSocket连接失败'));
311
311
  return;
312
312
  }
313
-
313
+
314
314
  // 监听连接打开事件
315
315
  socket.addEventListener('open', () => {
316
316
  resolve(socket);
317
317
  });
318
-
318
+
319
319
  // 监听错误事件
320
320
  socket.addEventListener('error', (error) => {
321
321
  reject(error);
322
322
  });
323
323
  });
324
324
  },
325
-
325
+
326
326
  /**
327
327
  * 获取可用的socket连接,如果不存在则创建
328
328
  * 同步版本,可能返回尚未就绪的连接
@@ -332,7 +332,7 @@ app.registerExtension({
332
332
  if (this.socket && this.socket.readyState === WebSocket.OPEN) {
333
333
  return this.socket;
334
334
  }
335
-
335
+
336
336
  // 创建新连接
337
337
  return this.createSocket(customUrl);
338
338
  },
@@ -344,7 +344,7 @@ app.registerExtension({
344
344
  closeSocket(code) {
345
345
  // 先停止心跳
346
346
  this.stopPing();
347
-
347
+
348
348
  if (this.socket) {
349
349
  if (this.socket.readyState === WebSocket.OPEN || this.socket.readyState === WebSocket.CONNECTING) {
350
350
  console.log('关闭WebSocket连接');
@@ -352,10 +352,10 @@ app.registerExtension({
352
352
  }
353
353
  this.socket = null;
354
354
  }
355
-
355
+
356
356
  // 重置任务状态
357
357
  this.taskRunning = false;
358
-
358
+
359
359
  return true;
360
360
  },
361
361
 
@@ -365,7 +365,7 @@ app.registerExtension({
365
365
  changeSocketUrl(newUrl) {
366
366
  const clientId = sessionStorage.getItem("clientId");
367
367
  const fullUrl = newUrl + "?clientId=" + clientId + "&a=1";
368
-
368
+
369
369
  return this.createSocket(fullUrl);
370
370
  },
371
371
 
@@ -402,7 +402,7 @@ app.registerExtension({
402
402
  return false;
403
403
  }
404
404
  },
405
-
405
+
406
406
  getCookie(name) {
407
407
  const value = `; ${document.cookie}`;
408
408
  const parts = value.split(`; ${name}=`);
@@ -502,8 +502,8 @@ app.registerExtension({
502
502
 
503
503
  loadWorkflow: function (params) {
504
504
  app.graph.clear();
505
- document.dispatchEvent(new CustomEvent('workflowLoaded', {
506
- detail: params
505
+ document.dispatchEvent(new CustomEvent('workflowLoaded', {
506
+ detail: params
507
507
  }));
508
508
  if (params.json.version) {
509
509
  app.loadGraphData(params.json);
@@ -559,7 +559,7 @@ app.registerExtension({
559
559
  try {
560
560
  // 确保有连接
561
561
  // await getSocketAsync();
562
-
562
+
563
563
  const graph = await app.graphToPrompt();
564
564
  const clientId = sessionStorage.getItem("clientId");
565
565
  const resPrompt = await fetch("api/prompt", {
@@ -2,7 +2,7 @@ export class WebSocketClient {
2
2
  constructor(url, protocols) {
3
3
 
4
4
  const host = 'api.bizyair.cn';
5
-
5
+
6
6
  if (url.startsWith('ws://') || url.startsWith('wss://')) {
7
7
  this.url = url;
8
8
  } else {
@@ -21,4 +21,4 @@ export const hideWidget = (node, widget_name) => {
21
21
  widget.type = originalType;
22
22
  widget.height = undefined;
23
23
  };
24
- }
24
+ }
@@ -10,7 +10,7 @@ export async function fileToOss(file) {
10
10
  if (!authToken) {
11
11
  throw new Error('未找到认证Token,请先登录');
12
12
  }
13
-
13
+
14
14
  // 获取上传凭证
15
15
  const uploadToken = await fetch(`${apiHost}/special/community/upload_token?file_name=${encodeURIComponent(file.name)}&file_type=inputs`, {
16
16
  method: 'GET',
@@ -19,17 +19,17 @@ export async function fileToOss(file) {
19
19
  'Authorization': `Bearer ${authToken}`
20
20
  }
21
21
  });
22
-
22
+
23
23
  // 检查响应状态
24
24
  if (!uploadToken.ok) {
25
25
  const errorText = await uploadToken.text();
26
26
  console.error('获取上传凭证失败:', uploadToken.status, errorText);
27
27
  throw new Error(`获取上传凭证失败: ${uploadToken.status} ${uploadToken.statusText}`);
28
28
  }
29
-
29
+
30
30
  const {data} = await uploadToken.json();
31
31
  // console.log('上传凭证响应:', data);
32
-
32
+
33
33
  // 使用STS凭证上传
34
34
  const ossConfig = {
35
35
  accessKeyId: data.data.file.access_key_id,
@@ -39,16 +39,16 @@ export async function fileToOss(file) {
39
39
  region: data.data.storage.region,
40
40
  objectKey: data.data.file.object_key
41
41
  };
42
-
42
+
43
43
  // console.log('OSS配置:', ossConfig);
44
-
44
+
45
45
  // 改用官方推荐的表单上传方式
46
46
  const formData = new FormData();
47
-
47
+
48
48
  // 构建Policy
49
49
  const expiration = new Date();
50
50
  expiration.setHours(expiration.getHours() + 1); // Policy过期时间1小时
51
-
51
+
52
52
  const policyObj = {
53
53
  expiration: expiration.toISOString(),
54
54
  conditions: [
@@ -58,47 +58,47 @@ export async function fileToOss(file) {
58
58
  ['starts-with', '$key', ossConfig.objectKey.split('/')[0]]
59
59
  ]
60
60
  };
61
-
61
+
62
62
  // Policy Base64编码
63
63
  const policy = btoa(JSON.stringify(policyObj));
64
64
  // console.log('Policy:', policy);
65
-
65
+
66
66
  // 构建表单字段
67
67
  formData.append('key', ossConfig.objectKey);
68
68
  formData.append('OSSAccessKeyId', ossConfig.accessKeyId);
69
69
  formData.append('policy', policy);
70
70
  formData.append('success_action_status', '200');
71
-
71
+
72
72
  // 如果有临时token,需要添加
73
73
  if (ossConfig.securityToken) {
74
74
  formData.append('x-oss-security-token', ossConfig.securityToken);
75
75
  }
76
-
76
+
77
77
  // 计算签名 - 阿里云官方要求使用HMAC-SHA1
78
78
  const signature = await hmacSha1(policy, ossConfig.accessKeySecret);
79
79
  // console.log('计算的签名:', signature);
80
80
  formData.append('signature', signature);
81
-
81
+
82
82
  // 最后添加文件内容
83
83
  formData.append('file', file);
84
-
84
+
85
85
  // OSS服务端点
86
86
  const host = `https://${ossConfig.bucket}.${ossConfig.region}.aliyuncs.com`;
87
87
  // console.log('上传地址:', host);
88
-
88
+
89
89
  // 开始上传
90
90
  const uploadResponse = await fetch(host, {
91
91
  method: 'POST',
92
92
  body: formData
93
93
  });
94
-
94
+
95
95
  // 检查响应
96
96
  if (!uploadResponse.ok) {
97
97
  const errorText = await uploadResponse.text();
98
98
  console.error('上传失败:', uploadResponse.status, errorText);
99
99
  throw new Error(`上传失败: ${uploadResponse.status} ${uploadResponse.statusText}`);
100
100
  }
101
-
101
+
102
102
  // 构建公开访问URL
103
103
  const fileUrl = `${host}/${ossConfig.objectKey}`;
104
104
 
@@ -121,7 +121,7 @@ export async function fileToOss(file) {
121
121
  };
122
122
  } catch (error) {
123
123
  console.error('文件上传到OSS失败:', error);
124
-
124
+
125
125
  throw error;
126
126
  }
127
127
  }
@@ -132,7 +132,7 @@ async function hmacSha1(message, key) {
132
132
  const encoder = new TextEncoder();
133
133
  const keyData = encoder.encode(key);
134
134
  const messageData = encoder.encode(message);
135
-
135
+
136
136
  // 导入密钥
137
137
  const cryptoKey = await window.crypto.subtle.importKey(
138
138
  'raw',
@@ -141,14 +141,14 @@ async function hmacSha1(message, key) {
141
141
  false,
142
142
  ['sign']
143
143
  );
144
-
144
+
145
145
  // 计算签名
146
146
  const signature = await window.crypto.subtle.sign(
147
147
  'HMAC',
148
148
  cryptoKey,
149
149
  messageData
150
150
  );
151
-
151
+
152
152
  // 转换为Base64编码
153
153
  const base64Signature = arrayBufferToBase64(signature);
154
154
  return base64Signature;
@@ -162,4 +162,4 @@ function arrayBufferToBase64(buffer) {
162
162
  binary += String.fromCharCode(bytes[i]);
163
163
  }
164
164
  return btoa(binary);
165
- }
165
+ }
bizydraft/workflow_io.py CHANGED
@@ -45,7 +45,9 @@ def get_leaf_nodes_from_prompt(prompt: Dict[str, Any]) -> Set[str]:
45
45
 
46
46
 
47
47
  def summarize_params(
48
- input_params: List[Dict[str, Any]], exclude_node_ids: Set[str]
48
+ input_params: List[Dict[str, Any]],
49
+ exclude_node_ids: Set[str],
50
+ wf_nodes: List[Dict[str, Any]],
49
51
  ) -> List[Dict[str, Any]]:
50
52
  """
51
53
  按节点类型和参数名整理参数信息,便于输出。
@@ -56,6 +58,10 @@ def summarize_params(
56
58
  node_id = param["node_id"]
57
59
  if node_id in exclude_node_ids:
58
60
  continue
61
+ wf_node = get_node_id_from_wf_nodes(wf_nodes, node_id)
62
+ title = param["class_type"]
63
+ if wf_node and wf_node.get("title", None):
64
+ title = wf_node.get("title")
59
65
  key = (param["class_type"], node_id)
60
66
  if key not in summary:
61
67
  summary[key] = {
@@ -63,6 +69,7 @@ def summarize_params(
63
69
  "displayName": param["class_type"],
64
70
  "nodeId": node_id,
65
71
  "params": [],
72
+ "title": title,
66
73
  }
67
74
  summary[key]["params"].append(
68
75
  {
@@ -75,8 +82,22 @@ def summarize_params(
75
82
  return list(summary.values())
76
83
 
77
84
 
85
+ def get_node_id_from_wf_nodes(
86
+ wf_nodes: List[Dict[str, Any]], node_id: int
87
+ ) -> Dict[str, Any]:
88
+ for wf_node in wf_nodes:
89
+ if wf_node.get("id", 0) == node_id:
90
+ return wf_node
91
+ return None
92
+
93
+
78
94
  def parse_workflow_io(request_data) -> Dict[str, Any]:
79
95
  prompt = request_data.get("prompt", {})
96
+ extra_data = request_data.get("extra_data", {})
97
+
98
+ extra_pnginfo = extra_data.get("extra_pnginfo", {})
99
+ workflow = extra_pnginfo.get("workflow", {})
100
+ wf_nodes = workflow.get("nodes", [])
80
101
 
81
102
  # 1. 输出参数(推断叶子节点)
82
103
  leaf_nodes = get_leaf_nodes_from_prompt(prompt)
@@ -84,18 +105,25 @@ def parse_workflow_io(request_data) -> Dict[str, Any]:
84
105
  for node_id in leaf_nodes:
85
106
  node = prompt[node_id]
86
107
  class_type = node.get("class_type")
108
+ wf_node = get_node_id_from_wf_nodes(wf_nodes, node_id)
109
+ title = class_type
110
+ if wf_node and wf_node.get("title", None):
111
+ title = wf_node.get("title")
87
112
  output_nodes.append(
88
113
  {
89
114
  "nodeId": node_id,
90
115
  "name": class_type,
91
116
  "displayName": class_type,
117
+ "title": title,
92
118
  "params": [],
93
119
  }
94
120
  )
95
121
 
96
122
  # 2. 输入参数(排除已作为输出的节点)
97
123
  input_params = get_input_params(prompt)
98
- input_summary = summarize_params(input_params, exclude_node_ids=leaf_nodes)
124
+ input_summary = summarize_params(
125
+ input_params, exclude_node_ids=leaf_nodes, wf_nodes=wf_nodes
126
+ )
99
127
 
100
128
  # 3. 构造response_body.json格式
101
129
  return {"data": {"inputs": input_summary, "outputs": output_nodes}}
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bizydraft
3
- Version: 0.1.28
3
+ Version: 0.1.30
4
4
  Summary: bizydraft
@@ -0,0 +1,19 @@
1
+ bizydraft/__init__.py,sha256=OM-sKCQrPh25nHVJIX-DgF1raMYyoWLSuyduIAHt0Gs,78
2
+ bizydraft/hijack_nodes.py,sha256=xPVLBBnRiJaI8ZbR80O8W4C9SlNAp7MxP7dKj_pRlYs,869
3
+ bizydraft/hijack_routes.py,sha256=EcO5uggc0mmyOuCk2VU7cAdtXrIN6eCriogQ0okiwq8,7417
4
+ bizydraft/postload.py,sha256=YfiFjJ7MLN6WNar19lLdAL_3IPr5GyI3G4rbZIiAgXU,562
5
+ bizydraft/prestartup_patch.py,sha256=Rh_D-rEUmPaojSrl8CEBMAhSgwtLSm6gH2Mzmk5NCuQ,316
6
+ bizydraft/resp.py,sha256=8INvKOe5Dgai3peKfqKjrhUoYeuXWXn358w30-_cY-A,369
7
+ bizydraft/server.py,sha256=L2zoJgOisr65IRphOyko74AdsLel59gh55peyMaUrO8,2102
8
+ bizydraft/workflow_io.py,sha256=Wu3wd3ZPIdoNihbCAhvOYA4Y0GHOVdpKefJx-MxPEds,4293
9
+ bizydraft/static/js/handleStyle.js,sha256=P2DNMiKHr--ekn3CGNOAHU46OJCCsifejxw97kLmb7Q,1676
10
+ bizydraft/static/js/hookLoadImage.js,sha256=Cl1FxJARZYF_qXbs-cv3ylLtoZPNVNCv4-xTtnFmI6E,5675
11
+ bizydraft/static/js/main.js,sha256=cZ-7wR9T8aNLzIrTjc-g9xVZf7z6TXWl1zhP_wXSSVo,150
12
+ bizydraft/static/js/postEvent.js,sha256=Os2J6X-0KNoUei918HheqXgmNVE64suslEdeNiNjemo,27582
13
+ bizydraft/static/js/socket.js,sha256=VE3fTAgEfM0FZhL526Skt7OCRokOa3mzTCAjAomI_tE,2432
14
+ bizydraft/static/js/tool.js,sha256=O96xFEWeHksUCBzv1buq8dtaNlb3hE3vSmtiFO2U8lg,757
15
+ bizydraft/static/js/uploadFile.js,sha256=WvglKzHMeOzDhOH3P-fLcPHxCLbKOJpo4DntoRxeJtI,4908
16
+ bizydraft-0.1.30.dist-info/METADATA,sha256=QGKRH-wykHbliY0KD-6fOmNXyAEOWEe99JnxLDphpNg,73
17
+ bizydraft-0.1.30.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
+ bizydraft-0.1.30.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
19
+ bizydraft-0.1.30.dist-info/RECORD,,
@@ -1,19 +0,0 @@
1
- bizydraft/__init__.py,sha256=OM-sKCQrPh25nHVJIX-DgF1raMYyoWLSuyduIAHt0Gs,78
2
- bizydraft/hijack_nodes.py,sha256=xPVLBBnRiJaI8ZbR80O8W4C9SlNAp7MxP7dKj_pRlYs,869
3
- bizydraft/hijack_routes.py,sha256=MlietlmTU-Lj7evZo5yZE-ghQJZ9_1vdpyHXAXYfoFw,7417
4
- bizydraft/postload.py,sha256=YfiFjJ7MLN6WNar19lLdAL_3IPr5GyI3G4rbZIiAgXU,562
5
- bizydraft/prestartup_patch.py,sha256=Rh_D-rEUmPaojSrl8CEBMAhSgwtLSm6gH2Mzmk5NCuQ,316
6
- bizydraft/resp.py,sha256=8INvKOe5Dgai3peKfqKjrhUoYeuXWXn358w30-_cY-A,369
7
- bizydraft/server.py,sha256=0Um4lA_UZN-SRD_nW0lo0pekI6hPNuDgQjKB21ZsXcw,2102
8
- bizydraft/workflow_io.py,sha256=lqLWhqNs5uJZ0IlTGyoEfBk6WjsWm0Btl6bQY-nldLo,3364
9
- bizydraft/static/js/handleStyle.js,sha256=P2DNMiKHr--ekn3CGNOAHU46OJCCsifejxw97kLmb7Q,1676
10
- bizydraft/static/js/hookLoadImage.js,sha256=GklOwfIkXhSfCFrHBz4pPqaSnBiKjegbpDknrzvXYOc,5767
11
- bizydraft/static/js/main.js,sha256=cZ-7wR9T8aNLzIrTjc-g9xVZf7z6TXWl1zhP_wXSSVo,150
12
- bizydraft/static/js/postEvent.js,sha256=lXo35DUiBmzGFMtOL2ULcjbCscNb5eAZ98_eX7en3hM,27926
13
- bizydraft/static/js/socket.js,sha256=vewGQLgdJSrjvqptEDxLirZRXZUjWTJDmDdjs4mbf4k,2436
14
- bizydraft/static/js/tool.js,sha256=Ejyb5GiFhuoCp5_dBvu2suagbxGHCkR2Lg_4rMKN2ls,756
15
- bizydraft/static/js/uploadFile.js,sha256=5OjLLaCHZkobLltNs27K5GgZBFHZJowBwS-oakLoNW4,4985
16
- bizydraft-0.1.28.dist-info/METADATA,sha256=gj7ghFoGT71u0GqpFG-lMtXaRGE7spfbvug-GuLW2yY,73
17
- bizydraft-0.1.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
18
- bizydraft-0.1.28.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
19
- bizydraft-0.1.28.dist-info/RECORD,,