49 Commits

Author SHA1 Message Date
Asad Ali
ab6cf6e85e revert: feat: [FC-0092] Optimize Course Info Blocks API (#37122) (#37661)
This reverts commit 7cd4170ca7.
2025-11-20 12:05:14 -05:00
Serhiii Nanai
7cd4170ca7 feat: [FC-0092] Optimize Course Info Blocks API (#37122)
The Course Info Blocks API endpoint has been known to be rather slow
to return the response. Previous investigation showed that the major
time sink was the get_course_blocks function, which is called three
times in a single request. This commit aims to improve the response
times by reducing the number of times that this function is called.

Solution Summary

The first time the function get_course_blocks is called, the result
(transformed course blocks) is stored in the current WSGI request
object. Later in the same request, before the second get_course_blocks
call is triggered, the already transformed course blocks are taken
from the request object, and if they are available, get_course_blocks
is not called (if not, it is called as a fallback). Later in the
request, the function is called again as before (see Optimization
Strategy and Difficulties).

Optimization Strategy and Difficulties

The original idea was to fetch and transform the course blocks once
and reuse them in all three cases, which would reduce get_course_blocks
call count to 1. However, this did not turn out to be a viable solution
because of the arguments passed to get_course_blocks. Notably, the
allow_start_dates_in_future boolean flag affects the behavior of
StartDateTransformer, which is a filtering transformer modifying the
block structure returned.

The first two times allow_start_dates_in_future is False, the third
time it is True. Setting it to True in all three cases would mean that
some blocks would be incorrectly included in the response.

This left us with one option - optimize the first two calls. The
difference between the first two calls is the non-filtering
transformers, however the second call applies a subset of transformers
from the first call, so it was safe to apply the superset of
transformers in both cases. This allowed to reduce the number of
function calls to 2. However, the cached structure may be further
mutated by filters downstream, which means we need to cache a copy of
the course structure (not the structure itself). The copy method itself
is quite heavy (it calls deepcopy three times), making the benefits of
this solution much less tangible. In fact, another potential
optimization that was considered was to reuse the collected block
structure (pre-transformation), but since calling copy on a collected
structure proved to be more time-consuming than calling get_collected,
this change was discarded, considering that the goal is to improve
performance.

Revised Solution

To achieve a more tangible performance improvement, it was decided to
modify the previous strategy as follows:

* Pass a for_blocks_view parameter to the get_blocks function to make
  sure the new caching logic only affects the blocks view.
* Collect and cache course blocks with future dates included.
* Include start key in requested fields.
* Reuse the cached blocks in the third call, which is in
  get_course_assignments
* Before returning the response, filter out any blocks with a future
  start date, and also remove the start key if it was not in requested
  fields
2025-10-30 17:23:49 -04:00
Pooja Kulkarni
702e14a28a refactor: rename descriptor -> block within remaining lms
Co-authored-by: Agrendalath <piotr@surowiec.it>
2023-04-26 17:10:54 +02:00
Navin Karkera
c302c8a22b feat: block metadata api - index_dictionary
Adds new api to return block metadata which includes index_dictionary.
Reason for new api instead of adding it to course blocks API: data like
index_dictionary are too large for the cache used by course/blocks
transformers API.
2022-11-29 10:49:36 -08:00
Sarina Canelake
4a2f231302 fix: fix github url strings (org edx -> openedx) 2022-09-15 14:52:28 -04:00
Chris Chávez
ebd96cba8a fix: Bug showing hidden sections for learners of a public course fixed (#27925)
The bug is explained in https://openedx.atlassian.net/browse/CRI-233. Only is missing add the `VisibilityTransformer` in `get_blocks()` when the user is not enrolled to the course.
On the test, `html_block` is visible only for staff and `vertical_block` is a normal block. The new behaviour hides the `html_block` and show the `vertical_block` to anonymous users
2022-08-02 12:40:23 -04:00
Kshitij Sobti
9f4bc9900b feat: add discussions context to course blocks API (#29300)
Add a new course blocks transformer that adds discussion context for units.
2021-12-07 11:10:48 +05:00
jawad khan
15f33dc1b2 revert: show empty container blocks from the course blocks api when called by mobile (#27707)
REVE-52 is merged and mobile
traffic from older app versions is < 5% of the mobile traffic.
Therefore we dont need changes from this PR 325fbe4eb2 (diff-c061bf405edf96531766b26cc2bcc2bb3639d851e5d9f844612c2ea57c35e56e)

LEARNER-8377
2021-05-25 20:30:26 +05:00
Dillon Dumesnil
6f773d1eca feat: AA-802: Update the BlockCompletionTransformer
We discovered a subsection that contained a unit without any content
inside, but because of our logic requiring children, it would never be
marked complete (meaning the subsection, section, and course could thus
never be marked complete). This fixes that by removing the children
check from setting completion, but first gating that code path on the
xblock being an aggregator (to prevent leaves from marking as true
simply because there are no children).

Test fixes include adding a test for the empty aggregator case as
well as some changes to not have an entire course marked complete
because they are all empty aggregators.
2021-05-14 11:22:07 -04:00
Michael Terry
1b9119859e AA-614: Add initial effort estimation block transformer 2021-02-18 08:31:19 -05:00
Carla Duarte
03846e229d AA-545: Include has_scheduled_content in StartDateTransformer 2021-01-05 15:06:24 -05:00
Dillon Dumesnil
858154a7d6 AA-99: Adding in new date pills for the dates tab 2020-05-04 07:24:01 -07:00
Feanil Patel
6e3fe00fff Fix all E303 pep8 errors. 2019-12-30 12:25:38 -05:00
Feanil Patel
9cf2f9f298 Run 2to3 -f future . -w
This will remove imports from __future__ that are no longer needed.

https://docs.python.org/3.5/library/2to3.html#2to3fixer-future
2019-12-30 10:35:30 -05:00
DawoudSheraz
942c79e606 add video url transformer 2019-09-27 14:26:52 +05:00
Ayub khan
954ad2f75e INCR-430 python3 compatibility 2019-07-16 15:38:50 +05:00
Matthew Piatetsky
51b991c128 fix bug and add temporary waffle flag 2019-04-09 15:38:55 -04:00
Matthew Piatetsky
064f041276 Revert "Revert both" 2019-04-09 11:04:10 -04:00
Matthew Piatetsky
be9eb46364 Revert "handle missing fields on access denied blocks"
This reverts commit 418540b713.
2019-04-08 12:13:30 -04:00
Matthew Piatetsky
418540b713 handle missing fields on access denied blocks 2019-04-03 12:32:35 -04:00
Matthew Piatetsky
c77ba984c9 fix traversal bug and keep current behavior as default 2019-03-28 15:50:05 -04:00
Matthew Piatetsky
1f6cd7aa5a Revert "Revert "REVMI-62 Return gated blocks in the course blocks API response with an authorization denial reason"" 2019-03-28 14:44:05 -04:00
Matthew Piatetsky
8eae694566 Revert "REVMI-62 Return gated blocks in the course blocks API response with an authorization denial reason" 2019-03-27 16:30:37 -04:00
Matthew Piatetsky
4bb539c9aa update user partition and access_denied_message_filter transformers 2019-03-26 15:26:59 -04:00
Calen Pennington
325fbe4eb2 Hide empty container blocks from the course blocks api when called by the mobile app
All code in this PR should be removed after REVE-52 is merged and mobile
traffic from older app versions falls to < 5% of the mobile traffic
to the course_blocks api
2018-12-20 15:17:24 -05:00
Amir Qayyum Khan
5ae5a531f4 Fixed override due date by limiting scope to selected users
Added selected user tests

updated my email
2018-07-19 14:25:34 +05:00
Amir Qayyum Khan
aa6f88382d Fixed edX block structure api to load override data 2018-02-16 11:10:17 +05:00
Bill Filler
4fe5f3457d Conditionally display gated content in courseware
Display gated sections in course outline, navigation and in the course
when user has met prerequiste condition.

WL-1273, WL-1317
2018-01-18 12:34:19 -05:00
Tomasz Gargas
64c4ae4a7a Add block completion value as optional field in course_blocks.api.
Signed-off-by: Tomasz Gargas <tomasz@opencraft.com>
2017-12-12 14:22:10 +01:00
Andy Armstrong
79acb5c5be Reorder LMS imports using isort 2017-06-11 21:48:06 -04:00
Diana Huang
196d379cc6 Rename MilestonesTransformer.
Add comment explaining why we can't have a separate transformer.
2017-04-13 14:39:38 -04:00
Diana Huang
aafd6a03ce Add 'format' as a requested field. 2017-04-13 14:39:37 -04:00
Diana Huang
9e734442c2 Initial version of new transformer. 2017-04-13 14:38:13 -04:00
Nimisha Asthagiri
00d466224e Consolidate Block Structure folders
TNL-6518
2017-03-01 21:19:28 -05:00
Sanford Student
87a9ebce9a generalizing proctored exam transformer to handle all milestones 2016-07-22 12:57:23 -04:00
sanfordstudent
f2a1984f1a Revert "genericizing transformer" (#13063)
This reverts commit 4e65b1f14b.
2016-07-21 17:04:07 -04:00
Sanford Student
4e65b1f14b genericizing transformer 2016-07-20 11:28:04 -04:00
Nimisha Asthagiri
37b8e6360c HiddenContentTransformer to check for hide_after_due 2016-07-19 21:13:14 -04:00
lenacom
2f2c6fc5da fixed comments 2016-03-10 11:21:06 +03:00
lenacom
23b617492c removed a trailing space 2016-03-09 18:07:47 +03:00
lenacom
f07bc1ce28 fixed comments 2016-03-09 16:52:02 +03:00
lenacom
016c8200ae fixed comments 2016-03-01 09:39:24 +03:00
lenacom
f048a28fa0 added ending comma 2016-02-29 16:23:15 +03:00
lenacom
ae439310e1 New optional parameters for course blocks API: lti_url, block_types 2016-02-29 15:58:05 +03:00
Nimisha Asthagiri
d969f48646 Course Blocks API: Support accessing a substructure MA-1604 2016-02-18 10:03:58 -05:00
Nimisha Asthagiri
66397c35b9 Refactor Block Cache to separate Collect and Transform phases 2016-02-03 16:54:29 -05:00
Nimisha Asthagiri
3a6fbae60c Reorder transformers to fix MA-1981. 2016-01-26 15:46:15 -05:00
Nimisha Asthagiri
59605159b4 Course Blocks API: support for all blocks when no username 2016-01-05 15:06:55 -05:00
Nimisha Asthagiri
00e9237153 Course Blocks API 2015-11-05 22:30:44 +00:00