mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-12-04 22:40:30 +00:00
Compare commits
7 commits
5d3a8023df
...
9bc1a334be
Author | SHA1 | Date | |
---|---|---|---|
9bc1a334be | |||
3f8a5e0b4f | |||
13012d6a97 | |||
c78491f61c | |||
253c91986e | |||
0c56aa8b18 | |||
21fe2ead60 |
12 changed files with 315 additions and 170 deletions
|
@ -1274,7 +1274,6 @@ class ImportView(SecureAdminBaseView):
|
|||
file = FileField(
|
||||
label="Import file",
|
||||
validators=[FileRequired(), FileAllowed(["txt"], "Only txt files are allowed!")],
|
||||
description="The import file has to be a text file (with .txt at the end) encoded in UTF-8. It has to strictly follow the required format.",
|
||||
)
|
||||
submit = SubmitField(
|
||||
label="Upload and import",
|
||||
|
|
|
@ -201,16 +201,19 @@ def importFromFile(filePath: Path):
|
|||
else:
|
||||
# Check if columns that should not change match
|
||||
if dbStudent.first_name != first_name:
|
||||
raise DataBaseImportException(
|
||||
f"First name {dbStudent.first_name} in the database does not match with the first name {first_name} provided in the import file for the student number {student_number}. In case the name is changed, please change it manually using the web interface first."
|
||||
flash(
|
||||
f'First name "{dbStudent.first_name}" in the database does not match with the first name "{first_name}" provided in the import file for the student number {student_number}.',
|
||||
"warning",
|
||||
)
|
||||
if dbStudent.last_name != last_name:
|
||||
raise DataBaseImportException(
|
||||
f"Last name {dbStudent.last_name} in the database does not match with the last name {last_name} provided in the import file for the student number {student_number}. In case the name is changed, please change it manually using the web interface first."
|
||||
flash(
|
||||
f'Last name "{dbStudent.last_name}" in the database does not match with the last name "{last_name}" provided in the import file for the student number {student_number}.',
|
||||
"warning",
|
||||
)
|
||||
if dbStudent.uni_email != uni_email:
|
||||
raise DataBaseImportException(
|
||||
f"University email {dbStudent.uni_email} in the database does not match with the university email {last_name} provided in the import file for the student number {student_number}. In case the email is changed, please change it manually using the web interface first."
|
||||
flash(
|
||||
f'University email "{dbStudent.uni_email}" in the database does not match with the university email "{last_name}" provided in the import file for the student number {student_number}.',
|
||||
"warning",
|
||||
)
|
||||
|
||||
dbStudent.contact_email = contact_email
|
||||
|
|
|
@ -17,10 +17,232 @@
|
|||
{{ form.file.label }}
|
||||
{{ form.file }}
|
||||
{{ form.submit }}
|
||||
<br>
|
||||
<br>
|
||||
{{ form.file.description }}
|
||||
</form>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3>Help</h3>
|
||||
<p>
|
||||
The import file has to be a text file (with <code>.txt</code> at the end) encoded in UTF-8. It has to <strong>strictly</strong> follow the required format.
|
||||
</p>
|
||||
<p>
|
||||
You can take a look at the file
|
||||
<a
|
||||
href="{{ url_for('static', filename='example_database_import.txt') }}"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
example_database_import.txt
|
||||
</a>
|
||||
for an example.
|
||||
</p>
|
||||
|
||||
<h4>Required manipulation using the web interface</h4>
|
||||
<p>
|
||||
The following tables can not be imported from a file and have to be manipulated using the web interface.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Semester
|
||||
</li>
|
||||
<li>
|
||||
Program
|
||||
</li>
|
||||
<li>
|
||||
Part
|
||||
</li>
|
||||
<li>
|
||||
User
|
||||
</li>
|
||||
<li>
|
||||
Assistant
|
||||
</li>
|
||||
<li>
|
||||
Experiment
|
||||
</li>
|
||||
<li>
|
||||
Semester Experiment
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Optional values</h4>
|
||||
<p>
|
||||
If an attribute is optional/nullable and has no value, then <code>NULL</code> (uppercase) has to be written.
|
||||
</p>
|
||||
|
||||
<h4>How to understand the tables in the next section</h4>
|
||||
<h5>ID</h5>
|
||||
<p>
|
||||
None of the mentioned ids in the import file is meant as a database id. The ids here only refer to the imported instances. The id in the database is assigned automatically.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Here is the format of a table in the "Tables" section:
|
||||
</p>
|
||||
|
||||
<h5>Table</h5>
|
||||
<ul>
|
||||
<li>
|
||||
id → 0 / 1 / 2 / ... (starts with 0 and has step
|
||||
1)
|
||||
</li>
|
||||
<li>
|
||||
attribute → example1 / example2 / ... (explanation)
|
||||
</li>
|
||||
<li>
|
||||
...
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
The type of attributes can be seen in the drawio file
|
||||
<a
|
||||
href="{{ url_for('static', filename='DB.drawio') }}"
|
||||
>
|
||||
DB.drawio
|
||||
</a> which can be opened using
|
||||
<a
|
||||
href="https://www.diagrams.net/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
diagrams.net
|
||||
</a>. Some attributes have constraints marked also in the drawio file.
|
||||
</p>
|
||||
|
||||
<h4>Tables</h4>
|
||||
<h5>Semester (only one!)</h5>
|
||||
<ul>
|
||||
<li>
|
||||
label → WS / SS
|
||||
</li>
|
||||
<li>
|
||||
year → 22 / 23 / ...
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>Part</h5>
|
||||
<ul>
|
||||
<li>
|
||||
id
|
||||
</li>
|
||||
<li>
|
||||
number → 1 / 2 / ...
|
||||
</li>
|
||||
<li>
|
||||
program_label → BS / MS / BE / ... (for bachelor of science, master of science, bachelor of education, etc.)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>Student</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>student_number</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>first_name</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>last_name</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>uni_email</code>
|
||||
</li>
|
||||
<li>
|
||||
<code><em>contact_email</em></code> (optional)
|
||||
</li>
|
||||
<li>
|
||||
<code><em>bachelor_thesis</em></code> (optional)
|
||||
</li>
|
||||
<li>
|
||||
<code><em>bachelor_thesis_work_group</em></code> (optional)
|
||||
</li>
|
||||
<li>
|
||||
<code><em>note</em></code> (optional)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div style="font-size: 90%;">
|
||||
Notes:
|
||||
<ul>
|
||||
<li>
|
||||
If <code>student_number</code> is found in the database but <code>first_name</code>, <code>last_name</code> or <code>uni_email</code> do not match, a warning is given during the import. Pay attention to warnings!
|
||||
</li>
|
||||
<li>
|
||||
<code>bachelor_thesis</code> and <code>bachelor_thesis_work_group</code> are only updated in the database if they are not <code>NULL</code>. This prevents overriding values written using the web interface.
|
||||
</li>
|
||||
<li>
|
||||
If <code>note</code> is not <code>NULL</code> then it is appended to the note in the database if the student already exists in the database. It will not overwrite existing notes.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h5>Group</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>number</code> → 1 / 2 / ...
|
||||
</li>
|
||||
<li>
|
||||
<code>program_label</code>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>PartStudent</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>student_number</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>part_id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>group_id</code>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>Experiment</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>number</code> → 1 / 2 / ...
|
||||
</li>
|
||||
<li>
|
||||
<code>program_label</code>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>GroupExperiment</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>experiment_id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>group_id</code>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5>Appointment</h5>
|
||||
<ul>
|
||||
<li>
|
||||
<code>date</code> → 12.09.2022
|
||||
</li>
|
||||
<li>
|
||||
<code>special</code> → 1 / 0
|
||||
</li>
|
||||
<li>
|
||||
<code>group_experiment_id</code>
|
||||
</li>
|
||||
<li>
|
||||
<code>assistant_email</code>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
{{ footer|safe }}
|
||||
{% endblock body %}
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
= Database import
|
||||
|
||||
The import file has to be a text file (with `.txt` at the end) encoded in UTF-8. It has to *strictly* follow the required format.
|
||||
|
||||
You can take a look at the file link:example_database_import.txt[] for an example.
|
||||
|
||||
== Required manipulation on the web interface
|
||||
|
||||
The following tables can not be imported from a file and have to be manipulated on the web interface.
|
||||
|
||||
* Semester
|
||||
* Program
|
||||
* Part
|
||||
* User
|
||||
* Assistant
|
||||
* Experiment
|
||||
* Semester Experiment
|
||||
|
||||
== Optional values
|
||||
If an attribute is optional/nullable and it has no value, then `NULL` (uppercase) has to be written.
|
||||
|
||||
== How to understand this document
|
||||
=== ID
|
||||
None of the mentioned ids in this document is meant as database id. The ids here only refer to the imported instances. The id in the database is assigned automatically.
|
||||
|
||||
=== Table
|
||||
* id -> 0 / 1 / 2 / ... (starts with 0 and has step 1)
|
||||
* attribute -> example1 / example2 / ... (explanation)
|
||||
* ...
|
||||
|
||||
The type of the attributes can be seen in the drawio file link:DB.drawio[] which can be opened using https://www.diagrams.net/[diagrams.net]. Some attributes have constraints marked also in the drawio file.
|
||||
|
||||
== Tables
|
||||
=== Semester (only one!)
|
||||
* label -> WS / SS
|
||||
* year -> 21 / 22 / ...
|
||||
|
||||
=== Part
|
||||
* id
|
||||
* number -> 1 / 2 / ...
|
||||
* program_label -> BS / MS / BE / ... (for bachelor of science, master of science, bachelor of education, etc.)
|
||||
|
||||
=== Student
|
||||
* student_number
|
||||
* first_name
|
||||
* last_name
|
||||
* uni_email
|
||||
* _contact_email_ (optional)
|
||||
* _bachelor_thesis_ (optional)
|
||||
* _bachelor_thesis_work_group_ (optional)
|
||||
* _note_ (optional)
|
||||
|
||||
=== Group
|
||||
* id
|
||||
* number -> 1 / 2 / ...
|
||||
* program_label
|
||||
|
||||
=== Part Student
|
||||
* student_number
|
||||
* part_id
|
||||
* group_id
|
||||
|
||||
=== Experiment
|
||||
* id
|
||||
* number -> 1 / 2 / ...
|
||||
* program_label
|
||||
|
||||
=== Group Experiment
|
||||
* id
|
||||
* experiment_id
|
||||
* group_id
|
||||
|
||||
=== Appointment
|
||||
* date -> 21.08.2022
|
||||
* special -> 1 / 0
|
||||
* group_experiment_id
|
||||
* assistant_email
|
|
@ -16,13 +16,13 @@ ADVLABDB_VOLUMES_DIR = VOLUMES_DIR / "advlabdb"
|
|||
ADVLABDB_REPO_DIR = ADVLABDB_VOLUMES_DIR / "repo"
|
||||
ADVLABDB_LOGS_DIR = ADVLABDB_VOLUMES_DIR / "logs"
|
||||
ADVLABDB_DATA_DIR = ADVLABDB_VOLUMES_DIR / "data"
|
||||
# Nginx
|
||||
NGINX_CONF_D_DIR = ADVLABDB_VOLUMES_DIR / "nginx/conf.d"
|
||||
# Traefik
|
||||
TRAEFIK_VOLUMES_DIR = VOLUMES_DIR / "traefik"
|
||||
TRAEFIK_ETC_DIR = TRAEFIK_VOLUMES_DIR / "etc"
|
||||
TRAEFIK_LOGS_DIR = TRAEFIK_VOLUMES_DIR / "logs"
|
||||
TRAEFIK_CERTS_DIR = TRAEFIK_VOLUMES_DIR / "certs"
|
||||
# Nginx
|
||||
NGINX_CONF_D_DIR = VOLUMES_DIR / "nginx/conf.d"
|
||||
# Systemd
|
||||
SYSTEMD_USER_DIR = Path.home() / ".config/systemd/user"
|
||||
|
||||
|
@ -37,11 +37,6 @@ parser.add_argument(
|
|||
action="store_true",
|
||||
help="Do not deploy the Traefik container.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--skip-nginx",
|
||||
action="store_true",
|
||||
help="Do not deploy the Nginx container.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-n",
|
||||
"--network",
|
||||
|
@ -127,14 +122,13 @@ def check_requirements():
|
|||
if not settings_file.is_file():
|
||||
sys.exit(f"{settings_file} missing!")
|
||||
|
||||
if not NGINX_CONF_D_DIR.is_dir():
|
||||
sys.exit(f"{NGINX_CONF_D_DIR} missing!")
|
||||
|
||||
if not args.skip_traefik:
|
||||
if not TRAEFIK_ETC_DIR.is_dir():
|
||||
sys.exit(f"{TRAEFIK_ETC_DIR} missing!")
|
||||
|
||||
if not args.skip_nginx:
|
||||
if not NGINX_CONF_D_DIR.is_dir():
|
||||
sys.exit(f"{NGINX_CONF_D_DIR} missing!")
|
||||
|
||||
if run(f"podman network exists {args.network}").returncode != 0:
|
||||
if args.skip_traefik:
|
||||
sys.exit(f"Skipped Traefik's deployment although Traefik's network {args.network} does not exist!")
|
||||
|
@ -147,6 +141,16 @@ def check_requirements():
|
|||
)
|
||||
|
||||
|
||||
def create_nginx_container():
|
||||
create_container(
|
||||
"advlabdb-nginx",
|
||||
f"""--network {args.network} \
|
||||
-v {NGINX_CONF_D_DIR}:/etc/nginx/conf.d:Z,ro \
|
||||
--label "io.containers.autoupdate=registry" \
|
||||
docker.io/library/nginx:alpine""",
|
||||
)
|
||||
|
||||
|
||||
def create_traefik_container():
|
||||
if args.verbose:
|
||||
print(f"Making sure that the logs directory {TRAEFIK_LOGS_DIR} exists.")
|
||||
|
@ -169,16 +173,6 @@ def create_traefik_container():
|
|||
)
|
||||
|
||||
|
||||
def create_nginx_container():
|
||||
create_container(
|
||||
"nginx",
|
||||
f"""--network {args.network} \
|
||||
-v {NGINX_CONF_D_DIR}:/etc/nginx/conf.d:Z,ro \
|
||||
--label "io.containers.autoupdate=registry" \
|
||||
docker.io/library/nginx:alpine""",
|
||||
)
|
||||
|
||||
|
||||
# Needed for main and create_advlabdb_container
|
||||
advlabdb_container_args = f"""--network {args.network} \
|
||||
-e ADVLABDB_DATA_DIR=/volumes/data \
|
||||
|
@ -276,8 +270,10 @@ def main():
|
|||
|
||||
# Create Nginx container if needed
|
||||
|
||||
if not args.skip_nginx and run("systemctl --user is-enabled container-nginx").returncode != 0:
|
||||
if run("systemctl --user is-enabled container-advlabdb-nginx").returncode != 0:
|
||||
create_nginx_container()
|
||||
else:
|
||||
run("systemctl --user restart container-advlabdb-nginx")
|
||||
|
||||
print("\nDone!\n")
|
||||
|
||||
|
|
|
@ -12,4 +12,4 @@ http:
|
|||
advlabdb:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: http://nginx
|
||||
- url: http://advlabdb-nginx
|
||||
|
|
60
poetry.lock
generated
60
poetry.lock
generated
|
@ -333,7 +333,7 @@ setuptools_scm = ">=4,<7"
|
|||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "1.23.2"
|
||||
version = "1.23.3"
|
||||
description = "NumPy is the fundamental package for array computing with Python."
|
||||
category = "main"
|
||||
optional = false
|
||||
|
@ -507,7 +507,7 @@ email = ["email-validator"]
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "2bd5c0327743828b360ef2098365f979ad8c1a734d0011cccfe0b9f94a046da8"
|
||||
content-hash = "7727fb4275266074afb431bd624d0e94b3896c220f736108b4b593a9207edf53"
|
||||
|
||||
[metadata.files]
|
||||
alembic = [
|
||||
|
@ -798,34 +798,34 @@ matplotlib = [
|
|||
{file = "matplotlib-3.5.3.tar.gz", hash = "sha256:339cac48b80ddbc8bfd05daae0a3a73414651a8596904c2a881cfd1edb65f26c"},
|
||||
]
|
||||
numpy = [
|
||||
{file = "numpy-1.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e603ca1fb47b913942f3e660a15e55a9ebca906857edfea476ae5f0fe9b457d5"},
|
||||
{file = "numpy-1.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:633679a472934b1c20a12ed0c9a6c9eb167fbb4cb89031939bfd03dd9dbc62b8"},
|
||||
{file = "numpy-1.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17e5226674f6ea79e14e3b91bfbc153fdf3ac13f5cc54ee7bc8fdbe820a32da0"},
|
||||
{file = "numpy-1.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc02c0235b261925102b1bd586579b7158e9d0d07ecb61148a1799214a4afd5"},
|
||||
{file = "numpy-1.23.2-cp310-cp310-win32.whl", hash = "sha256:df28dda02c9328e122661f399f7655cdcbcf22ea42daa3650a26bce08a187450"},
|
||||
{file = "numpy-1.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:8ebf7e194b89bc66b78475bd3624d92980fca4e5bb86dda08d677d786fefc414"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dc76bca1ca98f4b122114435f83f1fcf3c0fe48e4e6f660e07996abf2f53903c"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ecfdd68d334a6b97472ed032b5b37a30d8217c097acfff15e8452c710e775524"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5593f67e66dea4e237f5af998d31a43e447786b2154ba1ad833676c788f37cde"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac987b35df8c2a2eab495ee206658117e9ce867acf3ccb376a19e83070e69418"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-win32.whl", hash = "sha256:d98addfd3c8728ee8b2c49126f3c44c703e2b005d4a95998e2167af176a9e722"},
|
||||
{file = "numpy-1.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:8ecb818231afe5f0f568c81f12ce50f2b828ff2b27487520d85eb44c71313b9e"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:909c56c4d4341ec8315291a105169d8aae732cfb4c250fbc375a1efb7a844f8f"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8247f01c4721479e482cc2f9f7d973f3f47810cbc8c65e38fd1bbd3141cc9842"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8b97a8a87cadcd3f94659b4ef6ec056261fa1e1c3317f4193ac231d4df70215"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd5b7ccae24e3d8501ee5563e82febc1771e73bd268eef82a1e8d2b4d556ae66"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-win32.whl", hash = "sha256:9b83d48e464f393d46e8dd8171687394d39bc5abfe2978896b77dc2604e8635d"},
|
||||
{file = "numpy-1.23.2-cp38-cp38-win_amd64.whl", hash = "sha256:dec198619b7dbd6db58603cd256e092bcadef22a796f778bf87f8592b468441d"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f41f5bf20d9a521f8cab3a34557cd77b6f205ab2116651f12959714494268b0"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:806cc25d5c43e240db709875e947076b2826f47c2c340a5a2f36da5bb10c58d6"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f9d84a24889ebb4c641a9b99e54adb8cab50972f0166a3abc14c3b93163f074"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c403c81bb8ffb1c993d0165a11493fd4bf1353d258f6997b3ee288b0a48fce77"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-win32.whl", hash = "sha256:cf8c6aed12a935abf2e290860af8e77b26a042eb7f2582ff83dc7ed5f963340c"},
|
||||
{file = "numpy-1.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:5e28cd64624dc2354a349152599e55308eb6ca95a13ce6a7d5679ebff2962913"},
|
||||
{file = "numpy-1.23.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:806970e69106556d1dd200e26647e9bee5e2b3f1814f9da104a943e8d548ca38"},
|
||||
{file = "numpy-1.23.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bd879d3ca4b6f39b7770829f73278b7c5e248c91d538aab1e506c628353e47f"},
|
||||
{file = "numpy-1.23.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:be6b350dfbc7f708d9d853663772a9310783ea58f6035eec649fb9c4371b5389"},
|
||||
{file = "numpy-1.23.2.tar.gz", hash = "sha256:b78d00e48261fbbd04aa0d7427cf78d18401ee0abd89c7559bbf422e5b1c7d01"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9f707b5bb73bf277d812ded9896f9512a43edff72712f31667d0a8c2f8e71ee"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffcf105ecdd9396e05a8e58e81faaaf34d3f9875f137c7372450baa5d77c9a54"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ea3f98a0ffce3f8f57675eb9119f3f4edb81888b6874bc1953f91e0b1d4f440"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004f0efcb2fe1c0bd6ae1fcfc69cc8b6bf2407e0f18be308612007a0762b4089"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-win32.whl", hash = "sha256:98dcbc02e39b1658dc4b4508442a560fe3ca5ca0d989f0df062534e5ca3a5c1a"},
|
||||
{file = "numpy-1.23.3-cp310-cp310-win_amd64.whl", hash = "sha256:39a664e3d26ea854211867d20ebcc8023257c1800ae89773cbba9f9e97bae036"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1f27b5322ac4067e67c8f9378b41c746d8feac8bdd0e0ffede5324667b8a075c"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ad3ec9a748a8943e6eb4358201f7e1c12ede35f510b1a2221b70af4bb64295c"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdc9febce3e68b697d931941b263c59e0c74e8f18861f4064c1f712562903411"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:301c00cf5e60e08e04d842fc47df641d4a181e651c7135c50dc2762ffe293dbd"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-win32.whl", hash = "sha256:7cd1328e5bdf0dee621912f5833648e2daca72e3839ec1d6695e91089625f0b4"},
|
||||
{file = "numpy-1.23.3-cp311-cp311-win_amd64.whl", hash = "sha256:8355fc10fd33a5a70981a5b8a0de51d10af3688d7a9e4a34fcc8fa0d7467bb7f"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc6e8da415f359b578b00bcfb1d08411c96e9a97f9e6c7adada554a0812a6cc6"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:22d43376ee0acd547f3149b9ec12eec2f0ca4a6ab2f61753c5b29bb3e795ac4d"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a64403f634e5ffdcd85e0b12c08f04b3080d3e840aef118721021f9b48fc1460"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd9d3abe5774404becdb0748178b48a218f1d8c44e0375475732211ea47c67e"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-win32.whl", hash = "sha256:f8c02ec3c4c4fcb718fdf89a6c6f709b14949408e8cf2a2be5bfa9c49548fd85"},
|
||||
{file = "numpy-1.23.3-cp38-cp38-win_amd64.whl", hash = "sha256:e868b0389c5ccfc092031a861d4e158ea164d8b7fdbb10e3b5689b4fc6498df6"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09f6b7bdffe57fc61d869a22f506049825d707b288039d30f26a0d0d8ea05164"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c79d7cf86d049d0c5089231a5bcd31edb03555bd93d81a16870aa98c6cfb79d"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5d5420053bbb3dd64c30e58f9363d7a9c27444c3648e61460c1237f9ec3fa14"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5422d6a1ea9b15577a9432e26608c73a78faf0b9039437b075cf322c92e98e7"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-win32.whl", hash = "sha256:c1ba66c48b19cc9c2975c0d354f24058888cdc674bebadceb3cdc9ec403fb5d1"},
|
||||
{file = "numpy-1.23.3-cp39-cp39-win_amd64.whl", hash = "sha256:78a63d2df1d947bd9d1b11d35564c2f9e4b57898aae4626638056ec1a231c40c"},
|
||||
{file = "numpy-1.23.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:17c0e467ade9bda685d5ac7f5fa729d8d3e76b23195471adae2d6a6941bd2c18"},
|
||||
{file = "numpy-1.23.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91b8d6768a75247026e951dce3b2aac79dc7e78622fc148329135ba189813584"},
|
||||
{file = "numpy-1.23.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:94c15ca4e52671a59219146ff584488907b1f9b3fc232622b47e2cf832e94fb8"},
|
||||
{file = "numpy-1.23.3.tar.gz", hash = "sha256:51bf49c0cd1d52be0a240aa66f3458afc4b95d8993d2d04f0d91fa60c10af6cd"},
|
||||
]
|
||||
packaging = [
|
||||
{file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
|
||||
|
|
|
@ -20,7 +20,7 @@ flask-wtf = ">=1.0.1"
|
|||
gunicorn = ">=20.1.0"
|
||||
markupsafe = ">=2.1.1"
|
||||
matplotlib = ">=3.5.3"
|
||||
numpy = ">=1.23.2"
|
||||
numpy = ">=1.23.3"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
|
|
|
@ -260,35 +260,35 @@ matplotlib==3.5.3 ; python_version >= "3.10" and python_version < "4.0" \
|
|||
--hash=sha256:dacddf5bfcec60e3f26ec5c0ae3d0274853a258b6c3fc5ef2f06a8eb23e042be \
|
||||
--hash=sha256:f3840c280ebc87a48488a46f760ea1c0c0c83fcf7abbe2e6baf99d033fd35fd8 \
|
||||
--hash=sha256:f814504e459c68118bf2246a530ed953ebd18213dc20e3da524174d84ed010b2
|
||||
numpy==1.23.2 ; python_version >= "3.10" and python_version < "4.0" \
|
||||
--hash=sha256:17e5226674f6ea79e14e3b91bfbc153fdf3ac13f5cc54ee7bc8fdbe820a32da0 \
|
||||
--hash=sha256:2bd879d3ca4b6f39b7770829f73278b7c5e248c91d538aab1e506c628353e47f \
|
||||
--hash=sha256:4f41f5bf20d9a521f8cab3a34557cd77b6f205ab2116651f12959714494268b0 \
|
||||
--hash=sha256:5593f67e66dea4e237f5af998d31a43e447786b2154ba1ad833676c788f37cde \
|
||||
--hash=sha256:5e28cd64624dc2354a349152599e55308eb6ca95a13ce6a7d5679ebff2962913 \
|
||||
--hash=sha256:633679a472934b1c20a12ed0c9a6c9eb167fbb4cb89031939bfd03dd9dbc62b8 \
|
||||
--hash=sha256:806970e69106556d1dd200e26647e9bee5e2b3f1814f9da104a943e8d548ca38 \
|
||||
--hash=sha256:806cc25d5c43e240db709875e947076b2826f47c2c340a5a2f36da5bb10c58d6 \
|
||||
--hash=sha256:8247f01c4721479e482cc2f9f7d973f3f47810cbc8c65e38fd1bbd3141cc9842 \
|
||||
--hash=sha256:8ebf7e194b89bc66b78475bd3624d92980fca4e5bb86dda08d677d786fefc414 \
|
||||
--hash=sha256:8ecb818231afe5f0f568c81f12ce50f2b828ff2b27487520d85eb44c71313b9e \
|
||||
--hash=sha256:8f9d84a24889ebb4c641a9b99e54adb8cab50972f0166a3abc14c3b93163f074 \
|
||||
--hash=sha256:909c56c4d4341ec8315291a105169d8aae732cfb4c250fbc375a1efb7a844f8f \
|
||||
--hash=sha256:9b83d48e464f393d46e8dd8171687394d39bc5abfe2978896b77dc2604e8635d \
|
||||
--hash=sha256:ac987b35df8c2a2eab495ee206658117e9ce867acf3ccb376a19e83070e69418 \
|
||||
--hash=sha256:b78d00e48261fbbd04aa0d7427cf78d18401ee0abd89c7559bbf422e5b1c7d01 \
|
||||
--hash=sha256:b8b97a8a87cadcd3f94659b4ef6ec056261fa1e1c3317f4193ac231d4df70215 \
|
||||
--hash=sha256:bd5b7ccae24e3d8501ee5563e82febc1771e73bd268eef82a1e8d2b4d556ae66 \
|
||||
--hash=sha256:bdc02c0235b261925102b1bd586579b7158e9d0d07ecb61148a1799214a4afd5 \
|
||||
--hash=sha256:be6b350dfbc7f708d9d853663772a9310783ea58f6035eec649fb9c4371b5389 \
|
||||
--hash=sha256:c403c81bb8ffb1c993d0165a11493fd4bf1353d258f6997b3ee288b0a48fce77 \
|
||||
--hash=sha256:cf8c6aed12a935abf2e290860af8e77b26a042eb7f2582ff83dc7ed5f963340c \
|
||||
--hash=sha256:d98addfd3c8728ee8b2c49126f3c44c703e2b005d4a95998e2167af176a9e722 \
|
||||
--hash=sha256:dc76bca1ca98f4b122114435f83f1fcf3c0fe48e4e6f660e07996abf2f53903c \
|
||||
--hash=sha256:dec198619b7dbd6db58603cd256e092bcadef22a796f778bf87f8592b468441d \
|
||||
--hash=sha256:df28dda02c9328e122661f399f7655cdcbcf22ea42daa3650a26bce08a187450 \
|
||||
--hash=sha256:e603ca1fb47b913942f3e660a15e55a9ebca906857edfea476ae5f0fe9b457d5 \
|
||||
--hash=sha256:ecfdd68d334a6b97472ed032b5b37a30d8217c097acfff15e8452c710e775524
|
||||
numpy==1.23.3 ; python_version >= "3.10" and python_version < "4.0" \
|
||||
--hash=sha256:004f0efcb2fe1c0bd6ae1fcfc69cc8b6bf2407e0f18be308612007a0762b4089 \
|
||||
--hash=sha256:09f6b7bdffe57fc61d869a22f506049825d707b288039d30f26a0d0d8ea05164 \
|
||||
--hash=sha256:0ea3f98a0ffce3f8f57675eb9119f3f4edb81888b6874bc1953f91e0b1d4f440 \
|
||||
--hash=sha256:17c0e467ade9bda685d5ac7f5fa729d8d3e76b23195471adae2d6a6941bd2c18 \
|
||||
--hash=sha256:1f27b5322ac4067e67c8f9378b41c746d8feac8bdd0e0ffede5324667b8a075c \
|
||||
--hash=sha256:22d43376ee0acd547f3149b9ec12eec2f0ca4a6ab2f61753c5b29bb3e795ac4d \
|
||||
--hash=sha256:2ad3ec9a748a8943e6eb4358201f7e1c12ede35f510b1a2221b70af4bb64295c \
|
||||
--hash=sha256:301c00cf5e60e08e04d842fc47df641d4a181e651c7135c50dc2762ffe293dbd \
|
||||
--hash=sha256:39a664e3d26ea854211867d20ebcc8023257c1800ae89773cbba9f9e97bae036 \
|
||||
--hash=sha256:51bf49c0cd1d52be0a240aa66f3458afc4b95d8993d2d04f0d91fa60c10af6cd \
|
||||
--hash=sha256:78a63d2df1d947bd9d1b11d35564c2f9e4b57898aae4626638056ec1a231c40c \
|
||||
--hash=sha256:7cd1328e5bdf0dee621912f5833648e2daca72e3839ec1d6695e91089625f0b4 \
|
||||
--hash=sha256:8355fc10fd33a5a70981a5b8a0de51d10af3688d7a9e4a34fcc8fa0d7467bb7f \
|
||||
--hash=sha256:8c79d7cf86d049d0c5089231a5bcd31edb03555bd93d81a16870aa98c6cfb79d \
|
||||
--hash=sha256:91b8d6768a75247026e951dce3b2aac79dc7e78622fc148329135ba189813584 \
|
||||
--hash=sha256:94c15ca4e52671a59219146ff584488907b1f9b3fc232622b47e2cf832e94fb8 \
|
||||
--hash=sha256:98dcbc02e39b1658dc4b4508442a560fe3ca5ca0d989f0df062534e5ca3a5c1a \
|
||||
--hash=sha256:a64403f634e5ffdcd85e0b12c08f04b3080d3e840aef118721021f9b48fc1460 \
|
||||
--hash=sha256:bc6e8da415f359b578b00bcfb1d08411c96e9a97f9e6c7adada554a0812a6cc6 \
|
||||
--hash=sha256:bdc9febce3e68b697d931941b263c59e0c74e8f18861f4064c1f712562903411 \
|
||||
--hash=sha256:c1ba66c48b19cc9c2975c0d354f24058888cdc674bebadceb3cdc9ec403fb5d1 \
|
||||
--hash=sha256:c9f707b5bb73bf277d812ded9896f9512a43edff72712f31667d0a8c2f8e71ee \
|
||||
--hash=sha256:d5422d6a1ea9b15577a9432e26608c73a78faf0b9039437b075cf322c92e98e7 \
|
||||
--hash=sha256:e5d5420053bbb3dd64c30e58f9363d7a9c27444c3648e61460c1237f9ec3fa14 \
|
||||
--hash=sha256:e868b0389c5ccfc092031a861d4e158ea164d8b7fdbb10e3b5689b4fc6498df6 \
|
||||
--hash=sha256:efd9d3abe5774404becdb0748178b48a218f1d8c44e0375475732211ea47c67e \
|
||||
--hash=sha256:f8c02ec3c4c4fcb718fdf89a6c6f709b14949408e8cf2a2be5bfa9c49548fd85 \
|
||||
--hash=sha256:ffcf105ecdd9396e05a8e58e81faaaf34d3f9875f137c7372450baa5d77c9a54
|
||||
packaging==21.3 ; python_version >= "3.10" and python_version < "4.0" \
|
||||
--hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
|
||||
--hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
|
||||
|
|
2
run.py
Normal file → Executable file
2
run.py
Normal file → Executable file
|
@ -1,3 +1,5 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from advlabdb import create_app
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in a new issue