Skip to content

Commit d154a88

Browse files
committed
feat: implement submission file workflow with comprehensive testing
- Create Submission file model - Add custom storage to use ORA bucket - Develop SubmissionFileProcessor for create files in DB - Add TestSubmissionFileProcessor with extensive test coverage - Verify complete file processing workflow - Validation tests for file addition in create_external_grader_detail - Document architectural decisions with ADR - Add test queue folder in .gitignore
1 parent 0c351ce commit d154a88

19 files changed

Lines changed: 845 additions & 215 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,4 @@ test.txt.tmp
6363

6464
# VSCode
6565
.vscode
66+
test_queue/*
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
2. File Handling Implementation for Submission System
2+
#####################################################
3+
4+
Status
5+
******
6+
7+
**Provisional** *2025-02-14*
8+
9+
Implemented by https://github.com/openedx/edx-submissions/pull/286
10+
11+
Context
12+
*******
13+
14+
As part of the XQueue migration effort detailed in ADR 0001, we need to implement a file handling system within edx-submissions. Currently, XQueue manages file submissions through a tightly coupled approach.
15+
16+
### Current Limitations
17+
18+
1. **Inadequate File Management**: XQueue's approach relies on JSON strings in character fields, with size constraints and manual URL manipulation for file handling.
19+
20+
2. **Process Inefficiencies**: The current system uses synchronous HTTP for file retrieval, lacks proper validation, and tightly couples submission processing with file handling.
21+
22+
3. **Integration Challenges**: External graders depend on specific URL formats with HTTP-based retrieval, embedding file information directly in submission payloads.
23+
24+
Decision
25+
********
26+
27+
We will implement a dedicated file management system for the assessment submission process, focusing on workflow and educational needs:
28+
29+
1. **Centralized Storage**: Create a unified repository for student-submitted files, ensuring they are properly associated with their assessments and accessible throughout the grading process.
30+
31+
2. **Streamlined Workflow**: Design a clear process where files are automatically processed during submission creation, securely stored, and efficiently delivered to grading systems.
32+
33+
3. **Consistent Experience**: Maintain compatibility with existing systems to ensure a smooth transition, allowing instructors and external graders to access files without changes to their established workflows.
34+
35+
Consequences
36+
************
37+
38+
Positive:
39+
---------
40+
41+
1. **Architecture**: Clean separation of concerns, improved maintainability, better error handling, optimized database access
42+
43+
2. **Integration**: Seamless xqueue-watcher compatibility, support for existing workflows, minimal client code changes
44+
45+
3. **Operations**: Robust file validation, improved tracking, better error visibility, simplified lifecycle management
46+
47+
Negative:
48+
---------
49+
50+
1. **Technical**: Additional database structures
51+
52+
2. **Migration**: Temporary system complexity, additional testing needs
53+
54+
3. **Performance**: File processing overhead
55+
56+
References
57+
**********
58+
59+
Current System Documentation:
60+
* XQueue Repository: https://github.com/openedx/xqueue
61+
* XQueue Watcher Repository: https://github.com/openedx/xqueue-watcher
62+
63+
Related Repositories:
64+
* edx-submissions: https://github.com/openedx/edx-submissions
65+
* edx-platform: https://github.com/openedx/edx-platform
66+
* XQueue Repository: https://github.com/openedx/xqueue
67+
68+
Related Documentation:
69+
* ADR 0001: Creation of ExternalGraderDetail Model for XQueue Migration
70+
71+
Future Event Integration:
72+
* Open edX Events Framework: https://github.com/openedx/openedx-events
73+
* Event Bus Documentation: https://openedx.atlassian.net/wiki/spaces/AC/pages/124125264/Event+Bus
74+
75+
Related Architecture Documents:
76+
* Open edX Architecture Guidelines: https://openedx.atlassian.net/wiki/spaces/AC/pages/124125264/Architecture+Guidelines
77+

requirements/base.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# This file is autogenerated by pip-compile with Python 3.12
2+
# This file is autogenerated by pip-compile with Python 3.11
33
# by the following command:
44
#
55
# make upgrade
@@ -8,7 +8,7 @@ asgiref==3.8.1
88
# via django
99
django==4.2.20
1010
# via
11-
# -c /home/runner/work/edx-submissions/edx-submissions/requirements/common_constraints.txt
11+
# -c /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/common_constraints.txt
1212
# -r requirements/base.in
1313
# django-model-utils
1414
# djangorestframework

requirements/ci.txt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,69 @@
11
#
2-
# This file is autogenerated by pip-compile with Python 3.12
2+
# This file is autogenerated by pip-compile with Python 3.11
33
# by the following command:
44
#
55
# make upgrade
66
#
77
cachetools==5.5.2
88
# via
9-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
9+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
1010
# tox
1111
certifi==2025.4.26
1212
# via requests
1313
chardet==5.2.0
1414
# via
15-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
15+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
1616
# tox
1717
charset-normalizer==3.4.1
1818
# via requests
1919
colorama==0.4.6
2020
# via
21-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
21+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
2222
# tox
2323
coverage[toml]==7.8.0
2424
# via coveralls
2525
coveralls==4.0.1
2626
# via -r requirements/ci.in
2727
distlib==0.3.9
2828
# via
29-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
29+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
3030
# virtualenv
3131
docopt==0.6.2
3232
# via coveralls
3333
filelock==3.18.0
3434
# via
35-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
35+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
3636
# tox
3737
# virtualenv
3838
idna==3.10
3939
# via requests
4040
packaging==25.0
4141
# via
42-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
42+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
4343
# pyproject-api
4444
# tox
4545
platformdirs==4.3.7
4646
# via
47-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
47+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
4848
# tox
4949
# virtualenv
5050
pluggy==1.5.0
5151
# via
52-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
52+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
5353
# tox
5454
pyproject-api==1.9.0
5555
# via
56-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
56+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
5757
# tox
5858
requests==2.32.3
5959
# via coveralls
6060
tox==4.25.0
61-
# via -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
61+
# via -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
6262
urllib3==2.2.3
6363
# via
64-
# -c /home/runner/work/edx-submissions/edx-submissions/requirements/common_constraints.txt
64+
# -c /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/common_constraints.txt
6565
# requests
6666
virtualenv==20.30.0
6767
# via
68-
# -r /home/runner/work/edx-submissions/edx-submissions/requirements/tox.txt
68+
# -r /Users/leonardoberoes/Documents/Aulasneo/Projects/edx-submissions/requirements/tox.txt
6969
# tox

requirements/common_constraints.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,21 @@
33
# See BOM-2721 for more details.
44
# Below is the copied and edited version of common_constraints
55

6+
# This is a temporary solution to override the real common_constraints.txt
7+
# In edx-lint, until the pyjwt constraint in edx-lint has been removed.
8+
# See BOM-2721 for more details.
9+
# Below is the copied and edited version of common_constraints
10+
11+
# This is a temporary solution to override the real common_constraints.txt
12+
# In edx-lint, until the pyjwt constraint in edx-lint has been removed.
13+
# See BOM-2721 for more details.
14+
# Below is the copied and edited version of common_constraints
15+
16+
# This is a temporary solution to override the real common_constraints.txt
17+
# In edx-lint, until the pyjwt constraint in edx-lint has been removed.
18+
# See BOM-2721 for more details.
19+
# Below is the copied and edited version of common_constraints
20+
621
# A central location for most common version constraints
722
# (across edx repos) for pip-installation.
823
#

0 commit comments

Comments
 (0)