vesta-web 1.1.0__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. vesta/__init__.py +486 -0
  2. vesta/db/UNIAUTH.sql +58 -0
  3. vesta/db/db_service.py +253 -0
  4. vesta/emptyProject/.gitignore +16 -0
  5. vesta/emptyProject/.gitlab-ci.yml +12 -0
  6. vesta/emptyProject/CONTRIBUTING.md +45 -0
  7. vesta/emptyProject/LICENSE.md +3 -0
  8. vesta/emptyProject/README.md +44 -0
  9. vesta/emptyProject/crons/exemple.py +13 -0
  10. vesta/emptyProject/db/schema.sql +0 -0
  11. vesta/emptyProject/install.sh +17 -0
  12. vesta/emptyProject/mailing/mailReset.html +1 -0
  13. vesta/emptyProject/mailing/mailVerif.html +1 -0
  14. vesta/emptyProject/misc/nginx_local +15 -0
  15. vesta/emptyProject/misc/nginx_prod +29 -0
  16. vesta/emptyProject/misc/nginx_prod_ws +29 -0
  17. vesta/emptyProject/misc/vesta.service +11 -0
  18. vesta/emptyProject/requirements.txt +0 -0
  19. vesta/emptyProject/server_static.ini +6 -0
  20. vesta/emptyProject/server_static.py +15 -0
  21. vesta/emptyProject/server_static_orm.ini +13 -0
  22. vesta/emptyProject/server_static_orm.py +15 -0
  23. vesta/emptyProject/server_vesta.ini +27 -0
  24. vesta/emptyProject/server_vesta.py +17 -0
  25. vesta/emptyProject/server_vesta_ws.ini +31 -0
  26. vesta/emptyProject/server_vesta_ws.py +56 -0
  27. vesta/emptyProject/static/home/auth.css +101 -0
  28. vesta/emptyProject/static/home/auth.html +38 -0
  29. vesta/emptyProject/static/home/auth.js +159 -0
  30. vesta/emptyProject/static/home/reset.html +33 -0
  31. vesta/emptyProject/static/home/verif.html +33 -0
  32. vesta/emptyProject/static/main.html +14 -0
  33. vesta/emptyProject/static/main.mjs +9 -0
  34. vesta/emptyProject/static/mobileUiManifest.mjs +3 -0
  35. vesta/emptyProject/static/style.css +0 -0
  36. vesta/emptyProject/static/translations/en.mjs +2 -0
  37. vesta/emptyProject/static/translations/fr.mjs +2 -0
  38. vesta/emptyProject/static/translations/translation.mjs +51 -0
  39. vesta/emptyProject/static/ws/onMessage.mjs +21 -0
  40. vesta/emptyProject/tests/example/foo.py +7 -0
  41. vesta/http/baseServer.py +257 -0
  42. vesta/http/error.py +5 -0
  43. vesta/http/redirect.py +5 -0
  44. vesta/http/response.py +85 -0
  45. vesta/mailing/mailing_service.py +126 -0
  46. vesta/scripts/initDB.py +52 -0
  47. vesta/scripts/install.py +76 -0
  48. vesta/scripts/testsRun.py +83 -0
  49. vesta/scripts/utils.py +84 -0
  50. vesta/scripts/vesta.py +225 -0
  51. vesta_web-1.1.0.dist-info/METADATA +55 -0
  52. vesta_web-1.1.0.dist-info/RECORD +55 -0
  53. vesta_web-1.1.0.dist-info/WHEEL +4 -0
  54. vesta_web-1.1.0.dist-info/entry_points.txt +2 -0
  55. vesta_web-1.1.0.dist-info/licenses/LICENSE.md +5 -0
