Skip to content

Commit dba513d

Browse files
Merge pull request #242 from moevm/for_approbation
For approbation
2 parents 1a56cf6 + 658bc96 commit dba513d

27 files changed

+267
-104
lines changed

app/bd_helper/bd_helper.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from app.bd_helper.bd_types import User, Presentation, Checks, Consumers, CriteriaPack, Logs
88
from app.utils.pdf_converter import convert_to_pdf
9+
from app.utils.time import timezone_offset
910

1011
from datetime import datetime, timezone
1112

@@ -218,7 +219,7 @@ def get_unpassed_checks():
218219

219220
def set_passbacked_flag(checks_id, flag):
220221
upd_check = {"$set": {'is_passbacked': flag,
221-
'lms_passback_time': datetime.now(timezone.utc)}}
222+
'lms_passback_time': datetime.now()}}
222223
check = checks_collection.update_one({'_id': checks_id}, upd_check)
223224
return check if check else None
224225

@@ -255,10 +256,17 @@ def get_storage():
255256
def get_all_checks():
256257
return checks_collection.find()
257258

258-
# get checks cursor with specified parameters
259259

260+
def get_checks(filter={}, latest=None, limit=10, offset=0, sort=None, order=None):
261+
if latest:
262+
return get_latest_check_cursor(filter, limit, offset, sort, order)
263+
else:
264+
return get_checks_cursor(filter, limit, offset, sort, order)
265+
266+
# get checks cursor with specified parameters
260267

261268
def get_checks_cursor(filter={}, limit=10, offset=0, sort=None, order=None):
269+
262270
sort = 'lms_passback_time' if sort == 'moodle-date' else sort
263271

264272
count = checks_collection.count_documents(filter)
@@ -307,7 +315,7 @@ def format_check(check):
307315
grade_passback_time = check['lms_passback_time']
308316
grade_passback_ts = grade_passback_time.strftime(
309317
"%H:%M:%S - %b %d %Y") if grade_passback_time else '-'
310-
return (str(check['_id']), check['user'], check['filename'], check['_id'].generation_time.strftime("%H:%M:%S - %b %d %Y"),
318+
return (str(check['_id']), check['user'], check['filename'], (check['_id'].generation_time + timezone_offset).strftime("%H:%M:%S - %b %d %Y"),
311319
grade_passback_ts, check['score'])
312320

313321

app/bd_helper/bd_types.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ def __str__(self) -> str:
1212
return f"{self.__class__.__name__}: {', '.join([f'{key}: {value}' for key, value in vars(self).items()])}"
1313

1414

15+
DEFAULT_CRITERIA = {'template_name': True, 'slides_number': {'sld_num': sld_num['bsc'], 'detect_additional': True},
16+
'slides_enum': True, 'slides_headers': True, 'goals_slide': True, 'probe_slide': True,
17+
'actual_slide': True, 'conclusion_slide': True, 'slide_every_task': 50,
18+
'conclusion_actual': 50, 'conclusion_along': True}
19+
1520
# You shouldn't create this or change username and presentations explicitly
1621
class User(Packable, UserMixin):
1722
def __init__(self, dictionary=None):
@@ -21,14 +26,12 @@ def __init__(self, dictionary=None):
2126
self.name = dictionary.get('name', '')
2227
self.password_hash = dictionary.get('password_hash', '')
2328
self.presentations = dictionary.get('presentations', [])
24-
self.criteria = dictionary.get('criteria', {'template_name': True,'slides_number': {'sld_num': sld_num['bsc'], 'detect_additional': True},
25-
'slides_enum': True, 'slides_headers': True, 'goals_slide': True, 'probe_slide': True,
26-
'actual_slide': True, 'conclusion_slide': True, 'slide_every_task': 50,
27-
'conclusion_actual': 50, 'conclusion_along': True})
29+
self.criteria = dictionary.get('criteria', DEFAULT_CRITERIA)
2830
self.is_LTI = dictionary.get('is_LTI', False)
2931
self.lms_user_id = dictionary.get('lms_user_id', None)
3032
self.is_admin = dictionary.get('is_admin', False)
3133
self.params_for_passback = dictionary.get('params_for_passback', None)
34+
self.formats = dictionary.get('formats', [])
3235

3336
def pack(self):
3437
package = super(User, self).pack()
@@ -91,10 +94,7 @@ def __init__(self, dictionary=None):
9194
if '_id' in dictionary:
9295
self._id = dictionary.get('_id', '')
9396

94-
self.enabled_checks = dictionary.get('enabled_checks', {'slides_number': {'sld_num': sld_num['bsc'], 'detect_additional': True},
95-
'slides_enum': True, 'slides_headers': True, 'goals_slide': True, 'probe_slide': True,
96-
'actual_slide': True, 'conclusion_slide': True, 'slide_every_task': 50,
97-
'conclusion_actual': 50, 'conclusion_along': True})
97+
self.enabled_checks = dictionary.get('enabled_checks', DEFAULT_CRITERIA)
9898
self.score = dictionary.get('score', -1)
9999
self.filename = dictionary.get('filename', '')
100100
self.conv_pdf_fs_id = dictionary.get('conv_pdf_fs_id', '')

app/main/api_checker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
'goals_and_tasks': 'Цель и задачи',
77
'approbation': 'Апробация',
88
'conclusion': 'Заключение',
9-
'relevance': 'Актуальность'
9+
'relevance': ['Актуальность', 'Актуальности', 'Актуальностью']
1010
}
1111
key_slide = Namespace(**key_slides)
1212

