Skip to content

Commit 06005c4

Browse files
committed
fixed datamanager saving into desktop location and school folders
1 parent 3327971 commit 06005c4

File tree

8 files changed

+68
-60
lines changed

8 files changed

+68
-60
lines changed

config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
'draw_area_height_cm': 14
4545
},
4646
'data': {
47-
'overwrite_output': False
47+
'overwrite_output': False,
48+
'output_location': 'desktop' # can be either 'desktop' or 'repository'
4849
}
4950
}
5051

planvec/common.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
from pathlib import Path
33

44
PROJECT_ROOT_PATH = os.path.dirname(os.path.dirname(__file__))
5-
DATA_DIR_PATH = os.path.join(PROJECT_ROOT_PATH, 'data')
5+
DATA_REPOSITORY_DIR_PATH = os.path.join(PROJECT_ROOT_PATH, 'data')
6+
DATA_DESKTOP_DIR_PATH = Path.home() / 'Desktop' / 'planvec'
67
UI_GENERATED_PATH = Path(PROJECT_ROOT_PATH) / 'planvec/gui/ui_generated'

planvec/gui/datamanager.py

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
2+
from pathlib import Path
23
from PyQt5.QtGui import QImage
34
import matplotlib.pyplot as plt
45

5-
from planvec.common import DATA_DIR_PATH
6+
from planvec.common import DATA_REPOSITORY_DIR_PATH
7+
from planvec.common import DATA_DESKTOP_DIR_PATH
68
from planvec.utils import date_utils
79

810
from typing import List
@@ -13,75 +15,88 @@
1315

1416

1517
class DataManager:
16-
def __init__(self, date_tag: str = date_utils.get_date_tag()):
18+
def __init__(self, output_location: str, date_tag: str = date_utils.get_date_tag()):
1719
self.date_tag = date_tag
18-
self.out_dir_path = os.path.join(DATA_DIR_PATH, date_tag)
20+
self.out_dir_path = str(self.output_root_dir_path_from_output_location(output_location) / date_tag)
1921
self.try_create_date_output_folder()
2022

23+
@staticmethod
24+
def output_root_dir_path_from_output_location(output_location: str) -> Path:
25+
if output_location == 'desktop':
26+
return DATA_DESKTOP_DIR_PATH
27+
elif output_location == 'repository':
28+
return DATA_REPOSITORY_DIR_PATH
29+
else:
30+
raise ValueError(f'output_location {output_location} not supported.')
31+
2132
def try_create_date_output_folder(self) -> None:
2233
if not os.path.exists(self.out_dir_path):
2334
os.makedirs(self.out_dir_path)
2435

25-
def team_dir_exists(self, team_name: str) -> bool:
36+
def team_dir_exists(self, school_name: str, team_name: str) -> bool:
2637
assert os.path.exists(self.out_dir_path), 'Output folder for this \
2738
date does not exist.'
2839

29-
return os.path.exists(os.path.join(self.out_dir_path, team_name))
40+
return os.path.exists(os.path.join(self.out_dir_path, school_name, team_name))
3041

31-
def create_team_folder(self, team_name: str) -> None:
32-
if not self.team_dir_exists(team_name):
33-
os.makedirs(os.path.join(self.out_dir_path, team_name))
42+
def create_team_folder(self, school_name, team_name: str) -> None:
43+
if not self.team_dir_exists(school_name, team_name):
44+
os.makedirs(os.path.join(self.out_dir_path, school_name, team_name))
3445

35-
def _create_save_img_path(self, team_name: str, file_type: str, suffix: str = '', idx: int = None) -> str:
36-
assert self.team_dir_exists(team_name), 'Cannot save. Team directory ' \
37-
'does not exist.'
46+
def _create_save_img_path(self, school_name: str, team_name: str, file_type: str, suffix: str = '',
47+
idx: int = None) -> str:
48+
assert self.team_dir_exists(school_name, team_name), 'Cannot save. Team directory ' \
49+
'does not exist.'
3850
if idx is None:
39-
idx = self.get_next_team_img_idx(team_name)
51+
idx = self.get_next_team_img_idx(school_name, team_name)
4052
img_name = IMG_NAME_FORMAT.format(idx=idx,
4153
team=team_name,
4254
date_tag=date_utils.get_date_time_tag(),
4355
suffix=suffix,
4456
file_type=file_type)
45-
team_dir = os.path.join(self.out_dir_path, team_name)
57+
team_dir = os.path.join(self.out_dir_path, school_name, team_name)
4658
return os.path.join(team_dir, img_name)
4759

48-
def save_qt_image(self, team_name: str, qt_img: QImage, suffix: str = '', idx: int = None) -> None:
49-
file_path = self._create_save_img_path(team_name, 'jpeg', suffix, idx)
60+
def save_qt_image(self, school_name: str, team_name: str, qt_img: QImage, suffix: str = '', idx: int = None) -> None:
61+
file_path = self._create_save_img_path(school_name, team_name, 'jpeg', suffix, idx)
5062
qt_img.save(file_path)
5163