vesta/scripts/utils.py ADDED
@@ -0,0 +1,84 @@
1
+ import subprocess
2
+ from configparser import ConfigParser
3
+
4
+
5
+ def ex(command):
6
+ subprocess.run(command, shell=True, check=True)
7
+
8
+ class Installer:
9
+ def __init__(self, configFile, path):
10
+ self.PATH = path
11
+ self.importConf(configFile)
12
+ self.uniauth = "N"
13
+ self.name = self.config.get("server", "SERVICE_NAME").replace(" ", "_").lower()
14
+
15
+ def installNginx(self, link=True):
16
+ print("----NGINX----")
17
+
18
+ if self.config.getboolean("server", "DEBUG"):
19
+ self.editFile("misc/nginx_local", {"[PATH]": self.PATH, "[SERV-PORT]": self.config.get("server", "PORT")})
20
+ ex("sudo cp ./misc/nginx_local_filled /etc/nginx/sites-available/" + self.name)
21
+ else:
22
+ try:
23
+ self.editFile("misc/nginx_prod", {"[PATH]": self.PATH, "[SERV-PORT]": self.config.get("server", "PORT"), "[WS-PORT]": self.config.get("NOTIFICATION", "PORT")})
24
+ except Exception:
25
+ self.editFile("misc/nginx_prod", {"[PATH]": self.PATH, "[SERV-PORT]": self.config.get("server", "PORT")})
26
+ ex("sudo cp ./misc/nginx_prod_filled /etc/nginx/sites-available/" + self.name)
27
+
28
+ if not link:
29
+ return
30
+
31
+ ex("sudo ln -s /etc/nginx/sites-available/" + self.name + " /etc/nginx/sites-enabled/")
32
+
33
+ def addNginxMimeType(self):
34
+ pattern = 'application/javascript'
35
+ new_line = 'application/javascript mjs;'
36
+ with open('/etc/nginx/mime.types', 'r+') as f:
37
+ lines = f.readlines()
38
+ found = False
39
+ for i, line in enumerate(lines):
40
+ if pattern in line:
41
+ found = True
42
+ lines.insert(i + 1, new_line + '\n')
43
+ break
44
+ if not found:
45
+ print(f"Pattern '{pattern}' not found in {filename}.")
46
+ else:
47
+ f.seek(0)
48
+ f.writelines(lines)
49
+
50
+ def setupCrons(self):
51
+ try:
52
+ ex("crontab -l > crontab")
53
+ except Exception:
54
+ pass
55
+ ex("echo '*/15 * * * * " + self.PATH + "/venv/bin/python3 " + self.PATH + "/crons/15mins.py' >> crontab")
56
+ ex("echo '0 * * * * " + self.PATH + "/venv/bin/python3 " + self.PATH + "/crons/1h.py' >> crontab")
57
+ ex("echo '0 0 * * * " + self.PATH + "/venv/bin/python3 " + self.PATH + "/crons/1day.py' >> crontab")
58
+ ex("crontab crontab")
59
+
60
+ def importConf(self, configFile):
61
+ self.config = ConfigParser()
62
+ try:
63
+ self.config.read(configFile)
64
+ print("config at " + configFile + " loaded")
65
+ except Exception:
66
+ print("please create a config file")
67
+
68
+ def nukeNginx(self):
69
+ ex("sudo rm /etc/nginx/sites-available/" + self.name)
70
+
71
+ def installService(self):
72
+ self.editFile("misc/vesta.service", {"[PATH]": self.PATH, "[SERV-PORT]": self.config.get("server", "PORT"), "[NAME]":self.config.get("server", "service_name")} )
73
+ ex("cp ./misc/vesta.service_filled /etc/systemd/system/" + self.name + ".service")
74
+ ex("sudo systemctl daemon-reload")
75
+ ex("sudo systemctl enable " + self.name + ".service")
76
+ ex("sudo systemctl start " + self.name + ".service")
77
+
78
+ def editFile(self, file, templates):
79
+ with open(file, "r+") as f:
80
+ data = f.read()
81
+ for key in templates:
82
+ data = data.replace(key, templates[key])
83
+ with open(file+"_filled", "w+") as f:
84
+ f.write(data)
vesta/scripts/vesta.py ADDED
@@ -0,0 +1,225 @@
1
+ import argparse
2
+ import os
3
+ import subprocess
4
+ from .utils import ex, Installer
5
+
6
+ HERE = os.path.dirname(__file__)
7
+ PATH = os.getcwd()
8
+ EMPTY_PROJECT_PATH = os.path.join(HERE, '..', 'emptyProject')
9
+
10
+ def list_features(server):
11
+ if server == "http":
12
+ return {
13
+ "ORM: PostgreSQL ORM ": "ORM",
14
+ "JS: Frontend Framework": "js",
15
+ "MD: Js markdown parser": "md",
16
+ }
17
+
18
+ return {
19
+ "Websockets: WS server": "ws",
20
+ "JS: Frontend Framework": "js",
21
+ "CRON: scheduled tasks": "cron",
22
+ "MD: Js markdown parser": "md",
23
+ }
24
+
25
+ def copy_features(server, features):
26
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/misc ./")
27
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/static ./")
28
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/tests ./")
29
+ ex(f"cp {EMPTY_PROJECT_PATH}/.gitignore .")
30
+ ex(f"cp {EMPTY_PROJECT_PATH}/CONTRIBUTING.md .")
31
+ ex(f"cp {EMPTY_PROJECT_PATH}/LICENSE.md .")
32
+ ex(f"cp {EMPTY_PROJECT_PATH}/README.md .")
33
+ ex(f"cp {EMPTY_PROJECT_PATH}/install.sh .")
34
+ ex(f"cp {EMPTY_PROJECT_PATH}/requirements.txt .")
35
+ ex(f"cp {EMPTY_PROJECT_PATH}/.gitlab-ci.yml .")
36
+
37
+
38
+ if server == "http":
39
+ if "ORM" in features:
40
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_static_orm.py ./server.py")
41
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_static_orm.ini ./server.ini")
42
+ else:
43
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_static.py ./server.py")
44
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_static.ini ./server.ini")
45
+ ex(f"rm -r ./static/home")
46
+ else:
47
+ if "ws" in features:
48
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_vesta_ws.ini ./server.ini")
49
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_vesta_ws.py ./server.py")
50
+ else:
51
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_vesta.ini ./server.ini")
52
+ ex(f"cp {EMPTY_PROJECT_PATH}/server_vesta.py ./server.py")
53
+
54
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/mailing ./")
55
+
56
+ if "cron" in features:
57
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/crons ./")
58
+
59
+ if "orm" in features or server == "vesta":
60
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/db ./")
61
+
62
+ if "js" not in features:
63
+ ex(f"rm -r ./static/framework")
64
+ ex(f"rm -r ./static/translations")
65
+ ex(f"rm ./static/mobileUiManifest.mjs")
66
+
67
+ if "md" not in features:
68
+ ex(f"rm -r ./static/markdown")
69
+
70
+ if "ws" not in features:
71
+ ex(f"rm -r ./static/ws")
72
+ else:
73
+ ex(f"cp {EMPTY_PROJECT_PATH}/misc/nginx_prod_ws ./misc/nginx_prod")
74
+ ex(f"rm ./misc/nginx_prod_ws")
75
+ manifest = server+"\n"
76
+ for feat in features:
77
+ manifest += feat + "\n"
78
+ with open("vesta.manifest", "w+") as f:
79
+ f.write(manifest)
80
+
81
+ def init_project():
82
+ if os.path.exists("server.ini"):
83
+ print("A Vesta project already exists in this directory.")
84
+ return
85
+
86
+
87
+ # Choose server type
88
+ print("Choose server type:")
89
+ print("1. HTTP (for static websites or simple apps without auth or websockets)")
90
+ print("2. Vesta (with uniauth, ORM, mailing)")
91
+ choice = input("Enter 1 or 2: ")
92
+ if choice == '1':
93
+ server = "http"
94
+ elif choice == '2':
95
+ server = "vesta"
96
+ else:
97
+ print("Invalid choice.")
98
+ return
99
+
100
+ features = list_features(server)
101
+
102
+ print("Which features would you like to add to your project?")
103
+ convert = []
104
+ for idx, feat in enumerate(features, 1):
105
+ convert.append(feat)
106
+ print(f"{idx}. {feat}")
107
+ choice = input("Enter the numbers separated by commas (e.g., 1,3): ")
108
+
109
+ selected = []
110
+ if choice.strip() != "":
111
+ list = choice.split(',')
112
+ for x in list:
113
+ if x.strip().isdigit():
114
+ i = int(x.strip()) - 1
115
+ if 0 <= i < len(features):
116
+
117
+ selected.append(features[convert[i]])
118
+ else:
119
+ print(f"Number is out of range: {x.strip()}")
120
+ return
121
+ else:
122
+ print(f"Invalid input: {x.strip()}")
123
+ return
124
+
125
+
126
+ copy_features(server,selected)
127
+ print("Initialization complete.")
128
+
129
+ def installDeps():
130
+ print("Installing dependencies...")
131
+ server, features = getManifest()
132
+ installFeatures(features)
133
+
134
+ print("Dependencies installed.")
135
+
136
+ def getManifest():
137
+
138
+ if not os.path.exists("vesta.manifest"):
139
+ print("vesta.manifest not found. Are you in a Vesta project directory?")
140
+ exit(1)
141
+
142
+
143
+ with open("vesta.manifest", "r") as f:
144
+ lines = f.readlines()
145
+ server = lines[0].strip()
146
+ features = [line.strip() for line in lines[1:]]
147
+ return server, features
148
+
149
+ def installFeatures(features):
150
+ if "md" in features:
151
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/static/markdown ./static/")
152
+
153
+ if "js" in features:
154
+ ex(f"cp -r {EMPTY_PROJECT_PATH}/static/framework ./static/")
155
+
156
+ def updateDeps():
157
+ print("Updating Vesta...")
158
+ server, features = getManifest()
159
+
160
+ if "md" in features:
161
+ ex(f"rm -r ./static/markdown")
162
+
163
+ if "js" in features:
164
+ ex(f"rm -r ./static/framework")
165
+ installFeatures(features)
166
+
167
+ def main():
168
+ parser = argparse.ArgumentParser(prog='vesta', description='Vesta project management CLI')
169
+ subparsers = parser.add_subparsers(dest='command')
170
+
171
+ # Commande init
172
+ parser_init = subparsers.add_parser('init', help='Initialize a new Vesta project')
173
+ parser_init = subparsers.add_parser('install', help='Import dependencies')
174
+ parser_db = subparsers.add_parser('db', help='Manage the database')
175
+ parser_update = subparsers.add_parser('update', help='Update dependencies')
176
+ parser_test = subparsers.add_parser('test', help='Run tests')
177
+ parser_add_feature = subparsers.add_parser('add-feature', help='Add a feature to the project')
178
+
179
+ parser_nginx = subparsers.add_parser('nginx', help='Setup/manage nginx configuration')
180
+ nginx_subparsers = parser_nginx.add_subparsers(dest='nginx_command')
181
+ parser_nginx_setup = nginx_subparsers.add_parser('setup', help='Install nginx config')
182
+ parser_nginx_mime = nginx_subparsers.add_parser('mime', help='Add mimetype for mjs files')
183
+ parser_nginx_reset = nginx_subparsers.add_parser('reset', help='Reset nginx config')
184
+
185
+ parser_service = subparsers.add_parser('service', help='Setup/manage systemD service')
186
+ service_subparsers = parser_service.add_subparsers(dest='service_command')
187
+ parser_service_setup = service_subparsers.add_parser('setup', help='Install systemd config')
188
+
189
+
190
+ args = parser.parse_args()
191
+
192
+ if args.command == 'init':
193
+ init_project()
194
+ elif args.command == 'db':
195
+ pass
196
+ elif args.command == 'update':
197
+ updateDeps()
198
+ elif args.command == 'install':
199
+ installDeps()
200
+ elif args.command == 'test':
201
+ ex(f"python {HERE}/testsRun.py")
202
+ elif args.command == 'add-feature':
203
+ pass
204
+ elif args.command == 'nginx':
205
+ installer = Installer(PATH + "/server.ini", PATH)
206
+
207
+ if args.nginx_command == 'setup':
208
+ installer.installNginx()
209
+ elif args.nginx_command == 'mime':
210
+ installer.addNginxMimeType()
211
+ elif args.nginx_command == 'reset':
212
+ installer.nukeNginx()
213
+ installer.installNginx(link=False)
214
+ else:
215
+ parser_nginx.print_help()
216
+
217
+ elif args.command == 'service':
218
+ installer = Installer(PATH + "/server.ini", PATH)
219
+
220
+ if args.service_command == 'setup':
221
+ installer.installService()
222
+ else:
223
+ parser_service.print_help()
224
+ else:
225
+ parser.print_help()
@@ -0,0 +1,55 @@
1
+ Metadata-Version: 2.4
2
+ Name: vesta-web
3
+ Version: 1.1.0
4
+ Summary: An extensive web framework adding every feature needed for Carbonlab
5
+ Project-URL: Homepage, https://gitlab.com/Louciole/vesta
6
+ Project-URL: Issues, https://gitlab.com/Louciole/vesta/-/issues
7
+ Author-email: Lou ! <lou@carbonlab.dev>
8
+ License: # Copyright (C) Carbonlab - All Rights Reserved
9
+
10
+ * Unauthorized copying of this file, via any medium is strictly prohibited
11
+ * Proprietary
12
+ * Written by Lou ! <lou@carbonlab.dev>
13
+ License-File: LICENSE.md
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Topic :: Internet :: WWW/HTTP
17
+ Requires-Python: >=3.8
18
+ Requires-Dist: bcrypt
19
+ Requires-Dist: colorama
20
+ Requires-Dist: configparser
21
+ Requires-Dist: dkimpy
22
+ Requires-Dist: fastwsgi
23
+ Requires-Dist: multipart
24
+ Requires-Dist: psycopg
25
+ Requires-Dist: pyjwt
26
+ Requires-Dist: websockets
27
+ Description-Content-Type: text/markdown
28
+
29
+ # Vesta V1 - Harpie 🍒
30
+
31
+ ❓ An extensive and fast web framework adding every feature needed for Carbonlab
32
+
33
+ ## ⏬ Install
34
+
35
+ `pip install git+https://gitlab.com/Louciole/vesta.git/`
36
+
37
+ ## 🤓 Learn
38
+
39
+ Read the docs from https://louciole.gitlab.io/vesta-docs/
40
+
41
+ ## 👼 Create new project
42
+
43
+ 0. `mkdir myproject && cd myproject`
44
+ 1. create a virtualenv
45
+ 2. `pip install git+https://gitlab.com/Louciole/vesta.git/`
46
+
47
+ 3. `vesta init` and follow the CLI instructions
48
+
49
+ ## 📁 Build from sources
50
+
51
+ `python3 -m pip install --upgrade build`
52
+
53
+ `python3 -m build`
54
+
55
+ `pip install PATH-TO-HERE/dist/vesta-1.1.0-py3-none-any.whl`
@@ -0,0 +1,55 @@
1
+ vesta/__init__.py,sha256=6aOfxktSRs50uhCMF-473xwmK9Z15uFfvoRXZN2cMos,17865
2
+ vesta/db/UNIAUTH.sql,sha256=Aroke4pBNrvOh2wZlA09--awCs17BdsyymSVEgLtjDQ,1985
3
+ vesta/db/db_service.py,sha256=TIovohU6VjAHAudIWk7aBePPqEVqpy7eR_7-MWg7Mgo,9860
4
+ vesta/emptyProject/.gitignore,sha256=9ImxEbKZYcw6fZv2coknCwBdmfY7xWkrOgfBWR03VG0,206
5
+ vesta/emptyProject/.gitlab-ci.yml,sha256=y-UMgAb0CVntqhCkh_iWXe3mXzdBmTpmlN-J51vrLEo,371
6
+ vesta/emptyProject/CONTRIBUTING.md,sha256=kSyO3LxwWrt7i8qmH8IDt0x4y4u18r5u5OvbuoYzMlU,1449
7
+ vesta/emptyProject/LICENSE.md,sha256=a3dZ32blcDksEC_UGru2vhpuD_JmxXWh4-VMhT1InkQ,644
8
+ vesta/emptyProject/README.md,sha256=fWesqkMlQPxo3FPl4jFL4RBwbCeTPoyLhUwRBQlV-hM,937
9
+ vesta/emptyProject/install.sh,sha256=0c3pug86_XfA3wF0atXVTAgjLDG35D_TDW0daE12ejs,663
10
+ vesta/emptyProject/requirements.txt,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ vesta/emptyProject/server_static.ini,sha256=Bzuqbh_6GU_bqGsEVlw3DQSizQYnaRn-pGshRjsKT2k,86
12
+ vesta/emptyProject/server_static.py,sha256=SHtoQcv4QZxXUDe58gJYHy0Ghitojl4mSKEOugEVvnQ,329
13
+ vesta/emptyProject/server_static_orm.ini,sha256=uXF3jcl8rVEDPrU-NvYLKdgOF_1pHbDqoXf1FI46C0U,195
14
+ vesta/emptyProject/server_static_orm.py,sha256=cRBQSjUcBgVtvPW-fymDEqWYLPLg6StlFbWGee-7NUY,340
15
+ vesta/emptyProject/server_vesta.ini,sha256=7OeNizCYgAx5Js9XTe0AUEDJU5q6F14hho-FG0ijlBs,377
16
+ vesta/emptyProject/server_vesta.py,sha256=4GgFkwI7d1WRmEK1laGcUOF2IT6JsU58EFiCAFh0sS0,378
17
+ vesta/emptyProject/server_vesta_ws.ini,sha256=_kTD2nh8yPVjGVjDaqaDqkofDJ70uAvybiFq8IxKyq0,465
18
+ vesta/emptyProject/server_vesta_ws.py,sha256=IQv9SlFcihuWDEY8EADuGMlX2CTVgFMtWKgrHwYPEs0,2084
19
+ vesta/emptyProject/crons/exemple.py,sha256=0BHyplFOgY4vHQ7AYVv04DEFG7XDGedvn062b4gzmI8,276
20
+ vesta/emptyProject/db/schema.sql,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ vesta/emptyProject/mailing/mailReset.html,sha256=r9UaDWENCe2ABSiN6JsaeurCx1b7ZYCAwvin7GhVN1M,2414
22
+ vesta/emptyProject/mailing/mailVerif.html,sha256=1n48_838pENsjD0iDuivmYygKfgNkhHXnl_G8fYApU8,2486
23
+ vesta/emptyProject/misc/nginx_local,sha256=07muMbraRKEdapE50AcCj5P_6sS1uto7ys-8amCUF5U,275
24
+ vesta/emptyProject/misc/nginx_prod,sha256=AxkRTpOhXxNVgxDEF3Qcv7jZ4YuciZ5JFUOz1dnrlwQ,654
25
+ vesta/emptyProject/misc/nginx_prod_ws,sha256=AxkRTpOhXxNVgxDEF3Qcv7jZ4YuciZ5JFUOz1dnrlwQ,654
26
+ vesta/emptyProject/misc/vesta.service,sha256=KdSPuRsBWW7IpKiIZwff90RPf0ptwCIEWjKlzp6bmgQ,260
27
+ vesta/emptyProject/static/main.html,sha256=zsQF82JQ67Tms9AEPW9tZLVClVTlVX2uPGPiL328ppo,401
28
+ vesta/emptyProject/static/main.mjs,sha256=1j5antaPx8aUhuULg0YEMH3zNuJQyWxKTHUcGbQiyBc,396
29
+ vesta/emptyProject/static/mobileUiManifest.mjs,sha256=IwSGmWykI_KHASJ-IzvOkQUP8mmT8_J8BIVa1ro0aso,30
30
+ vesta/emptyProject/static/style.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ vesta/emptyProject/static/home/auth.css,sha256=Vw-wFyQJm1ydDVBHPdKWp4dvzrfFRry4-kgScVFleOM,1924
32
+ vesta/emptyProject/static/home/auth.html,sha256=sz-CC-B4NUqth8aSQqwQCvq2V46AnhaIIcGHRU6Wyl8,1836
33
+ vesta/emptyProject/static/home/auth.js,sha256=txMlUqr4A-15Czf4MYwaED35XXcaHI_zrc4SpnjItJU,4622
34
+ vesta/emptyProject/static/home/reset.html,sha256=EcXfX2Vil3NrYhDvEptrIhW9QV9X_kDy59-TK2S_P4w,2655
35
+ vesta/emptyProject/static/home/verif.html,sha256=tUw96l0FZ5-AXuE8s-7v1nM632onErq5swgCU53zP-s,2906
36
+ vesta/emptyProject/static/translations/en.mjs,sha256=ouMluPVTgB4Q5vmb7zGE6YGTH4URruog5_a52sBDYNE,22
37
+ vesta/emptyProject/static/translations/fr.mjs,sha256=ouMluPVTgB4Q5vmb7zGE6YGTH4URruog5_a52sBDYNE,22
38
+ vesta/emptyProject/static/translations/translation.mjs,sha256=JxJ2peSlYVQK-bUKpfddPLXm0XZiz2yu6A6iWIqpKyM,1422
39
+ vesta/emptyProject/static/ws/onMessage.mjs,sha256=ow5nwSEdiBcvm-Y2zOUMhnqLp-5xWgo11kHviaTRlTw,658
40
+ vesta/emptyProject/tests/example/foo.py,sha256=NS9oIXFBOvIyWK1LHwkJm9amJuSMN4cxJwouBrJlh2I,115
41
+ vesta/http/baseServer.py,sha256=e7cq9xUTVCz3h0W7H3AaIxrz0dUTp_fU6wE2TvjrIJA,8289
42
+ vesta/http/error.py,sha256=fWdp-oI2ObJD2mHHuxs1yVJvhON5oHYgYFRLAcUMs-I,180
43
+ vesta/http/redirect.py,sha256=OiDeOmU-X5Mos8a0BQIeOIJqvgWjDEtaYrM4-x4MXl0,177
44
+ vesta/http/response.py,sha256=OLcqq7X9lDyNyJ4xoTOK2zPizr6Lg71_QQPDNnfFliU,3325
45
+ vesta/mailing/mailing_service.py,sha256=BfJ_z5mcJiECPFzUR49MJmHZc4VX_Zavdd_b-lwmW14,5212
46
+ vesta/scripts/initDB.py,sha256=RhiWOs3tMBf6cQ8Ks8NRW-c6Z8pduGMY6OwojbPvbxU,1714
47
+ vesta/scripts/install.py,sha256=GvH_HHx5aU5_54RQ1_2vz4DaLCh42AHfUKy-m0q21vY,2125
48
+ vesta/scripts/testsRun.py,sha256=PQkxKyCwM-TGu9KbLSIkz70o5jnGQSf5aFN9Gil3_1U,2459
49
+ vesta/scripts/utils.py,sha256=MQZ29b4eplF0OR9EimUToOO73CVoV_cTxQeez2F3OoY,3460
50
+ vesta/scripts/vesta.py,sha256=xfY-dVzPAbJdmgpRJoGGNSlSXDsMyrQPwykAK017YqE,7506
51
+ vesta_web-1.1.0.dist-info/METADATA,sha256=I-6cYJ8MCIeqT-l5fbPmtkWLn8niwHFWPB0jYTkAGxo,1558
52
+ vesta_web-1.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
53
+ vesta_web-1.1.0.dist-info/entry_points.txt,sha256=_x509HUdPeKL_Fja0OqUuDa8zKGeLndMxIE_IfojlJg,51
54
+ vesta_web-1.1.0.dist-info/licenses/LICENSE.md,sha256=zoPFEFUUoSgosmDBK5fGTWGRHHBaSVuuJT2ZQIYXuIk,177
55
+ vesta_web-1.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.27.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ vesta = vesta.scripts.vesta:main
@@ -0,0 +1,5 @@
1
+ # Copyright (C) Carbonlab - All Rights Reserved
2
+
3
+ * Unauthorized copying of this file, via any medium is strictly prohibited
4
+ * Proprietary
5
+ * Written by Lou ! <lou@carbonlab.dev>