app/main/checker.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,26 @@
77
'goals_and_tasks': 'Цель и задачи',
88
'approbation': 'Апробация',
99
'conclusion': 'Заключение',
10-
'relevance': 'Актуальность'
10+
'relevance': ['Актуальность', 'Актуальности', 'Актуальностью']
1111
}
1212
key_slide = Namespace(**key_slides)
1313

1414
def check(presentation, checks, presentation_name):
1515
check_names = checks.enabled_checks.keys()
1616
set_enabled = dict.fromkeys(check_names, False)
17-
check_classes = [TemplateNameCheck(presentation, presentation_name),
18-
SldNumCheck(presentation, checks.enabled_checks['slides_number']),
19-
SldEnumCheck(presentation, checks.conv_pdf_fs_id),
20-
TitleFormatCheck(presentation, checks.conv_pdf_fs_id),
21-
FindDefSld(presentation, key_slide.goals_and_tasks, checks.conv_pdf_fs_id),
22-
FindDefSld(presentation, key_slide.approbation, checks.conv_pdf_fs_id),
23-
SearchKeyWord(presentation, key_slide.relevance, checks.conv_pdf_fs_id),
24-
FindDefSld(presentation, key_slide.conclusion, checks.conv_pdf_fs_id),
25-
FindTasks(presentation, key_slide.goals_and_tasks, checks.enabled_checks['slide_every_task']),
26-
SldSimilarity(presentation, key_slide.goals_and_tasks, key_slide.conclusion, checks.enabled_checks['conclusion_actual']),
27-
FurtherDev(presentation, key_slide.goals_and_tasks, key_slide.conclusion, checks.conv_pdf_fs_id)]
28-
set_checks = dict(zip(check_names, check_classes))
17+
set_checks = {
18+
'template_name': TemplateNameCheck(presentation, presentation_name),
19+
'slides_number': SldNumCheck(presentation, checks.enabled_checks['slides_number']),
20+
'slides_enum': SldEnumCheck(presentation, checks.conv_pdf_fs_id),
21+
'slides_headers': TitleFormatCheck(presentation, checks.conv_pdf_fs_id),
22+
'goals_slide': FindDefSld(presentation, key_slide.goals_and_tasks, checks.conv_pdf_fs_id),
23+
'probe_slide': FindDefSld(presentation, key_slide.approbation, checks.conv_pdf_fs_id),
24+
'actual_slide': SearchKeyWord(presentation, key_slide.relevance, checks.conv_pdf_fs_id),
25+
'conclusion_slide': FindDefSld(presentation, key_slide.conclusion, checks.conv_pdf_fs_id),
26+
'slide_every_task': FindTasks(presentation, key_slide.goals_and_tasks, checks.enabled_checks['slide_every_task']),
27+
'conclusion_actual': SldSimilarity(presentation, key_slide.goals_and_tasks, key_slide.conclusion, checks.enabled_checks['conclusion_actual']),
28+
'conclusion_along': FurtherDev(presentation, key_slide.goals_and_tasks, key_slide.conclusion, checks.conv_pdf_fs_id)
29+
}
2930
enabled_checks = dict((key, value) for key, value in checks.enabled_checks.items() if value)
3031