52-
def save_pdf(self, team_name: str, fig: plt.Figure, suffix: str = '', idx: int = None) -> None:
53-
file_path = self._create_save_img_path(team_name, 'pdf', suffix, idx)
64+
def save_pdf(self, school_name: str, team_name: str, fig: plt.Figure, suffix: str = '', idx: int = None) -> None:
65+
file_path = self._create_save_img_path(school_name, team_name, 'pdf', suffix, idx)
5466
save_output_fig(fig, file_path)
5567

56-
def load_team_output_file_names(self, team_name: str, endswith: str) -> List[str]:
68+
def load_team_output_file_names(self, school_name, team_name: str, endswith: str) -> List[str]:
5769
"""Load all the output file names of a team, e.g. .jpeg or .pdf files."""
58-
if self.team_dir_exists(team_name):
59-
all_files = os.listdir(os.path.join(self.out_dir_path, team_name))
70+
if self.team_dir_exists(school_name, team_name):
71+
all_files = os.listdir(os.path.join(self.out_dir_path, school_name, team_name))
6072
return [f for f in all_files if f.endswith(endswith)]
6173
else:
6274
return []
6375

64-
def get_next_team_img_idx(self, team_name: str) -> int:
65-
team_img_names = self.load_team_output_file_names(team_name, endswith='jpeg')
76+
def get_next_team_img_idx(self, school_name, team_name: str) -> int:
77+
team_img_names = self.load_team_output_file_names(school_name, team_name, endswith='jpeg')
6678
img_indices = sorted([int(name.split('_')[0]) for name in team_img_names])
6779
if len(img_indices) == 0:
6880
return 0
6981
return img_indices[-1] + 1
7082

71-
def load_all_team_names(self) -> List[str]:
72-
items = os.listdir(self.out_dir_path)
73-
return [item for item in items
74-
if os.path.isdir(os.path.join(self.out_dir_path, item))]
83+
def load_all_team_names(self, school_name: str) -> List[str]:
84+
if os.path.exists(os.path.join(self.out_dir_path, school_name)):
85+
items = os.listdir(os.path.join(self.out_dir_path, school_name))
86+
return [item for item in items
87+
if os.path.isdir(os.path.join(self.out_dir_path, school_name, item))]
88+
else:
89+
return []
7590

76-
def delete_all_team_images_and_pdfs(self, team_name: str):
91+
def delete_all_team_images_and_pdfs(self, school_name, team_name: str):
7792
"""Caution: This method deletes all output images stored for a team."""
78-
team_img_names = self.load_team_output_file_names(team_name, endswith='jpeg')
79-
team_pdf_names = self.load_team_output_file_names(team_name, endswith='pdf')
93+
team_img_names = self.load_team_output_file_names(school_name, team_name, endswith='jpeg')
94+
team_pdf_names = self.load_team_output_file_names(school_name, team_name, endswith='pdf')
8095
for file_name in team_img_names + team_pdf_names:
81-
os.remove(os.path.join(os.path.join(self.out_dir_path, team_name, file_name)))
96+
os.remove(os.path.join(os.path.join(self.out_dir_path, school_name, team_name, file_name)))
8297

8398

84-
def save_output_fig(out_fig, path=os.path.join(DATA_DIR_PATH, 'default_out_name.pdf')):
99+
def save_output_fig(out_fig, path=os.path.join(DATA_REPOSITORY_DIR_PATH, 'default_out_name.pdf')):
85100
"""Stores the output figure of the GUI processing without padding such that
86101
the resulting size on paper equals the size of the drawing canvas."""
87102
out_fig.tight_layout(pad=0)

