ositah 24.8.dev1__tar.gz → 24.9.dev1__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.
Potentially problematic release.
This version of ositah might be problematic. Click here for more details.
- {ositah-24.8.dev1/ositah.egg-info → ositah-24.9.dev1}/PKG-INFO +6 -5
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/analysis.py +1 -1
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/tables.py +1 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/tools.py +3 -3
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/agents.py +3 -2
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/projects.py +2 -2
- {ositah-24.8.dev1 → ositah-24.9.dev1/ositah.egg-info}/PKG-INFO +6 -5
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah.egg-info/requires.txt +5 -4
- {ositah-24.8.dev1 → ositah-24.9.dev1}/pyproject.toml +6 -5
- {ositah-24.8.dev1 → ositah-24.9.dev1}/.gitignore +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/.gitlab-ci.yml +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/LICENSE +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/README.md +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/docker/Dockerfile +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/docker/docker-compose.yml +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/docker/pyproject-poetry.toml +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/gunicorn.config/README.md +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/gunicorn.config/gunicorn.ositah +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/gunicorn.config/gunicorn@.service +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/gunicorn.config/ositah.conf.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/noxfile.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/__init__.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/app.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/__init__.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/configuration/__init__.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/configuration/callbacks.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/configuration/main.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/configuration/parameters.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/configuration/tools.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/export.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/__init__.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/callbacks.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/main.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/apps/validation/parameters.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/assets/arrow_down_up.svg +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/assets/ositah.css +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/assets/sort_ascending.svg +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/assets/sort_descending.svg +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/assets/sorttable.js +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/main.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/ositah.example.cfg +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/static/style.css +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/templates/base.html +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/templates/bootstrap_login.html +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/templates/login_form.html +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/__init__.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/authentication.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/cache.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/core.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/exceptions.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/hito_db.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/hito_db_model.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/menus.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/period.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/teams.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah/utils/utils.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah.egg-info/SOURCES.txt +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah.egg-info/dependency_links.txt +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah.egg-info/entry_points.txt +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/ositah.egg-info/top_level.txt +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/setup.cfg +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/setup.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/README.md +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/accordion.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/authentication.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/checkbox.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/checklist.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/file-selector.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/file-upload.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/long_running_callback.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/pandas_split.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/pandas_split_bug_report.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/pattern-matching-callback.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/progess_bar.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/reset_table_checkboxes.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/sortable_table.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/sqlalchemy_test.py +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/templates/base.html +0 -0
- {ositah-24.8.dev1 → ositah-24.9.dev1}/test-dash/templates/login_form.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ositah
|
|
3
|
-
Version: 24.
|
|
3
|
+
Version: 24.9.dev1
|
|
4
4
|
Summary: Outils de Suivi d'Activités basé sur Hito
|
|
5
5
|
Author-email: Michel Jouvin <michel.jouvin@ijclab.in2p3.fr>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -13,15 +13,16 @@ Requires-Python: >=3.8
|
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: blinker
|
|
16
|
-
Requires-Dist: dash
|
|
16
|
+
Requires-Dist: dash>=2.17
|
|
17
17
|
Requires-Dist: dash-bootstrap-components
|
|
18
|
-
Requires-Dist: flask
|
|
18
|
+
Requires-Dist: flask
|
|
19
19
|
Requires-Dist: flask-multipass
|
|
20
20
|
Requires-Dist: flask-sqlalchemy~=3.0
|
|
21
21
|
Requires-Dist: flask-wtf
|
|
22
|
-
Requires-Dist: hito-tools>=
|
|
23
|
-
Requires-Dist: pandas
|
|
22
|
+
Requires-Dist: hito-tools>=24.8
|
|
23
|
+
Requires-Dist: pandas>=2.2
|
|
24
24
|
Requires-Dist: pymysql
|
|
25
|
+
Requires-Dist: python>=3.9
|
|
25
26
|
Requires-Dist: python-ldap
|
|
26
27
|
Requires-Dist: pyyaml
|
|
27
28
|
Requires-Dist: simplejson
|
|
@@ -596,7 +596,7 @@ def ijclab_export_to_csv(_, team, team_selection_date, source, period_date):
|
|
|
596
596
|
columns["hours"],
|
|
597
597
|
]
|
|
598
598
|
]
|
|
599
|
-
exported_data[columns["hours"]] = np.round(exported_data[columns["hours"]]).astype("int")
|
|
599
|
+
exported_data.loc[:, columns["hours"]] = np.round(exported_data[columns["hours"]]).astype("int")
|
|
600
600
|
column_renames = {}
|
|
601
601
|
for c in exported_data.columns.tolist():
|
|
602
602
|
if c in EXPORT_COLUMN_NAMES:
|
|
@@ -176,6 +176,7 @@ def build_validation_table(team, team_selection_date, declaration_set: int, peri
|
|
|
176
176
|
selected_declarations = declaration_list[~declaration_list["validated"]]
|
|
177
177
|
else:
|
|
178
178
|
return general_error_jumbotron(f"Invalid declaration set ID ({declaration_set})")
|
|
179
|
+
selected_declarations.sort_values(by=["fullname"], ignore_index=True, inplace=True)
|
|
179
180
|
|
|
180
181
|
columns = [*data_columns]
|
|
181
182
|
columns.insert(0, column_names["fullname"])
|
|
@@ -5,7 +5,6 @@ Various functions used by Validation sub-application
|
|
|
5
5
|
from datetime import datetime
|
|
6
6
|
|
|
7
7
|
import dash_bootstrap_components as dbc
|
|
8
|
-
import numpy as np
|
|
9
8
|
import pandas as pd
|
|
10
9
|
from dash import html
|
|
11
10
|
|
|
@@ -341,9 +340,10 @@ def category_declarations(
|
|
|
341
340
|
]
|
|
342
341
|
category_declarations.drop(columns=columns["hours"], inplace=True)
|
|
343
342
|
category_declarations.fillna(0, inplace=True)
|
|
343
|
+
category_declarations = category_declarations.infer_objects(copy=False)
|
|
344
344
|
|
|
345
|
-
agg_functions = {c:
|
|
346
|
-
agg_functions["suspect"] =
|
|
345
|
+
agg_functions = {c: "sum" for c in categories}
|
|
346
|
+
agg_functions["suspect"] = "any"
|
|
347
347
|
category_declarations_pt = pd.pivot_table(
|
|
348
348
|
category_declarations,
|
|
349
349
|
index=[
|
|
@@ -64,8 +64,9 @@ def get_agents(period_date: str, team: str = None) -> pd.DataFrame:
|
|
|
64
64
|
# agent_list = agent_list.loc[(agent_list.archive == 0) |
|
|
65
65
|
# (agent_list.date_fin >= start_date.date().isoformat())]
|
|
66
66
|
if team and team != TEAM_LIST_ALL_AGENTS:
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
agent_list = agent_list[
|
|
68
|
+
agent_list.team.notna() & agent_list[columns["team"]].str.match(team)
|
|
69
|
+
]
|
|
69
70
|
else:
|
|
70
71
|
# If the agent doesn't belong to a team, set team to an empty string rather than None
|
|
71
72
|
agent_list.loc[agent_list.team.isna(), "team"] = ""
|
|
@@ -367,7 +367,7 @@ def get_team_projects(
|
|
|
367
367
|
columns["email"],
|
|
368
368
|
],
|
|
369
369
|
values=[columns["hours"], columns["quotite"]],
|
|
370
|
-
aggfunc={columns["hours"]:
|
|
370
|
+
aggfunc={columns["hours"]: "sum", columns["quotite"]: "mean"},
|
|
371
371
|
)
|
|
372
372
|
declarations = pd.DataFrame(global_declarations_pt.to_records())
|
|
373
373
|
declarations[[columns["masterproject"], columns["project"]]] = declarations[
|
|
@@ -519,7 +519,7 @@ def build_projects_data(team, team_selection_date, period_date: str, source):
|
|
|
519
519
|
columns["category"],
|
|
520
520
|
],
|
|
521
521
|
values=[columns["hours"]],
|
|
522
|
-
aggfunc={columns["hours"]:
|
|
522
|
+
aggfunc={columns["hours"]: "sum"},
|
|
523
523
|
)
|
|
524
524
|
projects_data = pd.DataFrame(projects_data_pt.to_records())
|
|
525
525
|
projects_data[columns["hours"]] = np.round(projects_data[columns["hours"]]).astype("int")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ositah
|
|
3
|
-
Version: 24.
|
|
3
|
+
Version: 24.9.dev1
|
|
4
4
|
Summary: Outils de Suivi d'Activités basé sur Hito
|
|
5
5
|
Author-email: Michel Jouvin <michel.jouvin@ijclab.in2p3.fr>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -13,15 +13,16 @@ Requires-Python: >=3.8
|
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: blinker
|
|
16
|
-
Requires-Dist: dash
|
|
16
|
+
Requires-Dist: dash>=2.17
|
|
17
17
|
Requires-Dist: dash-bootstrap-components
|
|
18
|
-
Requires-Dist: flask
|
|
18
|
+
Requires-Dist: flask
|
|
19
19
|
Requires-Dist: flask-multipass
|
|
20
20
|
Requires-Dist: flask-sqlalchemy~=3.0
|
|
21
21
|
Requires-Dist: flask-wtf
|
|
22
|
-
Requires-Dist: hito-tools>=
|
|
23
|
-
Requires-Dist: pandas
|
|
22
|
+
Requires-Dist: hito-tools>=24.8
|
|
23
|
+
Requires-Dist: pandas>=2.2
|
|
24
24
|
Requires-Dist: pymysql
|
|
25
|
+
Requires-Dist: python>=3.9
|
|
25
26
|
Requires-Dist: python-ldap
|
|
26
27
|
Requires-Dist: pyyaml
|
|
27
28
|
Requires-Dist: simplejson
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
blinker
|
|
2
|
-
dash
|
|
2
|
+
dash>=2.17
|
|
3
3
|
dash-bootstrap-components
|
|
4
|
-
flask
|
|
4
|
+
flask
|
|
5
5
|
flask-multipass
|
|
6
6
|
flask-sqlalchemy~=3.0
|
|
7
7
|
flask-wtf
|
|
8
|
-
hito-tools>=
|
|
9
|
-
pandas
|
|
8
|
+
hito-tools>=24.8
|
|
9
|
+
pandas>=2.2
|
|
10
10
|
pymysql
|
|
11
|
+
python>=3.9
|
|
11
12
|
python-ldap
|
|
12
13
|
pyyaml
|
|
13
14
|
simplejson
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ositah"
|
|
7
|
-
version = "24.
|
|
7
|
+
version = "24.9.dev1"
|
|
8
8
|
description = "Outils de Suivi d'Activités basé sur Hito"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
|
@@ -15,15 +15,16 @@ classifiers = [
|
|
|
15
15
|
]
|
|
16
16
|
dependencies = [
|
|
17
17
|
"blinker",
|
|
18
|
-
"dash",
|
|
18
|
+
"dash>=2.17",
|
|
19
19
|
"dash-bootstrap-components",
|
|
20
|
-
"flask
|
|
20
|
+
"flask",
|
|
21
21
|
"flask-multipass",
|
|
22
22
|
"flask-sqlalchemy~=3.0",
|
|
23
23
|
"flask-wtf",
|
|
24
|
-
"hito-tools>=
|
|
25
|
-
"pandas
|
|
24
|
+
"hito-tools>=24.8",
|
|
25
|
+
"pandas>=2.2",
|
|
26
26
|
"pymysql",
|
|
27
|
+
"python>=3.9",
|
|
27
28
|
"python-ldap",
|
|
28
29
|
"pyyaml",
|
|
29
30
|
"simplejson",
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|