3132
for k, v in enabled_checks.items():

app/main/checks/find_tasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ def check(self):
2121
return answer(True, "Все задачи найдены на слайдах")
2222
elif len(slides_with_tasks) == 3 :
2323
return answer(False, *find_tasks_on_slides_feedback(slides_with_tasks))
24-
elif len(slides_with_tasks) == 1:
24+
else:
2525
return answer(False, slides_with_tasks)

app/main/checks/search_keyword.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1+
import re
2+
13
from app.main.checks.base_check import BaseCheck, answer
24

5+
36
class SearchKeyWord(BaseCheck):
47
def __init__(self, presentation, key_slide, pdf_id):
58
super().__init__(presentation)
6-
self.key_slide = key_slide
9+
self.key_slide = f"({'|'.join((key.lower() for key in key_slide))})"
710
self.pdf_id = pdf_id
811

912
def check(self):
1013
for i, text in enumerate(self.presentation.get_text_from_slides(), 1):
11-
if self.key_slide.lower() in str(text).lower():
14+
if re.search(self.key_slide, str(text).lower()):
1215
found = self.format_page_link([i])
1316
return answer(True, 'Найден под номером: {}'.format(', '.join(map(str, found))))
1417
return answer(False, 'Слайд не найден')

app/main/checks/sld_num.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def __init__(self, presentation, slides_number):
1616
'in_range': 'Количество слайдов в допустимых границах',
1717
'lt_min': 'Число слайдов меньше допустимого',
1818
'gt_max': 'Число слайдов превышает допустимое',
19-
'gt_max_suspected': 'Проверьте неозаглавленные запасные слайды'
19+
'gt_max_suspected': 'Проверьте, что запасные слайды расположенны после слайда с заголовком “Запасные слайды”'
2020
}
2121

2222
def sldnum_verdict(self, find_additional, msg):

app/main/odp/presentation_odp.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ def parse_styles(self):
2323
for child in style.childNodes:
2424
style_params.update(tict.dictify(child.attributes))
2525
self.auto_styles[style_name] = style_params
26+
27+
def __str__(self):
28+
return super().__str__()

app/main/odp/slide_odp.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,6 @@ def __walk_children(self, child, child_container):
5252
else:
5353
for in_child in child.childNodes:
5454
self.__walk_children(in_child, child_container)
55+
56+
def __str__(self):
57+
return super().__str__()

app/main/pptx/presentation_pptx.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,8 @@ def __init__(self, presentation_name):
1010
self.add_slides()
1111

1212
def add_slides(self):
13-
for slide in self.prs.slides:
14-
self.slides.append(SlidePPTX(slide, self.prs.slide_width, self.prs.slide_height))
13+
for index, slide in enumerate(self.prs.slides, 1):
14+
self.slides.append(SlidePPTX(slide, self.prs.slide_width, self.prs.slide_height, index))
15+
16+
def __str__(self):
17+
return super().__str__()

0 commit comments

Comments
 (0)