planvec/gui/invalid_school_team_msg_box.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,8 @@ def __init__(self, data_manager: DataManager, school_name: str, team_name: str,
1414

1515
def setup(self):
1616
self.setIcon(QMessageBox.Critical)
17-
self.setText("Bitte nicht-leere Schul- und Teamnamen eingeben!")
17+
self.setText("Bitte Schul- und Team-namen eingeben!")
1818
self.setWindowTitle("Fehler")
19-
team_names = self.data_manager.load_all_team_names()
20-
team_names_str = 'Folgende Gruppen existieren bereits:'
21-
for team in team_names:
22-
# n_images = len(self.data_manager.load_team_img_names(team))
23-
team_names_str += f'\n {team}'
24-
info_label = QLabel(team_names_str)
25-
team_layout = QStackedLayout()
26-
team_layout.addWidget(info_label)
27-
28-
self.layout().addLayout(team_layout, 1, 0, QtCore.Qt.AlignCenter | QtCore.Qt.AlignTop)
29-
3019
self.setStandardButtons(QMessageBox.Ok)
3120

3221
def execute(self):

planvec/gui/planvec_gui.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def __init__(self, ui: Ui_planvec, main_window: QMainWindow, gui_config: DotMap)
4141
self.ui.openGLWidget.setLayout(video_raw_layout)
4242

4343
self.ui.nameSaveButton.clicked.connect(self.save_img_dialog)
44-
self.data_manager = DataManager()
44+
self.data_manager = DataManager(output_location=self.config.data.output_location)
4545
self.overwrite_output = False
4646
self.ui.outputWriteRadio.clicked.connect(self._toggle_overwrite_output)
4747

@@ -140,16 +140,17 @@ def save_img_btn(self, button_return):
140140
curr_out_fig = self.proc_stream_thread.get_curr_out_fig()
141141
if button_return.text() == '&OK':
142142
team_name = self.ui.teamName.text()
143-
if not self.data_manager.team_dir_exists(team_name):
144-
team_dir_dialog = TeamDirDialog(team_name, self.data_manager)
143+
school_name = self.ui.schoolName.text()
144+
if not self.data_manager.team_dir_exists(school_name, team_name):
145+
team_dir_dialog = TeamDirDialog(school_name, team_name, self.data_manager)
145146
team_dir_dialog.execute()
146-
if self.data_manager.team_dir_exists(team_name): # dir created
147+
if self.data_manager.team_dir_exists(school_name, team_name): # dir created
147148
if self.overwrite_output:
148-
self.data_manager.delete_all_team_images_and_pdfs(team_name)
149-
img_idx = self.data_manager.get_next_team_img_idx(team_name)
150-
self.data_manager.save_qt_image(team_name, curr_qt_img_in, '_original', idx=img_idx)
151-
self.data_manager.save_qt_image(team_name, curr_qt_img_out, '_output', idx=img_idx)
152-
self.data_manager.save_pdf(team_name, curr_out_fig, '_output', idx=img_idx)
149+
self.data_manager.delete_all_team_images_and_pdfs(school_name, team_name)
150+
img_idx = self.data_manager.get_next_team_img_idx(school_name, team_name)
151+
self.data_manager.save_qt_image(school_name, team_name, curr_qt_img_in, '_original', idx=img_idx)
152+
self.data_manager.save_qt_image(school_name, team_name, curr_qt_img_out, '_output', idx=img_idx)
153+
self.data_manager.save_pdf(school_name, team_name, curr_out_fig, '_output', idx=img_idx)
153154
save_msg_box = QMessageBox()
154155
save_msg_box.setText(f'Bilder gespeichert für Gruppe: {team_name}')
155156
save_msg_box.exec_()

planvec/gui/save_msg_box.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ def setup(self) -> None:
2424

2525
self.setText("Bild wirklich speichern?")
2626
self.setInformativeText(f"Schulname: {self.school_name} \nTeamname: {self.team_name}")
27-
team_names = self.data_manager.load_all_team_names()
28-
team_names_str = 'Folgende Gruppen existieren bereits:'
27+
team_names = self.data_manager.load_all_team_names(self.school_name)
28+
team_names_str = f'Folgende Gruppen existieren bereits für {self.school_name}:'
2929
if len(team_names) == 0:
3030
team_names_str = 'Es existieren noch keine Gruppen.'
3131
for team in team_names:

planvec/gui/team_dir_dialog.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55

66
class TeamDirDialog(QMessageBox):
7-
def __init__(self, team_name: str, data_manager: DataManager, parent=None) -> None:
7+
def __init__(self, school_name: str, team_name: str, data_manager: DataManager, parent=None) -> None:
88
super(TeamDirDialog, self).__init__(parent)
9+
self.school_name = school_name
910
self.team_name = team_name
1011
self.data_manager = data_manager
1112
self.setup()
@@ -23,4 +24,4 @@ def execute(self):
2324

2425
def ok_btn_slot(self, button_return):
2526
if button_return.text() == '&OK':
26-
self.data_manager.create_team_folder(self.team_name)
27+
self.data_manager.create_team_folder(self.school_name, self.team_name)

scripts/pdf_jammer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from context import planvec
1414
from planvec.gui.datamanager import DataManager
1515
from planvec.pdf import PdfJammer
16-
from planvec.common import DATA_DIR_PATH
16+
from planvec.common import DATA_REPOSITORY_DIR_PATH
1717

1818

1919
def parse_arguments():
@@ -34,7 +34,7 @@ def main(parsed_args):
3434
data_manager = DataManager(parsed_args.date_tag)
3535
pdf_jammer = PdfJammer(data_manager=data_manager,
3636
out_dir=parsed_args.out_dir if parsed_args.out_dir
37-
else os.path.join(DATA_DIR_PATH, parsed_args.date_tag))
37+
else os.path.join(DATA_REPOSITORY_DIR_PATH, parsed_args.date_tag))
3838
pdfs_dict = pdf_jammer.accumulate_pdf_paths()
3939
pdf_paths_list = pdf_jammer.teams_pdfs_paths_to_list(pdfs_dict)
4040
pdf_jammer.run(pdf_paths_list)

0 commit comments

Comments
 (0)